From f5ee2e23b1e3cd04a21cb8cd8d98be52272a44ae Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 14 Jul 2019 17:57:27 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=8E=BB=E6=8E=89DeleteRemoteStoreSkus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 48 ++++++------- business/jxstore/cms/sync_store_sku.go | 41 +++++++++++ business/partner/partner.go | 1 - business/partner/purchase/ebai/store_sku.go | 75 -------------------- business/partner/purchase/elm/store_sku.go | 4 -- business/partner/purchase/jd/store_sku.go | 4 -- business/partner/purchase/mtwm/store_sku.go | 76 --------------------- 7 files changed, 63 insertions(+), 186 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index edb929f6f..9c6a8e388 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -498,19 +498,17 @@ func (v *VendorSync) DeleteRemoteStoreSkus(ctx *jxcontext.Context, db *dao.DaoDB hint, err = v.LoopStoresMap(ctx, db, fmt.Sprintf("删除远程门店商品信息:%v", storeIDs), isAsync, true, vendorIDs, storeIDs, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) - if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil { - if len(loopMapInfo.StoreMapList) > 1 { - loopStoreTask := tasksch.NewSeqTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), ctx, - func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - storeID := loopMapInfo.StoreMapList[step].StoreID - _, err = handler.DeleteRemoteStoreSkus(ctx, task, storeID, false, isContinueWhenError) - return nil, err - }, len(loopMapInfo.StoreMapList)) - t.AddChild(loopStoreTask).Run() - _, err = loopStoreTask.GetResult(0) - } else { - _, err = handler.DeleteRemoteStoreSkus(ctx, t, loopMapInfo.StoreMapList[0].StoreID, false, isContinueWhenError) - } + if len(loopMapInfo.StoreMapList) > 1 { + loopStoreTask := tasksch.NewSeqTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), ctx, + func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + storeMap := loopMapInfo.StoreMapList[step] + _, err = ClearRemoteStoreStuffAndSetNew(ctx, task, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, false, isContinueWhenError) + return nil, err + }, len(loopMapInfo.StoreMapList)) + t.AddChild(loopStoreTask).Run() + _, err = loopStoreTask.GetResult(0) + } else { + _, err = ClearRemoteStoreStuffAndSetNew(ctx, t, loopMapInfo.StoreMapList[0].VendorID, loopMapInfo.StoreMapList[0].StoreID, loopMapInfo.StoreMapList[0].VendorStoreID, false, isContinueWhenError) } return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID) }, isContinueWhenError) @@ -524,19 +522,17 @@ func (v *VendorSync) PruneMissingStoreSkus(ctx *jxcontext.Context, vendorIDs []i hint, err = v.LoopStoresMap(ctx, dao.GetDB(), fmt.Sprintf("删除远程无关联的门店商品信息:%v", storeIDs), isAsync, true, vendorIDs, storeIDs, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) - if handler, _ := v.GetStoreHandler(loopMapInfo.VendorID).(partner.ISingleStoreHandler); handler != nil { - if len(loopMapInfo.StoreMapList) > 1 { - loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - storeMap := batchItemList[0].(*model.StoreMap) - _, err = PruneMissingStoreSkus(ctx, task, loopMapInfo.VendorID, storeMap.StoreID, storeMap.VendorStoreID, false, isContinueWhenError) - return nil, err - }, loopMapInfo.StoreMapList) - t.AddChild(loopStoreTask).Run() - _, err = loopStoreTask.GetResult(0) - } else { - _, err = PruneMissingStoreSkus(ctx, t, loopMapInfo.VendorID, loopMapInfo.StoreMapList[0].StoreID, loopMapInfo.StoreMapList[0].VendorStoreID, false, isContinueWhenError) - } + if len(loopMapInfo.StoreMapList) > 1 { + loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + storeMap := batchItemList[0].(*model.StoreMap) + _, err = PruneMissingStoreSkus(ctx, task, loopMapInfo.VendorID, storeMap.StoreID, storeMap.VendorStoreID, false, isContinueWhenError) + return nil, err + }, loopMapInfo.StoreMapList) + t.AddChild(loopStoreTask).Run() + _, err = loopStoreTask.GetResult(0) + } else { + _, err = PruneMissingStoreSkus(ctx, t, loopMapInfo.VendorID, loopMapInfo.StoreMapList[0].StoreID, loopMapInfo.StoreMapList[0].VendorStoreID, false, isContinueWhenError) } return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID) }, isContinueWhenError) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 828eb512b..f987a76eb 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -4,6 +4,7 @@ import ( "fmt" "git.rosy.net.cn/jx-callback/business/partner/putils" + "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" @@ -64,3 +65,43 @@ func PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, ven } return hint, err } + +func ClearRemoteStoreStuffAndSetNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) { + userName := ctx.GetUserName() + globals.SugarLogger.Debugf("ClearRemoteStoreStuffAndSetNew storeID:%d, isContinueWhenError:%t, userName:%s", storeID, isContinueWhenError, userName) + handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) + if handler == nil { + return "", fmt.Errorf("平台:%s不支持此操作", model.VendorChineseNames[vendorID]) + } + + db := dao.GetDB() + var errDeleteSku error + rootTask := tasksch.NewSeqTask(fmt.Sprintf("ClearRemoteStoreStuffAndSetNew:%s", model.VendorChineseNames[vendorID]), ctx, + func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + err = handler.DeleteStoreAllSkus(ctx, rootTask, storeID, vendorStoreID, isContinueWhenError) + errDeleteSku = err + // 强制忽略删除SKU错误 + if isContinueWhenError { + err = nil + } + if err == nil { + _, err = dao.SetStoreSkuSyncStatus(db, vendorID, []int{storeID}, nil, model.SyncFlagNewMask) + } + case 1: + if err = handler.DeleteStoreAllCategories(ctx, rootTask, storeID, vendorStoreID, isContinueWhenError); err == nil { + _, err = dao.SetStoreCategorySyncStatus(db, vendorID, []int{storeID}, nil, model.SyncFlagNewMask) + } + } + return nil, err + }, 2) + tasksch.AddChild(parentTask, rootTask).Run() + if !isAsync { + _, err = rootTask.GetResult(0) + } + if err == nil { + err = errDeleteSku + } + return rootTask.ID, err +} diff --git a/business/partner/partner.go b/business/partner/partner.go index f6b17ee9b..29803c96e 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -230,7 +230,6 @@ type IPurchasePlatformHandler interface { // !!!注意,此操作会先清除门店已有的商品,一般用于初始化,小心使用 FullSyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) - DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) GetStoreStatus(ctx *jxcontext.Context, vendorStoreID string) (storeStatus int, err error) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 771fb12b9..afa7fd711 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -184,81 +184,6 @@ func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask t return rootTask.ID, err } -// // todo 往上提 -// func (p *PurchaseHandler) PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { -// db := dao.GetDB() -// localSkuList, err := dao.GetStoreSkus2(db, model.VendorIDEBAI, storeID, nil, false) -// if err != nil { -// return "", err -// } -// localSkuMap := make(map[int]*dao.StoreSkuSyncInfo) -// for _, v := range localSkuList { -// localSkuMap[v.SkuID] = v -// } -// var vendorSkuID2Delete []string -// task := tasksch.NewSeqTask("ebai PruneMissingStoreSkus", ctx, -// func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { -// switch step { -// case 0: -// remoteSkuList, err2 := p.GetAllRemoteSkus(ctx, storeID, parentTask) -// if err = err2; err == nil { -// for _, v := range remoteSkuList { -// if localSkuMap[int(utils.Str2Int64WithDefault(v.CustomSkuID, 0))] == nil { -// vendorSkuID2Delete = append(vendorSkuID2Delete, utils.Int64ToStr(v.SkuID)) -// } -// } -// } -// case 1: -// if len(vendorSkuID2Delete) > 0 { -// err = p.DeleteRemoteSkus(ctx, task, storeID, vendorSkuID2Delete) -// } -// } -// return nil, err -// }, 2) -// tasksch.HandleTask(task, parentTask, true).Run() -// if isAsync { -// hint = task.GetID() -// } else { -// _, err = task.GetResult(0) -// } -// return hint, err -// } - -func (p *PurchaseHandler) DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { - userName := ctx.GetUserName() - globals.SugarLogger.Debugf("ebai DeleteRemoteStoreSkus storeID:%d, isContinueWhenError:%t, userName:%s", storeID, isContinueWhenError, userName) - - db := dao.GetDB() - var errDeleteSku error - rootTask := tasksch.NewSeqTask("DeleteRemoteStoreSkus", ctx, - func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - switch step { - case 0: - err = p.DeleteRemoteSkus(ctx, rootTask, storeID, nil) - errDeleteSku = err - // 强制忽略删除SKU错误 - if isContinueWhenError { - err = nil - } - case 1: - _, err = p.setStoreSkuSyncStatus(ctx, db, storeID, nil, model.SyncFlagNewMask) - case 2: - if err = p.DeleteRemoteCategories(ctx, rootTask, storeID, nil); err == nil { - _, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDEBAI, []int{storeID}, nil, model.SyncFlagNewMask) - } - } - return nil, err - }, 3) - tasksch.AddChild(parentTask, rootTask).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } - if err == nil { - err = errDeleteSku - } - return rootTask.ID, err -} - func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { userName := ctx.GetUserName() globals.SugarLogger.Debugf("ebai SyncStoreSkus storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName) diff --git a/business/partner/purchase/elm/store_sku.go b/business/partner/purchase/elm/store_sku.go index bef0f2dee..8c056c05b 100644 --- a/business/partner/purchase/elm/store_sku.go +++ b/business/partner/purchase/elm/store_sku.go @@ -22,10 +22,6 @@ func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask t return hint, err } -func (p *PurchaseHandler) DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { - return hint, err -} - func (p *PurchaseHandler) GetStoresSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeIDs []int) (storeSkuList []*model.StoreSkuBind, err error) { return storeSkuList, err } diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index ad9e3b429..541dc6a95 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -197,10 +197,6 @@ func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask t return p.syncStoreSkus(ctx, parentTask, db, storeID, storeSkus, isAsync, isContinueWhenError) } -func (p *PurchaseHandler) DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { - return hint, err -} - func constrainPrice(price int) int { if price <= 0 { price = 1 diff --git a/business/partner/purchase/mtwm/store_sku.go b/business/partner/purchase/mtwm/store_sku.go index 82435e874..bd3b1410b 100644 --- a/business/partner/purchase/mtwm/store_sku.go +++ b/business/partner/purchase/mtwm/store_sku.go @@ -525,82 +525,6 @@ func (p *PurchaseHandler) DeleteRemoteCategories(ctx *jxcontext.Context, parentT return err } -// todo 往上提 -// func (p *PurchaseHandler) PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { -// db := dao.GetDB() -// localSkuList, err := dao.GetStoreSkus2(db, model.VendorIDEBAI, storeID, nil, false) -// if err != nil { -// return "", err -// } -// localSkuMap := make(map[string]*dao.StoreSkuSyncInfo) -// for _, v := range localSkuList { -// localSkuMap[utils.Int2Str(v.SkuID)] = v -// } -// var vendorSkuID2Delete []string -// task := tasksch.NewSeqTask("mtwm PruneMissingStoreSkus", ctx, -// func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { -// switch step { -// case 0: -// remoteSkuList, err2 := p.GetAllRemoteSkus(storeID) -// if err = err2; err == nil { -// for _, v := range remoteSkuList { -// skuIDStr := v.AppFoodCode -// if localSkuMap[skuIDStr] == nil { -// vendorSkuID2Delete = append(vendorSkuID2Delete, skuIDStr) -// } -// } -// } -// case 1: -// if len(vendorSkuID2Delete) > 0 { -// err = p.DeleteRemoteSkus(ctx, task, storeID, vendorSkuID2Delete) -// } -// } -// return nil, err -// }, 2) -// tasksch.HandleTask(task, parentTask, true).Run() -// if isAsync { -// hint = task.GetID() -// } else { -// _, err = task.GetResult(0) -// } -// return hint, err -// } - -func (p *PurchaseHandler) DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { - userName := ctx.GetUserName() - globals.SugarLogger.Debugf("mtwm DeleteRemoteStoreSkus storeID:%d, isContinueWhenError:%t, userName:%s", storeID, isContinueWhenError, userName) - - db := dao.GetDB() - var errDeleteSku error - rootTask := tasksch.NewSeqTask("mtwm DeleteRemoteStoreSkus", ctx, - func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - switch step { - case 0: - err = p.DeleteRemoteSkus(ctx, rootTask, storeID, nil) - errDeleteSku = err - // 强制忽略删除SKU错误 - if isContinueWhenError { - err = nil - } - case 1: - _, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDMTWM, []int{storeID}, nil, model.SyncFlagNewMask) - case 2: - if err = p.DeleteRemoteCategories(ctx, rootTask, storeID, nil); err == nil { - _, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDMTWM, []int{storeID}, nil, model.SyncFlagNewMask) - } - } - return nil, err - }, 3) - tasksch.AddChild(parentTask, rootTask).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } - if err == nil { - err = errDeleteSku - } - return rootTask.ID, err -} - func (p *PurchaseHandler) GetStoresSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeIDs []int) (storeSkuList []*model.StoreSkuBind, err error) { return storeSkuList, err }