Prechádzať zdrojové kódy

完成数据报表中,财务数据-应付统计列表13.1的开发

jiakai 2 mesiacov pred
rodič
commit
7db63ff76a

+ 20 - 0
consoleStatistics/src/main/java/com/jzg/console/controller/ReportFinanceDataManageController.java

@@ -461,4 +461,24 @@ public class ReportFinanceDataManageController extends BaseController {
         reportReceivableDataService.exportReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
     }
 
+    /**
+     * 财务数据-应付统计:按月份汇总查询应付数据
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     * 保费按签单时间(signing_time)统计,佣金/提现按创建时间(create_time)统计
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应付统计", description = "财务数据-应付统计(按月份汇总)")
+    @PostMapping(value = "/payableStatistics")
+    public HttpResult<?> payableStatistics(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        try {
+            String systemCode = getSystemCode();
+            List<?> list = reportMeetDataService.getPayableStatisticsByMonth(reportSearchCommonVo, systemCode);
+            return HttpResult.ok(list);
+        } catch (Exception e) {
+            log.error("财务数据-应付统计异常", e);
+            return HttpResult.error(e.getMessage());
+        }
+    }
+
 }

+ 27 - 0
consoleStatistics/src/main/java/com/jzg/console/mapper/ReportMeetDataMapper.java

@@ -0,0 +1,27 @@
+package com.jzg.console.mapper;
+
+import com.jzg.commons.entity.report.dto.ReportMeetDataDto;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 财务数据-应付统计 Mapper
+ */
+@Mapper
+public interface ReportMeetDataMapper {
+
+    /**
+     * 按月份汇总应付统计数据
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     *
+     * @param reportSearchCommonVo 查询参数(year 为年份集合,如 ["2026"])
+     * @param systemCode 系统编码(当前登录用户的租户编码)
+     * @return 按月份汇总的应付统计数据
+     */
+    List<ReportMeetDataDto> getPayableStatisticsByMonth(@Param("param") ReportSearchCommonVo reportSearchCommonVo,
+                                                        @Param("systemCode") String systemCode);
+}

+ 11 - 0
consoleStatistics/src/main/java/com/jzg/console/service/ReportMeetDataService.java

@@ -20,4 +20,15 @@ public interface ReportMeetDataService extends  ReportBaseService{
      *  @Description:  财务数据-应付-列表
      */
     List<?> getListByParams(ReportSearchCommonVo reportSearchCommonVo);
+
+    /**
+     * 按月份汇总应付统计数据
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     *
+     * @param reportSearchCommonVo 查询参数(year 为年份集合,如 ["2026"])
+     * @param systemCode 系统编码(当前登录用户的租户编码)
+     * @return 按月份汇总的应付统计数据
+     */
+    List<?> getPayableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
 }

+ 28 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportMeetDataServiceImpl.java

@@ -1,6 +1,8 @@
 package com.jzg.console.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,9 +10,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.entity.report.dto.*;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.console.mapper.ReportMeetDataMapper;
 import com.jzg.console.service.ReportMeetDataService;
 import com.jzg.console.service.ReportReceivableDataService;
 import io.swagger.v3.oas.annotations.media.Schema;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
 
@@ -27,6 +33,12 @@ import java.util.List;
  */
 @Service
 public class ReportMeetDataServiceImpl extends ReportBaseServiceImpl implements ReportMeetDataService {
+
+    private static final Logger log = LoggerFactory.getLogger(ReportMeetDataServiceImpl.class);
+
+    @Autowired
+    private ReportMeetDataMapper reportMeetDataMapper;
+
     /**
      *  @version
      *  @author: hxl
@@ -38,6 +50,22 @@ public class ReportMeetDataServiceImpl extends ReportBaseServiceImpl implements
         return getList();
     }
 
+    /**
+     * 按月份汇总应付统计数据
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     */
+    @Override
+    public List<?> getPayableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+        log.info("财务数据-应付统计(按月份汇总). reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
+        List<String> years = reportSearchCommonVo.getYear();
+        if (CollUtil.isEmpty(years)) {
+            log.warn("查询年份为空,返回空列表");
+            return new ArrayList<>();
+        }
+        return reportMeetDataMapper.getPayableStatisticsByMonth(reportSearchCommonVo, systemCode);
+    }
+
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
         return null;

+ 107 - 0
consoleStatistics/src/main/resources/mapper/ReportMeetDataMapper.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.console.mapper.ReportMeetDataMapper">
+
+    <!-- 应付统计结果映射 -->
+    <resultMap id="PayableStatisticsResultMap" type="com.jzg.commons.entity.report.dto.ReportMeetDataDto">
+        <result column="year_and_month_time" property="yearAndMonthTime"/>
+        <result column="sum_premium" property="sumPremium"/>
+        <result column="payable_commission_money" property="payableCommissionMoney"/>
+        <result column="unwithdrawn_money" property="unwithdrawnMoney"/>
+        <result column="withdrawing_money" property="withdrawingMoney"/>
+        <result column="paid_money" property="paidMoney"/>
+    </resultMap>
+
+    <!--
+        按月份汇总应付统计数据
+        说明:
+        1. 保费:ins_fee_orders.total_premium 按签单时间(signing_time)月份汇总(含补录订单)
+        2. 应付佣金/未提现/已付款:sys_user_account_change_log 按创建时间(create_time)月份汇总
+           - amount 字段带符号,正数=新增(应付佣金),负数=提现(已付款)
+           - amount 等价于 amount_after - amount_before,且更可靠(amount_after 可能因并发不准)
+           - 应付佣金 = 所有新增(正数)求和
+           - 未提现 = 新增 - 提现 = 所有 amount 求和
+           - 已付款 = 所有提现(负数)取绝对值求和
+        3. 提现中:sys_amount_auditing 中 auditing_status=0(待付款)的提现金额按创建时间月份汇总
+        4. sys_amount_auditing 与 sys_user_account_change_log 可通过
+           sys_amount_auditing.id = sys_user_account_change_log.related_amount_auditing_id 关联
+    -->
+    <select id="getPayableStatisticsByMonth" resultMap="PayableStatisticsResultMap">
+        SELECT
+            m.year_and_month_time,
+            COALESCE(p.sum_premium, 0) AS sum_premium,
+            COALESCE(c.payable_commission, 0) AS payable_commission_money,
+            COALESCE(c.unwithdrawn, 0) AS unwithdrawn_money,
+            COALESCE(w.withdrawing, 0) AS withdrawing_money,
+            COALESCE(c.paid, 0) AS paid_money
+        FROM (
+            <!-- 汇总所有涉及到的年月集合:保费按签单时间,佣金/提现按创建时间 -->
+            SELECT CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0')) AS year_and_month_time
+            FROM ins_fee_orders ifo
+            WHERE ifo.is_delete = 0
+                AND ifo.system_code = #{systemCode}
+                AND YEAR(ifo.signing_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0'))
+            UNION
+            SELECT CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0')) AS year_and_month_time
+            FROM sys_user_account_change_log suacl
+            WHERE suacl.is_delete = 0
+                AND suacl.status = 10
+                AND suacl.system_code = #{systemCode}
+                AND YEAR(suacl.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0'))
+            UNION
+            SELECT CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0')) AS year_and_month_time
+            FROM sys_amount_auditing saa
+            WHERE saa.is_delete = 0
+                AND saa.system_code = #{systemCode}
+                AND saa.auditing_status = 0
+                AND YEAR(saa.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0'))
+        ) m
+        LEFT JOIN (
+            <!-- 保费:按签单时间月份汇总订单总保费(含补录订单) -->
+            SELECT
+                CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(ifo.total_premium, 0)) AS sum_premium
+            FROM ins_fee_orders ifo
+            WHERE ifo.is_delete = 0
+                AND ifo.system_code = #{systemCode}
+                AND YEAR(ifo.signing_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0'))
+        ) p ON m.year_and_month_time = p.year_and_month_time
+        LEFT JOIN (
+            <!-- 应付佣金/未提现/已付款:按账户变更记录创建时间月份汇总 -->
+            SELECT
+                CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0')) AS year_and_month_time,
+                SUM(CASE WHEN suacl.amount &gt; 0 THEN suacl.amount ELSE 0 END) AS payable_commission,
+                SUM(suacl.amount) AS unwithdrawn,
+                SUM(CASE WHEN suacl.amount &lt; 0 THEN ABS(suacl.amount) ELSE 0 END) AS paid
+            FROM sys_user_account_change_log suacl
+            WHERE suacl.is_delete = 0
+                AND suacl.status = 10
+                AND suacl.system_code = #{systemCode}
+                AND YEAR(suacl.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0'))
+        ) c ON m.year_and_month_time = c.year_and_month_time
+        LEFT JOIN (
+            <!-- 提现中:按提现申请创建时间月份汇总未付款(auditing_status=0)的提现金额 -->
+            SELECT
+                CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(saa.amount, 0)) AS withdrawing
+            FROM sys_amount_auditing saa
+            WHERE saa.is_delete = 0
+                AND saa.system_code = #{systemCode}
+                AND saa.auditing_status = 0
+                AND YEAR(saa.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0'))
+        ) w ON m.year_and_month_time = w.year_and_month_time
+        ORDER BY m.year_and_month_time ASC
+    </select>
+</mapper>