longz
2026-07-15 a3657cc4e9fd9f13e4838db8eebaf914c529beee
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargingSimulationSupport.java
@@ -1,10 +1,12 @@
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 java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
@@ -16,6 +18,68 @@
    private ChargingSimulationSupport() {
    }
    static BigDecimal availableAmount(TChargingOrder order) {
        if (order == null) {
            return BigDecimal.ZERO.setScale(2);
        }
        BigDecimal chargeAmount = money(order.getChargeAmount());
        return chargeAmount.compareTo(BigDecimal.ZERO) > 0 ? chargeAmount : money(order.getRechargeAmount());
    }
    static String paymentMode(TChargingOrder order) {
        if (order == null) {
            return "未知";
        }
        if (Integer.valueOf(1).equals(order.getIsWhitelist())
                && Integer.valueOf(1).equals(order.getWhitelistBenefitType())) {
            return "免支付";
        }
        BigDecimal balanceAmount = money(order.getBalancePayAmount());
        BigDecimal thirdAmount = thirdPayAmount(order);
        if (balanceAmount.compareTo(BigDecimal.ZERO) == 0 && thirdAmount.compareTo(BigDecimal.ZERO) == 0) {
            return "免支付";
        }
        String thirdChannel = thirdChannel(order);
        if (balanceAmount.compareTo(BigDecimal.ZERO) > 0 && thirdAmount.compareTo(BigDecimal.ZERO) == 0) {
            return "余额支付";
        }
        if (balanceAmount.compareTo(BigDecimal.ZERO) > 0 && thirdAmount.compareTo(BigDecimal.ZERO) > 0) {
            return "余额+" + thirdChannel;
        }
        return thirdChannel;
    }
    static BigDecimal thirdPayAmount(TChargingOrder order) {
        if (order == null) {
            return BigDecimal.ZERO.setScale(2);
        }
        BigDecimal thirdAmount = money(order.getThirdPayAmount());
        if (thirdAmount.compareTo(BigDecimal.ZERO) > 0 || Integer.valueOf(1).equals(order.getPayMethod())) {
            return thirdAmount;
        }
        return money(order.getRechargeAmount())
                .subtract(money(order.getBalancePayAmount()))
                .max(BigDecimal.ZERO)
                .setScale(2, RoundingMode.HALF_UP);
    }
    private static String thirdChannel(TChargingOrder order) {
        if ("ICBC".equalsIgnoreCase(order.getSourceName())) {
            return "工行支付";
        }
        if (Integer.valueOf(2).equals(order.getRechargePaymentType())) {
            return "支付宝支付";
        }
        if (Integer.valueOf(3).equals(order.getRechargePaymentType())) {
            return "支付宝H5支付";
        }
        return "微信支付";
    }
    private static BigDecimal money(BigDecimal amount) {
        return amount == null ? BigDecimal.ZERO.setScale(2) : amount.setScale(2, RoundingMode.HALF_UP);
    }
    static PreparedSimulation prepare(String orderCode,
                                      List<AccountingStrategyDetailOrder> tariffs,
                                      BigDecimal electricityFee,