优化订单支付

This commit is contained in:
yml
2026-06-08 23:56:25 +08:00
parent 870ea72996
commit a2a0489158
20 changed files with 884 additions and 5 deletions
@@ -3,6 +3,7 @@ package dispute
import (
"encoding/json"
"errors"
"fmt"
"math"
"time"
@@ -268,6 +269,16 @@ func (r *Repository) Arbitrate(adminID uint64, id uint64, req ArbitrateRequest,
if err := tx.Save(&account).Error; err != nil {
return err
}
handoffRecord := model.HandoffRecord{
OrderID: order.ID,
FromUserID: adminID,
ToUserID: order.RenterID,
Type: "admin_arbitration",
Content: buildArbitrationHandoffContent(req, settlement),
}
if err := tx.Create(&handoffRecord).Error; err != nil {
return err
}
disputeID := row.ID
if err := appendAuditLog(tx, adminID, "dispute.arbitrate", "dispute", row.ID, meta, map[string]any{
"dispute_id": row.ID,
@@ -525,6 +536,44 @@ func arbitrateOrderStatus(result string) string {
}
}
func buildArbitrationHandoffContent(req ArbitrateRequest, settlement arbitrationSettlement) string {
content := fmt.Sprintf("客服仲裁结果:%s", arbitrationResultLabel(req.Result))
if req.Remark != "" {
content += "\n处理说明:" + req.Remark
}
if settlement.RenterRefundAmount > 0 {
content += fmt.Sprintf("\n退款给租客:¥%.2f", settlement.RenterRefundAmount)
}
if settlement.OwnerIncomeAmount > 0 {
content += fmt.Sprintf("\n结算给号主:¥%.2f", settlement.OwnerIncomeAmount)
}
if settlement.DepositDeductAmount > 0 {
content += fmt.Sprintf("\n押金扣除:¥%.2f", settlement.DepositDeductAmount)
}
return content
}
func arbitrationResultLabel(result string) string {
switch result {
case "full_refund":
return "全额退款"
case "partial_refund":
return "部分退款"
case "deduct_deposit":
return "扣押金"
case "release_deposit":
return "释放押金"
case "compensate_owner":
return "赔付号主"
case "order_close":
return "关闭订单"
case "mark_abnormal":
return "标记异常"
default:
return result
}
}
func disputeType(input string, isCheckoutDispute bool) string {
if isCheckoutDispute {
return "checkout_dispute"
@@ -1,6 +1,7 @@
package dispute
import (
"strings"
"testing"
"hfb_sys/backend/internal/model"
@@ -76,3 +77,25 @@ func TestBuildArbitrationSettlementLimitsFrozenReleaseToExistingBalance(t *testi
t.Fatalf("release frozen entry count = %d, want 1", releaseEntryCount)
}
}
func TestBuildArbitrationHandoffContent(t *testing.T) {
content := buildArbitrationHandoffContent(ArbitrateRequest{
Result: "partial_refund",
Remark: "账号异常,退还部分租金。",
}, arbitrationSettlement{
RenterRefundAmount: 80,
OwnerIncomeAmount: 120,
})
wantParts := []string{
"客服仲裁结果:部分退款",
"处理说明:账号异常,退还部分租金。",
"退款给租客:¥80.00",
"结算给号主:¥120.00",
}
for _, part := range wantParts {
if !strings.Contains(content, part) {
t.Fatalf("handoff content = %q, want include %q", content, part)
}
}
}