From e6c59c4850332ca44fd0c67ea01cd041f33e934e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 9 Jan 2020 14:02:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=99=E8=AF=AF=E8=BF=94?= =?UTF-8?q?=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 83 +++++++-------- business/jxstore/cms/sync_store_sku.go | 14 ++- business/jxutils/tasksch/task.go | 8 +- business/partner/partner_store_sku.go | 6 +- business/partner/purchase/ebai/store_sku2.go | 54 ++++++---- business/partner/purchase/jd/store_sku2.go | 31 +++++- business/partner/purchase/mtwm/store_sku2.go | 75 +++++++++++--- business/partner/putils/store_sku.go | 103 +------------------ 8 files changed, 176 insertions(+), 198 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 7ca22d248..ae618a5f7 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -628,14 +628,19 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN } task = tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, loopInfoList) if isAsync { - task.SetFinishHook(func(task tasksch.ITask, ctx *jxcontext.Context) { + task.SetFinishHook(func(task tasksch.ITask) { + var noticeMsg string if len(task.GetErrMsg()) > 10 { - err = WirteToExcelBySyncFailed(task, ctx) + downloadURL, _, _ := WirteToExcelBySyncFailed(task) + noticeMsg = fmt.Sprintf("[详情点我]path1=%s\n", downloadURL) } else { if err != nil { - err = buildErrMsg(task) + noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) } } + if authInfo, err := ctx.GetV2AuthInfo(); err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) + } }) } tasksch.HandleTask(task, nil, isManageIt).Run() @@ -658,41 +663,36 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN } func buildErrMsg(task tasksch.ITask) (err error) { - var resultL []*SyncErrResult + err = fmt.Errorf(utils.Format4Output(buildErrMsgJson(task), true)) + return makeSyncError(err) +} + +func buildErrMsgJson(task tasksch.ITask) (resultL []*SyncErrResult) { failedList := task.GetErrMsg() for _, v := range failedList { for _, vv := range v.([]*partner.StoreSkuInfoWithErr) { - if vv.StoreSkuInfo != nil { - result := &SyncErrResult{ - SkuID: vv.StoreSkuInfo.SkuID, - StoreID: vv.StoreID, - CategoryName: "", - VendorID: vv.VendoreID, - VendorSkuID: vv.StoreSkuInfo.VendorSkuID, - NameID: vv.StoreSkuInfo.NameID, - VendorPrice: vv.StoreSkuInfo.VendorPrice, - SyncType: vv.SyncType, - ErrMsg: vv.ErrMsg, - } - resultL = append(resultL, result) - } else { - result := &SyncErrResult{ - SkuID: 0, - StoreID: vv.StoreID, - CategoryName: vv.CategoryName, - VendorID: vv.VendoreID, - VendorSkuID: "", - NameID: 0, - VendorPrice: 0, - SyncType: vv.SyncType, - ErrMsg: vv.ErrMsg, - } - resultL = append(resultL, result) + result := &SyncErrResult{ + SkuID: 0, + StoreID: vv.StoreID, + CategoryName: vv.CategoryName, + VendorID: vv.VendoreID, + VendorSkuID: "", + NameID: 0, + VendorPrice: 0, + SyncType: vv.SyncType, + ErrMsg: vv.ErrMsg, } + if vv.StoreSkuInfo != nil { + result.SkuID = vv.StoreSkuInfo.SkuID + result.CategoryName = "" + result.VendorSkuID = vv.StoreSkuInfo.VendorSkuID + result.NameID = vv.StoreSkuInfo.NameID + result.VendorPrice = vv.StoreSkuInfo.VendorPrice + } + resultL = append(resultL, result) } } - err = fmt.Errorf(utils.Format4Output(resultL, true)) - return makeSyncError(err) + return resultL } func (v *VendorSync) LoopStoresMap(ctx *jxcontext.Context, db *dao.DaoDB, taskName string, isAsync, isManageIt bool, vendorIDs []int, storeIDs []int, handler tasksch.WorkFunc, isContinueWhenError bool) (hint string, err error) { @@ -827,10 +827,9 @@ func GetTimeMixByInt(begin1, end1, begin2, end2 int16) (beginAt, endAt int16) { return beginAt, endAt } -func WirteToExcelBySyncFailed(task tasksch.ITask, ctx *jxcontext.Context) (err error) { +func WirteToExcelBySyncFailed(task tasksch.ITask) (downloadURL, fileName string, err error) { var ( - sheetList1 []*excel.Obj2ExcelSheetConfig - downloadURL1, fileName1 string + sheetList1 []*excel.Obj2ExcelSheetConfig ) syncErrResultLock.syncErrResult = syncErrResultLock.syncErrResult[0:0] failedList := task.GetErrMsg() @@ -860,21 +859,15 @@ func WirteToExcelBySyncFailed(task tasksch.ITask, ctx *jxcontext.Context) (err e } sheetList1 = append(sheetList1, excelConf1) if excelConf1 != nil { - downloadURL1, fileName1, err = jxutils.UploadExeclAndPushMsg(sheetList1, time.Now().Format("200601021504")+"同步错误返回") - baseapi.SugarLogger.Debug("WriteToExcel: download is [%v]", downloadURL1) + downloadURL, fileName, err = jxutils.UploadExeclAndPushMsg(sheetList1, time.Now().Format("200601021504")+"同步错误返回") + baseapi.SugarLogger.Debug("WriteToExcel: download is [%v]", downloadURL) } else { baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!") } if err != nil { - baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName1, err) - } else { - if authInfo, err := ctx.GetV2AuthInfo(); err == nil { - noticeMsg := fmt.Sprintf("[详情点我]path1=%s\n", downloadURL1) - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) - baseapi.SugarLogger.Debugf("WriteToExcel:upload %s success, downloadURL1:%s", fileName1, downloadURL1) - } + baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName, err) } - return err + return downloadURL, fileName, err } func (d *SyncErrResultLock) AppendData(syncErrResult SyncErrResult) { diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 170809ab1..1f26ab906 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -83,17 +83,21 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo var failedList []*partner.StoreSkuInfoWithErr if model.IsSyncStatusDelete(catInfo.CatSyncStatus) { // 删除 if model.IsSyncStatusDelete(catInfo.CatSyncStatus) && !dao.IsVendorThingIDEmpty(catInfo.VendorCatID) { - failedList, err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID, level) + err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID, level) if err != nil && handler.IsErrCategoryNotExist(err) { err = nil + } else if err != nil && !handler.IsErrCategoryNotExist(err) { + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, vendorID, "删除分类") } } } else if model.IsSyncStatusNew(catInfo.CatSyncStatus) { // 新增 - failedList, err = handler.CreateStoreCategory(ctx, storeID, vendorStoreID, catInfo) + err = handler.CreateStoreCategory(ctx, storeID, vendorStoreID, catInfo) if err != nil && handler.IsErrCategoryExist(err) { if cat, err2 := handler.GetStoreCategory(ctx, storeID, vendorStoreID, catInfo.Name); err2 == nil { catInfo.VendorCatID = cat.VendorCatID err = nil + } else if err != nil && !handler.IsErrCategoryExist(err) { + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, vendorID, "新增分类") } } if err == nil { @@ -104,9 +108,11 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo } } } else if model.IsSyncStatusUpdate(catInfo.CatSyncStatus) { // 修改 - failedList, err = handler.UpdateStoreCategory(ctx, storeID, vendorStoreID, catInfo) + err = handler.UpdateStoreCategory(ctx, storeID, vendorStoreID, catInfo) if err == nil { updateFields = append(updateFields, idFieldName) + } else { + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, vendorID, "修改分类") } } if len(failedList) > 0 { @@ -797,7 +803,7 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v task4Delete := tasksch.NewParallelTask(fmt.Sprintf("删除商家分类,level:%d", level), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { cat := batchItemList[0].(*partner.BareCategoryInfo) - _, err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, cat.VendorCatID, level) + err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, cat.VendorCatID, level) return nil, err }, levelCat2Delete) tasksch.HandleTask(task4Delete, task, true).Run() diff --git a/business/jxutils/tasksch/task.go b/business/jxutils/tasksch/task.go index f8325d333..a91d3ce9a 100644 --- a/business/jxutils/tasksch/task.go +++ b/business/jxutils/tasksch/task.go @@ -65,7 +65,7 @@ type ITask interface { AddBatchErr(err error) AddErrMsg(failedList ...interface{}) GetErrMsg() (failedList []interface{}) - SetFinishHook(func(task ITask, ctx *jxcontext.Context)) + SetFinishHook(func(task ITask)) json.Marshaler } @@ -131,7 +131,7 @@ type BaseTask struct { ctx *jxcontext.Context isGetResultCalled bool FailedList []interface{} - finishHook func(task ITask, ctx *jxcontext.Context) + finishHook func(task ITask) } func (s TaskList) Len() int { @@ -362,7 +362,7 @@ func (t *BaseTask) Error() (errMsg string) { return errMsg } -func (t *BaseTask) SetFinishHook(hook func(task ITask, ctx *jxcontext.Context)) { +func (t *BaseTask) SetFinishHook(hook func(task ITask)) { t.locker.RLock() defer t.locker.RUnlock() t.finishHook = hook @@ -450,7 +450,7 @@ func (t *BaseTask) run(taskHandler func()) { } close(t.finishChan) if t.finishHook != nil { - t.finishHook(t, t.ctx) + t.finishHook(t) } else { SendMessage(t) } diff --git a/business/partner/partner_store_sku.go b/business/partner/partner_store_sku.go index af8e78685..d873e93ac 100644 --- a/business/partner/partner_store_sku.go +++ b/business/partner/partner_store_sku.go @@ -156,9 +156,9 @@ type ISingleStoreStoreSkuHandler interface { GetStoreAllCategories(ctx *jxcontext.Context, storeID int, vendorStoreID string) (cats []*BareCategoryInfo, err error) GetStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, catName string) (cat *BareCategoryInfo, err error) - CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (failedList []*StoreSkuInfoWithErr, err error) - UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (failedList []*StoreSkuInfoWithErr, err error) - DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (failedList []*StoreSkuInfoWithErr, err error) + CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) + UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) + DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) IsErrCategoryExist(err error) (isExist bool) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 3ec06a021..8681bcd29 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -68,7 +68,7 @@ func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) { return ebaiapi.IsErrCategoryNotExist(err) } -func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { +func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) { var vendorCatID int64 if globals.EnableEbaiStoreWrite { vendorCatID, err = api.EbaiAPI.ShopCategoryCreate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.ParentVendorCatID, 0), formatCatName(storeCat.Name), jxCatSeq2Ebai(storeCat.Seq)) @@ -76,13 +76,10 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in vendorCatID = jxutils.GenFakeID() } storeCat.VendorCatID = utils.Int64ToStr(vendorCatID) - if err != nil { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorIDEBAI, "创建分类") - } - return failedList, err + return err } -func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { +func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) { if globals.EnableEbaiStoreWrite { err = api.EbaiAPI.ShopCategoryUpdate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.VendorCatID, 0), formatCatName(storeCat.Name), jxCatSeq2Ebai(storeCat.Seq)) // todo, 饿百将一个分类重复改名,也会报分类名重复错,特殊处理一下,不过因为GetStoreCategory其实会拉取所有的门店分类,是比较耗时的操作 @@ -93,21 +90,15 @@ func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID in } } } - if err != nil { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorIDEBAI, "修改分类") - } } - return failedList, err + return err } -func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (failedList []*partner.StoreSkuInfoWithErr, err error) { +func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) { if globals.EnableEbaiStoreWrite { err = api.EbaiAPI.ShopCategoryDelete(utils.Int2Str(storeID), utils.Str2Int64WithDefault(vendorCatID, 0)) - if err != nil { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorIDEBAI, "删除分类") - } } - return failedList, err + return err } // 门店商品 @@ -182,7 +173,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v opResult, err2 := api.EbaiAPI.SkuDelete(ctx.GetTrackInfo(), utils.Int2Str(storeID), partner.BareStoreSkuInfoList(storeSkuList).GetVendorSkuIDIntList(), nil) if err = err2; err2 != nil && opResult != nil { // if len(storeSkuList) > len(opResult.FailedList) { - failedList = putils.SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "删除商品") + failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "删除商品") // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) // } } @@ -212,7 +203,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr } } if err != nil && opResult != nil { - failedList = putils.SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品状态") + failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品状态") // failedList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } } @@ -237,12 +228,12 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg if len(storeSkuList) > 1 { opResult, err2 := api.EbaiAPI.SkuPriceUpdateBatch(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList), ebaiapi.SkuIDTypeSkuID) if err = err2; err != nil && opResult != nil { - failedList = putils.SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品价格") + failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品价格") } } else if len(storeSkuList) == 1 { opResult2, err := api.EbaiAPI.SkuPriceUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) if err != nil && opResult2 != nil { - failedList = putils.SelectStoreSkuListByOpResult(storeSkuList, opResult2, storeID, model.VendorIDEBAI, "更新商品价格") + failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult2, storeID, model.VendorIDEBAI, "更新商品价格") } } } @@ -254,7 +245,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg if len(storeSkuList) > 1 { opResult, err2 := api.EbaiAPI.SkuStockUpdateBatch(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList), ebaiapi.SkuIDTypeSkuID) if err = err2; err != nil && opResult != nil { - failedList = putils.SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品库存") + failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品库存") // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } } else if len(storeSkuList) == 1 { @@ -439,3 +430,26 @@ func vendorSkuList2Jx(vendorSkuList []*ebaiapi.SkuInfo) (skuNameList []*partner. func (p *PurchaseHandler) GetSensitiveWordRegexp() *regexp.Regexp { return sensitiveWordRegexp } + +//饿百api返回 +func SelectStoreSkuListByOpResult(storeSkuList []*partner.StoreSkuInfo, opResult *ebaiapi.BatchOpResult, storeID, vendorID int, syncType string) (selectedStoreSkuList []*partner.StoreSkuInfoWithErr) { + opResultMap := make(map[int64]string) + if len(opResult.FailedList) > 0 { + for _, v := range opResult.FailedList { + opResultMap[v.SkuID] = v.ErrorMsg + } + for _, v := range storeSkuList { + if opResultMap[utils.Str2Int64(v.VendorSkuID)] != "" { + opFailed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: v, + ErrMsg: opResultMap[utils.Str2Int64(v.VendorSkuID)], + StoreID: storeID, + VendoreID: vendorID, + SyncType: syncType, + } + selectedStoreSkuList = append(selectedStoreSkuList, opFailed) + } + } + } + return selectedStoreSkuList +} diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index fbb96f51f..6f9908730 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -122,7 +122,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr if globals.EnableJdStoreWrite { responseList, err2 := getAPI(vendorOrgCode).BatchUpdateVendibility(ctx.GetTrackInfo(), "", vendorStoreID, skuVendibilityList, ctx.GetUserName()) if err = err2; isErrPartialFailed(err) { - failedList = putils.SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品状态") + failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品状态") // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } } @@ -146,7 +146,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg if globals.EnableJdStoreWrite { responseList, err2 := getAPI(vendorOrgCode).UpdateVendorStationPrice(ctx.GetTrackInfo(), "", vendorStoreID, skuPriceInfoList) if err = err2; isErrPartialFailed(err) { - failedList = putils.SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品价格") + failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品价格") } } } @@ -170,7 +170,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg if globals.EnableJdStoreWrite { responseList, err2 := getAPI(vendorOrgCode).BatchUpdateCurrentQtys(ctx.GetTrackInfo(), "", vendorStoreID, skuStockList, ctx.GetUserName()) if err = err2; isErrPartialFailed(err) { - failedList = putils.SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品库存") + failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品库存") // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } } @@ -215,3 +215,28 @@ func (p *PurchaseHandler) SyncStoreProducts(ctx *jxcontext.Context, vendorOrgCod } return hint, err } + +//京东api返回 +func SelectStoreSkuListByResponseList(storeSkuList []*partner.StoreSkuInfo, responseList []*jdapi.StoreSkuBatchUpdateResponse, storeID, vendorID int, syncType string) (selectedStoreSkuList []*partner.StoreSkuInfoWithErr) { + responseMap := make(map[string]string) + if len(responseList) > 0 { + for _, v := range responseList { + if v.Code != "0" { + responseMap[v.OutSkuID] = v.Msg + } + } + for _, v := range storeSkuList { + if responseMap[utils.Int2Str(v.SkuID)] != "" { + respFailed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: v, + ErrMsg: responseMap[utils.Int2Str(v.SkuID)], + StoreID: storeID, + VendoreID: vendorID, + SyncType: syncType, + } + selectedStoreSkuList = append(selectedStoreSkuList, respFailed) + } + } + } + return selectedStoreSkuList +} diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 399786d41..054504afc 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -102,7 +102,7 @@ func tryCatName2Code(originName string) (catCodeStr string) { return catCodeStr } -func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { +func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) { level := 1 if storeCat.ParentCatName != "" { level = 2 @@ -151,27 +151,24 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in Sequence: storeCat.Seq, } err = api.MtwmAPI.RetailCatUpdate(vendorStoreID, catName, param4Update) - if err != nil { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorIDMTWM, "创建修改分类") - } if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 && // 修改分类名,但分类不存在 p.IsErrCategoryNotExist(err) && originName != "" { storeCat.CatSyncStatus |= model.SyncFlagNewMask - failedList, err = p.CreateStoreCategory(ctx, storeID, vendorStoreID, storeCat) + err = p.CreateStoreCategory(ctx, storeID, vendorStoreID, storeCat) } } if err == nil { // storeCat.VendorCatID = utils.FilterEmoji(storeCat.Name) storeCat.VendorCatID = utils.Int2Str(storeCat.ID) } - return failedList, err + return err } -func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { +func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) { return p.CreateStoreCategory(ctx, storeID, vendorStoreID, storeCat) } -func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (failedList []*partner.StoreSkuInfoWithErr, err error) { +func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) { if false { if globals.EnableMtwmStoreWrite { err = api.MtwmAPI.RetailCatDelete(vendorStoreID, tryCatName2Code(vendorCatID), vendorCatID) @@ -187,12 +184,9 @@ func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID in } else { err = api.MtwmAPI.RetailCatSkuBatchDelete2(ctx.GetTrackInfo(), vendorStoreID, nil, nil, catCodes, []string{vendorCatID}, nil) } - if err != nil { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorIDMTWM, "删除分类") - } } } - return failedList, err + return err } // 门店商品 @@ -313,7 +307,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI failedFoodList, err2 := api.MtwmAPI.RetailBatchInitData(ctx.GetTrackInfo(), vendorStoreID, foodDataList) if err = err2; err == nil { if err = putils.GenPartialFailedErr(failedFoodList, len(failedFoodList)); err != nil { - failedList = putils.SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) // successList = putils.UnselectStoreSkuSyncListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } } @@ -347,7 +341,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v if errExt, ok := err.(*utils.ErrorWithCode); ok { myMap := make(map[string][]*mtwmapi.AppFoodResult) json.Unmarshal([]byte(errExt.ErrMsg()), &myMap) - failedList = putils.SelectStoreSkuListByFoodList(storeSkuList, myMap["retail_error_list"], storeID, model.VendorIDMTWM, "批量删除商品") + failedList = SelectStoreSkuListByFoodList(storeSkuList, myMap["retail_error_list"], storeID, model.VendorIDMTWM, "批量删除商品") } } } @@ -388,7 +382,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedFoodList, err2 := api.MtwmAPI.RetailSellStatus(ctx.GetTrackInfo(), vendorStoreID, skuList, mtwmStatus) if err = err2; err == nil { if len(failedFoodList) > 0 { - failedList = putils.SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } } @@ -402,7 +396,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg failedFoodList, err2 := api.MtwmAPI.RetailSkuPrice(ctx.GetTrackInfo(), vendorStoreID, priceList) if err = err2; err == nil { if len(failedFoodList) > 0 { - failedList = putils.SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") } } } @@ -415,7 +409,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg failedFoodList, err2 := api.MtwmAPI.RetailSkuStock(ctx.GetTrackInfo(), vendorStoreID, stockList) if err = err2; err == nil { if len(failedFoodList) > 0 { - failedList = putils.SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品库存") + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品库存") } //if err = putils.GenPartialFailedErr(failedFoodList, len(failedFoodList)); err != nil { // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) @@ -533,3 +527,50 @@ func vendorSkuList2Jx(appFoodList []*mtwmapi.AppFood) (skuNameList []*partner.Sk func (p *PurchaseHandler) GetSensitiveWordRegexp() *regexp.Regexp { return sensitiveWordRegexp } + +//美团api返回 +func SelectStoreSkuListByFoodList(storeSkuList interface{}, foodList []*mtwmapi.AppFoodResult, storeID, vendorID int, syncType string) (selectedStoreSkuList []*partner.StoreSkuInfoWithErr) { + foodMap := make(map[string]string) + if len(foodList) > 0 { + for _, v := range foodList { + foodMap[v.AppFoodCode] = v.ErrorMsg + } + if storeSkuLists, ok := storeSkuList.([]*partner.StoreSkuInfo); ok { + for _, v := range storeSkuLists { + if foodMap[v.VendorSkuID] != "" { + foodFailed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: v, + ErrMsg: foodMap[v.VendorSkuID], + StoreID: storeID, + VendoreID: vendorID, + SyncType: syncType, + } + selectedStoreSkuList = append(selectedStoreSkuList, foodFailed) + } + } + } + if storeSkuLists, ok := storeSkuList.([]*dao.StoreSkuSyncInfo); ok { + for _, v := range storeSkuLists { + if foodMap[v.VendorSkuID] != "" { + storeSkuInfo := &partner.StoreSkuInfo{ + SkuID: v.SkuID, + VendorSkuID: v.VendorSkuID, + NameID: v.NameID, + VendorNameID: v.VendorNameID, + VendorPrice: v.VendorPrice, + Status: v.Status, + } + foodFailed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: storeSkuInfo, + ErrMsg: foodMap[v.VendorSkuID], + StoreID: storeID, + VendoreID: vendorID, + SyncType: syncType, + } + selectedStoreSkuList = append(selectedStoreSkuList, foodFailed) + } + } + } + } + return selectedStoreSkuList +} diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go index 3877ce83b..0b4743c8d 100644 --- a/business/partner/putils/store_sku.go +++ b/business/partner/putils/store_sku.go @@ -4,12 +4,6 @@ import ( "fmt" "sort" - "git.rosy.net.cn/baseapi/platformapi/jdapi" - - "git.rosy.net.cn/baseapi/platformapi/ebaiapi" - - "git.rosy.net.cn/baseapi/platformapi/mtwmapi" - "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/baseapi/utils" @@ -64,7 +58,7 @@ func (p *DefSingleStorePlatform) DeleteStoreAllCategories(ctx *jxcontext.Context vendorCatIDs[k] = v.VendorCatID } err = FreeBatchCategoryIDOp(func(vendorCatID string) (err error) { - _, err2 := p.DeleteStoreCategory(ctx, storeID, vendorStoreID, vendorCatID, step) + err2 := p.DeleteStoreCategory(ctx, storeID, vendorStoreID, vendorCatID, step) return err2 }, ctx, task, vendorCatIDs, isContinueWhenError) return nil, err @@ -237,101 +231,6 @@ func UnselectStoreSkuListByVendorSkuIDs(storeSkuList []*partner.StoreSkuInfo, ve return selectedStoreSkuList } -//美团api返回 -func SelectStoreSkuListByFoodList(storeSkuList interface{}, foodList []*mtwmapi.AppFoodResult, storeID, vendorID int, syncType string) (selectedStoreSkuList []*partner.StoreSkuInfoWithErr) { - foodMap := make(map[string]string) - if len(foodList) > 0 { - for _, v := range foodList { - foodMap[v.AppFoodCode] = v.ErrorMsg - } - if storeSkuLists, ok := storeSkuList.([]*partner.StoreSkuInfo); ok { - for _, v := range storeSkuLists { - if foodMap[v.VendorSkuID] != "" { - foodFailed := &partner.StoreSkuInfoWithErr{ - StoreSkuInfo: v, - ErrMsg: foodMap[v.VendorSkuID], - StoreID: storeID, - VendoreID: vendorID, - SyncType: syncType, - } - selectedStoreSkuList = append(selectedStoreSkuList, foodFailed) - } - } - } - if storeSkuLists, ok := storeSkuList.([]*dao.StoreSkuSyncInfo); ok { - for _, v := range storeSkuLists { - if foodMap[v.VendorSkuID] != "" { - storeSkuInfo := &partner.StoreSkuInfo{ - SkuID: v.SkuID, - VendorSkuID: v.VendorSkuID, - NameID: v.NameID, - VendorNameID: v.VendorNameID, - VendorPrice: v.VendorPrice, - Status: v.Status, - } - foodFailed := &partner.StoreSkuInfoWithErr{ - StoreSkuInfo: storeSkuInfo, - ErrMsg: foodMap[v.VendorSkuID], - StoreID: storeID, - VendoreID: vendorID, - SyncType: syncType, - } - selectedStoreSkuList = append(selectedStoreSkuList, foodFailed) - } - } - } - } - return selectedStoreSkuList -} - -//饿百api返回 -func SelectStoreSkuListByOpResult(storeSkuList []*partner.StoreSkuInfo, opResult *ebaiapi.BatchOpResult, storeID, vendorID int, syncType string) (selectedStoreSkuList []*partner.StoreSkuInfoWithErr) { - opResultMap := make(map[int64]string) - if len(opResult.FailedList) > 0 { - for _, v := range opResult.FailedList { - opResultMap[v.SkuID] = v.ErrorMsg - } - for _, v := range storeSkuList { - if opResultMap[utils.Str2Int64(v.VendorSkuID)] != "" { - opFailed := &partner.StoreSkuInfoWithErr{ - StoreSkuInfo: v, - ErrMsg: opResultMap[utils.Str2Int64(v.VendorSkuID)], - StoreID: storeID, - VendoreID: vendorID, - SyncType: syncType, - } - selectedStoreSkuList = append(selectedStoreSkuList, opFailed) - } - } - } - return selectedStoreSkuList -} - -//京东api返回 -func SelectStoreSkuListByResponseList(storeSkuList []*partner.StoreSkuInfo, responseList []*jdapi.StoreSkuBatchUpdateResponse, storeID, vendorID int, syncType string) (selectedStoreSkuList []*partner.StoreSkuInfoWithErr) { - responseMap := make(map[string]string) - if len(responseList) > 0 { - for _, v := range responseList { - if v.Code != "0" { - responseMap[v.OutSkuID] = v.Msg - } - } - for _, v := range storeSkuList { - if responseMap[utils.Int2Str(v.SkuID)] != "" { - respFailed := &partner.StoreSkuInfoWithErr{ - StoreSkuInfo: v, - ErrMsg: responseMap[utils.Int2Str(v.SkuID)], - StoreID: storeID, - VendoreID: vendorID, - SyncType: syncType, - } - selectedStoreSkuList = append(selectedStoreSkuList, respFailed) - } - } - } - return selectedStoreSkuList -} - func GetErrMsg2FailedSingleList(storeSkuList interface{}, err error, storeID, vendorID int, syncType string) (failedList []*partner.StoreSkuInfoWithErr) { if err != nil { if errExt, ok := err.(*utils.ErrorWithCode); ok {