diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 0e7ae9133..c2d2c3ffe 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -4693,3 +4693,4 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku } return hint, err } + diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index af4fe0995..255ef7f2a 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -2,6 +2,9 @@ package cms import ( "fmt" + "git.rosy.net.cn/baseapi/platformapi/dingdingapi" + "git.rosy.net.cn/jx-callback/business/jxutils/ddmsg" + "github.com/astaxie/beego" "strings" "sync" "time" @@ -22,7 +25,7 @@ import ( const ( canWriteTolocal = false - needStatistic = true + needStatistic = false isFilterToBeCreateAndNotSale = true parallelCount = 5 fileExt = ".xlsx" @@ -38,6 +41,7 @@ const ( DatAanalyse6 = "京西商品库有,平台商品库没有" DatAanalyse7 = "同步状态异常" DatAanalyse8 = "平台门店未关注或平台门店商品库存为0,应添加对应的平台门店商品" + DatAanalyse9 = "平台门店价格与京西商品库价格不一致" ) var ( @@ -62,6 +66,8 @@ var ( "平台商品名", "京西可售状态", "平台可售状态", + "京西价格", + "平台价格", "数据分析", } @@ -136,6 +142,8 @@ type DiffData struct { VendorSkuName string `json:"平台商品名"` JxStatus string `json:"京西可售状态"` VendorStatus string `json:"平台可售状态"` + JxSkuPrice string `json:"京西价格"` /*哇,不能小写,不然会搞事情*/ + VendorPrice string `json:"平台价格"` DatAanalyse string `json:"数据分析"` } @@ -216,7 +224,13 @@ func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) { if err != nil { baseapi.SugarLogger.Errorf("GetMultiStoreAllSkuInfo error:%v", err) } else { - multiStoreAllSkuInfoList[vendorID][vendorOrgCode] = StoreSkuFullList2BareFilter(allSkuNameInfoList) //map[平台ID:[]StoreSkuInfo1,StoreSkuInfo2...] + if multiStoreAllSkuInfoList[vendorID] != nil { + multiStoreAllSkuInfoList[vendorID][vendorOrgCode] = StoreSkuFullList2BareFilter(allSkuNameInfoList) //map[平台ID:[]StoreSkuInfo1,StoreSkuInfo2...] + } else { + multiStoreAllSkuInfoList = make(map[int]map[string][]*partner.StoreSkuInfo) + multiStoreAllSkuInfoList[vendorID] = make(map[string][]*partner.StoreSkuInfo) + multiStoreAllSkuInfoList[vendorID][vendorOrgCode] = StoreSkuFullList2BareFilter(allSkuNameInfoList) //map[平台ID:[]StoreSkuInfo1,StoreSkuInfo2...] + } tempMap := make(map[int]*partner.SkuNameInfo) for _, value := range allSkuNameInfoList { for _, skuInfo := range value.SkuList { @@ -334,8 +348,11 @@ func IsSkuCanSale(saleStatus int) bool { //京西平台和其他平台商品的对比 //storeIDStr 京西商家id ,vendorStoreID 平台商家id func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName string, filterJxSkuInfoMap map[int]*dao.StoreSkuNameExt, filterVendorSkuInfoMap map[int]*partner.SkuNameInfo) { + //utils.Writelog("进入 CompareJxAndVendor 方法") for skuID, jxSkuInfo := range filterJxSkuInfoMap { skuIDStr := utils.Int2Str(skuID) + /*写京西skuIDStr*/ + //utils.Writelog("skuIDStr" + skuIDStr) var jxSkuDetailName string //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { @@ -345,11 +362,13 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) jxSkuDetailName = jxutils.ComposeSkuNameOriginal(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0) } - + //utils.Writelog("jxSkuDetailName:" + jxSkuDetailName) //jxSkuSaleStatus : 商品状态 ,skustatus 优先级高于 StoreSkuStatus jxSkuSaleStatus := jxutils.MergeSkuStatus(jxSkuInfo.Skus[0].SkuStatus, jxSkuInfo.Skus[0].StoreSkuStatus) - jxSkuSaleStatusName := GetSkuSaleStatusName(jxSkuSaleStatus) - + jxSkuSaleStatusName := GetSkuSaleStatusName(jxSkuSaleStatus + 3) + /*京西价格*/ + jxSkuPrice := fmt.Sprintf("%.2f", float64(jxSkuInfo.Skus[0].JxPrice)/float64(100)) + //jxSkuPrice := strconv.Itoa(jxSkuInfo.Skus[0].JxPrice) vendorSkuInfo := filterVendorSkuInfoMap[skuID] var status int8 if vendorID == model.VendorIDMTWM { @@ -365,14 +384,19 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin if vendorSkuInfo != nil { vendorSkuDetailName := vendorSkuInfo.SkuList[0].SkuName - vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status) - + vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status + 3) + /* 供货商价格 */ + vendorPrice := fmt.Sprintf("%.2f", float64(vendorSkuInfo.SkuList[0].StoreSkuInfo.VendorPrice)/float64(100)) isSaleStatusDiff := jxSkuSaleStatusName != vendorSkuSaleStatusName isNameDiff := jxSkuDetailName != vendorSkuDetailName + /*比较价格*/ + isPriceDiff := vendorPrice != jxSkuPrice + //utils.Writelog("isSaleStatusDiff:" + strconv.FormatBool(isSaleStatusDiff)) + //utils.Writelog("isNameDiff:" + strconv.FormatBool(isNameDiff)) if jxSkuDetailName != "" && vendorSkuDetailName != "" && strings.Contains(jxSkuDetailName, vendorSkuDetailName) { isNameDiff = false } - if isSaleStatusDiff || isNameDiff { + if isSaleStatusDiff || isNameDiff || isPriceDiff { reason := "" if isNameDiff { reason += DatAanalyse3 @@ -380,15 +404,18 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin if isSaleStatusDiff { reason += DatAanalyse4 } + if isPriceDiff { + reason += DatAanalyse9 + } if status != model.SkuStatusDontSale { reason += DatAanalyse7 } - outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, vendorSkuDetailName, jxSkuSaleStatusName, vendorSkuSaleStatusName, reason} + outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, vendorSkuDetailName, jxSkuSaleStatusName, vendorSkuSaleStatusName, jxSkuPrice, vendorPrice, reason} diffData.AppendData(vendorID, outPutData) } if !isSaleStatusDiff && !isNameDiff { if status != model.SkuStatusDontSale { - outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, vendorSkuDetailName, jxSkuSaleStatusName, vendorSkuSaleStatusName, DatAanalyse7} + outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, vendorSkuDetailName, jxSkuSaleStatusName, vendorSkuSaleStatusName, jxSkuPrice, vendorPrice, DatAanalyse7} diffData.AppendData(vendorID, outPutData) } } @@ -405,7 +432,7 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin if status != model.SkuStatusDontSale { reason += DatAanalyse7 } - outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, "", jxSkuSaleStatusName, "", reason} + outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, "", jxSkuSaleStatusName, "", jxSkuPrice, "", reason} diffData.AppendData(vendorID, outPutData) } } @@ -414,11 +441,14 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin if len(vendorSkuInfo.SkuList) > 0 { skuIDStr := utils.Int2Str(skuID) vendorSkuDetailName := vendorSkuInfo.SkuList[0].SkuName - vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status) - + vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status + 3) + /* 供货商价格 */ + vendorPrice := fmt.Sprintf("%.2f", float64(vendorSkuInfo.SkuList[0].StoreSkuInfo.VendorPrice)/float64(100)) + /* 供货商价格 */ jxSkuInfo := filterJxSkuInfoMap[skuID] + /*平台有,京西没有*/ if jxSkuInfo == nil { - outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", "", "", "", vendorSkuDetailName, "", vendorSkuSaleStatusName, DatAanalyse1} + outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", "", "", "", vendorSkuDetailName, "", vendorSkuSaleStatusName, "", vendorPrice, DatAanalyse1} diffData.AppendData(vendorID, outPutData) } } else { @@ -497,7 +527,7 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool if len(vendorSkuInfo.SkuList) > 0 { skuIDStr := utils.Int2Str(skuID) vendorSkuDetailName := vendorSkuInfo.SkuList[0].SkuName - vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status) + vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status + 3) jxSkuInfo := filterJxSkuInfoMap2[skuID] if jxSkuInfo == nil { @@ -515,6 +545,259 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool } } +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() + jxStoreInfoListValue := filterStoreList[0] + 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) + /*重新计算价格*/ + SetJxPrice(jxSkuInfoDataMulti, storeID) + 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) + 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) + } + } 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) + } + } + } + } + } + } + + /********************************第三步****************************/ + 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, "", "异步任务完成", "京西平台对比数据上传成功: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 CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) { startProcessTime := time.Now().Unix() @@ -719,6 +1002,7 @@ func WriteToExcel(task *tasksch.SeqTask, data map[int][]DiffData, depotData map[ 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) @@ -731,3 +1015,20 @@ 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) (err error) { + db := dao.GetDB() + storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeId, model.VendorIDJX) + if err != nil { + dao.Rollback(db) + return err + } + /*重新计算京西价格*/ + for _, values := range jxSkuInfoDataMulti.SkuNames { + for _, value := range values.Skus { + value.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), value.JxPrice) + } + } + /*重新计算京西价格*/ + return nil +} diff --git a/business/jxstore/cms/store_sku_check_test.go b/business/jxstore/cms/store_sku_check_test.go deleted file mode 100644 index 731575b51..000000000 --- a/business/jxstore/cms/store_sku_check_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package cms - -import ( - "testing" - - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" -) - -func TestCheckSkuDiffBetweenJxAndVendor(t *testing.T) { - vendorIDList := []int{} - storeIDList := []int{} - CheckSkuDiffBetweenJxAndVendor(jxcontext.AdminCtx, vendorIDList, storeIDList) -} diff --git a/business/jxutils/excel/excel.go b/business/jxutils/excel/excel.go index ff991a88d..23d3d45e0 100644 --- a/business/jxutils/excel/excel.go +++ b/business/jxutils/excel/excel.go @@ -3,12 +3,11 @@ package excel import ( "bytes" "fmt" - "io" - "reflect" - "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "github.com/360EntSecGroup-Skylar/excelize" + "io" + "reflect" ) type Obj2ExcelSheetConfig struct { @@ -20,7 +19,8 @@ type Obj2ExcelSheetConfig struct { func Obj2Excel(sheetList []*Obj2ExcelSheetConfig) []byte { globals.SugarLogger.Debug("Obj2Excel") excelFile := excelize.NewFile() - for sheetIndex, sheetConfig := range sheetList { + //for sheetIndex, sheetConfig := range sheetList { + for _, sheetConfig := range sheetList { obj := sheetConfig.Data typeInfo := reflect.TypeOf(obj) @@ -39,12 +39,14 @@ func Obj2Excel(sheetList []*Obj2ExcelSheetConfig) []byte { } valueInfo := reflect.Indirect(reflect.ValueOf(obj)) - if sheetIndex == 0 { - sheetName := excelFile.GetSheetName(1) - excelFile.SetSheetName(sheetName, sheetConfig.Title) - } else { - excelFile.NewSheet(sheetConfig.Title) - } + /*因爲默認是Sheet1,所以直接賦值就叫sheet1,然後再改名字就行了,不然會默認多一頁空白頁為sheet1*/ + //if sheetIndex == 0 { + index := excelFile.NewSheet("Sheet1") + // sheetName := excelFile.GetSheetName(1) + excelFile.SetSheetName("Sheet1", sheetConfig.Title) + //} else { + // excelFile.NewSheet(sheetConfig.Title) + //} isMemberStruct := typeInfo.Kind() == reflect.Struct colWithList := make([]float64, len(sheetConfig.CaptionList)) if isMemberStruct { @@ -63,9 +65,9 @@ func Obj2Excel(sheetList []*Obj2ExcelSheetConfig) []byte { for i := 0; i < valueInfo.Len(); i++ { for col, index := range indexSlice { str := fmt.Sprint(reflect.Indirect(valueInfo.Index(i)).FieldByIndex(index).Interface()) - // if colWith := float64(len(str)); colWith > colWithList[col] { - // colWithList[col] = colWith - // } + //// if colWith := float64(len(str)); colWith > colWithList[col] { + //// colWithList[col] = colWith + //// } excelFile.SetCellStr(sheetConfig.Title, genAxis(i+1, col), str) } } @@ -104,6 +106,7 @@ func Obj2Excel(sheetList []*Obj2ExcelSheetConfig) []byte { // colName, _ := excelize.ColumnNumberToName(col + 1) // excelFile.SetColWidth(sheetConfig.Title, colName, colName, colWithList[col]) // } + excelFile.SetActiveSheet(index) } buf := &bytes.Buffer{} excelFile.Write(buf) diff --git a/business/jxutils/tasksch/parallel_task.go b/business/jxutils/tasksch/parallel_task.go index f99361328..a396b84cc 100644 --- a/business/jxutils/tasksch/parallel_task.go +++ b/business/jxutils/tasksch/parallel_task.go @@ -80,6 +80,7 @@ func NewParallelTask2(taskName string, config *ParallelConfig, ctx *jxcontext.Co if config.ParallelCount > MaxParallelCount { config.ParallelCount = MaxParallelCount } + //?? realItemList := utils.Interface2Slice(itemList) jobList := jxutils.SplitSlice(realItemList, config.BatchSize) jobListLen := len(jobList) diff --git a/business/model/sku.go b/business/model/sku.go index c43017da4..85f560d70 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -92,6 +92,9 @@ var ( SkuStatusDeleted: "删除", SkuStatusDontSale: "下架", SkuStatusNormal: "上架", + 2: "删除", + 3: "不可售", + 4: "可售", } ) diff --git a/controllers/temp_op.go b/controllers/temp_op.go index 21dc1f573..7ce1617d3 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -292,6 +292,25 @@ func (c *TempOpController) CheckSkuDiffBetweenJxAndVendor() { }) } +// @Title 京西平台和其他平台商品的对比Test +// @Description 对比Test +// @Param token header string true "认证token" +// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3)" +// @Param storeIDs formData string false "京西门店ID列表" +// @Success 200 {object} controllers.CallResult +// @Failure 404 User not found +// @router /StaticBlock [post] +func (c *TempOpController) StaticBlock() { + c.callCheckSkuDiffBetweenJxAndVendor(func(params *tTempopCheckSkuDiffBetweenJxAndVendorParams) (retVal interface{}, errCode string, err error) { + 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 + }) +} + // @Title 通过订单创建消费者用户 // @Description 通过订单创建消费者用户 // @Param token header string true "认证token" diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 869d0f9b1..e9e136500 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -2520,6 +2520,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"], + beego.ControllerComments{ + Method: "StaticBlock", + Router: `/StaticBlock`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"], beego.ControllerComments{ Method: "TestIt",