longz
2026-07-13 6fc77feef6337bc478423efad5de91fa520b4990
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
package com.ruoyi.order.service.impl;
 
import com.ruoyi.order.api.model.AccountingStrategyDetailOrder;
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 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;
    }
}