From e64e0cc4fb1a943992c03d882ddcbb78909232e8 Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Wed, 7 Aug 2019 15:18:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E6=95=B0=E6=8D=AE=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku_check.go | 44 +++++++++++++++++++------ 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index 054fe5407..39eda1a1f 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -3,6 +3,7 @@ package cms import ( "time" "fmt" + "sync" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" @@ -17,7 +18,7 @@ import ( const ( canWriteTolocal = false - parallelCount = 10 + parallelCount = 5 fileExt = ".xlsx" diffFileName = "export/京西和平台商品差异" ) @@ -38,11 +39,17 @@ var ( "京西可售状态", "平台可售状态", } - diffData map[int][]DiffData + //diffData map[int][]DiffData + diffData DiffDataLock jdAllSkuInfoMap map[int]*partner.SkuNameInfo jdAllSkuInfoList []*partner.StoreSkuInfo ) +type DiffDataLock struct { + diffDataMap map[int][]DiffData + locker sync.RWMutex +} + type DiffData struct { JxStoreID string `json:"京西门店ID"` VendorStoreID string `json:"平台门店ID"` @@ -54,6 +61,16 @@ type DiffData struct { VendorStatus string `json:"平台可售状态"` } +func (d *DiffDataLock) AppendData(vendorID int, diffData DiffData) { + d.locker.Lock() + defer d.locker.Unlock() + d.diffDataMap[vendorID] = append(d.diffDataMap[vendorID], diffData) +} + +func (d *DiffDataLock) InitData() { + d.diffDataMap = make(map[int][]DiffData) +} + func GetFilterJxSkuInfoMap(jxSkuInfoList []*StoreSkuNameExt) map[int]*StoreSkuNameExt { filterJxSkuInfoMap := make(map[int]*StoreSkuNameExt) for _, value := range jxSkuInfoList { @@ -137,11 +154,13 @@ func CompareJxAndJd(vendorID int, storeIDStr, vendorStoreID, storeName string, vendorSkuStatusName := GetSkuStatusName(vendorSkuInfo.SkuList[0].Status) if jxSkuStatusName != vendorSkuStatusName || jxSkuDetailName != vendorSkuDetailName { outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, vendorSkuDetailName, jxSkuStatusName, vendorSkuStatusName} - diffData[vendorID] = append(diffData[vendorID], outPutData) + //diffData[vendorID] = append(diffData[vendorID], outPutData) + diffData.AppendData(vendorID, outPutData) } } else { outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, "", jxSkuStatusName, ""} - diffData[vendorID] = append(diffData[vendorID], outPutData) + //diffData[vendorID] = append(diffData[vendorID], outPutData) + diffData.AppendData(vendorID, outPutData) } } for skuID, _ := range filterJdSkuInfoMap { @@ -153,7 +172,8 @@ func CompareJxAndJd(vendorID int, storeIDStr, vendorStoreID, storeName string, jxSkuInfo := filterJxSkuInfoMap[skuID] if jxSkuInfo == nil { outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", vendorSkuDetailName, "", vendorSkuStatusName} - diffData[vendorID] = append(diffData[vendorID], outPutData) + //diffData[vendorID] = append(diffData[vendorID], outPutData) + diffData.AppendData(vendorID, outPutData) } } } @@ -173,11 +193,13 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin vendorSkuStatusName := GetSkuStatusName(vendorSkuInfo.SkuList[0].Status) if jxSkuStatusName != vendorSkuStatusName || jxSkuDetailName != vendorSkuDetailName { outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, vendorSkuDetailName, jxSkuStatusName, vendorSkuStatusName} - diffData[vendorID] = append(diffData[vendorID], outPutData) + //diffData[vendorID] = append(diffData[vendorID], outPutData) + diffData.AppendData(vendorID, outPutData) } } else { outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, "", jxSkuStatusName, ""} - diffData[vendorID] = append(diffData[vendorID], outPutData) + //diffData[vendorID] = append(diffData[vendorID], outPutData) + diffData.AppendData(vendorID, outPutData) } } for skuID, vendorSkuInfo := range filterVendorSkuInfoMap { @@ -188,7 +210,8 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin jxSkuInfo := filterJxSkuInfoMap[skuID] if jxSkuInfo == nil { outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", vendorSkuDetailName, "", vendorSkuStatusName} - diffData[vendorID] = append(diffData[vendorID], outPutData) + //diffData[vendorID] = append(diffData[vendorID], outPutData) + diffData.AppendData(vendorID, outPutData) } } } @@ -210,7 +233,8 @@ func CheckSkuDiffBetweenJxAndVendor(vendorIDList []int, storeIDList []int) { baseapi.SugarLogger.Errorf("CheckSkuDiffBetweenJxAndVendor GetStores error:%v", err) } else { GetJdAllSkuInfo() - diffData = make(map[int][]DiffData) + //diffData = make(map[int][]DiffData) + diffData.InitData() taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: @@ -277,7 +301,7 @@ func CheckSkuDiffBetweenJxAndVendor(vendorIDList []int, storeIDList []int) { baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor taskParallel error:%v", err) } case 1: - WriteToExcel(task, diffData) + WriteToExcel(task, diffData.diffDataMap) endProcessTime := time.Now().Unix() diff := endProcessTime - startProcessTime baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now())