fix: 按实际纯币结算金额计算保险费用

This commit is contained in:
yml2213
2026-11-05 19:19:12 +08:00
parent 53574236ef
commit b884d01855
14 changed files with 184 additions and 25 deletions
+1 -1
View File
@@ -406,7 +406,7 @@ func calculateCheckoutSettlement(order model.RentalOrder, consumableAmountCent i
// 可完结时租客实际承担的租金向金额;有 shortfall 时仍展示完整应付便于协商
actualRentAmountCent := actualBuyerRentCent
ownerRentIncomeCent := actualOwnerRentCent
insuranceFeeCent := calculateInsuranceFeeCent(ownerRentIncomeCent, order.InsuranceFeeBps)
insuranceFeeCent := calculateInsuranceFeeCent(usedOwnerCoinPriceCent, order.InsuranceFeeBps)
ownerRentIncomeCent = maxCent(ownerRentIncomeCent-insuranceFeeCent, 0)
platformFeeCent := maxCent(actualRentAmountCent-ownerRentIncomeCent, 0)
depositCompensationCent := damageAppliedCent
@@ -49,13 +49,48 @@ func TestCalculateCheckoutSettlementDeductsPremiumInsuranceFee(t *testing.T) {
}
settlement := calculateCheckoutSettlement(order, 12000, 100, 0)
if settlement.InsuranceFeeBps != 400 || settlement.InsuranceFeeCent != 1412 {
if settlement.InsuranceFeeBps != 400 || settlement.InsuranceFeeCent != 932 {
t.Fatalf("保险费用快照不正确: bps=%d fee=%d", settlement.InsuranceFeeBps, settlement.InsuranceFeeCent)
}
if settlement.OwnerRentIncomeCent != 33888 {
t.Fatalf("号主净租金 = %d, want 33888", settlement.OwnerRentIncomeCent)
if settlement.OwnerRentIncomeCent != 34368 {
t.Fatalf("号主净租金 = %d, want 34368", settlement.OwnerRentIncomeCent)
}
if settlement.PlatformFeeCent != 4412 {
t.Fatalf("平台收入 = %d, want 4412", settlement.PlatformFeeCent)
if settlement.PlatformFeeCent != 3932 {
t.Fatalf("平台收入 = %d, want 3932", settlement.PlatformFeeCent)
}
}
func TestCalculateCheckoutSettlementUsesActualPureCoinAsInsuranceBase(t *testing.T) {
order := model.RentalOrder{
RentAmountCent: 25000,
OwnerRentAmountCent: 25000,
DepositAmountCent: 15000,
InsuranceFeeBps: 800,
AccountSnapshot: datatypes.JSON([]byte(`{
"haf_coin_amount": 100000000,
"asset_summary": {
"price_breakdown": {
"buyer_ratio": 40,
"seller_ratio": 40,
"buyer_coin_base_price": 250,
"seller_coin_base_price": 250,
"consumable_price": 0
}
}
}`)),
}
settlement := calculateCheckoutSettlement(order, 5000, 50, 0)
if settlement.PureCoinAmountCent != 12500 {
t.Fatalf("实际纯币原价 = %d, want 12500", settlement.PureCoinAmountCent)
}
if settlement.InsuranceFeeCent != 1000 {
t.Fatalf("保险费用 = %d, want 1000", settlement.InsuranceFeeCent)
}
if settlement.ExtraItemAmountCent != 5000 {
t.Fatalf("额外物品 = %d, want 5000", settlement.ExtraItemAmountCent)
}
if settlement.OwnerRentIncomeCent != 16500 {
t.Fatalf("号主净租金 = %d, want 16500", settlement.OwnerRentIncomeCent)
}
}