From a3657cc4e9fd9f13e4838db8eebaf914c529beee Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期三, 15 七月 2026 14:34:44 +0800
Subject: [PATCH] 结算的已支付订单

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargingSimulationSupport.java |   64 ++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargingSimulationSupport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargingSimulationSupport.java
index 3b54db4..950b585 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ChargingSimulationSupport.java
+++ b/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,

--
Gitblit v1.7.1