From fda771f88ef876c4f11f3b0a4f01a17ddeb1330c Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 29 Apr 2025 11:14:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95=E8=AE=A2=E5=8D=95=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/TempService.java | 76 ++++++++++++++++++- jsowell-admin/src/test/resources/payment_ids | 11 ++- .../pile/service/OrderBasicInfoService.java | 2 + .../impl/OrderBasicInfoServiceImpl.java | 3 +- 4 files changed, 86 insertions(+), 6 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index e75b7a1ee..79fb66c06 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -1064,18 +1064,92 @@ public class TempService { * @param dto */ public void debugOrder(DebugOrderDTO dto) { - if (dto == null) { + if (dto == null || StringUtils.isBlank(dto.getOrderCode())) { + logger.info("debugOrder, 参数为空直接放回"); return; } + + // 根据订单号查询订单信息 + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); + OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(dto.getOrderCode()); + // 是否重新计算 if (StringUtils.equals(dto.getReCalculateFlag(), "1")) { + LocalDateTime localDateTime = DateUtils.date2LocalDateTime(orderBasicInfo.getSettlementTime()); + // 开始时间为localDateTime减30秒 + LocalDateTime startTime = localDateTime.minusSeconds(30); + // 结束时间为localDateTime加30秒 + LocalDateTime endTime = localDateTime.plusSeconds(30); + // 查询这笔订单的交易记录原始数据 + List pileFeedListV2 = pileMsgRecordService.getPileFeedListV2(orderBasicInfo.getPileSn(), "0x3B", startTime, endTime); + if (CollectionUtils.isEmpty(pileFeedListV2)) { + // 如果没有交易记录原始数据,则使用停止充电时间作为开始时间和结束时间再查一次 + localDateTime = DateUtils.date2LocalDateTime(orderBasicInfo.getChargeEndTime()); + startTime = localDateTime.minusSeconds(30); + endTime = localDateTime.plusSeconds(30); + pileFeedListV2 = pileMsgRecordService.getPileFeedListV2(orderBasicInfo.getPileSn(), "0x3B", startTime, endTime); + } + TransactionRecordsData data = null; + for (PileMsgRecord pileMsgRecord : pileFeedListV2) { + TransactionRecordsData parse = JSONObject.parseObject(pileMsgRecord.getJsonMsg(), TransactionRecordsData.class); + if (StringUtils.equals(parse.getTransactionCode(), orderBasicInfo.getTransactionCode())) { + data = parse; + data.setVinCode(""); + } + } + if (data != null) { + AbstractProgramLogic programLogic = ProgramLogicFactory.getProgramLogic(MerchantDelayModeEnum.DELAY.getValue()); + + // 更新订单主表和订单详情中的各种金额 + programLogic.updateOrderBasicInfoAndOrderDetail(data, orderBasicInfo, orderDetail); + + // 计算订单折扣 + programLogic.calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + + logger.info("debugOrder重新计算订单, orderCode:{}, 支付金额:{}, 消费金额:{}, 折扣金额:{}, 退款金额:{}, 结算金额:{}", + orderBasicInfo.getOrderCode(), orderBasicInfo.getPayAmount(), orderBasicInfo.getOrderAmount(), + orderBasicInfo.getDiscountAmount(), orderBasicInfo.getRefundAmount(), orderBasicInfo.getSettleAmount()); + + // 更新数据库 + OrderTransactionDTO orderTransactionDTO = new OrderTransactionDTO(); + orderTransactionDTO.setOrderBasicInfo(orderBasicInfo); + orderTransactionDTO.setOrderDetail(orderDetail); + transactionService.doUpdateOrder(orderTransactionDTO); + } } + + // 组装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(); + // 是否重新退款 if (StringUtils.equals(dto.getReRefundFlag(), "1")) { + // 订单退款,汇付退款 + try { + orderBasicInfoService.refundMethod(afterSettleOrderDTO); + } catch (Exception e) { + logger.error("debugOrder-订单:{}, 订单退款,汇付退款异常", afterSettleOrderDTO.getOrderCode(), e); + } } // 是否重新分账 if (StringUtils.equals(dto.getReSplitFlag(), "1")) { + try { + orderBasicInfoService.splittingMethod(afterSettleOrderDTO); + } catch (Exception e) { + logger.error("debugOrder-订单:{}, 订单结算金额,汇付分账异常", afterSettleOrderDTO.getOrderCode(), e); + } } } } diff --git a/jsowell-admin/src/test/resources/payment_ids b/jsowell-admin/src/test/resources/payment_ids index bcc3141c1..e137478df 100644 --- a/jsowell-admin/src/test/resources/payment_ids +++ b/jsowell-admin/src/test/resources/payment_ids @@ -1,4 +1,7 @@ -002212025032708364310751130756002181120 -002212025032713064610751198717709881344 -002212025032717513610751270398786842624 -002212025032721312510751325715477811200 +002212024102416494410695447094223949824 +002212024102419522510695493069857738752 +002212024102423461110695551898497138688 +002212024102508132610695679550910730240 +002212024102508310310695683984625319936 +002212024102508502610695688864317952000 +002212024102513440210695762749414916096 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index ac42d9510..74dad65f5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -227,6 +227,8 @@ public interface OrderBasicInfoService{ // List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List paymentInfos); + void refundMethod(AfterSettleOrderDTO afterSettleOrderDTO); + OrderSplitResult verifyOrderConfirmAmount(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException; /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 709100214..479d5169d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -2232,7 +2232,8 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { /** * 执行订单退款/新退款方法 */ - private void refundMethod(AfterSettleOrderDTO afterSettleOrderDTO) { + @Override + public void refundMethod(AfterSettleOrderDTO afterSettleOrderDTO) { logger.info("执行订单退款/新退款方法, orderCode:{}, 退款金额:{}", afterSettleOrderDTO.getOrderCode(), afterSettleOrderDTO.getOrderRefundAmount()); // 如果是PRE环境, 直接返回