diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 00e4ab8ce..9b6058dcd 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1121,20 +1121,32 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf dao.Rollback(db, txDB) return 0, err } - // if valid["jdsStockSwitch"] != nil { - // if _, err = SetStoreSkuSyncStatus2(db, []int{model.JdShopMainStoreID}, []int{model.VendorIDJDShop}, skuIDs, model.SyncFlagSaleMask); err != nil { - // dao.Rollback(db, txDB) - // return 0, err - // } - // } } dao.Commit(db, txDB) errList := errlist.New() errList.AddErr(err) - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) - errList.AddErr(err) - err = errList.GetErrListAsOne() + //_, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) + //errList.AddErr(err) + + jxutils.CallMsgHandlerAsync(func() { + storeIds, _ := GetSyncSkuStoreId(db, skuIDs) + if len(storeIds) > model.NO { + CurVendorSync.SyncStoresSkus(jxcontext.AdminCtx, nil, 0, db, partner.GetSingleStoreVendorIDs(), storeIds, skuIDs, false, false, true) + } + }, "") + + // 修改之前的bug,运营在修改商品之后,可能是价格或者其他什么发生变化,去重新更新一下各个平台的商品 + // 但是会出现商品所属门店或者分组比较多,然后更新异常慢,采用异步处理一下,但是本方法会出现很多更新异常 + // 商品未创建,图片啊,价格啊什么的 + //storeIds, err := GetSyncSkuStoreId(db, skuIDs) + //if err != nil { + // return 0, err + //} + //_, err2 = CurVendorSync.SyncStoresSkus(jxcontext.AdminCtx, nil, 0, db, partner.GetSingleStoreVendorIDs(), storeIds, skuIDs, false, false, true) + //errList.AddErr(err2) + //err = errList.GetErrListAsOne() + if globals.IsAddEvent { mapBefore := refutil.FindMapAndStructMixed(valid, beforSkuName) err = AddEventDetail(db, ctx, model.OperateUpdate, nameID, model.ThingTypeSkuName, 0, BuildDiffData(mapBefore), BuildDiffData(valid)) @@ -1410,6 +1422,26 @@ func SetUpdateSkuPriceIfChange(db *dao.DaoDB, skuPrice, nowPrice int64, skuId in return err } +// GetSyncSkuStoreId 当每个商品存在修改时,需要重新同步商品的信息,立马同步,获取需要同步的门店信息 +func GetSyncSkuStoreId(db *dao.DaoDB, skus []int) ([]int, error) { + sql := ` SELECT * FROM store_sku_bind b + INNER JOIN store s on s.id = b.store_id + WHERE b.sku_id IN (` + dao.GenQuestionMarks(len(skus)) + `) AND b.status = ? AND s.status <> ? AND b.deleted_at = ? ` + param := []interface{}{skus, model.YES, model.StoreStatusDisabled, utils.DefaultTimeValue} + + skuBind := make([]*model.StoreSkuBind, 0, 0) + if err := dao.GetRows(db, &skuBind, sql, param); err != nil { + return nil, err + } + + storeIds := make([]int, 0, 0) + for _, v := range skuBind { + storeIds = append(storeIds, v.StoreID) + } + + return storeIds, nil +} + func UpdateSkuImg(ctx *jxcontext.Context, skuID int, payload map[string]interface{}) (string, error) { var ( db = dao.GetDB() diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index a36320297..039bf05a1 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -6,9 +6,6 @@ import ( "sync" "time" - "git.rosy.net.cn/baseapi/platformapi/dingdingapi" - "git.rosy.net.cn/jx-callback/business/jxutils/ddmsg" - "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/baseapi" @@ -931,262 +928,12 @@ func StoreOpenAll(ctx *jxcontext.Context) { // globals.SugarLogger.Debug("StoreOpenAll skuID is Complete") //} -func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) { - baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor start time: %v", time.Now()) - startProcessTime := time.Now().Unix() - vendorMap := make(map[int]bool) - for _, vendorID := range vendorIDList { - vendorMap[vendorID] = true //map[平台ID:true] - } - storeIDMap := make(map[int]bool) - for _, storeID := range storeIDList { - storeIDMap[storeID] = true //map[门店ID:true] - } - /************************************************update**************************************************/ - //自己存值 - a := func() { - for vendorID, _ := range vendorNameList { - //filter for vendorID - if len(vendorMap) > 0 { - if _, ok := vendorMap[vendorID]; !ok { - continue - } - } - if partner.IsMultiStore(vendorID) { - multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) - for _, vendorOrgCode := range apimanager.CurAPIManager.GetAppOrgCodeList(vendorID) { - allSkuNameInfoList, err := multiHandler.GetSkus(ctx, vendorOrgCode, 0, "") - //获取单个表格对比的物品信息列表 - skuNameInfoList = allSkuNameInfoList - if err != nil { - fmt.Println("allSkuNameInfoList赋值错误,error信息" + err.Error()) - continue - } - //*partner.StoreSkuInfo skuNameList []*SkuNameInfo - var bareStoreSkuList []*partner.StoreSkuInfo - for _, v := range allSkuNameInfoList { - for _, v2 := range v.SkuList { - if v2.Status > model.SkuStatusDontSale { - for _, v2 := range v.SkuList { - bareStoreSkuList = append(bareStoreSkuList, &v2.StoreSkuInfo) - } - } - } - } - //if multiStoreAllSkuInfoList[vendorID][vendorOrgCode] != nil && bareStoreSkuList != nil { - if multiStoreAllSkuInfoList[vendorID] != nil && bareStoreSkuList != nil { - multiStoreAllSkuInfoList[vendorID][vendorOrgCode] = bareStoreSkuList - //}else if multiStoreAllSkuInfoList[vendorID][vendorOrgCode] == nil{ - } else if multiStoreAllSkuInfoList[vendorID] == nil { - multiStoreAllSkuInfoList = make(map[int]map[string][]*partner.StoreSkuInfo) - multiStoreAllSkuInfoList[vendorID] = make(map[string][]*partner.StoreSkuInfo) - multiStoreAllSkuInfoList[vendorID][vendorOrgCode] = bareStoreSkuList - } - tempMap := make(map[int]*partner.SkuNameInfo) - for _, value := range allSkuNameInfoList { - for _, skuInfo := range value.SkuList { - //表示平台商品库未下架的 - if skuInfo.Status > model.SkuStatusDontSale { - filterVendorDepotUnSaleSkuIds = append(filterVendorDepotUnSaleSkuIds, skuInfo.SkuID) - tempMap[skuInfo.SkuID] = value - } - } - } - //商品信息 - if multiStoreAllSkuInfoMap[vendorID] == nil { - multiStoreAllSkuInfoMap = make(map[int]map[string]map[int]*partner.SkuNameInfo) - multiStoreAllSkuInfoMap[vendorID] = make(map[string]map[int]*partner.SkuNameInfo) - //multiStoreAllSkuInfoMap[vendorID][vendorOrgCode] = make(map[int]*partner.SkuNameInfo) - multiStoreAllSkuInfoMap[vendorID][vendorOrgCode] = tempMap - } else { - multiStoreAllSkuInfoMap[vendorID][vendorOrgCode] = tempMap - } - } - } - } - } - - /************************************************update****************************************************/ - //1.获取京西本地所有门店信息 store、place、user表联查 jxStoreInfoList - //2.过滤所有门店信息,只留下传进来的vendorMap,storeIDMap中对应的平台和门台信息 filterStoreList - //3.判断是否多平台门店,两种情况两种处理 - b := func() { - jxStoreInfoList, err := GetStores(ctx, "", map[string]interface{}{}, 0, -1, utils.DefaultTimeValue, utils.DefaultTimeValue, 0, 0) - if err != nil { - baseapi.SugarLogger.Errorf("CheckSkuDiffBetweenJxAndVendor GetStores error:%v", err) - } else { - //获取总共几个门店任务 - filterStoreList := GetFilterStoreList(jxStoreInfoList.Stores, vendorMap, storeIDMap) - diffData.InitData() - for i := range filterStoreList { - jxStoreInfoListValue := filterStoreList[i] - storeID := jxStoreInfoListValue.ID - storeIDStr := utils.Int2Str(storeID) - storeName := jxStoreInfoListValue.Name - jxSkuInfoDataSingle := &dao.StoreSkuNamesInfo{} - jxSkuInfoDataMulti := &dao.StoreSkuNamesInfo{} - if jxStoreInfoListValue.StoreMaps != nil { - var multiFlag = false - var singleFlag = false - var filterJxSkuInfoMapSingle map[int]*dao.StoreSkuNameExt - var filterJxSkuInfoMapMulti map[int]*dao.StoreSkuNameExt - for _, vendorListValue := range jxStoreInfoListValue.StoreMaps { - vendorID := vendorListValue.VendorID - if partner.IsMultiStore(vendorID) { - if multiFlag == false { - //jxSkuInfoDataMulti, _ = GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) - jxSkuInfoDataMulti, _ = GetStoreSkus2(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) - /*重新计算价格*/ - SetJxPrice(jxSkuInfoDataMulti, storeID, vendorID) - filterJxSkuInfoMapMulti = GetFilterJxSkuInfoMap(jxSkuInfoDataMulti.SkuNames) //map[京西商品ID:StoreSkuNameExt] - multiFlag = true - } - } else { - if singleFlag == false { - //jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, nil, true, "", true, false, map[string]interface{}{}, 0, -1) - jxSkuInfoDataSingle, _ = GetStoreSkus2(ctx, storeID, nil, true, "", true, false, map[string]interface{}{}, 0, -1) - /*重新计算价格*/ - SetJxPrice(jxSkuInfoDataSingle, storeID, vendorID) - filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt] - singleFlag = true - } - } - vendorStoreID := vendorListValue.VendorStoreID - baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor storeID:%d vendorID:%d vendorStoreID:%s vendorListValue:%v", storeID, vendorID, vendorStoreID, vendorListValue) - - if partner.IsMultiStore(vendorID) { - singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler) - allSkuInfoList := GetMultiStoreAllSkuInfoList(vendorID, vendorListValue.VendorOrgCode) - skuBareInfoList, err := singleStoreHandler.GetStoreSkusBareInfo(ctx, vendorListValue.VendorOrgCode, nil, storeID, vendorStoreID, allSkuInfoList) - if err != nil { - baseapi.SugarLogger.Infof("CheckSkuDiffBetweenJxAndVendor GetStoreSkusBareInfo error:%v", err) - } else if len(skuBareInfoList) > 0 { - //获取京东的商品 - filterSkuInfoMap := GetFilterMultiStoreSkuInfoMap(vendorID, vendorListValue.VendorOrgCode, skuBareInfoList) //map[京东商品ID:SkuNameInfo] - CompareJxAndVendor(vendorID, storeIDStr, vendorStoreID, storeName, filterJxSkuInfoMapMulti, filterSkuInfoMap, 1) - } - } else { - singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) - vendorSkuInfoList, err := singleStoreHandler.GetStoreSkusFullInfo(ctx, nil, storeID, vendorStoreID, nil) - if err != nil { - baseapi.SugarLogger.Infof("CheckSkuDiffBetweenJxAndVendor GetStoreSkusFullInfo error:%v", err) - } else if len(vendorSkuInfoList) > 0 { - //获取京东的商品 - filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(vendorSkuInfoList) //map[平台商品ID:SkuNameInfo] - CompareJxAndVendor(vendorID, storeIDStr, vendorStoreID, storeName, filterJxSkuInfoMapSingle, filterVendorSkuInfoMap, 0) - } - } - } - } - } - } - } - - /********************************第三步****************************/ - c := func(data map[int][]DiffData, depotData map[int][]DepotDiffData) { - var sheetList []*excel.Obj2ExcelSheetConfig - for key, value := range data { - sheetName := vendorNameList[key] - if partner.IsMultiStore(key) { - excelConfDepot := &excel.Obj2ExcelSheetConfig{ - Title: sheetName + "商品库与京西商品库对比", - Data: depotData[key], - CaptionList: deoptTitleList, - } - sheetList = append(sheetList, excelConfDepot) - } - excelConf := &excel.Obj2ExcelSheetConfig{ - Title: sheetName, - Data: value, - CaptionList: titleList, - } - sheetList = append(sheetList, excelConf) - if needStatistic { - statisticSheet := AddStatisticSheet(sheetName, value) - sheetList = append(sheetList, statisticSheet) - } - baseapi.SugarLogger.Debugf("WriteToExcel:append:%s count:%d", sheetName, len(value)) - } - - if len(sheetList) > 0 { - excelBin := excel.Obj2Excel(sheetList) - sheetList = nil - timeStr := utils.Int64ToStr(time.Now().Unix()) - diffFullFileName := diffFileName[IsJXCS()] + timeStr + fileExt - if canWriteTolocal { - jxutils.WriteFile(diffFullFileName, excelBin) - } - baseapi.SugarLogger.Debugf("WriteToExcel:save %s success", diffFullFileName) - //上传 - downloadURL, err := jxutils.UploadExportContent(excelBin, diffFullFileName) - if err != nil { - baseapi.SugarLogger.Errorf("WriteToExcel:upload %s failed error:%v", diffFullFileName, err) - } else { - baseapi.SugarLogger.Debugf("WriteToExcel:upload %s success, downloadURL: %s", diffFullFileName, downloadURL) - /*************发送钉钉消息**************/ - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, ctx.GetUserID(), "异步任务完成", "京西平台对比数据上传成功:Excel下载地址是 "+downloadURL) - } - } else { - baseapi.SugarLogger.Debug("WriteToExcel:No diff data!!!") - } - //} - endProcessTime := time.Now().Unix() - diff := endProcessTime - startProcessTime - baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now()) - baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor cost time: %d sec", diff) - } - apiover := make(chan int, 1) - compover := make(chan int, 1) - over := false - /********************************第三步****************************/ - /*异步任务*/ - /************************************************************************************/ - go func() { - defer func() { - if recover() != nil { - // beego.Info("执行任务失败") - panic("API调用失败") - } - }() - a() - depotDiffData.InitData2() - CompareJxAndMultiVenderDepot(ctx, vendorMap) - apiover <- 0 - }() - /*a等待a现成执行完*/ - go func() { - for !over { - select { - case <-apiover: - /*第二步 为了获取 filterJxDepotUnSaleSkuIds*/ - go func() { - defer func() { - if recover() != nil { - // beego.Info("比较任务失败") - panic("比较任务失败") - } - }() - b() - compover <- 0 //比较任务完成 - }() - /*第二步*/ - case <-compover: - go func() { - defer func() { - if recover() != nil { - // beego.Info("写入任务失败") - panic("写入任务失败") - } - }() - c(diffData.diffDataMap, depotDiffData.diffDataMap) - fmt.Println("任务执行完成") - over = true - }() - break - } - } - }() - /************************************************************************************/ +// 对比本地商品和平台商品差异(价格和规格),不同的重新同步 +func CheckSkuDiffBetweenJxAndVendor2(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) { + //db := dao.GetDB() + //for _, v := range storeIDList { + // //storeMapList, err := dao.GetStoresMapList(db, vendorIDList, []int{v}, []int{model.StoreStatusOpened, model.StoreStatusHaveRest, model.StoreStatusClosed}, status, model.StoreIsSyncYes, "", "", "") + //} } //入口函数,校验本地商品京西和其他平台的差异 @@ -1408,15 +1155,3 @@ func WriteToExcel(task *tasksch.SeqTask, data map[int][]DiffData, depotData map[ baseapi.SugarLogger.Debug("WriteToExcel:No diff data!!!") } } - -func SetJxPrice(jxSkuInfoDataMulti *dao.StoreSkuNamesInfo, storeId int, vendorid int) (err error) { - storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeId, vendorid, "") - /*重新计算京西价格*/ - for _, values := range jxSkuInfoDataMulti.SkuNames { - for _, value := range values.Skus { - value.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), value.BindPrice) - } - } - /*重新计算京西价格*/ - return nil -} diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 49d40f60b..4386629c2 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" @@ -94,6 +95,34 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo num := 0 rootTask := tasksch.NewSeqTask(fmt.Sprintf("%s SyncStoreCategory step1", model.VendorChineseNames[vendorID]), ctx, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + // 保证下面api成功率添加校验 + if vendorID == model.VendorIDEBAI { + // 门店审核状态 + status, err := api.EbaiAPI.ShopStatusGet("", utils.Str2Int64(vendorStoreID)) + if err != nil { + return nil, err + } + // 门店营业状态 + ebaiStatus, err := api.EbaiAPI.ShopBusStatusGet("", utils.Str2Int64(vendorStoreID), ebaiapi.PlatformFlagElm) + + switch status { + case ebaiapi.ShopCheckStatusCheckSuccess: + + case ebaiapi.ShopCheckStatusNew, ebaiapi.ShopCheckStatusWaitCheck, ebaiapi.ShopCheckStatusUpdateWaitCheck: + if ebaiStatus == ebaiapi.ShopBusStatusSuspended { + return nil, fmt.Errorf("门店审核中,请联系饿了么工作人员加快审核") + } + case ebaiapi.ShopCheckStatusGoLiveFail: + if ebaiStatus == ebaiapi.ShopBusStatusSuspended { + return nil, fmt.Errorf("门店上线审核失败,请联系饿了么工作人员加快审核") + } + case ebaiapi.ShopCheckStatusCheckFail: + if ebaiStatus == ebaiapi.ShopBusStatusSuspended { + return nil, fmt.Errorf("门店审核未通过") + } + } + } + level := step + 1 catList, err := dao.GetDirtyStoreCategories(db, vendorID, storeID, level, skuIDs) if len(catList) > 0 { diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index e21c5d70b..27f47444b 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -83,10 +83,10 @@ func (c *DeliveryHandler) OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) { order, goodsOrder := c.callbackMsg2Waybill(msg) store, _ := dao.GetStoreDetail(dao.GetDB(), goodsOrder.JxStoreID, goodsOrder.VendorID, goodsOrder.VendorOrgCode) + switch msg.OrderStatus { case dadaapi.OrderStatusWaitingForAccept: - dadaOrder, err := api.DadaAPI.QueryOrderInfo(msg.OrderID) - if err == nil { + if dadaOrder, err2 := api.DadaAPI.QueryOrderInfo(msg.OrderID); err2 == nil { order.ActualFee = jxutils.StandardPrice2Int(dadaOrder.ActualFee) order.DesiredFee = jxutils.StandardPrice2Int(dadaOrder.DeliveryFee) + int64(store.FreightMarkup) } @@ -94,7 +94,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap case dadaapi.OrderStatusAccepted: order.Status = model.WaybillStatusCourierAssigned order.Remark = order.CourierName + "," + order.CourierMobile - if dadaOrder, err := api.DadaAPI.QueryOrderInfo(msg.OrderID); err == nil { + if dadaOrder, err2 := api.DadaAPI.QueryOrderInfo(msg.OrderID); err2 == nil { order.ActualFee = jxutils.StandardPrice2Int(dadaOrder.ActualFee) order.DesiredFee = jxutils.StandardPrice2Int(dadaOrder.DeliveryFee) + int64(store.FreightMarkup) } @@ -116,7 +116,8 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap switch order.OrderVendorID { case model.VendorIDDD: - tiktokStatusPush(order, msg.OrderStatus) + Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) + tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.OrderStatus == dadaapi.OrderStatusAccepted { @@ -128,15 +129,17 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap } // 抖音订单状态回传 -func tiktokStatusPush(order *model.Waybill, status int) { +func tiktokStatusPush(order *model.Waybill, status int, lng, lat string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, - ThirdCarrierOrderId: order.VendorOrderID, + ThirdCarrierOrderId: order.VendorWaybillID, CourierName: order.CourierName, CourierPhone: order.CourierMobile, LogisticsStatus: order.Status, OpCode: "", LogisticsProviderCode: utils.DaDaCode, + Longitude: lng, + Latitude: lat, } switch status { diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index 7a41cfa2e..2d16e7ad2 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -310,7 +310,8 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta switch order.OrderVendorID { case model.VendorIDDD: - tiktokStatusPush(order, orderStatus) + Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) + tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if good.VendorID == model.VendorIDTaoVegetable && cc.OrderStatus == fnpsapi.OrderStatusAssigned { @@ -321,15 +322,17 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta } // 抖音订单状态回传 -func tiktokStatusPush(order *model.Waybill, orderStatus int64) { +func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, - ThirdCarrierOrderId: order.VendorOrderID, + ThirdCarrierOrderId: order.VendorWaybillID, CourierName: order.CourierName, CourierPhone: order.CourierMobile, LogisticsStatus: order.Status, OpCode: "", LogisticsProviderCode: utils.FnPsCode, + Longitude: lng, + Latitude: lat, } switch orderStatus { diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 8804a654e..2116dc3ef 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -141,7 +141,8 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m err := mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus) switch order.OrderVendorID { case model.VendorIDDD: - pushMTPSToTiktok(msg.Status, order) + Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) + pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.Status == mtpsapi.OrderStatusAccepted { @@ -152,7 +153,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m return err } -func pushMTPSToTiktok(msgStatus int, order *model.Waybill) { +func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, ThirdCarrierOrderId: order.VendorOrderID, @@ -161,6 +162,8 @@ func pushMTPSToTiktok(msgStatus int, order *model.Waybill) { LogisticsProviderCode: utils.MTPsCode, LogisticsStatus: order.Status, OpCode: "", + Longitude: lng, + Latitude: lat, } switch msgStatus { diff --git a/business/partner/delivery/sfps/waybill.go b/business/partner/delivery/sfps/waybill.go index 5393e2ff9..7c6c581ff 100644 --- a/business/partner/delivery/sfps/waybill.go +++ b/business/partner/delivery/sfps/waybill.go @@ -440,7 +440,8 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons switch order.OrderVendorID { case model.VendorIDDD: - tiktokStatusPush(order, orderStatus) + Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) + tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) case model.VendorIDTaoVegetable, model.VendorIDMTWM: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if good.VendorID == model.VendorIDTaoVegetable && orderStatus == sfps2.OrderStatusTakeOrder { @@ -450,15 +451,17 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons return sfps2.Err2CallbackResponse(nil) } -func tiktokStatusPush(order *model.Waybill, orderStatus int64) { +func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, ThirdCarrierOrderId: order.VendorOrderID, CourierName: order.CourierName, CourierPhone: order.CourierMobile, - LogisticsProviderCode: "10002", + LogisticsProviderCode: utils.SFPSCode, LogisticsStatus: order.Status, OpCode: "", + Latitude: lat, + Longitude: lng, } switch orderStatus { case sfps2.OrderStatusNewOrder: diff --git a/business/partner/delivery/uupt/waybill.go b/business/partner/delivery/uupt/waybill.go index e15bd8c0c..51ca76372 100644 --- a/business/partner/delivery/uupt/waybill.go +++ b/business/partner/delivery/uupt/waybill.go @@ -414,7 +414,8 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp //推送抖音 switch param.OrderVendorID { case model.VendorIDDD: - tiktokStatusPush(param, req.State) + Lng, Lat, _ := partner.GetRidderPositionGetter(param.WaybillVendorID).GetRidderPosition(nil, param.VendorOrderID, param.VendorOrderID, param.VendorWaybillID, param.VendorWaybillID2) + tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新 if good.VendorID == model.VendorIDTaoVegetable && req.State == uuptapi.StateRMGrabsOrder { @@ -424,15 +425,17 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp return uuptapi.Err2CallbackResponse(nil) } -func tiktokStatusPush(param *model.Waybill, orderStatus string) { +func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat string) { result := &utils.RiderInfo{ OrderId: param.VendorOrderID, ThirdCarrierOrderId: param.VendorOrderID, CourierName: param.CourierName, CourierPhone: param.CourierMobile, - LogisticsProviderCode: "10002", + LogisticsProviderCode: utils.UUPTCode, LogisticsStatus: param.Status, OpCode: "", + Longitude: lng, + Latitude: lat, } switch orderStatus { case uuptapi.StateConfirmSuccess: //下单成功 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) } } diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index 98c083ab9..02169bcc9 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -351,8 +351,9 @@ func Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) { order.Skus = append(order.Skus, sku) } // 包装袋金额设置 - store, _ := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID, order.VendorOrgCode) + store, _ := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), order.VendorStoreID, order.VendorID, order.VendorOrgCode) order.PackagePrice = store.PackageSetting + order.JxStoreID = store.ID jxutils.RefreshOrderSkuRelated(order) return order } diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index c5a303bdf..6a3c4819b 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -460,10 +460,17 @@ func (c *PurchaseHandler) UpdateStoreBoxFee(ctx *jxcontext.Context, vendorOrgCod } func (c *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) { - if lineStatus == model.StoreStatusOpened { - err = getAPI(vendorOrgCode, storeID, vendorStoreID).PoiOnline(vendorStoreID) - } else { - err = getAPI(vendorOrgCode, storeID, vendorStoreID).PoiOffline(vendorStoreID) + mtwmApi := getAPI(vendorOrgCode, storeID, vendorStoreID) + switch lineStatus { + case model.StoreStatusOpened: + if err = mtwmApi.PoiOnline(vendorStoreID); err != nil { + err = mtwmApi.PoiOpen(vendorStoreID) + } + default: + if err = mtwmApi.PoiOffline(vendorStoreID); err != nil { + err = mtwmApi.PoiClose(vendorStoreID) + } } + return err } diff --git a/business/partner/purchase/tao_vegetable/callback.go b/business/partner/purchase/tao_vegetable/callback.go index c2b1c5d52..707ef0888 100644 --- a/business/partner/purchase/tao_vegetable/callback.go +++ b/business/partner/purchase/tao_vegetable/callback.go @@ -13,6 +13,7 @@ import ( // OnCallbackMsg 淘宝回调接口 func OnCallbackMsg(orderStatus, orderId string, msg interface{}) (response *tao_vegetable.CallBackResult) { if CurPurchaseHandler != nil { + // return CurPurchaseHandler.onOrderMsg(orderStatus, orderId, msg) jxutils.CallMsgHandlerAsync(func() { response = CurPurchaseHandler.onOrderMsg(orderStatus, orderId, msg) }, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable)) diff --git a/business/partner/purchase/tiktok_store/order.go b/business/partner/purchase/tiktok_store/order.go index ff46b3dff..04b8b8347 100644 --- a/business/partner/purchase/tiktok_store/order.go +++ b/business/partner/purchase/tiktok_store/order.go @@ -587,20 +587,35 @@ func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s } } } - - //转门店自送通知抖音发货 - err = api.OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ + logisticsAdd := &order_logisticsAdd_request.OrderLogisticsAddParam{ OrderId: order.VendorOrderID, Company: "", - CompanyCode: "chengdouruoxi", + CompanyCode: "", LogisticsCode: order.VendorOrderID, IsRefundReject: false, IsRejectRefund: false, SerialNumberList: nil, AddressId: 0, StoreId: utils.Str2Int64(order.VendorStoreID), - }) - return err + } + switch order.WaybillVendorID { + case model.VendorIDDada: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeDaDa + case model.VendorIDMTPS: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMeiTuan + case model.VendorIDFengNiao: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeFengNiao + case model.VendorIDSFPS: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeSF + case model.VendorIDUUPT: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeUU + case model.VendorJXFakeWL, -1: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMerchant + default: + logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMerchant + } + //转门店自送通知抖音发货 + return api.OrderDelivering(logisticsAdd) } // Swtich2SelfDelivered 暂无自送完成 diff --git a/controllers/temp_op.go b/controllers/temp_op.go index bf297df1d..3ec038ed8 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -275,7 +275,7 @@ func (c *TempOpController) TestStartOrEndOpStore() { // @Title 京西平台和其他平台商品的对比 // @Description 京西平台和其他平台商品的对比 // @Param token header string true "认证token" -// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3)" +// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3,14抖音,16淘宝)" // @Param storeIDs formData string false "京西门店ID列表" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult @@ -295,7 +295,7 @@ func (c *TempOpController) CheckSkuDiffBetweenJxAndVendor() { // @Title 京西平台和其他平台商品的对比Test // @Description 对比Test // @Param token header string true "认证token" -// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3)" +// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3 14抖音 16淘宝)" // @Param storeIDs formData string false "京西门店ID列表" // @Success 200 {object} controllers.CallResult // @Failure 404 User not found @@ -305,7 +305,7 @@ func (c *TempOpController) StoreSkuCheckDiff() { var vendorIDList []int var storeIDList []int if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList, params.StoreIDs, &storeIDList); err == nil { - cms.TestDiff(params.Ctx, vendorIDList, storeIDList) + } return retVal, "", err })