刷新历史订单结算价
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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...)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user