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