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...) -}