同步京东商城修改

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) { func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil { if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil {
parallelCount := 5 for _, storeMap := range loopMapInfo.StoreMapList {
if model.MultiStoresVendorMap[loopMapInfo.VendorID] == 1 { if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
parallelCount = 2 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) return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
}, isContinueWhenError) }, 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) { func syncJdsStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (err error) {
var ( var (
mainSkusMap = make(map[int]*model.StoreSkuBind) mainSkusMap = make(map[int][]*dao.StoreSkuSyncInfo)
skusMap = make(map[int]*model.StoreSkuBind) skusMap = make(map[int][]*dao.StoreSkuSyncInfo)
updateList []*model.StoreSkuBind updateList []*dao.StoreSkuSyncInfo
addList []*model.StoreSkuBind addList []*dao.StoreSkuSyncInfo
skuBindInfos1 []*StoreSkuBindInfo skuBindInfos1 []*StoreSkuBindInfo
skuBindInfos2 []*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 { 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 { for _, v := range storeSkus {
skusMap[v.SkuID] = v skusMap[v.NameID] = append(mainSkusMap[v.NameID], v)
if mainSkusMap[v.SkuID] != nil && mainSkusMap[v.SkuID].Status != v.Status { }
updateList = append(updateList, mainSkusMap[v.SkuID]) 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 { for k, v := range mainSkusMap {
if skusMap[k] == nil { if skusMap[k] == nil {
if storeMap.SyncRule == 2 { 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 { if len(addList) > 0 {
for _, v := range addList { 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) _, err = UpdateStoresSkusByBind(ctx, parentTask, skuBindInfos2, isAsync, isContinueWhenError, false)
} }
return err return err
} }
func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSkuBind, isFocus bool) (skuBindInfo *StoreSkuBindInfo) { func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *dao.StoreSkuSyncInfo, isFocus bool) (skuBindInfo *StoreSkuBindInfo) {
result, err := dao.GetSkus(db, []int{storeBind.SkuID}, nil, nil, nil, nil)
if err != nil || len(result) == 0 {
return nil
}
skus := []*StoreSkuBindSkuInfo{ skus := []*StoreSkuBindSkuInfo{
&StoreSkuBindSkuInfo{ &StoreSkuBindSkuInfo{
SkuID: storeBind.SkuID, SkuID: storeBind.SkuID,
@@ -1168,12 +1173,12 @@ func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSku
} }
skuBindInfo = &StoreSkuBindInfo{ skuBindInfo = &StoreSkuBindInfo{
StoreID: storeID, StoreID: storeID,
NameID: result[0].NameID, NameID: storeBind.NameID,
} }
if isFocus { if isFocus {
skuBindInfo.IsFocus = 1 skuBindInfo.IsFocus = 1
} }
if storeBind.Status == model.SkuStatusNormal { if storeBind.StoreSkuStatus == model.SkuStatusNormal {
skus[0].IsSale = 1 skus[0].IsSale = 1
} else { } else {
skus[0].IsSale = -1 skus[0].IsSale = -1

View File

@@ -393,7 +393,7 @@ func doDailyWork() {
dao.SetStoresMapSyncStatus(dao.GetDB(), nil, nil, model.SyncFlagStoreStatus) dao.SetStoresMapSyncStatus(dao.GetDB(), nil, nil, model.SyncFlagStoreStatus)
cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true) cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true)
// syncStoreSku() syncStoreSku()
InitEx() InitEx()
cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true) cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true)
netprinter.RebindAllPrinters(jxcontext.AdminCtx, 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) { func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) {
sql := ` 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 FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id JOIN sku b ON a.sku_id = b.id
JOIN sku_name c ON b.name_id = c.id JOIN sku_name c ON b.name_id = c.id
WHERE b.name_id = ? WHERE 1=1
AND a.deleted_at = ? AND a.deleted_at = ?
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
nameID, nameID,
utils.DefaultTimeValue, utils.DefaultTimeValue,
} }
if nameID != 0 {
sql += " AND b.name_id = ?"
sqlParams = append(sqlParams, nameID)
}
if len(storeIDs) > 0 { if len(storeIDs) > 0 {
sql += " AND a.store_id in (" + GenQuestionMarks(len(storeIDs)) + ")" sql += " AND a.store_id in (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs) sqlParams = append(sqlParams, storeIDs)