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 48af04463..2d5f7476a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -1055,5 +1055,9 @@ public class TempService { logger.info("retrySplittingMethod, afterSettleOrderDTO:{}", JSON.toJSONString(afterSettleOrderDTO)); orderBasicInfoService.splittingMethod(afterSettleOrderDTO); } + + /** + * + */ } 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 f5f87117b..d498b1736 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 @@ -1957,33 +1957,31 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { } /** - * 校验金额方法 + * 校验分账金额方法 */ private boolean verifyOrderAllAmount(AfterSettleOrderDTO afterSettleOrderDTO) { - /* - 订单相关的所有金额需要满足一下规则 - 订单总消费金额 = 订单总电费金额 + 订单总服务费金额 - - 实际消费电费金额 = 订单总电费金额 - 电费优惠金额 - - 实际消费服务费金额 = 订单总服务费金额 - 服务费优惠金额 - - 订单总优惠金额 = 电费优惠金额 + 服务费优惠金额 - - 订单实际消费金额 = 订单总消费金额 - 订单总优惠金额 - - 实际消费总金额 = 订单总消费金额 - 订单总优惠金额 - - 订单退款金额 = 订单支付金额 - 实际消费总金额 - - 订单结算金额 = 实际消费电费金额 + 实际消费服务费金额 - - */ + String orderCode = afterSettleOrderDTO.getOrderCode(); + // 查询订单支付记录 + List orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); + // 选出需要分账的支付id + List paymentInfos = Lists.newArrayList(); + for (OrderPayRecord orderPayRecord : orderPayRecordList) { + BigDecimal payAmount = orderPayRecord.getPayAmount(); + BigDecimal refundAmount = orderPayRecord.getRefundAmount() == null ? BigDecimal.ZERO : orderPayRecord.getRefundAmount(); + // 如果相减等于0,说明这笔支付单退完了,就不用分账了 + BigDecimal subtract = payAmount.subtract(refundAmount); + if (subtract.compareTo(BigDecimal.ZERO) > 0) { + paymentInfos.addAll(orderPayRecordService.parseDeductionRecord(orderPayRecord.getDeductionRecord())); + } else { + logger.info("realTimeOrderSplit-订单:{}, 支付记录:{}, 支付金额({})与退款金额({})相等,不需要分账", orderCode, orderPayRecord.getPaymentId(), payAmount, refundAmount); + } + } + logger.info("根据订单号:{}, 查询出{}笔支付信息, 需要分账的支付信息为:{}", orderCode, paymentInfos.size(), JSON.toJSONString(paymentInfos)); return true; } /** - * 实时分账方法 + * 实时分账方法/新分账方法 * @param afterSettleOrderDTO */ @Override @@ -2003,7 +2001,6 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return null; } - // 校验分账 verifyOrderAllAmount(afterSettleOrderDTO); // 根据站点id查询分账配置(如果未配置则初始化) @@ -2230,13 +2227,13 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { } /** - * 执行订单退款 + * 执行订单退款/新退款方法 */ private void refundMethod(AfterSettleOrderDTO afterSettleOrderDTO) { // 退款 String mode = pileMerchantInfoService.getDelayModeByMerchantId(afterSettleOrderDTO.getMerchantId()); AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); - orderLogic.refundOrder(afterSettleOrderDTO.getOrderBasicInfo()); + orderLogic.refundOrder(afterSettleOrderDTO.getOrderBasicInfo()); // 新逻辑 } /**