修复代管订单押金赔付待打款金额
This commit is contained in:
@@ -153,7 +153,7 @@ func (r *Repository) Arbitrate(ctx context.Context, adminID uint64, id uint64, r
|
||||
"order_no": order.OrderNo,
|
||||
"result": req.Result,
|
||||
"remark": req.Remark,
|
||||
"input_amount_cent": req.AmountCent,
|
||||
"input_amount_cent": arbitrationInputAmountCent(req),
|
||||
"renter_refund_amount_cent": settlement.RenterRefundAmountCent,
|
||||
"owner_income_amount_cent": settlement.OwnerIncomeAmountCent,
|
||||
"deposit_deduct_amount_cent": settlement.DepositDeductAmountCent,
|
||||
@@ -245,7 +245,7 @@ func buildActualCheckoutArbitrationSettlement(tx *gorm.DB, row model.Dispute, or
|
||||
if err != nil {
|
||||
return settlement, nil, linkedCheckout, 0, err
|
||||
}
|
||||
depositDeductAmountCent, err := arbitrationDepositDeductAmountCent(order, req)
|
||||
depositDeductAmountCent, err := arbitrationDepositDeductAmountCent(order, linkedCheckout, req)
|
||||
if err != nil {
|
||||
return settlement, nil, linkedCheckout, 0, err
|
||||
}
|
||||
@@ -299,21 +299,24 @@ func arbitrationConsumableAmountCent(order model.RentalOrder, checkout *model.Or
|
||||
return 0, ErrInvalidDispute
|
||||
}
|
||||
|
||||
func arbitrationDepositDeductAmountCent(order model.RentalOrder, req ArbitrateRequest) (int64, error) {
|
||||
func arbitrationDepositDeductAmountCent(order model.RentalOrder, checkout *model.OrderCheckout, req ArbitrateRequest) (int64, error) {
|
||||
switch req.Result {
|
||||
case "actual_settlement":
|
||||
if req.AmountCent <= 0 {
|
||||
if req.AmountCent == nil {
|
||||
if checkout != nil {
|
||||
return arbitrationCheckoutDepositDeductCent(*checkout), nil
|
||||
}
|
||||
return 0, nil
|
||||
}
|
||||
if req.AmountCent > order.DepositAmountCent {
|
||||
if *req.AmountCent < 0 || *req.AmountCent > order.DepositAmountCent {
|
||||
return 0, ErrInvalidDispute
|
||||
}
|
||||
return req.AmountCent, nil
|
||||
return *req.AmountCent, nil
|
||||
case "release_deposit":
|
||||
return 0, nil
|
||||
case "deduct_deposit", "compensate_owner":
|
||||
deductAmountCent := req.AmountCent
|
||||
if deductAmountCent <= 0 {
|
||||
deductAmountCent := arbitrationInputAmountCent(req)
|
||||
if req.AmountCent == nil || deductAmountCent <= 0 {
|
||||
deductAmountCent = order.DepositAmountCent
|
||||
}
|
||||
if deductAmountCent > order.DepositAmountCent {
|
||||
@@ -325,6 +328,23 @@ func arbitrationDepositDeductAmountCent(order model.RentalOrder, req ArbitrateRe
|
||||
}
|
||||
}
|
||||
|
||||
func arbitrationInputAmountCent(req ArbitrateRequest) int64 {
|
||||
if req.AmountCent == nil {
|
||||
return 0
|
||||
}
|
||||
return *req.AmountCent
|
||||
}
|
||||
|
||||
func arbitrationCheckoutDepositDeductCent(checkout model.OrderCheckout) int64 {
|
||||
if checkout.DepositDeductAmountCent > 0 {
|
||||
return checkout.DepositDeductAmountCent
|
||||
}
|
||||
if checkout.OtherAmountCent > 0 {
|
||||
return checkout.OtherAmountCent
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func applyArbitrationActualSettlement(order *model.RentalOrder, checkout *model.OrderCheckout, settlement ordermodule.ActualCheckoutSettlement, depositDeductAmountCent int64) {
|
||||
order.ActualCoinConsumedM = settlement.CoinConsumedM
|
||||
order.ActualPureCoinAmountCent = settlement.PureCoinAmountCent
|
||||
@@ -350,7 +370,7 @@ func applyArbitrationActualSettlement(order *model.RentalOrder, checkout *model.
|
||||
}
|
||||
|
||||
func isPlatformManagedOrder(order model.RentalOrder) bool {
|
||||
return order.SettlementMode == "platform_managed" || order.HandoffMode == "platform"
|
||||
return order.SettlementMode == "platform_managed"
|
||||
}
|
||||
|
||||
func appendPlatformManagedAdminNotification(tx *gorm.DB, order model.RentalOrder, typ string, title string, content string) error {
|
||||
@@ -459,15 +479,15 @@ func buildArbitrationSettlement(order model.RentalOrder, req ArbitrateRequest, r
|
||||
addRenterRefund(totalCent, "仲裁全额退款")
|
||||
settlement.RenterDepositRefundCent = depositAmountCent
|
||||
case "partial_refund":
|
||||
if req.AmountCent <= 0 || req.AmountCent > totalCent {
|
||||
if req.AmountCent == nil || *req.AmountCent <= 0 || *req.AmountCent > totalCent {
|
||||
return settlement, ErrInvalidDispute
|
||||
}
|
||||
addRenterRefund(req.AmountCent, "仲裁部分退款")
|
||||
addRenterRefund(*req.AmountCent, "仲裁部分退款")
|
||||
// 部分退款为合并金额,无法精确拆分租金/押金,按押金优先归类以便暂扣。
|
||||
settlement.RenterDepositRefundCent = money.MinCent(req.AmountCent, depositAmountCent)
|
||||
settlement.RenterDepositRefundCent = money.MinCent(*req.AmountCent, depositAmountCent)
|
||||
// 号主仅拿「未退租金中的号主份额 + 未退押金」,平台加价按未退租金比例预留,避免整笔剩余进号主。
|
||||
addOwnerIncome(
|
||||
partialRefundOwnerIncomeCent(rentAmountCent, ownerRentAmountCent, depositAmountCent, req.AmountCent),
|
||||
partialRefundOwnerIncomeCent(rentAmountCent, ownerRentAmountCent, depositAmountCent, *req.AmountCent),
|
||||
"仲裁剩余金额结算给号主",
|
||||
)
|
||||
case "release_deposit":
|
||||
@@ -475,8 +495,8 @@ func buildArbitrationSettlement(order model.RentalOrder, req ArbitrateRequest, r
|
||||
addRenterRefund(depositAmountCent, "仲裁释放押金给租客")
|
||||
settlement.RenterDepositRefundCent = depositAmountCent
|
||||
case "deduct_deposit", "compensate_owner":
|
||||
deductAmountCent := req.AmountCent
|
||||
if deductAmountCent <= 0 {
|
||||
deductAmountCent := arbitrationInputAmountCent(req)
|
||||
if req.AmountCent == nil || deductAmountCent <= 0 {
|
||||
deductAmountCent = depositAmountCent
|
||||
}
|
||||
if deductAmountCent > depositAmountCent {
|
||||
|
||||
Reference in New Issue
Block a user