From 442b8c6db3d4fcf62a30ae31358d0431d5e6bf83 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 24 Oct 2018 20:27:22 +0800 Subject: [PATCH] - fix bug in updateStoreSkusWithoutSync --- business/jxstore/cms/store_sku.go | 5 ++--- business/jxstore/cms/sync.go | 2 +- business/jxutils/tasksch/task.go | 2 +- business/model/dao/dao_bz.go | 4 +++- business/partner/partner.go | 2 +- business/partner/purchase/ebai/store_sku.go | 21 ++++++++++++++++----- business/partner/purchase/elm/store_sku.go | 2 +- business/partner/purchase/jd/store_sku.go | 15 ++++++++++----- 8 files changed, 35 insertions(+), 18 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6fadbdebb..b2f36a612 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -280,9 +280,8 @@ func updateStoreSkusWithoutSync(ctx *jxcontext.Context, storeID int, skuBindInfo } } for _, v := range allBinds { - inSkuBind := inSkuBinsMap[v.SkuID] + inSkuBind := inSkuBinsMap[v.RealSkuID] var skuBind *model.StoreSkuBind - // globals.SugarLogger.Debug(ok) if v.ID == 0 { if skuBindInfo.IsFocus == 1 { skuBind = &model.StoreSkuBind{ @@ -358,7 +357,7 @@ func updateStoreSkusWithoutSync(ctx *jxcontext.Context, storeID int, skuBindInfo } } if skuBind != nil && num == 1 { - needSyncIDMap[skuBind.ID] = 1 + needSyncIDMap[skuBind.SkuID] = 1 } } } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 68a75920d..a0b6f7706 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -254,7 +254,7 @@ func (v *VendorSync) SyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendo globals.SugarLogger.Debug("SyncStoresSkus") hint, err = v.LoopStoreVendors(ctx, db, vendorIDs, "SyncStoresSkus", isAsync, userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { handler := v.GetStoreHandler(batchItemList[0].(int)) - _, err = handler.SyncStoresSkus(db, storeIDs, skuIDs, false, userName) + _, err = handler.SyncStoresSkus(ctx, t, db, storeIDs, skuIDs, false) return nil, err }) return hint, err diff --git a/business/jxutils/tasksch/task.go b/business/jxutils/tasksch/task.go index 9ca5f9fc2..d5ac4fd31 100644 --- a/business/jxutils/tasksch/task.go +++ b/business/jxutils/tasksch/task.go @@ -236,7 +236,7 @@ func (t *BaseTask) run(taskHandler func()) { } for _, subTask := range t.Children { if _, err := subTask.GetResult(0); err != nil { - globals.SugarLogger.Warnf("BaseTask run, failed with error:%v", err) + globals.SugarLogger.Infof("BaseTask run, failed with error:%v", err) } } close(t.finishChan) diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index da84631af..a8324e469 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -149,7 +149,9 @@ func GetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.Sto } storeMap.DeletedAt = utils.DefaultTimeValue if err = GetEntity(db, storeMap, model.FieldStoreID, model.FieldVendorID, model.FieldDeletedAt); err != nil { - globals.SugarLogger.Warnf("GetStoreMapByStoreID storeID:%d, vendorID:%d read storefeature failed with error:%v", storeID, vendorID, err) + if err != orm.ErrNoRows { + globals.SugarLogger.Warnf("GetStoreMapByStoreID storeID:%d, vendorID:%d read storefeature failed with error:%v", storeID, vendorID, err) + } return nil, err } return storeMap, nil diff --git a/business/partner/partner.go b/business/partner/partner.go index db767b910..be8ddf8da 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -81,7 +81,7 @@ type IPurchasePlatformHandler interface { // OpenStore(vendorStoreID string, userName string) error // CloseStore(vendorStoreID, closeNotice, userName string) error - SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) + SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool) (hint string, err error) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) GetVendorID() int diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 47f53ded0..e0c0ce182 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -14,6 +14,7 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" + "github.com/astaxie/beego/orm" ) const ( @@ -72,13 +73,14 @@ var ( } ) -func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { - task := tasksch.RunSeqTask("ebai.SyncStoresSkus", userName, func(t *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { +func (p *PurchaseHandler) SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool) (hint string, err error) { + task := tasksch.NewSeqTask("ebai.SyncStoresSkus", ctx.GetUserName(), func(t *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { storeID := storeIDs[step] - err = p.syncOneStoreSkus(t, db, storeID, skuIDs, false, userName) + err = p.syncOneStoreSkus(t, db, storeID, skuIDs, false, ctx.GetUserName()) return nil, err }, len(storeIDs)) - + ctx.SetTaskOrAddChild(task, parentTask) + task.Run() if !isAsync { _, err = task.GetResult(0) } @@ -88,6 +90,14 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ func (p *PurchaseHandler) syncOneStoreSkus(parentTask tasksch.ITask, db *dao.DaoDB, storeID int, skuIDs []int, isAsync bool, userName string) (err error) { globals.SugarLogger.Debugf("syncOneStoreSkus storeID:%d, skuIDs:%v, userName:%s", storeID, skuIDs, userName) + _, err2 := dao.GetStoreMapByStoreID(db, storeID, model.VendorIDEBAI) + if err = err2; err != nil { + if err == orm.ErrNoRows { + err = nil + } + return err + } + if err = p.syncOneStoreCategoriesFromRemote2Local(db, storeID, userName); err != nil { return err } @@ -351,7 +361,8 @@ func (p *PurchaseHandler) syncOneStoreCategoriesFromRemote2Local(db *dao.DaoDB, } v.EbaiSyncStatus |= model.SyncFlagNewMask } - if result, err := api.EbaiAPI.ShopCategoryGet(utils.Int2Str(storeID)); err == nil { + result, err2 := api.EbaiAPI.ShopCategoryGet(utils.Int2Str(storeID)) + if err = err2; err == nil { dao.Begin(db) defer func() { dao.Rollback(db) diff --git a/business/partner/purchase/elm/store_sku.go b/business/partner/purchase/elm/store_sku.go index a3b097561..21eedacdd 100644 --- a/business/partner/purchase/elm/store_sku.go +++ b/business/partner/purchase/elm/store_sku.go @@ -18,7 +18,7 @@ func (p *PurchaseHandler) ReadStoreSku(storeID, skuID int) (skuNameExt *model.Sk return nil, nil } -func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { +func (p *PurchaseHandler) SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool) (hint string, err error) { return hint, err } diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index 80b8c781f..00e7a01f1 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -4,6 +4,7 @@ import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -22,12 +23,14 @@ type tStoreSkuBindExt struct { } // 京东到家,以有库存表示关注(认领) -func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { +func (p *PurchaseHandler) SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool) (hint string, err error) { + globals.SugarLogger.Debugf("jd SyncStoresSkus, storeIDs:%v, skuIDs:%v", storeIDs, skuIDs) + parallelCount := 1 if len(skuIDs) < MaxSkuBatchSize { parallelCount = 10 } - task := tasksch.RunManagedParallelTask("SyncStoresSkus", tasksch.NewParallelConfig().SetParallelCount(parallelCount), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { + task := tasksch.NewParallelTask("SyncStoresSkus", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx.GetUserName(), func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { storeID := batchItemList[0].(int) sqlWhere := ` WHERE (t1.deleted_at = ? OR t1.jd_sync_status <> 0) AND t1.store_id = ? @@ -54,7 +57,7 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ } if err = dao.GetRows(db, &storeSkus, sql, append(sqlParams, sqlWhereParams...)...); err == nil { outStationNo := utils.Int2Str(storeID) - task := tasksch.RunParallelTask("SyncStoresSkus inner", tasksch.NewParallelConfig().SetBatchSize(MaxSkuBatchSize), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { + task := tasksch.RunParallelTask("SyncStoresSkus inner", tasksch.NewParallelConfig().SetBatchSize(MaxSkuBatchSize), ctx.GetUserName(), func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { var skuPriceInfoList []*jdapi.SkuPriceInfo var skuVendibilityList []*jdapi.StockVendibility var skuStockList []*jdapi.SkuStock @@ -93,13 +96,13 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ if globals.EnableStoreWrite { // todo 以下可以优化为并行操作 if len(skuVendibilityList) > 0 { - _, err = api.JdAPI.BatchUpdateVendibility(outStationNo, "", skuVendibilityList, userName) + _, err = api.JdAPI.BatchUpdateVendibility(outStationNo, "", skuVendibilityList, ctx.GetUserName()) } if err == nil && len(skuPriceInfoList) > 0 { _, err = api.JdAPI.UpdateVendorStationPrice(outStationNo, "", skuPriceInfoList) } if err == nil && len(skuStockList) > 0 { - _, err = api.JdAPI.BatchUpdateCurrentQtys(outStationNo, "", skuStockList, userName) + _, err = api.JdAPI.BatchUpdateCurrentQtys(outStationNo, "", skuStockList, ctx.GetUserName()) } } return nil, err @@ -115,6 +118,8 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ return nil, err }, storeIDs) + ctx.SetTaskOrAddChild(task, parentTask) + task.Run() if isAsync { return task.ID, nil }