puzhibing
7 小时以前 88580dae55106dcf4a8f80693b90638e07af02fa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.ruoyi.order.service.impl;
 
import com.ruoyi.order.api.model.AccountingStrategyDetailOrder;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
import org.junit.jupiter.api.Test;
 
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
 
class ChargingSimulationSupportTest {
 
    @Test
    void supportsBalanceAndMixedPaymentAmounts() {
        TChargingOrder balance = new TChargingOrder();
        balance.setPayMethod(1);
        balance.setRechargeAmount(new BigDecimal("10.00"));
        balance.setChargeAmount(new BigDecimal("10.00"));
        balance.setBalancePayAmount(new BigDecimal("10.00"));
        balance.setThirdPayAmount(BigDecimal.ZERO);
 
        assertEquals(new BigDecimal("10.00"), ChargingSimulationSupport.availableAmount(balance));
        assertEquals("余额支付", ChargingSimulationSupport.paymentMode(balance));
 
        TChargingOrder mixed = new TChargingOrder();
        mixed.setPayMethod(2);
        mixed.setRechargePaymentType(1);
        mixed.setSourceName("ICBC");
        mixed.setRechargeAmount(new BigDecimal("10.00"));
        mixed.setBalancePayAmount(new BigDecimal("4.00"));
        mixed.setThirdPayAmount(new BigDecimal("6.00"));
 
        assertEquals(new BigDecimal("10.00"), ChargingSimulationSupport.availableAmount(mixed));
        assertEquals("余额+工行支付", ChargingSimulationSupport.paymentMode(mixed));
 
        TChargingOrder alipay = new TChargingOrder();
        alipay.setPayMethod(3);
        alipay.setRechargePaymentType(2);
        alipay.setRechargeAmount(new BigDecimal("10.00"));
        alipay.setBalancePayAmount(BigDecimal.ZERO);
        alipay.setThirdPayAmount(new BigDecimal("10.00"));
 
        assertEquals("支付宝支付", ChargingSimulationSupport.paymentMode(alipay));
 
        TChargingOrder legacyAlipay = new TChargingOrder();
        legacyAlipay.setPayMethod(3);
        legacyAlipay.setRechargePaymentType(2);
        legacyAlipay.setRechargeAmount(new BigDecimal("10.00"));
 
        assertEquals("支付宝支付", ChargingSimulationSupport.paymentMode(legacyAlipay));
        assertEquals(new BigDecimal("10.00"), ChargingSimulationSupport.thirdPayAmount(legacyAlipay));
 
        TChargingOrder legacyMixed = new TChargingOrder();
        legacyMixed.setPayMethod(2);
        legacyMixed.setRechargePaymentType(1);
        legacyMixed.setSourceName("ICBC");
        legacyMixed.setRechargeAmount(new BigDecimal("10.00"));
        legacyMixed.setBalancePayAmount(new BigDecimal("4.00"));
 
        assertEquals("余额+工行支付", ChargingSimulationSupport.paymentMode(legacyMixed));
        assertEquals(new BigDecimal("6.00"), ChargingSimulationSupport.thirdPayAmount(legacyMixed));
 
        TChargingOrder legacyIcbc = new TChargingOrder();
        legacyIcbc.setPayMethod(1);
        legacyIcbc.setRechargePaymentType(1);
        legacyIcbc.setSourceName("ICBC");
        legacyIcbc.setRechargeAmount(new BigDecimal("3.00"));
        legacyIcbc.setBalancePayAmount(BigDecimal.ZERO);
 
        assertEquals("工行支付", ChargingSimulationSupport.paymentMode(legacyIcbc));
        assertEquals(new BigDecimal("3.00"), ChargingSimulationSupport.thirdPayAmount(legacyIcbc));
    }
 
    @Test
    void buildsOneKwhRecordForSelectedTariffPeriod() {
        AccountingStrategyDetailOrder first = detail(1, 1, "00:00", "12:00");
        AccountingStrategyDetailOrder second = detail(2, 3, "12:00", "23:59");
        LocalDateTime endTime = LocalDateTime.of(2026, 7, 11, 15, 30, 0);
 
        ChargingSimulationSupport.PreparedSimulation prepared = ChargingSimulationSupport.prepare(
                "CD202607110001",
                Arrays.asList(first, second),
                new BigDecimal("0.03"),
                new BigDecimal("0.02"),
                endTime);
 
        assertEquals(second, prepared.getTariff());
        assertEquals(new BigDecimal("0.03"), second.getElectrovalence());
        assertEquals(new BigDecimal("0.02"), second.getServiceCharge());
        assertEquals(new BigDecimal("0.02"), second.getCostServiceCharge());
 
        TransactionRecordMessageVO record = prepared.getRecord();
        assertEquals("CD202607110001", record.getTransaction_serial_number());
        assertEquals(BigDecimal.ONE, record.getTotal_electricity());
        assertEquals(BigDecimal.ONE, record.getLoss_total_electricity());
        assertEquals(BigDecimal.ONE, record.getFlat_charge2());
        assertEquals(new BigDecimal("0.05"), record.getPayment_amount());
    }
 
    private AccountingStrategyDetailOrder detail(int id, int type, String start, String end) {
        AccountingStrategyDetailOrder detail = new AccountingStrategyDetailOrder();
        detail.setId(id);
        detail.setType(type);
        detail.setStartTime(start);
        detail.setEndTime(end);
        return detail;
    }
}