修改门店发单和品牌发单是扣费问题
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user