同步京东商城修改

This commit is contained in:
苏尹岚
2020-06-08 11:42:34 +08:00
parent 76977a56ed
commit 42f6c7426d
3 changed files with 45 additions and 36 deletions

View File

@@ -1092,21 +1092,11 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil {
parallelCount := 5
if model.MultiStoresVendorMap[loopMapInfo.VendorID] == 1 {
parallelCount = 2
for _, storeMap := range loopMapInfo.StoreMapList {
if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
err = syncJdsStoresSkus(ctx, db, nil, storeMap, isAsync, isContinueWhenError)
}
}
loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]),
tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeMap := batchItemList[0].(*model.StoreMap)
if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
err = syncJdsStoresSkus(ctx, db, task, storeMap, isAsync, isContinueWhenError)
}
return nil, err
}, loopMapInfo.StoreMapList)
t.AddChild(loopStoreTask).Run()
_, err = loopStoreTask.GetResult(0)
}
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
}, isContinueWhenError)
@@ -1115,28 +1105,47 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
func syncJdsStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (err error) {
var (
mainSkusMap = make(map[int]*model.StoreSkuBind)
skusMap = make(map[int]*model.StoreSkuBind)
updateList []*model.StoreSkuBind
addList []*model.StoreSkuBind
mainSkusMap = make(map[int][]*dao.StoreSkuSyncInfo)
skusMap = make(map[int][]*dao.StoreSkuSyncInfo)
updateList []*dao.StoreSkuSyncInfo
addList []*dao.StoreSkuSyncInfo
skuBindInfos1 []*StoreSkuBindInfo
skuBindInfos2 []*StoreSkuBindInfo
)
storeSkusMain, err := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
storeSkusMain, err := dao.GetStoreSkusByNameIDs(db, []int{model.JdShopMainStoreID}, 0)
for _, v := range storeSkusMain {
mainSkusMap[v.SkuID] = v
mainSkusMap[v.NameID] = append(mainSkusMap[v.NameID], v)
}
storeSkus, err := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, nil)
storeSkus, err := dao.GetStoreSkusByNameIDs(db, []int{storeMap.StoreID}, 0)
for _, v := range storeSkus {
skusMap[v.SkuID] = v
if mainSkusMap[v.SkuID] != nil && mainSkusMap[v.SkuID].Status != v.Status {
updateList = append(updateList, mainSkusMap[v.SkuID])
skusMap[v.NameID] = append(mainSkusMap[v.NameID], v)
}
for k, v := range skusMap {
if mainSkusMap[k] != nil {
flag := false
for _, storeSku := range v {
if storeSku.StoreSkuStatus == model.StoreSkuBindStatusNormal {
flag = true
}
}
if !flag {
continue
}
for _, storeSku := range v {
for _, storeSkuMain := range mainSkusMap[k] {
if storeSkuMain.StoreSkuStatus == model.StoreSkuBindStatusNormal && storeSku.StoreSkuStatus == model.StoreSkuBindStatusDontSale {
updateList = append(updateList, storeSkuMain)
}
}
}
}
}
for k, v := range mainSkusMap {
if skusMap[k] == nil {
if storeMap.SyncRule == 2 {
addList = append(addList, v)
for _, storeSkuMain := range v {
addList = append(addList, storeSkuMain)
}
}
}
}
@@ -1149,18 +1158,14 @@ func syncJdsStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch
if len(addList) > 0 {
for _, v := range addList {
skuBindInfos2 = append(skuBindInfos2, buildStoreSkuBindInfo(db, storeMap.StoreID, v, false))
skuBindInfos2 = append(skuBindInfos2, buildStoreSkuBindInfo(db, storeMap.StoreID, v, true))
}
_, err = UpdateStoresSkusByBind(ctx, parentTask, skuBindInfos2, isAsync, isContinueWhenError, false)
}
return err
}
func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSkuBind, isFocus bool) (skuBindInfo *StoreSkuBindInfo) {
result, err := dao.GetSkus(db, []int{storeBind.SkuID}, nil, nil, nil, nil)
if err != nil || len(result) == 0 {
return nil
}
func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *dao.StoreSkuSyncInfo, isFocus bool) (skuBindInfo *StoreSkuBindInfo) {
skus := []*StoreSkuBindSkuInfo{
&StoreSkuBindSkuInfo{
SkuID: storeBind.SkuID,
@@ -1168,12 +1173,12 @@ func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSku
}
skuBindInfo = &StoreSkuBindInfo{
StoreID: storeID,
NameID: result[0].NameID,
NameID: storeBind.NameID,
}
if isFocus {
skuBindInfo.IsFocus = 1
}
if storeBind.Status == model.SkuStatusNormal {
if storeBind.StoreSkuStatus == model.SkuStatusNormal {
skus[0].IsSale = 1
} else {
skus[0].IsSale = -1

View File

@@ -393,7 +393,7 @@ func doDailyWork() {
dao.SetStoresMapSyncStatus(dao.GetDB(), nil, nil, model.SyncFlagStoreStatus)
cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true)
// syncStoreSku()
syncStoreSku()
InitEx()
cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true)
netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true)

View File

@@ -965,17 +965,21 @@ func DeleteSkuNameExPrefixOverdue(db *DaoDB) (num int64, err error) {
func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) {
sql := `
SELECT a.*,c.unit,c.name
SELECT a.*, c.unit, c.name, b.name_id, a.status store_sku_status
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id
JOIN sku_name c ON b.name_id = c.id
WHERE b.name_id = ?
WHERE 1=1
AND a.deleted_at = ?
`
sqlParams := []interface{}{
nameID,
utils.DefaultTimeValue,
}
if nameID != 0 {
sql += " AND b.name_id = ?"
sqlParams = append(sqlParams, nameID)
}
if len(storeIDs) > 0 {
sql += " AND a.store_id in (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)