给数据加锁

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 ( import (
"time" "time"
"fmt" "fmt"
"sync"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
@@ -17,7 +18,7 @@ import (
const ( const (
canWriteTolocal = false canWriteTolocal = false
parallelCount = 10 parallelCount = 5
fileExt = ".xlsx" fileExt = ".xlsx"
diffFileName = "export/京西和平台商品差异" diffFileName = "export/京西和平台商品差异"
) )
@@ -38,11 +39,17 @@ var (
"京西可售状态", "京西可售状态",
"平台可售状态", "平台可售状态",
} }
diffData map[int][]DiffData //diffData map[int][]DiffData
diffData DiffDataLock
jdAllSkuInfoMap map[int]*partner.SkuNameInfo jdAllSkuInfoMap map[int]*partner.SkuNameInfo
jdAllSkuInfoList []*partner.StoreSkuInfo jdAllSkuInfoList []*partner.StoreSkuInfo
) )
type DiffDataLock struct {
diffDataMap map[int][]DiffData
locker sync.RWMutex
}
type DiffData struct { type DiffData struct {
JxStoreID string `json:"京西门店ID"` JxStoreID string `json:"京西门店ID"`
VendorStoreID string `json:"平台门店ID"` VendorStoreID string `json:"平台门店ID"`
@@ -54,6 +61,16 @@ type DiffData struct {
VendorStatus string `json:"平台可售状态"` 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 { func GetFilterJxSkuInfoMap(jxSkuInfoList []*StoreSkuNameExt) map[int]*StoreSkuNameExt {
filterJxSkuInfoMap := make(map[int]*StoreSkuNameExt) filterJxSkuInfoMap := make(map[int]*StoreSkuNameExt)
for _, value := range jxSkuInfoList { for _, value := range jxSkuInfoList {
@@ -137,11 +154,13 @@ func CompareJxAndJd(vendorID int, storeIDStr, vendorStoreID, storeName string,
vendorSkuStatusName := GetSkuStatusName(vendorSkuInfo.SkuList[0].Status) vendorSkuStatusName := GetSkuStatusName(vendorSkuInfo.SkuList[0].Status)
if jxSkuStatusName != vendorSkuStatusName || jxSkuDetailName != vendorSkuDetailName { if jxSkuStatusName != vendorSkuStatusName || jxSkuDetailName != vendorSkuDetailName {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, vendorSkuDetailName, jxSkuStatusName, vendorSkuStatusName} 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 { } else {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, "", jxSkuStatusName, ""} 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 { for skuID, _ := range filterJdSkuInfoMap {
@@ -153,7 +172,8 @@ func CompareJxAndJd(vendorID int, storeIDStr, vendorStoreID, storeName string,
jxSkuInfo := filterJxSkuInfoMap[skuID] jxSkuInfo := filterJxSkuInfoMap[skuID]
if jxSkuInfo == nil { if jxSkuInfo == nil {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", vendorSkuDetailName, "", vendorSkuStatusName} 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) vendorSkuStatusName := GetSkuStatusName(vendorSkuInfo.SkuList[0].Status)
if jxSkuStatusName != vendorSkuStatusName || jxSkuDetailName != vendorSkuDetailName { if jxSkuStatusName != vendorSkuStatusName || jxSkuDetailName != vendorSkuDetailName {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, vendorSkuDetailName, jxSkuStatusName, vendorSkuStatusName} 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 { } else {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, jxSkuDetailName, "", jxSkuStatusName, ""} 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 { for skuID, vendorSkuInfo := range filterVendorSkuInfoMap {
@@ -188,7 +210,8 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
jxSkuInfo := filterJxSkuInfoMap[skuID] jxSkuInfo := filterJxSkuInfoMap[skuID]
if jxSkuInfo == nil { if jxSkuInfo == nil {
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", vendorSkuDetailName, "", vendorSkuStatusName} 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) baseapi.SugarLogger.Errorf("CheckSkuDiffBetweenJxAndVendor GetStores error:%v", err)
} else { } else {
GetJdAllSkuInfo() 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) { taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step { switch step {
case 0: case 0:
@@ -277,7 +301,7 @@ func CheckSkuDiffBetweenJxAndVendor(vendorIDList []int, storeIDList []int) {
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor taskParallel error:%v", err) baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor taskParallel error:%v", err)
} }
case 1: case 1:
WriteToExcel(task, diffData) WriteToExcel(task, diffData.diffDataMap)
endProcessTime := time.Now().Unix() endProcessTime := time.Now().Unix()
diff := endProcessTime - startProcessTime diff := endProcessTime - startProcessTime
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now()) baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now())