diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderSplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderSplitRecordMapper.java index 91b47fd38..ebc01d3f1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderSplitRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderSplitRecordMapper.java @@ -32,4 +32,11 @@ public interface OrderSplitRecordMapper { List queryOrderSplitRecordList(@Param("adapayMemberId") String adapayMemberId, @Param("startTime") String startTime, @Param("endTime") String endTime); + + /** + * 根据订单号list查询订单分账记录 + * @param orderCodeList + * @return + */ + List queryByOrderCodeList(@Param("orderCodeList") List orderCodeList); } \ No newline at end of file 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 5792b6148..cc714c18c 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 @@ -202,6 +202,12 @@ public interface OrderBasicInfoService{ */ OrderSplitResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException; + /** + * 生成运营商日账单 + * 适用于实时分账后,第二天凌晨生成前一天的账单 + */ + void generateMerchantBill(String merchantId, String tradeDate); + OrderSplitResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException; OrderSplitResult realTimeOrderSplit(AfterSettleOrderDTO afterSettleOrderDTO) throws BaseAdaPayException; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderSplitRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderSplitRecordService.java index 21877d9d8..a92c4dcc6 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderSplitRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderSplitRecordService.java @@ -9,6 +9,7 @@ import com.jsowell.pile.vo.web.OrderSplitDailySummaryData; import com.jsowell.pile.vo.web.OrderSplitRecordVO; import java.util.List; +import java.util.Map; public interface OrderSplitRecordService { @@ -52,6 +53,8 @@ public interface OrderSplitRecordService { */ List queryOrderSplitRecordList(String merchantId, String stationId, String startTime, String endTime); + Map> queryOrderSplitRecordMap(List orderCodeList); + /** * 查询时间段内的订单分账记录 */ 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 c69b09950..fcf778fa6 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 @@ -1419,6 +1419,85 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { orderSplittingOperations(merchantId, adapayMemberAccount, stationReportList); } + /** + * 生成运营商日账单 + */ + @Override + public void generateMerchantBill(String merchantId, String tradeDate) { + if (StringUtils.isBlank(merchantId) || StringUtils.isBlank(tradeDate)) { + logger.error("生成运营商日账单, 参数为空生成失败, merchantId:{}, tradeDate:{}", merchantId, tradeDate); + return; + } + // 根据交易日期查询运营商下面所有站点的交易日报 + List stationReportList = settleOrderReportService.selectByMerchantIdAndDate(merchantId, tradeDate); + if (CollectionUtils.isEmpty(stationReportList)) { + logger.error("订单分账逻辑error-stationReportList为空"); + return; + } + + // 从stationReportList中去除orderCodes并根据逗号切割组成List orderCodeList + List orderCodeList = stationReportList.stream() + .map(SettleOrderReport::getOrderCodes) + .flatMap(orderCodes -> Arrays.stream(orderCodes.split(","))) + .collect(Collectors.toList()); + Map> orderSplitRecordMap = orderSplitRecordService.queryOrderSplitRecordMap(orderCodeList); + + // 根据运营商id和结算日期查询清分账单 + ClearingBillInfo queryBillInfo = clearingBillInfoService.selectByMerchantIdAndTradeDate(merchantId, tradeDate); + + // 清分账单信息 + ClearingBillInfo clearingBillInfo = new ClearingBillInfo(); + String clearingBillCode = "CLE" + IdUtils.getOrderCode(); + if (queryBillInfo != null) { + clearingBillInfo.setId(queryBillInfo.getId()); + clearingBillCode = queryBillInfo.getClearingBillCode(); + } + clearingBillInfo.setBillStatus("1"); + clearingBillInfo.setClearingBillCode(clearingBillCode); + clearingBillInfo.setClearingTime(DateUtils.getNowDate()); + clearingBillInfo.setMerchantId(merchantId); + clearingBillInfo.setOrderSource("1"); + + // 应收金额 + BigDecimal receivableAmount = BigDecimal.ZERO; + // 应清分金额 + BigDecimal shouldClearingAmount = BigDecimal.ZERO; + // 实际清分金额 + BigDecimal actualClearingAmount = BigDecimal.ZERO; + // 手续费金额 + BigDecimal feeAmount = BigDecimal.ZERO; + // 可提现金额 + BigDecimal withdrawableAmount = BigDecimal.ZERO; + + // 清分账单详情列表 + List billDetailList = Lists.newArrayList(); + + // 统计订单数据 + for (String orderCode : orderCodeList) { + for (Map.Entry> entry : orderSplitRecordMap.entrySet()) { + List value = entry.getValue(); + if (CollectionUtils.isNotEmpty(value)) { + + } + } + } + + clearingBillInfo.setBillStatus("2"); + clearingBillInfo.setTradeDate(tradeDate); + clearingBillInfo.setReceivableAmount(receivableAmount); + clearingBillInfo.setShouldClearingAmount(shouldClearingAmount); + clearingBillInfo.setFeeAmount(feeAmount); + clearingBillInfo.setWithdrawableAmount(withdrawableAmount); + clearingBillInfo.setActualClearingAmount(actualClearingAmount); + clearingBillInfo.setDelFlag(DelFlagEnum.NORMAL.getValue()); + + // 保存清分账单 + ClearingBillTransactionDTO dto = new ClearingBillTransactionDTO(); + dto.setClearingBillInfo(clearingBillInfo); + dto.setBillDetailList(billDetailList); + transactionService.saveClearingBill(dto); + } + /** * 余额支付订单,使用余额分账 * diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderSplitRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderSplitRecordServiceImpl.java index 4322cb2ad..342609e4d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderSplitRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderSplitRecordServiceImpl.java @@ -143,6 +143,22 @@ public class OrderSplitRecordServiceImpl implements OrderSplitRecordService { return orderSplitRecordMapper.queryOrderSplitDataList(merchantId, stationId, startTime, endTime); } + /** + * 查询时间段内的订单分账记录 + * @return + */ + @Override + public Map> queryOrderSplitRecordMap(List orderCodeList) { + List orderSplitRecords = orderSplitRecordMapper.queryByOrderCodeList(orderCodeList); + if (CollectionUtils.isEmpty(orderSplitRecords)) { + return Maps.newHashMap(); + } + // 根据orderCode分组 + Map> resultMap = orderSplitRecords.stream() + .collect(Collectors.groupingBy(OrderSplitRecord::getOrderCode)); + return resultMap; + } + /** * 查询时间段内的订单分账记录 */