diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java index 2010fbc6..c1cd60e6 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java @@ -1404,6 +1404,10 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 计算智能计量使用金额 private BigDecimal calcSmartCountAmount(TransactionBillVO order, BigDecimal totalEle) { + // 若订单不存在,或者 订单开始电量为空,表示未开始使用,则直接返回0 + if (order == null || order.getSuitStartEle() == null) { + return BigDecimal.ZERO; + } BigDecimal startEle = order.getSuitStartEle(); BigDecimal usedEle = totalEle.subtract(startEle); // 已使用的电量 BigDecimal suitEle = new BigDecimal(order.getSuitTime()); // 套餐每周期的电量 @@ -1419,11 +1423,11 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 计算智能时长的使用金额 private BigDecimal calcSmartTimeAmount(TransactionBillVO order, LocalDateTime endTime) { - LocalDateTime startTime = order.getSuitStartTime(); - if (startTime == null) { - startTime = LocalDateTime.now(); + // 若订单不存在,或者 订单开始时间为空,表示未开始使用,则直接返回0 + if (order == null || order.getSuitStartTime() == null) { + return BigDecimal.ZERO; } - Duration between = Duration.between(startTime, endTime); + Duration between = Duration.between(order.getSuitStartTime(), endTime); SuitTimeUnit unit = SuitTimeUnit.getByValue(order.getSuitTimeUnit()); ServiceUtil.assertion(unit == null, "订单套餐单位无效"); @@ -1473,7 +1477,11 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 计算分时段计时金额 private BigDecimal calcTimingTimeAmount(TransactionBillVO order, LocalDateTime endTime) { - LocalDateTime startTime = order.getSuitStartTime() == null ? LocalDateTime.now() : order.getSuitStartTime(); + // 订单不存在 或者 开始时间为空,则表示未开始使用,返回0 + if (order == null || order.getSuitStartTime() == null) { + return BigDecimal.ZERO; + } + LocalDateTime startTime = order.getSuitStartTime(); List<BigDecimal> suitGearAmount = order.getSuitGearAmount(); List<Integer> suitGearTime = order.getSuitGearTime();