diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 49d40f60b..9e4d73aac 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -3,6 +3,7 @@ package cms import ( "errors" "fmt" + "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "github.com/astaxie/beego/server/web" beego "github.com/astaxie/beego/server/web" "regexp" @@ -96,6 +97,24 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { level := step + 1 catList, err := dao.GetDirtyStoreCategories(db, vendorID, storeID, level, skuIDs) + + // 保证下面api成功率添加校验 + if vendorID == model.VendorIDEBAI { + status, err := api.EbaiAPI.ShopStatusGet("", utils.Str2Int64(vendorStoreID)) + if err != nil { + return nil, err + } + switch status { + case ebaiapi.ShopCheckStatusCheckSuccess: + + case ebaiapi.ShopCheckStatusNew, ebaiapi.ShopCheckStatusWaitCheck, ebaiapi.ShopCheckStatusUpdateWaitCheck: + return nil, fmt.Errorf("门店审核中,请联系饿了么工作人员加快审核") + case ebaiapi.ShopCheckStatusGoLiveFail: + return nil, fmt.Errorf("门店上线审核失败,请联系饿了么工作人员加快审核") + case ebaiapi.ShopCheckStatusCheckFail: + return nil, fmt.Errorf("门店审核未通过") + } + } if len(catList) > 0 { num += len(catList) task := tasksch.NewParallelTask(fmt.Sprintf("%s SyncStoreCategory step2, level=%d", model.VendorChineseNames[vendorID], level), diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 431af3ea0..fb21b55b3 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -665,7 +665,7 @@ func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *mod ReasonRemarks: reason, } refundProductList := make([]*ebaiapi.RefundProductList, 0, 0) - date, _ := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) + date, _, _ := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) for _, v := range date { v2 := v.(map[string]interface{}) refundProduct := &ebaiapi.RefundProductList{ diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go index f92362b7c..09f7d72fb 100644 --- a/business/partner/purchase/ebai/order_afs.go +++ b/business/partner/purchase/ebai/order_afs.go @@ -242,7 +242,7 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod ReasonRemarks: reason, } refundProductList := make([]*ebaiapi.RefundProductList, 0, 0) - date, _ := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) + date, _, _ := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) for _, v := range date { v2 := v.(map[string]interface{}) refundProduct := &ebaiapi.RefundProductList{ @@ -303,24 +303,19 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G ReasonCode: "", ReasonRemarks: reason, } - date, err := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) + date, removerAll, err := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) if err != nil { return err } refundProductList := make([]*ebaiapi.RefundProductList, 0, 0) - removerAll := false if date != nil && len(date) != model.NO { - for k, v := range date { + for _, v := range date { v2 := v.(map[string]interface{}) refundProduct := &ebaiapi.RefundProductList{ SubBizOrderId: v2["sub_biz_order_id"].(string), PlatformSkuId: utils.Int64ToStr(utils.Interface2Int64WithDefault(v2["platform_sku_id"], 0)), } - // 全退 - if k == model.NO && utils.MustInterface2Int64(v2["is_refund_all"]) == model.YES { - removerAll = true - } switch utils.MustInterface2Int64(v2["fund_calculate_type"]) { case 0: refundProduct.Number = utils.Int64ToStr(utils.MustInterface2Int64(v2["refund_quantity"])) @@ -359,9 +354,22 @@ func orderSkus2AfsSkus(refundSkuList []*model.OrderSku) (removeSkuList []*ebaiap func (c *PurchaseHandler) GetOrderAfsInfo(ctx *jxcontext.Context, vendorOrderID, afsOrderID string) (orderAfsInfo *partner.OrderAfsInfo, err error) { orderAfsInfo = &partner.OrderAfsInfo{} - if result, err := api.EbaiAPI.OrderPartRefundGet(vendorOrderID); err == nil { + result, _, err := api.EbaiAPI.GetReverseOrder(vendorOrderID) + if err == nil { orderAfsInfo.VendorOrderID = vendorOrderID - orderAfsInfo.AfsTotalShopMoney = utils.MustInterface2Int64(result["shop_fee"]) + var afsTotalShopMoney int64 = 0 + for _, v := range result { + v2 := v.(map[string]interface{}) + afsTotalShopMoney += utils.MustInterface2Int64(v2["refund_user_amount"]) + } + orderAfsInfo.AfsTotalShopMoney = afsTotalShopMoney } return orderAfsInfo, err + + //orderAfsInfo = &partner.OrderAfsInfo{} + //if result, err := api.EbaiAPI.OrderPartRefundGet(vendorOrderID) ;err == nil { + // orderAfsInfo.VendorOrderID = vendorOrderID + // orderAfsInfo.AfsTotalShopMoney = utils.MustInterface2Int64(result["shop_fee"]) + //} + //return orderAfsInfo, err } diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index 7320d14d1..236931e93 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -342,8 +342,7 @@ func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask } } if globals.EnableEbaiStoreWrite { - fBaiduIDs, fShopIDs, err1 := FilterStoreRel(baiduShopIDs) - globals.SugarLogger.Debugf("RefreshAllStoresID FilterStoreRel fBaiduIDs====%d fShopIDs====%d err====%v", fBaiduIDs, fShopIDs, err1) + fBaiduIDs, fShopIDs, _ := FilterStoreRel(baiduShopIDs) err = api.EbaiAPI.ShopIDBatchUpdate(fBaiduIDs, fShopIDs) } return nil, err diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index c2fdee9a7..13304761c 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -187,6 +187,10 @@ func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID in if globals.EnableEbaiStoreWrite { if catName, catSeq, isCheck := getCheckExdStoreNameAndSeq(storeID, storeCat); !isCheck { err = api.EbaiAPI.ShopCategoryUpdate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.VendorCatID, 0), formatCatName(catName), jxCatSeq2Ebai(catSeq)) + // 修改分类时错误:自定义分类ID(category_id)不存在(降低api调用错误) + if err != nil && strings.Contains(err.Error(), "自定义分类ID(category_id)不存在") { + dao.SetStoreCategorySyncStatus(dao.GetDB(), model.VendorIDEBAI, []int{storeID}, []int{storeCat.StoreCatID}, 2) + } } // todo, 饿百将一个分类重复改名,也会报分类名重复错,特殊处理一下,不过因为GetStoreCategory其实会拉取所有的门店分类,是比较耗时的操作 if utils.IsErrMatch(err, "1", []string{"分类名称已经存在"}) { @@ -231,8 +235,19 @@ func (p *PurchaseHandler) updateStoreSkus(ctx *jxcontext.Context, storeID int, v _, err = api.EbaiAPI.SkuUpdate(ctx.GetTrackInfo(), strStoreID, utils.Str2Int64(storeSku.VendorSkuID), params) if err != nil { failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDEBAI], "更新商品基础信息") + // 本地商品存在饿百商品id,但是平台不存在该商品 + if strings.Contains(err.Error(), "sku不存在") { + sql := ` UPDATE store_sku_bind SET ebai_id = 0,ebai_sync_status = 2 WHERE store_id = ? AND sku_id = ?` + param := []interface{}{storeID, storeSku.SkuID} + dao.ExecuteSQL(dao.GetDB(), sql, param...) + } else if strings.Contains(err.Error(), "商品禁止售卖不允许上架,请去商品审核模块进行修改") { + sql := ` UPDATE store_sku_bind SET ebai_sync_status = 0 WHERE store_id = ? AND sku_id = ?` + param := []interface{}{storeID, storeSku.SkuID} + dao.ExecuteSQL(dao.GetDB(), sql, param...) + } } - if ebaiExSkuCatMap[storeSku.SkuID] == 0 && ebaiExSkuCatMap2[storeSku.SkuID] == 0 && ebaiExSkuCatMap3[storeSku.SkuID] == 0 { + + if ebaiExSkuCatMap[storeSku.SkuID] == 0 && ebaiExSkuCatMap2[storeSku.SkuID] == 0 && ebaiExSkuCatMap3[storeSku.SkuID] == 0 && err == nil { if isNeedMapCat && !isExd { utils.CallFuncAsync(func() { api.EbaiAPI.SkuShopCategoryMap(strStoreID, utils.Str2Int64(storeSku.VendorSkuID), "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku)) @@ -315,7 +330,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr vendorSkuIDs := partner.BareStoreSkuInfoList(storeSkuList).GetVendorSkuIDIntList() if globals.EnableEbaiStoreWrite { var opResult *ebaiapi.BatchOpResult - if status == model.SkuStatusNormal { + if status == model.SkuStatusNormal { // 可售上架 if len(vendorSkuIDs) > 1 { opResult, err = api.EbaiAPI.SkuOnline(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs, nil, nil) } else if len(vendorSkuIDs) == 1 { @@ -325,7 +340,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr } return failedList, err } - } else { + } else { // 下架 if len(vendorSkuIDs) > 1 { opResult, err = api.EbaiAPI.SkuOffline(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs, nil, nil) } else if len(vendorSkuIDs) == 1 { @@ -389,6 +404,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg if err != nil { failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDEBAI], "更新商品库存") } + // 本地商品存在饿百商品id,但是平台不存在该商品 + if err != nil && strings.Contains(err.Error(), "商品不存在") { + sql := ` UPDATE store_sku_bind SET ebai_id = 0,ebai_sync_status = 2 WHERE store_id = ? AND sku_id = ?` + param := []interface{}{storeID, storeSkuList[0].SkuID} + dao.ExecuteSQL(dao.GetDB(), sql, param...) + } } err = nil } @@ -677,6 +698,12 @@ func SelectStoreSkuListByOpResult(storeSkuList []*partner.StoreSkuInfo, opResult VendoreName: vendorName, SyncType: syncType, } + // 本地商品存在饿百商品id,但是平台不存在该商品 + if strings.Contains(opResultMap[utils.Str2Int64(v.VendorSkuID)], "商品不存在") { + sql := ` UPDATE store_sku_bind SET ebai_id = 0,ebai_sync_status = 2 WHERE store_id = ? AND sku_id = ?` + param := []interface{}{storeID, v.SkuID} + dao.ExecuteSQL(dao.GetDB(), sql, param...) + } selectedStoreSkuList = append(selectedStoreSkuList, opFailed) } }