修改门店发单和品牌发单是扣费问题

This commit is contained in:
邹宗楠
2023-05-11 10:58:50 +08:00
parent 85b2870a5e
commit 476f8c0943
26 changed files with 417 additions and 273 deletions

View File

@@ -262,9 +262,6 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m
if err != nil {
globals.SugarLogger.Debug("Get store Detail Err: ", err)
}
//门店发单的订单,取消后要退回配送费
ResetCreateWaybillFee(db, order)
}
}
@@ -453,71 +450,50 @@ func filterOrderInfo(order *model.GoodsOrder) {
order.ConsigneeAddress = strings.ReplaceAll(order.ConsigneeAddress, "·", "")
}
func ResetCreateWaybillFee(db *dao.DaoDB, order *model.GoodsOrder) (err error) {
func ResetCreateWaybillFee(db *dao.DaoDB, order *model.GoodsOrder, bill *model.Waybill) (err error) {
if db == nil {
db = dao.GetDB()
}
store, _ := dao.GetStoreDetail(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, order.VendorOrgCode)
if store != nil && store.CreateDeliveryType == model.YES { // 门店发单(非京西品牌)
// 无运单不参与退款
if order.VendorWaybillID == "" {
return err
}
// 自配送不参与退款
if order.VendorOrderID == order.VendorWaybillID {
return err
}
// 获取运单记录
orderStatusList, err := GetOrderStatusList2(order.VendorOrderID, order.VendorWaybillID, 2, order.WaybillVendorID)
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
}
isRefund := false // 默认可以退费
for _, v := range orderStatusList {
if order.WaybillVendorID == model.VendorIDMTPS && v.VendorStatus == "30" {
isRefund = true
break
}
if order.WaybillVendorID == model.VendorIDFengNiao && v.VendorStatus == "80" {
isRefund = true
break
}
if order.WaybillVendorID == model.VendorIDDada && v.VendorStatus == "3" {
isRefund = true
break
}
if deductFee == 0 {
return nil
}
if isRefund { // 骑手已经到店了,无法退款
return errors.New("骑手已到店,无法退款")
}
// 更新运单实际扣除费用
bill.ActualFee = deductFee
dao.UpdateEntity(db, bill, "ActualFee")
// 获取品牌的支付记录
orderBill, _ := dao.GetBrandBill(db, store.BrandID, order.VendorOrderID, 0, model.BrandBillFeeTypeDelivery, order.VendorWaybillID)
if len(orderBill) <= 0 {
return errors.New("无记录,不退款")
// 门店账户金额扣除
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)
}
for _, v := range orderBill {
if v.BillType == model.BrandBillTypeIncome { // 已经退款了
return errors.New("无法重复退款")
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)
}
}
// 将支出记录修改为退款记录,支付类型为收入,且类型为三方配送时:退费
newBill := &model.BrandBill{
BrandID: store.BrandID,
Price: orderBill[0].Price,
BillType: model.BrandBillTypeIncome,
FeeType: model.BrandBillFeeTypeDelivery,
VendorOrderID: orderBill[0].VendorOrderID,
OrderID: orderBill[0].OrderID,
}
dao.WrapAddIDCULEntity(newBill, "系统退费")
err = dao.CreateEntity(db, newBill)
}
return err
}
@@ -1342,7 +1318,7 @@ func MergeJdsOrders(ctx *jxcontext.Context, vendorOrderIDs []string) (vendorOrde
for _, order := range orders {
var waybill *model.Waybill
//将订单和运单取消
waybills, err := dao.GetWaybills(db, order.VendorOrderID)
waybills, err := dao.GetWaybills(db, order.VendorOrderID, nil)
if err != nil {
return "", err
}
@@ -1475,7 +1451,7 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
return "", fmt.Errorf("未查询到该订单商品!订单号:[%v]", vendorOrderID)
}
//将订单和运单取消
waybills, err := dao.GetWaybills(db, vendorOrderID)
waybills, err := dao.GetWaybills(db, vendorOrderID, nil)
if err != nil {
return "", err
}
@@ -1656,7 +1632,7 @@ func SendJdwlForJdsOrder(ctx *jxcontext.Context, vendorOrderID string) (err erro
return fmt.Errorf("订单当前状态不支持创建!")
}
waybill := &model.Waybill{}
waybills, err := dao.GetWaybills(db, vendorOrderID)
waybills, err := dao.GetWaybills(db, vendorOrderID, nil)
if err != nil {
return err
}