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 181485cd8..76e8c5d6b 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 @@ -1666,7 +1666,11 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { // 订单退款,汇付退款 refundMethod(afterSettleOrderDTO); - return null; + + // 组装结果集 + OrderSplitResult result = new OrderSplitResult(); + result.setOrderCode(afterSettleOrderDTO.getOrderCode()); + return result; } /** @@ -1714,11 +1718,58 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { // 根据站点id查询分账配置 List stationSplitConfigList = stationSplitConfigService.queryByStationId(afterSettleOrderDTO.getStationId()); - // 订单分账 - calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO); + // 计算每个参与分账的用户, 应分多少钱 + List divMemberList = calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO); + + // 执行分账 + if (CollectionUtils.isEmpty(divMemberList)) { + logger.info("分账信息为空"); + return; + } + + 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())); + } + } + + // 支付id + String paymentId = paymentInfos.get(0).getPaymentId(); + + // 运营商id + String merchantId = afterSettleOrderDTO.getMerchantId(); + + // 根据运营商id 查询appId + String appId = pileMerchantInfoService.queryAppIdByMerchantId(merchantId); + + PaymentConfirmParam param = PaymentConfirmParam.builder() + .paymentId(paymentId) + .divMemberList(divMemberList) + .confirmAmt(orderSettleAmount) + .orderCode(orderCode) + .wechatAppId(appId) + .build(); + adapayService.createPaymentConfirmRequest(param); } + /** + * 计算每个账户需要分账的金额 + * @param stationSplitConfigList 参与分账的账户信息 + * @param afterSettleOrderDTO 订单结算信息 + * @return + */ @Override public List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) { return calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO, null); @@ -3483,8 +3534,6 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { orderInfo.setRemedialAmount(remedialAmount.subtract(payAmount)); } - - this.updateOrderBasicInfo(orderInfo); }