From ed604022a13da34bb273e7748ca05c171a60142d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 11 Apr 2025 16:54:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=80=BB=E8=80=97=E7=94=B5?= =?UTF-8?q?=E9=87=8F=E5=A4=A7=E4=BA=8E0,=20=E5=B9=B6=E4=B8=94=E5=90=84?= =?UTF-8?q?=E4=B8=AA=E6=97=B6=E6=AE=B5=E8=80=97=E7=94=B5=E9=87=8F=E6=80=BB?= =?UTF-8?q?=E5=92=8C=E4=B8=BA0,=20=E5=88=99=E4=BC=98=E6=83=A0=E5=90=8E?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E7=AD=89=E4=BA=8E=E4=BC=98=E6=83=A0=E5=89=8D?= =?UTF-8?q?=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 26 +++- .../DelayMerchantProgramLogic.java | 136 +++++++++--------- 2 files changed, 89 insertions(+), 73 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 109687e28..53f278690 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -941,6 +941,21 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 优惠后服务费金额 初始值为优惠前金额 BigDecimal afterDiscountServiceAmount = BigDecimal.ZERO; + // 订单总耗电量 + BigDecimal totalUsedElectricity = orderDetail.getTotalUsedElectricity(); + + // 尖时段用电量 + BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); + // 峰时段用电量 + BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); + // 平时段用电量 + BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); + // 谷时段用电量 + BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); + // 各时段用电量汇总 + BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity); + + // 查询会员在该站点享受的优惠 MemberDiscountVO memberDiscountVO = memberGroupService.queryMemberDiscountV2(merchantId, stationId, memberId); if (memberDiscountVO == null) { @@ -955,7 +970,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { BillingTemplateVO billingTemplateVO = memberDiscountVO.getBillingTemplateVO(); // 尖时段用电量 - BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); if (sharpUsedElectricity != null && sharpUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { logger.info("计算订单折扣V2:【{}】, 当前为尖时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})", orderCode, sharpUsedElectricity, orderDetail.getSharpElectricityPrice(), orderDetail.getSharpServicePrice(), billingTemplateVO.getSharpElectricityPrice(), billingTemplateVO.getSharpServicePrice()); @@ -978,7 +992,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { } // 峰时段用电量 - BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); if (peakUsedElectricity != null && peakUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { logger.info("计算订单折扣V2:【{}】, 当前为峰时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})", orderCode, peakUsedElectricity, orderDetail.getPeakElectricityPrice(), orderDetail.getPeakServicePrice(), billingTemplateVO.getPeakElectricityPrice(), billingTemplateVO.getPeakServicePrice()); @@ -998,7 +1011,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { } // 平时段用电量 - BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); if (flatUsedElectricity != null && flatUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { logger.info("计算订单折扣V2:【{}】, 当前为平时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})", orderCode, flatUsedElectricity, orderDetail.getFlatElectricityPrice(), orderDetail.getFlatServicePrice(), billingTemplateVO.getFlatElectricityPrice(), billingTemplateVO.getFlatServicePrice()); @@ -1018,7 +1030,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { } // 谷时段用电量 - BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); if (valleyUsedElectricity != null && valleyUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { logger.info("计算订单折扣V2:【{}】, 当前为谷时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})", orderCode, valleyUsedElectricity, orderDetail.getValleyElectricityPrice(), orderDetail.getValleyServicePrice(), billingTemplateVO.getValleyElectricityPrice(), billingTemplateVO.getValleyServicePrice()); @@ -1047,6 +1058,12 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderCode, originalTotalElectricityAmount, afterDiscountElectricityAmount, electricityAmountDiscount, originalTotalServiceAmount, afterDiscountServiceAmount, serviceAmountDiscount); } + // 如果总耗电量大于0, 并且各个时段耗电量总和为0, 则优惠后金额等于优惠前金额 + if (totalUsedElectricity.compareTo(BigDecimal.ZERO) > 0 && sumUsedElectricity.compareTo(BigDecimal.ZERO) == 0 ) { + afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount(); + afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); + } + /** * 电费折扣金额和服务费折扣金额 应该大于等于0, 如小于0, 则设置为0 */ @@ -1064,7 +1081,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { afterDiscountServiceAmount = originalTotalServiceAmount; } - /* 更新 数据 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index a53fc0799..5f95264cb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -454,74 +454,74 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { /** * 订单结算/结算订单逻辑/订单结算逻辑 */ - public void settleOrderOld(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { - logger.info("【{}】-结算订单start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo)); - // 判断订单状态 - if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) { - logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode()); - return; - } - - // 获取更新数据后的orderBasicInfo对象 - returnUpdateOrderBasicInfo(orderBasicInfo, data); - - // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 - OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data); - - // 计算订单折扣 - calculateOrderDiscountsV2(orderBasicInfo, orderDetail); - - // 更新数据库 - OrderTransactionDTO dto = new OrderTransactionDTO(); - dto.setOrderBasicInfo(orderBasicInfo); - dto.setOrderDetail(orderDetail); - transactionService.doUpdateOrder(dto); - - // 不在新分账逻辑站点列表中的, 可以走退款逻辑 - // 2025年2月18日09点17分 全部订单改为实时分账 - // if (!YKCUtils.getNewLogicStationIdList().contains(orderBasicInfo.getStationId())) { - // // 订单退款 - // refundOrder(orderBasicInfo); - // } - - // 订单退款 - // refundOrder(orderBasicInfo); - - // 组装after参数 - AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() - .orderCode(orderBasicInfo.getOrderCode()) - .merchantId(orderBasicInfo.getMerchantId()) - .stationId(orderBasicInfo.getStationId()) - .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 - .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 - .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 - .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 - .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 - .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 - .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 - .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 - .build(); - rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); - - // 将卡/vin状态解锁 - if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { - cardStatusUnlocked(orderBasicInfo.getLogicCard()); - } - - // 如果是vin启动,将启动锁定状态改为正常 - if (StringUtils.equals(data.getTransactionIdentifier(), "05")) { - vinStatusUnlocked(data.getVinCode()); - } - - // 发送停止充电订阅消息 - sendMsg(orderBasicInfo); - - // 从redis中取出实时记录保存到表中 - realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode()); - - logger.info("结算订单end! orderCode:{}, transactionCode:{}, OrderTransactionDTO:{}", - orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode(), JSON.toJSONString(dto)); - } + // public void settleOrderOld(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { + // logger.info("【{}】-结算订单start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo)); + // // 判断订单状态 + // if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) { + // logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode()); + // return; + // } + // + // // 获取更新数据后的orderBasicInfo对象 + // returnUpdateOrderBasicInfo(orderBasicInfo, data); + // + // // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 + // OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data); + // + // // 计算订单折扣 + // calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + // + // // 更新数据库 + // OrderTransactionDTO dto = new OrderTransactionDTO(); + // dto.setOrderBasicInfo(orderBasicInfo); + // dto.setOrderDetail(orderDetail); + // transactionService.doUpdateOrder(dto); + // + // // 不在新分账逻辑站点列表中的, 可以走退款逻辑 + // // 2025年2月18日09点17分 全部订单改为实时分账 + // // if (!YKCUtils.getNewLogicStationIdList().contains(orderBasicInfo.getStationId())) { + // // // 订单退款 + // // refundOrder(orderBasicInfo); + // // } + // + // // 订单退款 + // // refundOrder(orderBasicInfo); + // + // // 组装after参数 + // AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() + // .orderCode(orderBasicInfo.getOrderCode()) + // .merchantId(orderBasicInfo.getMerchantId()) + // .stationId(orderBasicInfo.getStationId()) + // .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 + // .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 + // .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 + // .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 + // .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 + // .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 + // .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 + // .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 + // .build(); + // rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + // + // // 将卡/vin状态解锁 + // if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { + // cardStatusUnlocked(orderBasicInfo.getLogicCard()); + // } + // + // // 如果是vin启动,将启动锁定状态改为正常 + // if (StringUtils.equals(data.getTransactionIdentifier(), "05")) { + // vinStatusUnlocked(data.getVinCode()); + // } + // + // // 发送停止充电订阅消息 + // sendMsg(orderBasicInfo); + // + // // 从redis中取出实时记录保存到表中 + // realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode()); + // + // logger.info("结算订单end! orderCode:{}, transactionCode:{}, OrderTransactionDTO:{}", + // orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode(), JSON.toJSONString(dto)); + // } /** * 订单结算/结算订单逻辑/订单结算逻辑