对比程序差异修改

This commit is contained in:
苏尹岚
2019-11-04 10:54:16 +08:00
parent 3c0017c338
commit a7aee90c62

View File

@@ -28,6 +28,7 @@ const (
fileExt = ".xlsx" fileExt = ".xlsx"
) )
//错误类型
const ( const (
DatAanalyse1 = "京东商品库直接创建,京西无数据" DatAanalyse1 = "京东商品库直接创建,京西无数据"
DatAanalyse2 = "京东商品库未创建成功(可能无经营许可等) " DatAanalyse2 = "京东商品库未创建成功(可能无经营许可等) "
@@ -35,6 +36,7 @@ const (
DatAanalyse4 = "商品可售状态不同 " DatAanalyse4 = "商品可售状态不同 "
DatAanalyse5 = "京西商品库没有,平台商品库有 " DatAanalyse5 = "京西商品库没有,平台商品库有 "
DatAanalyse6 = "京西商品库有,平台商品库没有" DatAanalyse6 = "京西商品库有,平台商品库没有"
DatAanalyse7 = "同步状态异常"
) )
var ( var (
@@ -96,8 +98,8 @@ var (
multiStoreAllSkuInfoMap map[int]map[int]*partner.SkuNameInfo multiStoreAllSkuInfoMap map[int]map[int]*partner.SkuNameInfo
multiStoreAllSkuInfoList map[int][]*partner.StoreSkuInfo multiStoreAllSkuInfoList map[int][]*partner.StoreSkuInfo
skuNameInfoList []*partner.SkuNameInfo
filterCloseSkuIds []int filterCloseSkuIds []int
) )
type DiffDataLock struct { type DiffDataLock struct {
@@ -175,7 +177,7 @@ func GetMultiStoreAllSkuInfoList(vendorID int) []*partner.StoreSkuInfo {
return multiStoreAllSkuInfoList[vendorID] return multiStoreAllSkuInfoList[vendorID]
} }
func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) (allSkuNameInfoList []*partner.SkuNameInfo) { func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) {
InitMultiStoreData() InitMultiStoreData()
filterCloseSkuIds = filterCloseSkuIds[0:0] filterCloseSkuIds = filterCloseSkuIds[0:0]
for vendorID, _ := range vendorNameList { for vendorID, _ := range vendorNameList {
@@ -188,6 +190,7 @@ func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) (al
if partner.IsMultiStore(vendorID) { if partner.IsMultiStore(vendorID) {
multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler)
allSkuNameInfoList, err := multiHandler.GetSkus(ctx, 0, "", "") allSkuNameInfoList, err := multiHandler.GetSkus(ctx, 0, "", "")
skuNameInfoList = allSkuNameInfoList
if err != nil { if err != nil {
baseapi.SugarLogger.Errorf("GetMultiStoreAllSkuInfo error:%v", err) baseapi.SugarLogger.Errorf("GetMultiStoreAllSkuInfo error:%v", err)
} else { } else {
@@ -206,7 +209,6 @@ func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) (al
} }
} }
} }
return allSkuNameInfoList
} }
func GetFilterJxSkuInfoMap(jxSkuInfoList []*StoreSkuNameExt) map[int]*StoreSkuNameExt { func GetFilterJxSkuInfoMap(jxSkuInfoList []*StoreSkuNameExt) map[int]*StoreSkuNameExt {
@@ -311,8 +313,16 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
for skuID, jxSkuInfo := range filterJxSkuInfoMap { for skuID, jxSkuInfo := range filterJxSkuInfoMap {
reason := `` reason := ``
skuIDStr := utils.Int2Str(skuID) skuIDStr := utils.Int2Str(skuID)
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) var jxSkuDetailName string
jxSkuDetailName := jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus2[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus2[0].SkuSpecQuality, jxSkuInfo.Skus2[0].SkuSpecUnit, 0) //多规格商品不用比较数量单位
if jxSkuInfo.IsSpu == 0 {
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus2[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus2[0].SkuSpecQuality, jxSkuInfo.Skus2[0].SkuSpecUnit, 0)
} else {
//jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..)
jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus2[0].Comment, "", jxSkuInfo.Skus2[0].SkuSpecQuality, "", 0)
}
//jxSkuSaleStatus : 商品状态 skustatus 优先级高于 StoreSkuStatus //jxSkuSaleStatus : 商品状态 skustatus 优先级高于 StoreSkuStatus
jxSkuSaleStatus := jxutils.MergeSkuStatus(jxSkuInfo.Skus2[0].SkuStatus, jxSkuInfo.Skus2[0].StoreSkuStatus) jxSkuSaleStatus := jxutils.MergeSkuStatus(jxSkuInfo.Skus2[0].SkuStatus, jxSkuInfo.Skus2[0].StoreSkuStatus)
jxSkuSaleStatusName := GetSkuSaleStatusName(jxSkuSaleStatus) jxSkuSaleStatusName := GetSkuSaleStatusName(jxSkuSaleStatus)
@@ -349,6 +359,12 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
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, reason}
diffData.AppendData(vendorID, outPutData) diffData.AppendData(vendorID, outPutData)
} }
if !isSaleStatusDiff && !isNameDiff {
if status != 0 {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, syncStatus, toBeCreate, toBeDel, jxSkuDetailName, vendorSkuDetailName, jxSkuSaleStatusName, vendorSkuSaleStatusName, DatAanalyse7}
diffData.AppendData(vendorID, outPutData)
}
}
} else { } else {
if isFilterToBeCreateAndNotSale && model.IsSyncStatusNeedCreate(status) && !IsSkuCanSale(jxSkuSaleStatus) { if isFilterToBeCreateAndNotSale && model.IsSyncStatusNeedCreate(status) && !IsSkuCanSale(jxSkuSaleStatus) {
continue continue
@@ -378,7 +394,7 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
} }
} }
func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool, allSkuNameInfoList []*partner.SkuNameInfo) { func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool) {
db := dao.GetDB() db := dao.GetDB()
for vendorID, _ := range vendorNameList { for vendorID, _ := range vendorNameList {
//filter for vendorID //filter for vendorID
@@ -388,7 +404,10 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool
} }
} }
if partner.IsMultiStore(vendorID) { if partner.IsMultiStore(vendorID) {
filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(allSkuNameInfoList) // multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler)
// allSkuNameInfoList, _ := multiHandler.GetSkus(ctx, 0, "", "")
filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(skuNameInfoList)
skuNameInfoList = skuNameInfoList[0:0]
skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{}) skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{})
filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList) filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList)
for skuid, jxSkuInfo := range filterJxSkuInfoMap2 { for skuid, jxSkuInfo := range filterJxSkuInfoMap2 {
@@ -444,7 +463,6 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool
//入口函数,校验本地商品京西和其他平台的差异 //入口函数,校验本地商品京西和其他平台的差异
func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) { func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
var allSkuNameInfoList []*partner.SkuNameInfo
startProcessTime := time.Now().Unix() startProcessTime := time.Now().Unix()
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor start time: %v", time.Now()) baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor start time: %v", time.Now())
vendorMap := make(map[int]bool) vendorMap := make(map[int]bool)
@@ -461,11 +479,11 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
//获取所有多门店平台的商品信息 //获取所有多门店平台的商品信息
//1.循环传进来的平台id如果是多门店的平台查询该门店京东到家平台的所有商品 //1.循环传进来的平台id如果是多门店的平台查询该门店京东到家平台的所有商品
//2.为multiStoreAllSkuInfoList 和 multiStoreAllSkuInfoMap 赋值 //2.为multiStoreAllSkuInfoList 和 multiStoreAllSkuInfoMap 赋值
allSkuNameInfoList = GetMultiStoreAllSkuInfo(ctx, vendorMap) GetMultiStoreAllSkuInfo(ctx, vendorMap)
case 1: case 1:
//对比京西库和多门店平台的库的信息 //对比京西库和多门店平台的库的信息
depotDiffData.InitData2() depotDiffData.InitData2()
CompareJxAndMultiVenderDepot(ctx, vendorMap, allSkuNameInfoList) CompareJxAndMultiVenderDepot(ctx, vendorMap)
case 2: case 2:
//1.获取京西本地所有门店信息 store、place、user表联查 jxStoreInfoList //1.获取京西本地所有门店信息 store、place、user表联查 jxStoreInfoList
//2.过滤所有门店信息只留下传进来的vendorMapstoreIDMap中对应的平台和门台信息 filterStoreList //2.过滤所有门店信息只留下传进来的vendorMapstoreIDMap中对应的平台和门台信息 filterStoreList