Explorar el Código

对账报表修改

jinch hace 14 horas
padre
commit
2ee12faa97

+ 22 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/RefundStatisticsVO.java

@@ -0,0 +1,22 @@
+package com.yc.ship.module.trade.controller.admin.report.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 退款统计 VO
+ *
+ * @author auto-generated
+ */
+@Data
+public class RefundStatisticsVO {
+
+    private LocalDateTime refundTime;
+
+    private BigDecimal refundAmount;
+
+ 
+
+}

+ 13 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderPayMapper.java

@@ -3,10 +3,13 @@ package com.yc.ship.module.trade.dal.mysql.order;
 
 import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderPayDO;
+import com.yc.ship.module.trade.controller.admin.report.vo.RefundStatisticsVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
 
 
 /**
@@ -20,4 +23,14 @@ public interface TradeOrderPayMapper extends BaseMapperX<TradeOrderPayDO> {
     BigDecimal selectHadPayAmount(@Param("orderId") Long orderId);
     TradeOrderPayDO selectPayOrderBySupplierOrderNo(@Param("supplierOrderNo") String supplierOrderNo);
     TradeOrderPayDO getOrderPayType(@Param("orderId") Long orderId);
+
+    /**
+     * 查询退款统计数据(按退款时间分组)
+     *
+     * @param startDateTime 开始时间
+     * @param endDateTime   结束时间
+     * @return 退款统计列表
+     */
+    List<RefundStatisticsVO> selectRefundStatistics(@Param("startDateTime") LocalDateTime startDateTime,
+                                                     @Param("endDateTime") LocalDateTime endDateTime);
 }

+ 28 - 7
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/report/impl/BankStatementReportServiceImpl.java

@@ -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
      *

+ 14 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderPayMapper.xml

@@ -25,4 +25,18 @@
         where p.order_id = #{orderId} and p.pay_status = 1 and p.deleted = 0
         LIMIT 1
     </select>
+
+    <select id="selectRefundStatistics" resultType="com.yc.ship.module.trade.controller.admin.report.vo.RefundStatisticsVO">
+        SELECT
+            tr.refund_time AS refundTime,
+            IFNULL(pay.refund_amount, 0) AS refundAmount
+        FROM trade_order_pay pay
+        LEFT JOIN trade_refund tr ON tr.order_id = pay.order_id AND tr.deleted = 0
+        WHERE pay.deleted = 0
+          AND pay.pay_status = 1
+          AND pay.payment_type IN (1, 2, 3)
+          AND tr.refund_status = 6
+          AND tr.refund_time >= #{startDateTime}
+          AND tr.refund_time <![CDATA[<]]> #{endDateTime}
+    </select>
 </mapper>