fix: 按实际纯币结算金额计算保险费用
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user