From b0e33ac9aa53e0cd2c670adf6fbf5af557d96e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 23 Mar 2020 18:28:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=84=E6=A0=BC=E5=88=B7?= =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E4=BB=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 59 ++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 27 deletions(-) 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 }