diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 84f27eb88..c121a91b9 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1121,34 +1121,39 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err error) { - dao.Begin(db) - defer func() { - if r := recover(); r != nil || err != nil { - dao.Rollback(db) - if r != nil { - panic(r) - } - } - }() list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil) - for _, v := range list { - storeID := v.StoreID - storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX) - if err != nil { - return nil - } - storeSku := &model.StoreSkuBind{} - storeSku.ID = v.BindID - storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask - storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask - storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask - storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit) - storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price)) - storeSku.LastOperator = ctx.GetUserName() - storeSku.UpdatedAt = time.Now() - dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice") - } - dao.Commit(db) + task := tasksch.NewParallelTask("refreshStoreSkuPrice", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + v := batchItemList[0].(*dao.StoreSkuAndName) + storeID := v.StoreID + storeDetail, _ := dao.GetStoreDetail(db, storeID, model.VendorIDJX) + if storeDetail == nil { + return retVal, err + } + storeSku := &model.StoreSkuBind{} + storeSku.ID = v.BindID + storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask + storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask + storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask + storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit) + storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price)) + storeSku.LastOperator = ctx.GetUserName() + storeSku.UpdatedAt = time.Now() + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice") + dao.Commit(db) + return retVal, err + }, list) + tasksch.HandleTask(task, nil, true).Run() + _, err = task.GetResult(0) return err }