diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 580f80810..e65200662 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -349,7 +349,6 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao. skumapper[v.VendorSkuID] = v } - skuIDMap := make(map[int]int) for _, v := range orderSkus { v.VendorOrderID = order.VendorOrderID v.VendorID = order.VendorID @@ -369,10 +368,6 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao. } } v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage) - - if skuID := jxutils.GetSkuIDFromOrderSku(v); skuID > 0 { - skuIDMap[skuID] = 1 - } } updateSingleOrderEarningPrice(order, db) } @@ -618,63 +613,47 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, toDate string, isAsync, isContinueWhenError bool, vendorOrderId int) (err error) { +func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderId string, vendorIDs []int, storeId int, fromDate string, toDate string, isAsync, isContinueWhenError bool) (err error) { db := dao.GetDB() - fromDateParm := utils.Str2Time(fromDate) - toDateParm := utils.Str2Time(toDate) + fromDateParam := utils.Str2Time(fromDate) + toDateParam := utils.Str2Time(toDate) //若时间间隔大于10天则不允许查询 - if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 10 { + if math.Ceil(toDateParam.Sub(fromDateParam).Hours()/24) > 10 { return errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) } - - orderList, _ := dao.QueryOrders(db, []int{}, 0, 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.GoodsOrder) - db := dao.GetDB() - order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID) - updateSingleOrderEarningPrice(order, db) - dao.Begin(db) - defer func() { - if r := recover(); r != nil || err != nil { - dao.Rollback(db) - if r != nil { - panic(r) - } - } - }() - for _, value := range order.Skus { - if _, err := dao.UpdateEntity(db, value); err != nil && !isContinueWhenError { - if !dao.IsDuplicateError(err) { - globals.SugarLogger.Warnf("On RefreshHistoryOrdersEarningPrice order.VendorOrderID:%s err:%v", order.VendorOrderID, err) - return nil, err - } - dao.Rollback(db) - return "", err - } - } - jxutils.RefreshOrderSkuRelated(order) - if _, err2 := dao.UpdateEntity(db, order); err2 != nil && !isContinueWhenError { - if !dao.IsDuplicateError(err) { - globals.SugarLogger.Warnf("On RefreshHistoryOrdersEarningPrice order.VendorOrderID:%s err:%v", order.VendorOrderID, err) - return nil, err - } - dao.Rollback(db) - return "", err2 - } - dao.Commit(db) - c.SaveOrder(order, true, db) - return retVal, err - }, orderList) - tasksch.HandleTask(task1, task, true).Run() + orderList, _ := dao.QueryOrders(db, vendorOrderId, vendorIDs, storeId, fromDateParam, toDateParam) + if len(orderList) <= 0 { + return errors.New(fmt.Sprintf("未查询到订单!,vendorOrderId : %s, 时间范围:[%v] 至 [%v]", vendorOrderId, fromDate, toDate)) + } + task := tasksch.NewParallelTask("刷新历史订单结算价", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + v := batchItemList[0].(*model.GoodsOrder) + db := dao.GetDB() + order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID) + updateSingleOrderEarningPrice(order, db) + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + for _, value := range order.Skus { + if _, err := dao.UpdateEntity(db, value, "EarningPrice", "StoreSubID"); err != nil { + return "", err + } } - return result, err - }, 1) + jxutils.RefreshOrderSkuRelated(order) + if _, err2 := dao.UpdateEntity(db, order, "EarningPrice"); err2 != nil { + return "", err2 + } + dao.Commit(db) + return retVal, err + }, orderList) tasksch.HandleTask(task, nil, true).Run() + if !isAsync { _, err = task.GetResult(0) } diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index cc7eb3abf..cfeb4dd23 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -1169,7 +1169,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if err = err2; err != nil && !isContinueWhenError { return "", err } - localOrders, err2 := dao.QueryOrders(db, vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second)) + localOrders, err2 := dao.QueryOrders(db, "", vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second)) if err = err2; err != nil { return "", err } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 5933c8406..ec5978f4b 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -36,7 +36,7 @@ type OrderSkuWithActualPayPrice struct { PayPercentage int `json:"payPercentage"` } -func QueryOrders(db *DaoDB, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) { +func QueryOrders(db *DaoDB, vendorOrderId string, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) { sql := ` SELECT t1.* FROM goods_order t1 @@ -44,6 +44,10 @@ func QueryOrders(db *DaoDB, vendorIDs []int, storeID int, orderCreatedAtBegin, o sqlParams := []interface{}{ orderCreatedAtBegin, } + if vendorOrderId != "" { + sql += " AND t1.vendor_order_id = ?" + sqlParams = append(sqlParams, vendorOrderId) + } if len(vendorIDs) > 0 { sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" sqlParams = append(sqlParams, vendorIDs) diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 5149fcc4a..fcb9a51c9 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -746,15 +746,20 @@ func (c *OrderController) AmendMissingOrders() { // @Param token header string true "认证token" // @Param fromDate formData string true "订单起始日期" // @Param toDate formData string true "订单结束日期" +// @Param vendorOrderId formData string false "订单号" +// @Param vendorIDs formData int false "平台ID列表[0,1,3]" +// @Param storeId formData int false "门店ID" // @Param isAsync formData bool true "是否异步操作" // @Param isContinueWhenError formData bool false "单个失败是否继续,缺省true" -// @Param vendorOrderId formData int 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.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError, params.VendorOrderId) + var vendorIDList []int + if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList); err == nil { + err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.VendorOrderId, vendorIDList, params.StoreId, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError) + } return retVal, "", err }) }