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