From 9476575dc8e2bee58ef665511b92195b2a65eff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Wed, 29 Nov 2023 15:45:45 +0800 Subject: [PATCH] 1 --- business/jxstore/cms/store_sku_check.go | 277 +----------------------- business/jxstore/cms/sync_store_sku.go | 24 +- controllers/temp_op.go | 6 +- 3 files changed, 26 insertions(+), 281 deletions(-) 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 9e4d73aac..4386629c2 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -95,26 +95,36 @@ 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) { - 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 } + // 门店营业状态 + ebaiStatus, err := api.EbaiAPI.ShopBusStatusGet("", utils.Str2Int64(vendorStoreID), ebaiapi.PlatformFlagElm) + switch status { case ebaiapi.ShopCheckStatusCheckSuccess: - + case ebaiapi.ShopCheckStatusNew, ebaiapi.ShopCheckStatusWaitCheck, ebaiapi.ShopCheckStatusUpdateWaitCheck: - return nil, fmt.Errorf("门店审核中,请联系饿了么工作人员加快审核") + if ebaiStatus == ebaiapi.ShopBusStatusSuspended { + return nil, fmt.Errorf("门店审核中,请联系饿了么工作人员加快审核") + } case ebaiapi.ShopCheckStatusGoLiveFail: - return nil, fmt.Errorf("门店上线审核失败,请联系饿了么工作人员加快审核") + if ebaiStatus == ebaiapi.ShopBusStatusSuspended { + return nil, fmt.Errorf("门店上线审核失败,请联系饿了么工作人员加快审核") + } case ebaiapi.ShopCheckStatusCheckFail: - return nil, fmt.Errorf("门店审核未通过") + if ebaiStatus == ebaiapi.ShopBusStatusSuspended { + return nil, fmt.Errorf("门店审核未通过") + } } } + + level := step + 1 + catList, err := dao.GetDirtyStoreCategories(db, vendorID, storeID, level, skuIDs) if len(catList) > 0 { num += len(catList) task := tasksch.NewParallelTask(fmt.Sprintf("%s SyncStoreCategory step2, level=%d", model.VendorChineseNames[vendorID], level), 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 })