diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index f46447cf7..737775a91 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "math" + "strconv" "strings" "time" @@ -611,32 +612,43 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, toDate string, isAsync, isContinueWhenError bool) (err error) { +func RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, toDate string, isAsync, isContinueWhenError bool, vendorOrderId string) (err error) { db := dao.GetDB() fromDateParm := utils.Str2Time(fromDate) toDateParm := utils.Str2Time(toDate) //若时间间隔大于10天则不允许查询 if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 10 { - return errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!: 时间范围:[%v] 至 [%v]", fromDate, toDate)) + return errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) + } + orderSkus, _ := dao.GetOrdersByCreateTime(db, fromDateParm, toDateParm, vendorOrderId) + if len(orderSkus) == 0 { + return errors.New(fmt.Sprintf("未查询到订单!时间范围:[%v] 至 [%v]", fromDate, toDate)) } - actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{}, []int{}, []int{}, fromDateParm, toDateParm) task := tasksch.NewSeqTask("按订单刷新历史订单结算价", ctx, func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: task1 := tasksch.NewParallelTask("更新order_sku", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + v := batchItemList[0].(*model.OrderSku) + storeID, _ := strconv.Atoi(utils.Int64ToStr(v.ID)) + actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{v.VendorID}, []int{storeID}, []int{v.SkuID}, fromDateParm, toDateParm) + if err != nil { + globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for error:%v", err) + return "", err + } if actStoreSkuMap := jxutils.NewActStoreSkuMap(actStoreSkuList, false); actStoreSkuMap != nil { - v := batchItemList[0].(*model.ActStoreSku2) - num, err := dao.UpdateOrderSkuEariningPrice(db, v, fromDateParm, toDateParm) - if err != nil && !isContinueWhenError { - return "", err - } else { - globals.SugarLogger.Debug(fmt.Sprintf("更新order_sku , 行数:%d, storeid :%d ,skuid : %d, vendoreid : %d, earningPrice : %v, store_sub_id : %d", num, v.StoreID, v.SkuID, v.VendorID, v.EarningPrice, v.ActID)) + for _, value := range actStoreSkuList { + num, err := dao.UpdateOrderSkuEariningPrice(db, value, fromDateParm, toDateParm) + if err != nil && !isContinueWhenError { + return "", err + } else { + globals.SugarLogger.Debug(fmt.Sprintf("更新order_sku , 行数:%d, storeid :%d ,skuid : %d, vendoreid : %d, earningPrice : %v, store_sub_id : %d", num, value.StoreID, value.SkuID, value.VendorID, value.EarningPrice, value.ActID)) + } } } return retVal, err - }, actStoreSkuList) + }, orderSkus) tasksch.HandleTask(task1, task, true).Run() case 1: num2, err2 := dao.UpdateGoodOrderEaringPrice(db, fromDateParm, toDateParm) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 020856b5f..0f601a198 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -590,6 +590,26 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } +func GetOrdersByCreateTime(db *DaoDB, fromDateParm, toDateParm time.Time, vendorOrderId string) (orderSkus []*model.OrderSku, err error) { + sql := ` + SELECT a.*,b.sku_id + FROM goods_order a + JOIN order_sku b ON a.vendor_order_id = b.vendor_order_id + WHERE a.order_created_at BETWEEN ? and ? + AND b.earning_price <> 0 + AND b.store_sub_id = 0 + ` + sqlParams := []interface{}{ + fromDateParm, + toDateParm, + } + if vendorOrderId != "" { + sql += ` AND a.id = ?` + sqlParams = append(sqlParams, vendorOrderId) + } + return orderSkus, GetRows(db, &orderSkus, sql, sqlParams) +} + func UpdateOrderSkuEariningPrice(db *DaoDB, actStoreSku2 *model.ActStoreSku2, fromDateParm, toDateParm time.Time) (num int64, err error) { sql := ` UPDATE order_sku t1 diff --git a/controllers/jx_order.go b/controllers/jx_order.go index a2d2320f5..fcf9cf29e 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -748,12 +748,13 @@ func (c *OrderController) AmendMissingOrders() { // @Param toDate formData string true "订单结束日期" // @Param isAsync formData bool true "是否异步操作" // @Param isContinueWhenError formData bool false "单个失败是否继续,缺省true" +// @Param vendorOrderId formData string false "订单号(测试用)" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /RefreshHistoryOrdersEarningPrice [post] func (c *OrderController) RefreshHistoryOrdersEarningPrice() { c.callRefreshHistoryOrdersEarningPrice(func(params *tOrderRefreshHistoryOrdersEarningPriceParams) (retVal interface{}, errCode string, err error) { - err = orderman.RefreshHistoryOrdersEarningPrice(params.Ctx, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError) + err = orderman.RefreshHistoryOrdersEarningPrice(params.Ctx, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError, params.VendorOrderId) return retVal, "", err }) }