给数据加锁

This commit is contained in:
Rosy-zhudan
2019-08-07 15:18:10 +08:00
parent f5208eea28
commit e64e0cc4fb

View File

@@ -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())