diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index e85044885..32f34ba0e 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -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 diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index ba0396db0..88538c5e4 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -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) diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 404a477e4..af7bee441 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -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)