This commit is contained in:
邹宗楠
2023-05-16 14:51:50 +08:00
parent 842ce37243
commit aaca0e21af
2 changed files with 103 additions and 20 deletions

View File

@@ -458,38 +458,115 @@ func ResetCreateWaybillFee(db *dao.DaoDB, order *model.GoodsOrder, bill *model.W
if bill.WaybillVendorID != model.VendorIDMTPS && bill.WaybillVendorID != model.VendorIDDada && bill.WaybillVendorID != model.VendorIDFengNiao && bill.WaybillVendorID != model.VendorIDUUPT {
return nil
}
// 订单被取消了,所有运单应该也被取消了,检查是否退还配送费
// 1.查询订单创建的所有运单,三方配送运单(达达,蜂鸟,uu,美团配送),平台自配送订单不参与
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID); handlerInfo != nil {
// 这一步必须要做,可能不是最后取消订单,需要更新违约金和取消状态
deductFee, err := handlerInfo.Handler.GetDeliverLiquidatedDamages(bill.VendorOrderID, bill.VendorWaybillID)
if err != nil {
return err
}
if deductFee == 0 {
return nil
if deductFee != model.NO {
// 更新运单实际扣除费用
bill.ActualFee = deductFee
bill.DesiredFee = deductFee
_, err = dao.UpdateEntity(db, bill, "ActualFee", "DesiredFee")
}
// 更新运单实际扣除费用
bill.ActualFee = deductFee
dao.UpdateEntity(db, bill, "ActualFee")
// 门店账户金额扣除
// 获取订单运单详情列表
store, _ := dao.GetStoreDetail(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, order.VendorOrgCode)
// 门店发单,扣除门店余额
if store != nil && store.CreateDeliveryType == model.YES {
partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(jxcontext.AdminCtx, store.ID, int(deductFee), partner.StoreAcctTypeExpendCreateWaybillDeductFee, bill.VendorOrderID, bill.VendorWaybillID, 0)
// 门店发单,支付运单违约金
if store != nil && store.CreateDeliveryType == model.YES && deductFee != model.NO {
err = partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(jxcontext.AdminCtx, store.ID, int(deductFee), partner.StoreAcctTypeExpendCreateWaybillDeductFee, bill.VendorOrderID, bill.VendorWaybillID, 0)
if err != nil {
globals.SugarLogger.Errorf("InsertStoreAcctIncomeAndUpdateStoreAcctBalance 483 : %v", err)
}
}
if store != nil && store.CreateDeliveryType == model.NO {
// 获取运单的支出记录
orderBill, _ := dao.GetBrandBill(db, store.BrandID, order.VendorOrderID, model.BrandBillTypeExpend, model.BrandBillFeeTypeDelivery, order.VendorWaybillID)
if len(orderBill) == 0 {
partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID)
} else {
// 退回扣除的配送费
partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, orderBill[0].Price, model.BrandBillTypeIncome, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID)
// 支出配送费违约金
partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID)
err = partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID)
if err != nil {
globals.SugarLogger.Errorf("InsertBrandBill 489 : %v", err)
}
//// 获取运单的支出记录
//orderBill, _ := dao.GetBrandBill(db, store.BrandID, order.VendorOrderID, model.BrandBillTypeExpend, model.BrandBillFeeTypeDelivery, order.VendorWaybillID)
//if len(orderBill) == 0 {
//} else {
// // 退回扣除的配送费
// partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, orderBill[0].Price, model.BrandBillTypeIncome, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID)
// // 支出配送费违约金
// partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID)
//}
}
// 所有运单停止调度之后才开始退还余额
bills, err := dao.GetWaybills(db, order.VendorOrderID, nil)
if err != nil {
return err
}
// 所有取消的运单
cancelWaybill := make(map[string]*model.Waybill, 0)
//finishWaybill := make(map[string]*model.Waybill, 0)
//deliveryWaybill := make(map[string]*model.Waybill, 0)
for _, v := range bills {
if v.Status == model.WaybillStatusCanceled && v.VendorWaybillID != bill.VendorWaybillID {
cancelWaybill[v.VendorWaybillID] = v
}
//if (v.Status == model.WaybillStatusDelivered || v.Status == model.OrderStatusFinished) && v.VendorWaybillID != bill.VendorWaybillID {
// finishWaybill[v.VendorWaybillID] = v
//}
//if v.Status < model.WaybillStatusDelivered && v.VendorWaybillID != bill.VendorWaybillID {
// deliveryWaybill[v.VendorOrderID] = v
//}
}
cancelWaybill[bill.VendorWaybillID] = bill
// 还有配送中的订单,暂不退款
//if len(deliveryWaybill) != model.NO {
// return nil
//}
//// 如果已经有完成订单
//if len(finishWaybill) != model.NO {
// var cancelDeductFee int64 = 0
// var tipFee int64 = 0
// for _, v := range cancelWaybill {
// cancelDeductFee += v.ActualFee
// tipFee += v.TipFee
// }
//
//}
// 已经全部运单取消,退款结算
if len(bills) == len(cancelWaybill) {
// 门店结算,全部支出
if store.CreateDeliveryType == model.YES {
// 此订单支出的费用
expendType := []int{partner.StoreAcctTypeExpendCreateWaybillEx, partner.StoreAcctTypeExpendCreateWaybillTip, partner.StoreAcctTypeExpendCreateWaybill2ndMore, partner.StoreAcctTypeExpendCreateWaybillDeductFee, partner.StoreAcctTypeRealFeeExpend}
billExpend, err := dao.GetStoreAcctExpendTotal(db, store.ID, expendType, bill.VendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue)
if err != nil {
globals.SugarLogger.Errorf("GetStoreAcctExpendTotal 545 err :%v", err)
return err
}
// 此订单退还的费用
incomeType := []int{partner.StoreAcctTypeRealFeeIncome, partner.StoreAcctTypeIncomeCancelTemp, partner.StoreAcctTypeIncomeCancelReal}
billIncome, err := dao.GetStoreAcctIncomeTotal(db, store.ID, incomeType, bill.VendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue)
if err != nil {
globals.SugarLogger.Errorf("GetStoreAcctIncomeTotal 551 err :%v", err)
return err
}
var allFee int = 0
for _, v := range bills {
allFee += int(v.ActualFee)
allFee += int(v.TipFee)
}
globals.SugarLogger.Errorf("计算错误:订单支出费用应该=退还费用+运单支出费用,支出费用:%d,已经退还费用:%d,剩余退还费用:%d", billExpend, billIncome, billExpend-billIncome)
if allFee != billExpend-billIncome {
globals.SugarLogger.Errorf("计算错误:订单支出费用应该=退还费用+运单支出费用,支出费用:%d,已经退还费用:%d,剩余退还费用:%d", billExpend, billIncome, billExpend-billIncome)
}
}
// 品牌结算
if store.CreateDeliveryType == model.NO {
}
}
}

View File

@@ -2,7 +2,10 @@ package defsch
import (
"fmt"
"git.rosy.net.cn/baseapi/platformapi/dadaapi"
"git.rosy.net.cn/baseapi/platformapi/fnpsapi"
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
"git.rosy.net.cn/baseapi/platformapi/uuptapi"
"git.rosy.net.cn/jx-callback/business/jxutils/smsmsg"
"math/rand"
"strings"
@@ -637,7 +640,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
//}
// 当运单时三方配送时,美团状态20
if bill.WaybillVendorID == model.VendorIDDada || bill.WaybillVendorID == model.VendorIDMTPS || bill.WaybillVendorID == model.VendorIDFengNiao || bill.WaybillVendorID == model.VendorIDUUPT {
if (bill.VendorStatus == utils.Int64ToStr(mtpsapi.OrderStatusPickedUp) && bill.OrderVendorID == model.VendorIDMTWM) || bill.Status == model.WaybillStatusCourierArrived {
if (bill.VendorStatus == utils.Int64ToStr(mtpsapi.OrderStatusPickedUp) && bill.OrderVendorID == model.VendorIDMTWM) ||
(bill.VendorStatus == utils.Int64ToStr(dadaapi.OrderStatusDelivering) && bill.OrderVendorID == model.VendorIDDada) ||
(bill.VendorStatus == utils.Int64ToStr(fnpsapi.OrderStatusArrived) && bill.OrderVendorID == model.VendorIDFengNiao) ||
(bill.VendorStatus == uuptapi.StateArrivedStore && bill.OrderVendorID == model.VendorIDUUPT) {
if storeDetail, err2 := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, ""); err2 == nil {
if storeDetail.CreateDeliveryType == model.YES {
s.updateStoreAccount(order, bill)