刷新历史订单结算价

This commit is contained in:
苏尹岚
2019-11-06 14:32:18 +08:00
parent bec26311fb
commit 186f19e81b
3 changed files with 41 additions and 77 deletions

View File

@@ -262,7 +262,7 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
order.VendorStatus = orderStatus.VendorStatus order.VendorStatus = orderStatus.VendorStatus
order.StatusTime = orderStatus.StatusTime 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 { if err = c.updateOrderSkuOtherInfo(order, db, payPercentage); err == nil {
jxutils.RefreshOrderSkuRelated(order) jxutils.RefreshOrderSkuRelated(order)
caculateOrderEarningPrice(order, payPercentage) // caculateOrderEarningPrice(order, payPercentage)
} }
return err return err
} }
// 计算结算给门店的金额 // 计算结算给门店的金额
func caculateOrderEarningPrice(order *model.GoodsOrder, storePayPercentage int) { // func caculateOrderEarningPrice(order *model.GoodsOrder, storePayPercentage int) {
order.EarningPrice = 0 // order.EarningPrice = 0
for _, v := range order.Skus { // for _, v := range order.Skus {
skuEarningPrice := v.EarningPrice // skuEarningPrice := v.EarningPrice
if skuEarningPrice == 0 { // if skuEarningPrice == 0 {
skuEarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage) // skuEarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage)
} // }
order.EarningPrice += skuEarningPrice * int64(v.Count) // order.EarningPrice += skuEarningPrice * int64(v.Count)
} // }
} // }
func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.DaoDB) (isDuplicated bool, order *model.GoodsOrder, err error) { 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) 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) 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, task := tasksch.NewSeqTask("按订单刷新历史订单结算价", ctx,
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step { switch step {
@@ -638,30 +635,45 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context,
task1 := tasksch.NewParallelTask("更新order_sku", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, task1 := tasksch.NewParallelTask("更新order_sku", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*model.GoodsOrder) v := batchItemList[0].(*model.GoodsOrder)
db := dao.GetDB()
order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID) order, _ := c.loadOrder(v.VendorOrderID, "", v.VendorID)
updateSingleOrderEarningPrice(order, db) updateSingleOrderEarningPrice(order, db)
for _, value := range order.Skus { dao.Begin(db)
dao.Begin(db) defer func() {
_, err := dao.UpdateOrderSkuEariningPrice(db, value, v.StoreID, fromDateParm, toDateParm, vendorOrderId) if r := recover(); r != nil || err != nil {
if err == nil { dao.Rollback(db)
dao.Commit(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) dao.Rollback(db)
return "", err 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 return retVal, err
}, orderList) }, orderList)
tasksch.HandleTask(task1, task, true).Run() tasksch.HandleTask(task1, task, true).Run()
case 1:
_, err2 := dao.UpdateGoodOrderEaringPrice(db, fromDateParm, toDateParm)
if err2 != nil && !isContinueWhenError {
return "", err2
}
} }
return result, err return result, err
}, 2) }, 1)
tasksch.HandleTask(task, nil, true).Run() tasksch.HandleTask(task, nil, true).Run()
if !isAsync { if !isAsync {
_, err = task.GetResult(0) _, err = task.GetResult(0)

View File

@@ -526,6 +526,7 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder {
order.VendorPrice = 0 order.VendorPrice = 0
order.ShopPrice = 0 order.ShopPrice = 0
order.Weight = 0 order.Weight = 0
order.EarningPrice = 0
for _, sku := range order.Skus { for _, sku := range order.Skus {
if sku.SkuID > math.MaxInt32 { if sku.SkuID > math.MaxInt32 {
sku.SkuID = 0 sku.SkuID = 0
@@ -538,6 +539,7 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder {
order.SalePrice += sku.SalePrice * int64(sku.Count) order.SalePrice += sku.SalePrice * int64(sku.Count)
order.VendorPrice += sku.VendorPrice * int64(sku.Count) order.VendorPrice += sku.VendorPrice * int64(sku.Count)
order.ShopPrice += sku.ShopPrice * int64(sku.Count) order.ShopPrice += sku.ShopPrice * int64(sku.Count)
order.EarningPrice += sku.EarningPrice * int64(sku.Count)
order.Weight += sku.Weight * sku.Count order.Weight += sku.Weight * sku.Count
} }
return order return order

View File

@@ -589,53 +589,3 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList
return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) 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...)
}