diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6f836f1f9..9936f75ee 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2946,7 +2946,6 @@ func GetCellForFocusStoreSkus(db *dao.DaoDB, rowNum int, row []string, sheetPara func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { var ( skuNameMap = make(map[int][]*StoreSkuBindSkuInfo) - storeIDs []int result1 []interface{} ) db := dao.GetDB() @@ -2955,9 +2954,6 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - for _, v := range storeList { - storeIDs = append(storeIDs, v.ID) - } for _, v := range skuList { skuNameMap[v.NameID] = append(skuNameMap[v.NameID], &StoreSkuBindSkuInfo{ SkuID: v.ID, @@ -3019,67 +3015,94 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin return hint, err } -func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context) (err error) { +func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() - var skuBindInfoList []*StoreSkuBindInfo + var ( + skuBindInfoList []*StoreSkuBindInfo + result1 []interface{} + ) storeList, err := dao.GetStoreList(db, nil, nil, "") - for _, v := range storeList { - var ( - skuName []*model.SkuName - skuNameMap = make(map[int]int) - ) - sql := ` - SELECT DISTINCT a.name_id id - FROM sku a - LEFT JOIN (SELECT DISTINCT b.name_id - FROM store_sku_bind a - JOIN sku b ON a.sku_id = b.id - WHERE a.deleted_at = ? - AND store_id = ?)b ON a.name_id = b.name_id - WHERE a.status = ? - AND a.deleted_at = ? - AND b.name_id IS NULL - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - v.ID, - model.SkuStatusNormal, - utils.DefaultTimeValue, - } - err = dao.GetRows(db, &skuName, sql, sqlParams...) - for _, v := range skuName { - skuNameMap[v.ID] = v.ID - } - skuNameAndPlaceList, err2 := GetTopSkusByCityCode(ctx, v.CityCode, v.ID) - if err2 != nil { - return err2 - } - var payPercentage int - if v.PayPercentage < 50 { - payPercentage = 70 - } else { - payPercentage = v.PayPercentage - } - if len(skuNameAndPlaceList) > 0 { - for _, vv := range skuNameAndPlaceList { - if skuNameMap[vv.ID] != 0 { - priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) - if err == nil && len(priceReferList) > 0 { - storeSkuBindInfo := &StoreSkuBindInfo{ - StoreID: v.ID, - NameID: vv.ID, - UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100, - IsFocus: 1, - IsSale: 0, + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + v := batchItemList[0].(*model.Store) + var ( + skuName []*model.SkuName + skuNameMap = make(map[int]int) + ) + sql := ` + SELECT DISTINCT a.name_id id + FROM sku a + LEFT JOIN (SELECT DISTINCT b.name_id + FROM store_sku_bind a + JOIN sku b ON a.sku_id = b.id + WHERE a.deleted_at = ? + AND store_id = ?)b ON a.name_id = b.name_id + WHERE a.status = ? + AND a.deleted_at = ? + AND b.name_id IS NULL + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + v.ID, + model.SkuStatusNormal, + utils.DefaultTimeValue, + } + err = dao.GetRows(db, &skuName, sql, sqlParams...) + for _, v := range skuName { + skuNameMap[v.ID] = v.ID + } + skuNameAndPlaceList, err2 := GetTopSkusByCityCode(ctx, v.CityCode, v.ID) + if err2 != nil { + return retVal, err2 + } + var payPercentage int + if v.PayPercentage < 50 { + payPercentage = 70 + } else { + payPercentage = v.PayPercentage + } + if len(skuNameAndPlaceList) > 0 { + for _, vv := range skuNameAndPlaceList { + if skuNameMap[vv.ID] != 0 { + priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) + if err == nil && len(priceReferList) > 0 { + storeSkuBindInfo := &StoreSkuBindInfo{ + StoreID: v.ID, + NameID: vv.ID, + UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100, + IsFocus: 1, + IsSale: 0, + } + skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo) + } } - skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo) } } + return retVal, err } + taskParallel := tasksch.NewParallelTask("自动关注畅销品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList) + tasksch.HandleTask(taskParallel, task, true).Run() + result1, _ = taskParallel.GetResult(0) + case 2: + var skuBindInfos []*StoreSkuBindInfo + for _, v := range result1 { + skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) + } + UpdateStoresSkusByBind(ctx, skuBindInfos, isAsync, isContinueWhenError) } + return result, err } - UpdateStoresSkusByBind(ctx, skuBindInfoList, true, true) - return err + taskSeq := tasksch.NewSeqTask2("自动关注畅销品", ctx, isContinueWhenError, taskSeqFunc, 3) + tasksch.HandleTask(taskSeq, nil, true).Run() + if !isAsync { + _, err = taskSeq.GetResult(0) + hint = "1" + } else { + hint = taskSeq.GetID() + } + return hint, err } func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync bool) (err error) { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index d010b5b2d..fba24eaad 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1176,7 +1176,7 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at, t4.ebai_id, t4.mtwm_id, t4.ebai_sync_status, t4.mtwm_sync_status, - t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price + t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit FROM sku a JOIN sku_name t1 ON a.name_id = t1.id AND t1.deleted_at = ? JOIN store_sku_bind t4 ON t4.sku_id = a.id AND t4.deleted_at = ?