刷新历史订单结算价

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

View File

@@ -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

View File

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