From e1b7f82be3e38eab6f176710a34153970fbf5c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 4 Nov 2019 15:21:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=AF=94=E5=B7=AE=E5=BC=82=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku_check.go | 71 +++++++++++++++++++------ business/model/dao/sku.go | 2 +- business/model/sku.go | 1 + 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index c6734a1f2..d64ee26ff 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -16,7 +16,6 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" - "git.rosy.net.cn/jx-callback/business/partner/putils" "git.rosy.net.cn/jx-callback/globals" ) @@ -30,13 +29,14 @@ const ( //错误类型 const ( - DatAanalyse1 = "京东商品库直接创建,京西无数据" - DatAanalyse2 = "京东商品库未创建成功(可能无经营许可等) " + DatAanalyse1 = "京西门店未关注,应删除对应的平台门店商品" + DatAanalyse2 = "平台商品库未创建成功(可能无经营许可等) " DatAanalyse3 = "商品名不同 " DatAanalyse4 = "商品可售状态不同 " DatAanalyse5 = "京西商品库没有,平台商品库有 " DatAanalyse6 = "京西商品库有,平台商品库没有" DatAanalyse7 = "同步状态异常" + DatAanalyse8 = "平台门店未关注,应添加对应的平台门店商品" ) var ( @@ -96,10 +96,11 @@ var ( diffData DiffDataLock depotDiffData DeoptDiffDataLock - multiStoreAllSkuInfoMap map[int]map[int]*partner.SkuNameInfo - multiStoreAllSkuInfoList map[int][]*partner.StoreSkuInfo - skuNameInfoList []*partner.SkuNameInfo - filterCloseSkuIds []int + multiStoreAllSkuInfoMap map[int]map[int]*partner.SkuNameInfo + multiStoreAllSkuInfoList map[int][]*partner.StoreSkuInfo + skuNameInfoList []*partner.SkuNameInfo + filterVendorDepotUnSaleSkuIds []int + filterJxDepotUnSaleSkuIds []int ) type DiffDataLock struct { @@ -177,9 +178,21 @@ func GetMultiStoreAllSkuInfoList(vendorID int) []*partner.StoreSkuInfo { return multiStoreAllSkuInfoList[vendorID] } +//过滤掉平台下架的 +func StoreSkuFullList2BareFilter(storeSkuFull []*partner.SkuNameInfo) (bareStoreSkuList []*partner.StoreSkuInfo) { + for _, v := range storeSkuFull { + for _, v2 := range v.SkuList { + if v2.Status > model.SkuStatusDontSale { + bareStoreSkuList = append(bareStoreSkuList, &v2.StoreSkuInfo) + } + } + } + return bareStoreSkuList +} + func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) { InitMultiStoreData() - filterCloseSkuIds = filterCloseSkuIds[0:0] + filterVendorDepotUnSaleSkuIds = filterVendorDepotUnSaleSkuIds[0:0] for vendorID, _ := range vendorNameList { //filter for vendorID if len(vendorMap) > 0 { @@ -194,13 +207,13 @@ func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) { if err != nil { baseapi.SugarLogger.Errorf("GetMultiStoreAllSkuInfo error:%v", err) } else { - multiStoreAllSkuInfoList[vendorID] = putils.StoreSkuFullList2Bare(allSkuNameInfoList) //map[平台ID:[]StoreSkuInfo1,StoreSkuInfo2...] + multiStoreAllSkuInfoList[vendorID] = StoreSkuFullList2BareFilter(allSkuNameInfoList) //map[平台ID:[]StoreSkuInfo1,StoreSkuInfo2...] tempMap := make(map[int]*partner.SkuNameInfo) for _, value := range allSkuNameInfoList { for _, skuInfo := range value.SkuList { //表示平台商品库未下架的 if skuInfo.Status > model.SkuStatusDontSale { - filterCloseSkuIds = append(filterCloseSkuIds, skuInfo.SkuID) + filterVendorDepotUnSaleSkuIds = append(filterVendorDepotUnSaleSkuIds, skuInfo.SkuID) tempMap[skuInfo.SkuID] = value } } @@ -311,7 +324,6 @@ func IsSkuCanSale(saleStatus int) bool { //storeIDStr 京西商家id ,vendorStoreID 平台商家id func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName string, filterJxSkuInfoMap map[int]*StoreSkuNameExt, filterVendorSkuInfoMap map[int]*partner.SkuNameInfo) { for skuID, jxSkuInfo := range filterJxSkuInfoMap { - reason := `` skuIDStr := utils.Int2Str(skuID) var jxSkuDetailName string //多规格商品不用比较数量单位 @@ -350,6 +362,7 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin isNameDiff = false } if isSaleStatusDiff || isNameDiff { + reason := "" if isNameDiff { reason += DatAanalyse3 } @@ -369,7 +382,13 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin if isFilterToBeCreateAndNotSale && model.IsSyncStatusNeedCreate(status) && !IsSkuCanSale(jxSkuSaleStatus) { continue } - outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, "", jxSkuSaleStatusName, "", DatAanalyse2} + reason := "" + if status == 0 { + reason = DatAanalyse8 + } else { + reason = DatAanalyse2 + } + outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, "", jxSkuSaleStatusName, "", reason} diffData.AppendData(vendorID, outPutData) } } @@ -394,6 +413,19 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin } } +func FilterJxDepotUnSaleSkuID() { + db := dao.GetDB() + filterJxDepotUnSaleSkuIds = filterJxDepotUnSaleSkuIds[0:0] + skuList, _ := dao.GetSkus(db, filterVendorDepotUnSaleSkuIds, []int{}, []int{}, []int{}) + filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList) + for skuid, jxSkuInfo := range filterJxSkuInfoMap2 { + //过滤掉平台库下架,且京西库下架的商品,为下面比较门店商品用 + if jxSkuInfo.Status != model.SkuStatusDontSale { + filterJxDepotUnSaleSkuIds = append(filterJxDepotUnSaleSkuIds, skuid) + } + } +} + func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool) { db := dao.GetDB() for vendorID, _ := range vendorNameList { @@ -404,15 +436,19 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool } } if partner.IsMultiStore(vendorID) { - // multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) - // allSkuNameInfoList, _ := multiHandler.GetSkus(ctx, 0, "", "") + FilterJxDepotUnSaleSkuID() filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(skuNameInfoList) skuNameInfoList = skuNameInfoList[0:0] skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{}) filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList) for skuid, jxSkuInfo := range filterJxSkuInfoMap2 { - reason := `` - jxSkuDetailName := jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0) + var jxSkuDetailName string + //多规格商品不用比较数量单位 + if jxSkuInfo.IsSpu == 0 { + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0) + } else { + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0) + } vendorSkuInfoMap := filterVendorSkuInfoMap[skuid] jxSkuSaleStatus := jxSkuInfo.Status @@ -424,6 +460,7 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool isSaleStatusDiff := jxSkuSaleStatusName != vendorSkuSaleStatusName isNameDiff := strings.Compare(jxSkuDetailName, vendorSkuDetailName) != 0 if isNameDiff || isSaleStatusDiff { + reason := "" if isNameDiff { reason += DatAanalyse3 } @@ -507,7 +544,7 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, if isGetJxSkuInfoData == false { //only get once jx sku info list every store id isGetJxSkuInfoData = true - jxSkuInfoData, _ := GetStoreSkus(ctx, storeID, filterCloseSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) + jxSkuInfoData, _ := GetStoreSkus(ctx, storeID, filterJxDepotUnSaleSkuIds, true, "", true, false, map[string]interface{}{}, 0, -1) filterJxSkuInfoMap = GetFilterJxSkuInfoMap(jxSkuInfoData.SkuNames) //map[京西商品ID:StoreSkuNameExt] } diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index 34bc1fc8c..d48c657e2 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -51,7 +51,7 @@ func DeleteSkuNamePlace(db *DaoDB, nameID int, placeCodes []int) (num int64, err func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*model.SkuAndName, err error) { sql := ` - SELECT t1.*, t2.name, t2.unit, t2.prefix + SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu FROM sku t1 JOIN sku_name t2 ON t2.id = t1.name_id AND t2.deleted_at = ? ` diff --git a/business/model/sku.go b/business/model/sku.go index 9a06434e3..79dd52c62 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -239,6 +239,7 @@ type SkuAndName struct { Name string Unit string Prefix string + IsSpu int } // func (*Sku) TableUnique() [][]string {