diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index bbd964ee1..605af66c0 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -50,6 +50,10 @@ type SyncError struct { Message string `json:"message"` } +type SpecSyncError struct { + SpecErr error `json:"specErr"` +} + // 对于多门店平台接口的通用处理 type MultiStoreHandlerWrapper struct { partner.IMultipleStoresHandler @@ -633,8 +637,8 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN if len(task.GetFailedList()) > 10 { downloadURL, _, _ := WirteToExcelBySyncFailed(task) noticeMsg = fmt.Sprintf("[详情点我]path1=%s\n", downloadURL) - } else { - if err != nil { + } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { + if task.GetErr() != nil { noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) } } @@ -646,7 +650,7 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN tasksch.HandleTask(task, nil, isManageIt).Run() if !isAsync { resultList, err2 := task.GetResult(0) - if err2 != nil { + if len(task.GetFailedList()) > 0 { err2 = buildErrMsg(task) } if err = err2; err == nil { @@ -664,7 +668,7 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN func buildErrMsg(task tasksch.ITask) (err error) { err = fmt.Errorf(utils.Format4Output(buildErrMsgJson(task), true)) - return makeSyncError(err) + return makeSpecSyncError(err) } func buildErrMsgJson(task tasksch.ITask) (resultL []*SyncErrResult) { @@ -760,6 +764,21 @@ func makeSyncError(err error) (newErr error) { return err } +func makeSpecSyncError(err error) (newErr error) { + if err != nil { + if _, ok := err.(*SpecSyncError); !ok { + return &SpecSyncError{ + SpecErr: err, + } + } + } + return err +} + +func (e *SpecSyncError) Error() string { + return e.SpecErr.Error() +} + func (e *SyncError) Error() string { return fmt.Sprintf("本地数据修改成功,但同步失败,请根据错误提示处理!,同步错误信息:%s", e.Original.Error()) } diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index a92c5c45f..6a98c8088 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -369,6 +369,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo reorderSkuMap = make(map[string][]*dao.StoreSkuSyncInfo) } now := jxutils.OperationTime2HourMinuteFormat(time.Now()) + var failedList []*partner.StoreSkuInfoWithErr for _, sku := range skus { if !useVendorPriceDirectly && !isSkuLockTimeValid(sku) { @@ -416,11 +417,14 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo isNeedReorder = true } else { if dao.IsVendorThingIDEmpty(sku.VendorSkuID) { - err = fmt.Errorf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID) + // err = fmt.Errorf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID) + err = utils.NewErrorCode(fmt.Sprintf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID), "-1", 0) + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, vendorID, "异常同步错误") if parentTask == nil { return err } parentTask.AddBatchErr(err) + parentTask.AddFailedList(failedList) } else { isAdded2Update := false // 修改商品信息时不改价(以免活动引起的失败),而用单独的改价来改 @@ -512,21 +516,21 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(createList) > 0 { _, err = putils.FreeBatchStoreSkuSyncInfo("创建门店商品", func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr - failedList, err = singleStoreHandler.CreateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) - singleStoreHandler.IsErrSkuExist(err) - if skuNameList, err2 := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, []*partner.StoreSkuInfo{ - &partner.StoreSkuInfo{ - SkuID: batchedStoreSkuList[0].SkuID, - }, - }); err2 == nil && len(skuNameList) > 0 { - batchedStoreSkuList[0].VendorNameID = skuNameList[0].VendorNameID - batchedStoreSkuList[0].VendorSkuID = skuNameList[0].SkuList[0].VendorSkuID + if failedList, err = singleStoreHandler.CreateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList); singleStoreHandler.IsErrSkuExist(err) { + if skuNameList, err2 := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, []*partner.StoreSkuInfo{ + &partner.StoreSkuInfo{ + SkuID: batchedStoreSkuList[0].SkuID, + }, + }); err2 == nil && len(skuNameList) > 0 { + batchedStoreSkuList[0].VendorNameID = skuNameList[0].VendorNameID + batchedStoreSkuList[0].VendorSkuID = skuNameList[0].SkuList[0].VendorSkuID - // 如果创建商品时已经存在,需要更新 - updateList = append(updateList, calVendorPrice4StoreSku(batchedStoreSkuList[0], storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage))) - err = nil - } else { - failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) + // 如果创建商品时已经存在,需要更新 + updateList = append(updateList, calVendorPrice4StoreSku(batchedStoreSkuList[0], storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage))) + err = nil + } else if err2 != nil { + failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) + } } if len(failedList) > 0 { task.AddFailedList(failedList) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 8681bcd29..a35d768ec 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -190,7 +190,10 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr opResult, err = api.EbaiAPI.SkuOnline(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs, nil, nil) } else if len(vendorSkuIDs) == 1 { err = api.EbaiAPI.SkuOnlineOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs[0], "", "") - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + if err != nil { + + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + } return failedList, err } } else { @@ -198,7 +201,9 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr opResult, err = api.EbaiAPI.SkuOffline(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs, nil, nil) } else if len(vendorSkuIDs) == 1 { err = api.EbaiAPI.SkuOfflineOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs[0], "", "") - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") + } return failedList, err } } @@ -231,9 +236,9 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg 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 = SelectStoreSkuListByOpResult(storeSkuList, opResult2, storeID, model.VendorIDEBAI, "更新商品价格") + _, err := api.EbaiAPI.SkuPriceUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品价格") } } } @@ -250,7 +255,9 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg } } else if len(storeSkuList) == 1 { err = api.EbaiAPI.SkuStockUpdateOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0]) - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") + if err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") + } } } return failedList, err diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go index 0b4743c8d..e3004f7a8 100644 --- a/business/partner/putils/store_sku.go +++ b/business/partner/putils/store_sku.go @@ -4,6 +4,8 @@ import ( "fmt" "sort" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/baseapi/utils" @@ -269,6 +271,8 @@ func GetErrMsg2FailedSingleList(storeSkuList interface{}, err error, storeID, ve } failedList = append(failedList, storeSkuInfoWithErr) } + } else { + globals.SugarLogger.Errorf("GetErrMsg2FailedSingleList:%v", err) } } return failedList