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 754ef1c49..91e438931 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 @@ -1513,13 +1513,64 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { BigDecimal orderConsumeAmount = afterSettleOrderDTO.getOrderConsumeAmount(); // 消费金额 BigDecimal orderRefundAmount = afterSettleOrderDTO.getOrderRefundAmount(); // 退款金额 BigDecimal orderSettleAmount = afterSettleOrderDTO.getOrderSettleAmount(); // 结算金额 + + if (orderConsumeAmount.add(orderRefundAmount).compareTo(orderPayAmount) != 0) { + logger.info("订单支付金额与消费金额+退款金额不相等"); + return null; + } // 订单结算金额,汇付分账 + splittingMethod(orderSettleAmount, afterSettleOrderDTO); // 订单退款,汇付退款 return null; } + /** + * 分账方法 + * @param orderSettleAmount + * @param afterSettleOrderDTO + */ + private void splittingMethod(BigDecimal orderSettleAmount, AfterSettleOrderDTO afterSettleOrderDTO) { + } + + /** + * 执行订单退款 + * @param orderBasicInfo + */ + private void refundOrder(OrderBasicInfo orderBasicInfo) { + BigDecimal refundAmount = orderBasicInfo.getRefundAmount(); + // 查询该笔订单的退款记录 + List orderRefundInfoList = this.getOrderRefundInfoList(orderBasicInfo); + if (CollectionUtils.isNotEmpty(orderRefundInfoList)) { + // 已退款金额 + BigDecimal refunded = orderRefundInfoList.stream() + .map(x -> Objects.nonNull(x.getReverseAmt()) ? new BigDecimal(x.getReverseAmt()) : BigDecimal.ZERO) + .reduce(BigDecimal.ZERO,BigDecimal::add); + if (refunded.compareTo(refundAmount) >= 0) { + logger.info("执行订单退款-校验已退款金额,orderCode:{}, 应退款金额:{}, 已经退款金额:{}, 不再执行退款", orderBasicInfo.getOrderCode(), refundAmount, refunded); + return; + } + } + + try { + String payMode = orderBasicInfo.getPayMode(); + if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue())) { + // 余额支付 + balancePaymentOrderRefund(orderBasicInfo); + } else if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue()) + || StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_ALIPAY.getValue())) { + // 在线支付 + onlinePaymentOrderRefund(orderBasicInfo); + } else { + // 白名单支付或者ETC支付 + logger.info("订单:{}使用:{},不进行退款处理", orderBasicInfo.getOrderCode(), OrderPayModeEnum.getPayModeDescription(payMode)); + } + } catch (Exception e) { + logger.error("【{}】-订单退款逻辑异常orderCode:{}", this.getClass().getSimpleName(), orderBasicInfo.getOrderCode(), e); + } + } + /** * 计算每个账户需要分账的金额 * @param shareMemberList 参与分账的账户信息 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 691c89286..288a0a859 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 @@ -1027,6 +1027,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { /** * 个人桩启动 */ + @Override @Transactional(rollbackFor = Exception.class) public String startPersonalPileCharging(StartPersonPileDTO dto) { logger.info("【{}】-个人桩启动充电 param:{}", this.getClass().getSimpleName(), JSON.toJSONString(dto));