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;
|
}
|
}
|