From 53a194a135198e33f5e0150cf414ad6e714f5abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 5 Nov 2019 16:47:43 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8C=89=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 49 +++++++++++++++++++++++++++ business/model/dao/dao_order.go | 49 +++++++++++++++++++++++++++ controllers/jx_order.go | 17 ++++++++++ routers/commentsRouter_controllers.go | 9 +++++ 4 files changed, 124 insertions(+) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index b1c52f003..f46447cf7 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -1,14 +1,19 @@ package orderman import ( + "errors" "fmt" + "math" "strings" "time" + "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" @@ -605,3 +610,47 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st }, "UpdateOrderFields orderID:%s failed with error:%v", order.VendorOrderID, err) return err } + +func RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, toDate string, isAsync, isContinueWhenError bool) (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)) + } + 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) { + 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)) + } + } + return retVal, err + }, actStoreSkuList) + tasksch.HandleTask(task1, task, true).Run() + case 1: + num2, err2 := dao.UpdateGoodOrderEaringPrice(db, fromDateParm, toDateParm) + if err2 != nil && !isContinueWhenError { + return "", err2 + } else { + globals.SugarLogger.Debug(fmt.Sprintf("更新goods_order , 行数:%d, 时间: %v 至 %v", num2, fromDateParm, toDateParm)) + } + } + return result, err + }, 2) + tasksch.HandleTask(task, nil, true).Run() + if !isAsync { + _, err = task.GetResult(0) + } + return err +} diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 5933c8406..020856b5f 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -589,3 +589,52 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } + +func UpdateOrderSkuEariningPrice(db *DaoDB, actStoreSku2 *model.ActStoreSku2, fromDateParm, toDateParm time.Time) (num int64, err error) { + sql := ` + UPDATE order_sku t1 + JOIN goods_order tt1 ON tt1.vendor_order_id = t1.vendor_order_id + AND tt1.vendor_id = ? + AND t1.sku_id = ? + AND tt1.jx_store_id = ? + AND tt1.order_created_at BETWEEN ? and ? + SET t1.earning_price = ?,t1.store_sub_id = ? + WHERE t1.store_sub_id = 0 + AND t1.earning_price <> 0 + ` + sqlParams := []interface{}{ + actStoreSku2.VendorID, + actStoreSku2.SkuID, + actStoreSku2.StoreID, + fromDateParm, + toDateParm, + actStoreSku2.EarningPrice, + actStoreSku2.ActID, + } + return ExecuteSQL(db, sql, sqlParams...) +} + +func UpdateGoodOrderEaringPrice(db *DaoDB, fromDateParm, toDateParm time.Time) (num int64, err error) { + sql := ` + UPDATE goods_order t1 + JOIN( + SELECT + IF(t0.jx_store_id > 0, t0.jx_store_id, t0.store_id) store_id, + t0.vendor_id, + t0.vendor_order_id, + CAST(SUM(t1.count * IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, 70) / 100)) AS SIGNED) earning_price + FROM goods_order t0 + JOIN order_sku t1 ON t1.vendor_order_id = t0.vendor_order_id AND t1.vendor_id = t0.vendor_id + LEFT JOIN store t5 ON t5.id = IF(t0.jx_store_id <> 0, t0.jx_store_id, t0.store_id) + WHERE t0.order_created_at BETWEEN ? AND ? + GROUP BY 1,2,3 + ) t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id + SET t1.earning_price = t2.earning_price + WHERE t1.earning_price <> t2.earning_price + ` + sqlParams := []interface{}{ + fromDateParm, + toDateParm, + } + return ExecuteSQL(db, sql, sqlParams...) +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 703b4571c..a2d2320f5 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -741,6 +741,23 @@ func (c *OrderController) AmendMissingOrders() { }) } +// @Title 同步刷新历史订单的结算价按订单 +// @Description 同步刷新历史订单的结算价按订单 +// @Param token header string true "认证token" +// @Param fromDate formData string true "订单起始日期" +// @Param toDate formData string true "订单结束日期" +// @Param isAsync formData bool true "是否异步操作" +// @Param isContinueWhenError formData bool false "单个失败是否继续,缺省true" +// @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) + return retVal, "", err + }) +} + // @Title 商家主动发起部分退款售后 // @Description 商家主动发起部分退款售后 // @Param token header string true "认证token" diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index c8a8106c4..a4d2a9e54 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -918,6 +918,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], + beego.ControllerComments{ + Method: "RefreshHistoryOrdersEarningPrice", + Router: `/RefreshHistoryOrdersEarningPrice`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], beego.ControllerComments{ Method: "RefreshOrderFinancial", From cf85ed0dd278d8b88e783cd2ba7bf3d9e6558fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 5 Nov 2019 18:17:08 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E7=BB=93=E7=AE=97=E4=BB=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 32 ++++++++++++++++++--------- business/model/dao/dao_order.go | 20 +++++++++++++++++ controllers/jx_order.go | 3 ++- 3 files changed, 44 insertions(+), 11 deletions(-) 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 }) } From 5c94299f6c8bd0b5a32fc6d38f92ba2035bddfab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 5 Nov 2019 18:35:45 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 0f601a198..7ab3f68e8 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -596,8 +596,6 @@ func GetOrdersByCreateTime(db *DaoDB, fromDateParm, toDateParm time.Time, vendor 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, @@ -620,7 +618,6 @@ func UpdateOrderSkuEariningPrice(db *DaoDB, actStoreSku2 *model.ActStoreSku2, fr AND tt1.order_created_at BETWEEN ? and ? SET t1.earning_price = ?,t1.store_sub_id = ? WHERE t1.store_sub_id = 0 - AND t1.earning_price <> 0 ` sqlParams := []interface{}{ actStoreSku2.VendorID, From 42db76c4eaf5574e2b83b057eecefcd62eaeca61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 09:19:33 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E4=BB=B7=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 79 +++++++++++++++------------ business/model/dao/dao_order.go | 18 ------ controllers/jx_order.go | 4 +- 3 files changed, 45 insertions(+), 56 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 737775a91..da729ccc8 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "math" - "strconv" "strings" "time" @@ -375,28 +374,35 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao. skuIDMap[skuID] = 1 } } + updateSingleOrderEarningPrice(order, db) + } + return nil +} - if len(skuIDMap) > 0 { - actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{order.VendorID}, []int{jxStoreID}, jxutils.IntMap2List(skuIDMap), order.OrderCreatedAt, order.OrderCreatedAt) - 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 { - for _, v := range orderSkus { - if skuID := jxutils.GetSkuIDFromOrderSku(v); skuID > 0 { - if actStoreSku := actStoreSkuMap.GetActStoreSku(jxStoreID, skuID, order.VendorID); actStoreSku != nil { - v.EarningPrice = actStoreSku.EarningPrice - if true { //v.StoreSubName != "" { // 之前这里为什么要加判断? - v.StoreSubID = actStoreSku.ActID - } +func updateSingleOrderEarningPrice(order *model.GoodsOrder, db *dao.DaoDB) { + jxStoreID := jxutils.GetShowStoreIDFromOrder(order) + skuIDMap := make(map[int]int) + for _, v := range order.Skus { + skuIDMap[v.SkuID] = 1 + } + if len(skuIDMap) > 0 { + actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{order.VendorID}, []int{jxStoreID}, jxutils.IntMap2List(skuIDMap), order.OrderCreatedAt, order.OrderCreatedAt) + if err != nil { + globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for error:%v", err) + } + if actStoreSkuMap := jxutils.NewActStoreSkuMap(actStoreSkuList, false); actStoreSkuMap != nil { + for _, v := range order.Skus { + if skuID := jxutils.GetSkuIDFromOrderSku(v); skuID > 0 { + if actStoreSku := actStoreSkuMap.GetActStoreSku(jxStoreID, skuID, order.VendorID); actStoreSku != nil { + v.EarningPrice = actStoreSku.EarningPrice + if true { //v.StoreSubName != "" { // 之前这里为什么要加判断? + v.StoreSubID = actStoreSku.ActID } } } } } } - return nil } func (c *OrderManager) updateOrderOtherInfo(order *model.GoodsOrder, db *dao.DaoDB) (err error) { @@ -612,7 +618,7 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, toDate string, isAsync, isContinueWhenError bool, vendorOrderId string) (err error) { +func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, toDate string, isAsync, isContinueWhenError bool, vendorOrderId int) (err error) { db := dao.GetDB() fromDateParm := utils.Str2Time(fromDate) toDateParm := utils.Str2Time(toDate) @@ -620,35 +626,36 @@ func RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, fromDate string, t if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 10 { 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)) - } + + orderList, _ := dao.QueryOrders(db, []int{vendorOrderId}, 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.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 { - 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)) + v := batchItemList[0].(*model.GoodsOrder) + order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID) + updateSingleOrderEarningPrice(order, db) + for _, orderSku := range order.Skus { + actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{v.VendorID}, []int{v.StoreID}, []int{orderSku.SkuID}, v.OrderCreatedAt, v.OrderCreatedAt) + 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 { + 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 - }, orderSkus) + }, orderList) 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 7ab3f68e8..f04d2ea40 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -590,24 +590,6 @@ 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 ? - ` - 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 fcf9cf29e..5149fcc4a 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -748,13 +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 "订单号(测试用)" +// @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.RefreshHistoryOrdersEarningPrice(params.Ctx, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError, params.VendorOrderId) + err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError, params.VendorOrderId) return retVal, "", err }) } From 0a9ec200066431bd04c3ba51edeb42c85797c78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 09:40:19 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 26 +++++++++----------------- business/model/dao/dao_order.go | 12 ++++++------ 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index da729ccc8..6552734f2 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -637,32 +637,24 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, v := batchItemList[0].(*model.GoodsOrder) order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID) updateSingleOrderEarningPrice(order, db) - for _, orderSku := range order.Skus { - actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{v.VendorID}, []int{v.StoreID}, []int{orderSku.SkuID}, v.OrderCreatedAt, v.OrderCreatedAt) - if err != nil { - globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for error:%v", err) - return "", err + for _, value := range order.Skus { + dao.Begin(db) + _, err := dao.UpdateOrderSkuEariningPrice(db, value, v.StoreID, fromDateParm, toDateParm) + if err == nil{ + dao.Commit(db) } - if actStoreSkuMap := jxutils.NewActStoreSkuMap(actStoreSkuList, false); actStoreSkuMap != nil { - 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)) - } - } + if err != nil && !isContinueWhenError { + dao.Rollback(db) + return "", err } } return retVal, err }, orderList) tasksch.HandleTask(task1, task, true).Run() case 1: - num2, err2 := dao.UpdateGoodOrderEaringPrice(db, fromDateParm, toDateParm) + _, err2 := dao.UpdateGoodOrderEaringPrice(db, fromDateParm, toDateParm) if err2 != nil && !isContinueWhenError { return "", err2 - } else { - globals.SugarLogger.Debug(fmt.Sprintf("更新goods_order , 行数:%d, 时间: %v 至 %v", num2, fromDateParm, toDateParm)) } } return result, err diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index f04d2ea40..c1274e932 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -590,7 +590,7 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } -func UpdateOrderSkuEariningPrice(db *DaoDB, actStoreSku2 *model.ActStoreSku2, fromDateParm, toDateParm time.Time) (num int64, err error) { +func UpdateOrderSkuEariningPrice(db *DaoDB, skus *model.OrderSku, storeID int, fromDateParm, toDateParm time.Time) (num int64, err error) { sql := ` UPDATE order_sku t1 JOIN goods_order tt1 ON tt1.vendor_order_id = t1.vendor_order_id @@ -602,13 +602,13 @@ func UpdateOrderSkuEariningPrice(db *DaoDB, actStoreSku2 *model.ActStoreSku2, fr WHERE t1.store_sub_id = 0 ` sqlParams := []interface{}{ - actStoreSku2.VendorID, - actStoreSku2.SkuID, - actStoreSku2.StoreID, + skus.VendorID, + skus.SkuID, + storeID, fromDateParm, toDateParm, - actStoreSku2.EarningPrice, - actStoreSku2.ActID, + skus.EarningPrice, + skus.StoreSubID, } return ExecuteSQL(db, sql, sqlParams...) } From 89740b5451dc7a45b4f903f29eb99eac4e494699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 10:12:34 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 6552734f2..45ef08056 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -628,6 +628,9 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, } orderList, _ := dao.QueryOrders(db, []int{vendorOrderId}, 0, fromDateParm, toDateParm) + if len(orderList) == 0 { + return errors.New(fmt.Sprintf("未查询到订单!时间范围:[%v] 至 [%v]", fromDate, toDate)) + } task := tasksch.NewSeqTask("按订单刷新历史订单结算价", ctx, func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { @@ -640,7 +643,7 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, for _, value := range order.Skus { dao.Begin(db) _, err := dao.UpdateOrderSkuEariningPrice(db, value, v.StoreID, fromDateParm, toDateParm) - if err == nil{ + if err == nil { dao.Commit(db) } if err != nil && !isContinueWhenError { From bec26311fb419598641ce301a3586827ae5b3e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 10:20:17 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 4 ++-- business/model/dao/dao_order.go | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 45ef08056..3c84f20ed 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -627,7 +627,7 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, return errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) } - orderList, _ := dao.QueryOrders(db, []int{vendorOrderId}, 0, fromDateParm, toDateParm) + orderList, _ := dao.QueryOrders(db, []int{}, 0, fromDateParm, toDateParm) if len(orderList) == 0 { return errors.New(fmt.Sprintf("未查询到订单!时间范围:[%v] 至 [%v]", fromDate, toDate)) } @@ -642,7 +642,7 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, updateSingleOrderEarningPrice(order, db) for _, value := range order.Skus { dao.Begin(db) - _, err := dao.UpdateOrderSkuEariningPrice(db, value, v.StoreID, fromDateParm, toDateParm) + _, err := dao.UpdateOrderSkuEariningPrice(db, value, v.StoreID, fromDateParm, toDateParm, vendorOrderId) if err == nil { dao.Commit(db) } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index c1274e932..cd8f46a51 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -590,7 +590,7 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } -func UpdateOrderSkuEariningPrice(db *DaoDB, skus *model.OrderSku, storeID int, fromDateParm, toDateParm time.Time) (num int64, err error) { +func UpdateOrderSkuEariningPrice(db *DaoDB, skus *model.OrderSku, storeID int, fromDateParm, toDateParm time.Time, vendorOrderId int) (num int64, err error) { sql := ` UPDATE order_sku t1 JOIN goods_order tt1 ON tt1.vendor_order_id = t1.vendor_order_id @@ -600,6 +600,7 @@ func UpdateOrderSkuEariningPrice(db *DaoDB, skus *model.OrderSku, storeID int, f AND tt1.order_created_at BETWEEN ? and ? SET t1.earning_price = ?,t1.store_sub_id = ? WHERE t1.store_sub_id = 0 + AND tt1.vendor_order_id = ? ` sqlParams := []interface{}{ skus.VendorID, @@ -609,6 +610,7 @@ func UpdateOrderSkuEariningPrice(db *DaoDB, skus *model.OrderSku, storeID int, f toDateParm, skus.EarningPrice, skus.StoreSubID, + vendorOrderId, } return ExecuteSQL(db, sql, sqlParams...) } From 186f19e81b45eba3ffacf9945ac8eb104d23c4a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 14:32:18 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 66 ++++++++++++++++----------- business/jxutils/jxutils.go | 2 + business/model/dao/dao_order.go | 50 -------------------- 3 files changed, 41 insertions(+), 77 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 3c84f20ed..6ad721615 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -262,7 +262,7 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao order.VendorStatus = orderStatus.VendorStatus order.StatusTime = orderStatus.StatusTime - jxutils.RefreshOrderSkuRelated(order) + // jxutils.RefreshOrderSkuRelated(order) } } } @@ -425,22 +425,22 @@ func (c *OrderManager) updateOrderOtherInfo(order *model.GoodsOrder, db *dao.Dao } if err = c.updateOrderSkuOtherInfo(order, db, payPercentage); err == nil { jxutils.RefreshOrderSkuRelated(order) - caculateOrderEarningPrice(order, payPercentage) + // caculateOrderEarningPrice(order, payPercentage) } return err } // 计算结算给门店的金额 -func caculateOrderEarningPrice(order *model.GoodsOrder, storePayPercentage int) { - order.EarningPrice = 0 - for _, v := range order.Skus { - skuEarningPrice := v.EarningPrice - if skuEarningPrice == 0 { - skuEarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage) - } - order.EarningPrice += skuEarningPrice * int64(v.Count) - } -} +// func caculateOrderEarningPrice(order *model.GoodsOrder, storePayPercentage int) { +// order.EarningPrice = 0 +// for _, v := range order.Skus { +// skuEarningPrice := v.EarningPrice +// if skuEarningPrice == 0 { +// skuEarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage) +// } +// order.EarningPrice += skuEarningPrice * int64(v.Count) +// } +// } func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.DaoDB) (isDuplicated bool, order *model.GoodsOrder, err error) { globals.SugarLogger.Debugf("addOrderStatus refOrderID:%s, orderID:%s", orderStatus.RefVendorOrderID, orderStatus.VendorOrderID) @@ -628,9 +628,6 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, } orderList, _ := dao.QueryOrders(db, []int{}, 0, fromDateParm, toDateParm) - if len(orderList) == 0 { - return errors.New(fmt.Sprintf("未查询到订单!时间范围:[%v] 至 [%v]", fromDate, toDate)) - } task := tasksch.NewSeqTask("按订单刷新历史订单结算价", ctx, func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { @@ -638,30 +635,45 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, 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) - for _, value := range order.Skus { - dao.Begin(db) - _, err := dao.UpdateOrderSkuEariningPrice(db, value, v.StoreID, fromDateParm, toDateParm, vendorOrderId) - if err == nil { - dao.Commit(db) + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } } - if err != nil && !isContinueWhenError { + }() + 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() - case 1: - _, err2 := dao.UpdateGoodOrderEaringPrice(db, fromDateParm, toDateParm) - if err2 != nil && !isContinueWhenError { - return "", err2 - } } return result, err - }, 2) + }, 1) tasksch.HandleTask(task, nil, true).Run() if !isAsync { _, err = task.GetResult(0) diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 549df3cda..7ae7f7bc0 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -526,6 +526,7 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder { order.VendorPrice = 0 order.ShopPrice = 0 order.Weight = 0 + order.EarningPrice = 0 for _, sku := range order.Skus { if sku.SkuID > math.MaxInt32 { sku.SkuID = 0 @@ -538,6 +539,7 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder { order.SalePrice += sku.SalePrice * int64(sku.Count) order.VendorPrice += sku.VendorPrice * int64(sku.Count) order.ShopPrice += sku.ShopPrice * int64(sku.Count) + order.EarningPrice += sku.EarningPrice * int64(sku.Count) order.Weight += sku.Weight * sku.Count } return order diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index cd8f46a51..5933c8406 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -589,53 +589,3 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } - -func UpdateOrderSkuEariningPrice(db *DaoDB, skus *model.OrderSku, storeID int, fromDateParm, toDateParm time.Time, vendorOrderId int) (num int64, err error) { - sql := ` - UPDATE order_sku t1 - JOIN goods_order tt1 ON tt1.vendor_order_id = t1.vendor_order_id - AND tt1.vendor_id = ? - AND t1.sku_id = ? - AND tt1.jx_store_id = ? - AND tt1.order_created_at BETWEEN ? and ? - SET t1.earning_price = ?,t1.store_sub_id = ? - WHERE t1.store_sub_id = 0 - AND tt1.vendor_order_id = ? - ` - sqlParams := []interface{}{ - skus.VendorID, - skus.SkuID, - storeID, - fromDateParm, - toDateParm, - skus.EarningPrice, - skus.StoreSubID, - vendorOrderId, - } - return ExecuteSQL(db, sql, sqlParams...) -} - -func UpdateGoodOrderEaringPrice(db *DaoDB, fromDateParm, toDateParm time.Time) (num int64, err error) { - sql := ` - UPDATE goods_order t1 - JOIN( - SELECT - IF(t0.jx_store_id > 0, t0.jx_store_id, t0.store_id) store_id, - t0.vendor_id, - t0.vendor_order_id, - CAST(SUM(t1.count * IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, 70) / 100)) AS SIGNED) earning_price - FROM goods_order t0 - JOIN order_sku t1 ON t1.vendor_order_id = t0.vendor_order_id AND t1.vendor_id = t0.vendor_id - LEFT JOIN store t5 ON t5.id = IF(t0.jx_store_id <> 0, t0.jx_store_id, t0.store_id) - WHERE t0.order_created_at BETWEEN ? AND ? - GROUP BY 1,2,3 - ) t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id - SET t1.earning_price = t2.earning_price - WHERE t1.earning_price <> t2.earning_price - ` - sqlParams := []interface{}{ - fromDateParm, - toDateParm, - } - return ExecuteSQL(db, sql, sqlParams...) -} From 365cad0bfb5d72c0e7a830b76288d1924ca649dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 15:16:41 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 91 ++++++++------------ business/jxcallback/orderman/orderman_ext.go | 2 +- business/model/dao/dao_order.go | 6 +- controllers/jx_order.go | 9 +- 4 files changed, 48 insertions(+), 60 deletions(-) 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 }) } From 3bf3f7ab5d6aefb4a8d3fea220d56bc83f26948d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 6 Nov 2019 15:29:42 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 13 ++++++------- business/model/dao/dao_order.go | 6 +++--- controllers/jx_order.go | 8 ++++---- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index e65200662..bf5b74acf 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -613,7 +613,7 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st return err } -func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, vendorOrderId string, vendorIDs []int, storeId int, fromDate string, toDate string, isAsync, isContinueWhenError bool) (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() fromDateParam := utils.Str2Time(fromDate) toDateParam := utils.Str2Time(toDate) @@ -621,9 +621,9 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, if math.Ceil(toDateParam.Sub(fromDateParam).Hours()/24) > 10 { return errors.New(fmt.Sprintf("查询间隔时间不允许大于10天!时间范围:[%v] 至 [%v]", fromDate, toDate)) } - orderList, _ := dao.QueryOrders(db, vendorOrderId, vendorIDs, storeId, fromDateParam, toDateParam) + 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)) + 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) { @@ -641,19 +641,18 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context, } }() for _, value := range order.Skus { - if _, err := dao.UpdateEntity(db, value, "EarningPrice", "StoreSubID"); err != nil { + if _, err = dao.UpdateEntity(db, value, "EarningPrice", "StoreSubID"); err != nil { return "", err } } jxutils.RefreshOrderSkuRelated(order) - if _, err2 := dao.UpdateEntity(db, order, "EarningPrice"); err2 != nil { - return "", err2 + if _, err = dao.UpdateEntity(db, order, "EarningPrice"); err != nil { + return "", err } dao.Commit(db) return retVal, err }, orderList) tasksch.HandleTask(task, nil, true).Run() - if !isAsync { _, err = task.GetResult(0) } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index ec5978f4b..d0b247ea2 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, vendorOrderId string, 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,9 +44,9 @@ func QueryOrders(db *DaoDB, vendorOrderId string, vendorIDs []int, storeID int, sqlParams := []interface{}{ orderCreatedAtBegin, } - if vendorOrderId != "" { + if vendorOrderID != "" { sql += " AND t1.vendor_order_id = ?" - sqlParams = append(sqlParams, vendorOrderId) + sqlParams = append(sqlParams, vendorOrderID) } if len(vendorIDs) > 0 { sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" diff --git a/controllers/jx_order.go b/controllers/jx_order.go index fcb9a51c9..6150990ef 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -746,9 +746,9 @@ 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 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" // @Success 200 {object} controllers.CallResult @@ -758,7 +758,7 @@ func (c *OrderController) RefreshHistoryOrdersEarningPrice() { c.callRefreshHistoryOrdersEarningPrice(func(params *tOrderRefreshHistoryOrdersEarningPriceParams) (retVal interface{}, errCode string, err error) { 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) + err = orderman.FixedOrderManager.RefreshHistoryOrdersEarningPrice(params.Ctx, params.VendorOrderID, vendorIDList, params.StoreID, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError) } return retVal, "", err })