给数据加锁
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user