|
|
@@ -9,6 +9,7 @@ import com.yc.ship.module.trade.controller.admin.report.vo.BankStatementReportPa
|
|
|
import com.yc.ship.module.trade.controller.admin.report.vo.BankStatementReportRespVO;
|
|
|
import com.yc.ship.module.trade.dal.dataobject.bill.BillDO;
|
|
|
import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderPayDO;
|
|
|
+import com.yc.ship.module.trade.controller.admin.report.vo.RefundStatisticsVO;
|
|
|
import com.yc.ship.module.trade.dal.mysql.bill.BillMapper;
|
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeOrderPayMapper;
|
|
|
import com.yc.ship.module.trade.service.report.BankStatementReportService;
|
|
|
@@ -81,7 +82,7 @@ public class BankStatementReportServiceImpl implements BankStatementReportServic
|
|
|
|
|
|
// 3.1 批量查询账单还款数据 - 按日期分组汇总
|
|
|
LambdaQueryWrapper<BillDO> billWrapper = new LambdaQueryWrapper<>();
|
|
|
- billWrapper.eq(BillDO::getBillStatus, 1)
|
|
|
+ billWrapper.in(BillDO::getBillStatus, 1,2)
|
|
|
.between(BillDO::getPayTime, startDateTime, endDateTime)
|
|
|
.select(BillDO::getPayTime, BillDO::getPayAmount); // 只查询必要字段
|
|
|
List<BillDO> billList = billMapper.selectList(billWrapper);
|
|
|
@@ -89,22 +90,26 @@ public class BankStatementReportServiceImpl implements BankStatementReportServic
|
|
|
// 3.2 批量查询预存款充值数据
|
|
|
LambdaQueryWrapper<TradeOrderPayDO> depositWrapper = new LambdaQueryWrapper<>();
|
|
|
depositWrapper.eq(TradeOrderPayDO::getPayStatus, 1)
|
|
|
- .eq(TradeOrderPayDO::getOrderType, 1)
|
|
|
+ .eq(TradeOrderPayDO::getPaymentType, 5)
|
|
|
.between(TradeOrderPayDO::getPaymentDate, startDateTime, endDateTime)
|
|
|
.select(TradeOrderPayDO::getPaymentDate, TradeOrderPayDO::getPayAmount);
|
|
|
List<TradeOrderPayDO> depositList = tradeOrderPayMapper.selectList(depositWrapper);
|
|
|
|
|
|
- // 3.3 批量查询订单支付数据
|
|
|
+ // 3.3 批量查询订单支付数据(需减去退款金额,计算净支付)
|
|
|
LambdaQueryWrapper<TradeOrderPayDO> orderWrapper = new LambdaQueryWrapper<>();
|
|
|
orderWrapper.eq(TradeOrderPayDO::getPayStatus, 1)
|
|
|
- .eq(TradeOrderPayDO::getOrderType, 0)
|
|
|
+ .in(TradeOrderPayDO::getPaymentType, 1,2,3)
|
|
|
.between(TradeOrderPayDO::getPaymentDate, startDateTime, endDateTime)
|
|
|
.select(TradeOrderPayDO::getPaymentDate, TradeOrderPayDO::getPayAmount);
|
|
|
List<TradeOrderPayDO> orderPaymentList = tradeOrderPayMapper.selectList(orderWrapper);
|
|
|
|
|
|
+ // 3.4 批量查询退款数据(关联trade_order_pay和trade_refund,按退款时间分组)
|
|
|
+ List<RefundStatisticsVO> refundList = tradeOrderPayMapper.selectRefundStatistics(startDateTime, endDateTime);
|
|
|
+
|
|
|
// 4. 按日期分组并计算统计数据
|
|
|
Map<LocalDate, BigDecimal> billMap = groupByDateAndSum(billList, BillDO::getPayTime, BillDO::getPayAmount);
|
|
|
Map<LocalDate, BigDecimal> depositMap = groupByDateAndSum(depositList, TradeOrderPayDO::getPaymentDate, TradeOrderPayDO::getPayAmount);
|
|
|
+ Map<LocalDate, BigDecimal> refundMap = groupByDateAndSumRefund(refundList);
|
|
|
Map<LocalDate, BigDecimal> orderMap = groupByDateAndSum(orderPaymentList, TradeOrderPayDO::getPaymentDate, TradeOrderPayDO::getPayAmount);
|
|
|
|
|
|
// 5. 构建结果列表
|
|
|
@@ -115,14 +120,15 @@ public class BankStatementReportServiceImpl implements BankStatementReportServic
|
|
|
|
|
|
BigDecimal billRepayment = billMap.getOrDefault(tradeDate, BigDecimal.ZERO);
|
|
|
BigDecimal depositRecharge = depositMap.getOrDefault(tradeDate, BigDecimal.ZERO);
|
|
|
+ BigDecimal refundAmount = refundMap.getOrDefault(tradeDate, BigDecimal.ZERO);
|
|
|
BigDecimal orderPayment = orderMap.getOrDefault(tradeDate, BigDecimal.ZERO);
|
|
|
|
|
|
report.setBillRepayment(billRepayment);
|
|
|
report.setDepositRecharge(depositRecharge);
|
|
|
- report.setOrderPayment(orderPayment);
|
|
|
+ report.setOrderPayment(orderPayment.subtract(refundAmount));
|
|
|
|
|
|
- // 商户平台合计 = 账单还款 + 预存款充值 + 订单支付
|
|
|
- BigDecimal merchantPlatformTotal = billRepayment.add(depositRecharge).add(orderPayment);
|
|
|
+ // 商户平台合计 = 账单还款 + 预存款充值 + 订单支付 - 退款
|
|
|
+ BigDecimal merchantPlatformTotal = billRepayment.add(depositRecharge).add(report.getOrderPayment());
|
|
|
report.setMerchantPlatformTotal(merchantPlatformTotal);
|
|
|
|
|
|
// 对公充值预存款 - TODO: 需要根据实际业务逻辑查询对公充值数据
|
|
|
@@ -161,6 +167,21 @@ public class BankStatementReportServiceImpl implements BankStatementReportServic
|
|
|
));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 按日期分组并求和(退款数据专用)
|
|
|
+ */
|
|
|
+ private Map<LocalDate, BigDecimal> groupByDateAndSumRefund(List<RefundStatisticsVO> list) {
|
|
|
+ if (CollUtil.isEmpty(list)) {
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ return list.stream()
|
|
|
+ .filter(item -> item.getRefundTime() != null)
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ item -> item.getRefundTime().toLocalDate(),
|
|
|
+ Collectors.reducing(BigDecimal.ZERO, RefundStatisticsVO::getRefundAmount, BigDecimal::add)
|
|
|
+ ));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 导出银行对账报表 Excel
|
|
|
*
|