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