Prechádzať zdrojové kódy

数据报表 12.1的财务数据-应收接口开发
数据报表 12.2的财务数据-应收明细查询接口开发

jiakai 1 mesiac pred
rodič
commit
4c7fa3e7fb

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

@@ -379,4 +379,43 @@ public class ReportFinanceDataManageController extends BaseController {
         }
         }
     }
     }
 
 
+    /**
+     * 财务数据-应收统计:按月份汇总查询应收数据
+     * 查询选中年份的私有协议(车险+非车的手续费+跟单费)应收数据,按月份汇总
+     * 返回:时间(年月)、未开票、已开票、已结算、未结算
+     * 当前以签单时间为统计维度来区分年-月
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应收统计", description = "财务数据-应收统计(按月份汇总)")
+    @PostMapping(value = "/receivableStatistics")
+    public HttpResult<?> receivableStatistics(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        try {
+            String systemCode = getSystemCode();
+            List<?> list = reportReceivableDataService.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
+            return HttpResult.ok(list);
+        } catch (Exception e) {
+            log.error("财务数据-应收统计异常", e);
+            return HttpResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 财务数据-应收统计明细:按保险公司分组查询应收数据
+     * 查询选中年月的应收数据,按保险公司分组
+     * 返回:公司ID、公司名称、应收、未开票、已开票、未结算、已结算(各包含手续费金额、跟单费金额、平台应收金额、合计金额)
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应收统计明细", description = "财务数据-应收统计明细(按保险公司分组)")
+    @PostMapping(value = "/receivableStatisticsDetail")
+    public HttpResult<?> receivableStatisticsDetail(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        try {
+            String systemCode = getSystemCode();
+            List<?> list = reportReceivableDataService.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+            return HttpResult.ok(list);
+        } catch (Exception e) {
+            log.error("财务数据-应收统计明细异常", e);
+            return HttpResult.error(e.getMessage());
+        }
+    }
+
 }
 }

+ 31 - 0
consoleStatistics/src/main/java/com/jzg/console/mapper/ReportReceivableDataMapper.java

@@ -0,0 +1,31 @@
+package com.jzg.console.mapper;
+
+import com.jzg.commons.entity.report.dto.ReportReceivableDataDto;
+import com.jzg.commons.entity.report.dto.ReportReceivableDetailDto;
+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
+public interface ReportReceivableDataMapper {
+
+    /**
+     * 按月份统计应收数据
+     * 查询选中年份的私有协议应收数据,按月份汇总
+     * @param reportSearchCommonVo 查询参数
+     * @param systemCode 系统编码
+     * @return 按月份汇总的应收数据
+     */
+    List<ReportReceivableDataDto> getReceivableStatisticsByMonth(@Param("param") ReportSearchCommonVo reportSearchCommonVo, @Param("systemCode") String systemCode);
+
+    /**
+     * 按保险公司统计应收明细数据
+     * 查询选中年月的应收数据,按保险公司分组
+     * @param reportSearchCommonVo 查询参数
+     * @param systemCode 系统编码
+     * @return 按保险公司分组的应收明细数据
+     */
+    List<ReportReceivableDetailDto> getReceivableStatisticsDetail(@Param("param") ReportSearchCommonVo reportSearchCommonVo, @Param("systemCode") String systemCode);
+}

+ 24 - 2
consoleStatistics/src/main/java/com/jzg/console/service/ReportReceivableDataService.java

@@ -13,7 +13,7 @@ import java.util.List;
 public interface ReportReceivableDataService extends  ReportBaseService{
 public interface ReportReceivableDataService extends  ReportBaseService{
     /**
     /**
      *  @version
      *  @version
-     *  @author: hxl
+     *  @author: jk
      *  @Date: 2025/9/26 10:37
      *  @Date: 2025/9/26 10:37
      *  @Description:  列表
      *  @Description:  列表
      */
      */
@@ -22,9 +22,31 @@ public interface ReportReceivableDataService extends  ReportBaseService{
 
 
     /**
     /**
      *  @version
      *  @version
-     *  @author: hxl
+     *  @author: jk
      *  @Date: 2025/9/26 10:37
      *  @Date: 2025/9/26 10:37
      *  @Description:  明细
      *  @Description:  明细
      */
      */
     List<?> getDetailListByParams(ReportSearchCommonVo reportSearchCommonVo);
     List<?> getDetailListByParams(ReportSearchCommonVo reportSearchCommonVo);
+
+    /**
+     *  @version
+     *  @author: jk
+     *  @Date: 2026/7/20
+     *  @Description:  财务数据-应收统计(按月份汇总)
+     *  @param reportSearchCommonVo 查询参数(包含年份)
+     *  @param systemCode 系统编码
+     *  @return 按月份汇总的应收数据列表
+     */
+    List<?> getReceivableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+
+    /**
+     *  @version
+     *  @author: jk
+     *  @Date: 2026/7/20
+     *  @Description:  财务数据-应收统计明细(按保险公司分组)
+     *  @param reportSearchCommonVo 查询参数(包含年月)
+     *  @param systemCode 系统编码
+     *  @return 按保险公司分组的应收明细数据列表
+     */
+    List<?> getReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
 }
 }

+ 27 - 2
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportReceivableDataServiceImpl.java

@@ -1,15 +1,15 @@
 package com.jzg.console.service.impl;
 package com.jzg.console.service.impl;
 
 
-
-
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.jzg.commons.entity.report.dto.*;
 import com.jzg.commons.entity.report.dto.*;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.console.mapper.ReportReceivableDataMapper;
 import com.jzg.console.service.ReportReceivableDataService;
 import com.jzg.console.service.ReportReceivableDataService;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -27,6 +27,9 @@ public class ReportReceivableDataServiceImpl extends ReportBaseServiceImpl imple
 
 
     private static final Logger log = LoggerFactory.getLogger(ReportReceivableDataServiceImpl.class);
     private static final Logger log = LoggerFactory.getLogger(ReportReceivableDataServiceImpl.class);
 
 
+    @Autowired
+    private ReportReceivableDataMapper reportReceivableDataMapper;
+
     /**
     /**
      *  @version
      *  @version
      *  @author: hxl
      *  @author: hxl
@@ -122,4 +125,26 @@ public class ReportReceivableDataServiceImpl extends ReportBaseServiceImpl imple
         list.add(reportReceivableDataDetailDto);
         list.add(reportReceivableDataDetailDto);
         return list;
         return list;
     }
     }
+
+    @Override
+    public List<?> getReceivableStatisticsByMonth(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 reportReceivableDataMapper.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
+    }
+
+    @Override
+    public List<?> getReceivableStatisticsDetail(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 reportReceivableDataMapper.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+    }
 }
 }

+ 187 - 0
consoleStatistics/src/main/resources/mapper/ReportReceivableDataMapper.xml

@@ -0,0 +1,187 @@
+<?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.ReportReceivableDataMapper">
+
+    <resultMap id="ReceivableStatisticsResultMap" type="com.jzg.commons.entity.report.dto.ReportReceivableDataDto">
+        <result column="year_and_month_time" property="yearAndMonthTime"/>
+        <result column="total_receivable" property="accountsReceivableMoney"/>
+        <result column="uninvoiced_money" property="uninvoicedMoney"/>
+        <result column="invoiced_money" property="invoicedMoney"/>
+        <result column="settled_money" property="settledMoney"/>
+        <result column="unsettled_money" property="unsettledMoney"/>
+    </resultMap>
+
+    <resultMap id="ReceivableDetailResultMap" type="com.jzg.commons.entity.report.dto.ReportReceivableDetailDto">
+        <result column="company_id" property="companyId"/>
+        <result column="company_name" property="companyName"/>
+        <result column="receivable_commission_fee" property="receivable.commissionFee"/>
+        <result column="receivable_follow_fee" property="receivable.followFee"/>
+        <result column="receivable_platform" property="receivable.platformReceivable"/>
+        <result column="receivable_total" property="receivable.totalAmount"/>
+        <result column="uninvoiced_commission_fee" property="uninvoiced.commissionFee"/>
+        <result column="uninvoiced_follow_fee" property="uninvoiced.followFee"/>
+        <result column="uninvoiced_platform" property="uninvoiced.platformReceivable"/>
+        <result column="uninvoiced_total" property="uninvoiced.totalAmount"/>
+        <result column="invoiced_commission_fee" property="invoiced.commissionFee"/>
+        <result column="invoiced_follow_fee" property="invoiced.followFee"/>
+        <result column="invoiced_platform" property="invoiced.platformReceivable"/>
+        <result column="invoiced_total" property="invoiced.totalAmount"/>
+        <result column="unsettled_commission_fee" property="unsettled.commissionFee"/>
+        <result column="unsettled_follow_fee" property="unsettled.followFee"/>
+        <result column="unsettled_platform" property="unsettled.platformReceivable"/>
+        <result column="unsettled_total" property="unsettled.totalAmount"/>
+        <result column="settled_commission_fee" property="settled.commissionFee"/>
+        <result column="settled_follow_fee" property="settled.followFee"/>
+        <result column="settled_platform" property="settled.platformReceivable"/>
+        <result column="settled_total" property="settled.totalAmount"/>
+    </resultMap>
+
+    <select id="getReceivableStatisticsByMonth" resultMap="ReceivableStatisticsResultMap">
+        SELECT
+            r.year_and_month_time,
+            r.total_receivable,
+            (r.private_receivable - COALESCE(i.invoiced_money, 0)) AS uninvoiced_money,
+            COALESCE(i.invoiced_money, 0) AS invoiced_money,
+            COALESCE(s.settled_money, 0) AS settled_money,
+            (r.total_receivable - COALESCE(s.settled_money, 0)) AS unsettled_money
+        FROM (
+            SELECT
+                CONCAT(YEAR(ipi.signing_time), '-', LPAD(MONTH(ipi.signing_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(ipi.jq_receivable_premium, 0) + COALESCE(ipi.sy_receivable_premium, 0) + COALESCE(ipi.jy_receivable_premium, 0)) AS total_receivable,
+                SUM(
+                    COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) +
+                    COALESCE(ipi.jy_supervise_costs_premiums, 0) +
+                    COALESCE(ipi.jq_other_costs_premiums, 0) + COALESCE(ipi.sy_other_costs_premiums, 0) +
+                    COALESCE(ipi.jy_other_costs_premiums, 0)
+                ) AS private_receivable
+            FROM ins_ply_income ipi
+            WHERE ipi.is_delete = 0
+                AND ipi.system_code = #{systemCode}
+                AND YEAR(ipi.signing_time) between #{param.year[0]} and #{param.year[1]}
+            GROUP BY CONCAT(YEAR(ipi.signing_time), '-', LPAD(MONTH(ipi.signing_time), 2, '0'))
+        ) r
+        LEFT JOIN (
+            SELECT
+                CONCAT(YEAR(ipii.create_time), '-', LPAD(MONTH(ipii.create_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(ipii.receivable_supervise_premium, 0)) AS invoiced_money
+            FROM ins_ply_income_invoice ipii
+            WHERE ipii.is_delete = 0
+                AND ipii.system_code = #{systemCode}
+                AND ipii.invoice_type IN ('1','2','3','4')
+                AND YEAR(ipii.create_time) between #{param.year[0]} and #{param.year[1]}
+            GROUP BY CONCAT(YEAR(ipii.create_time), '-', LPAD(MONTH(ipii.create_time), 2, '0'))
+        ) i ON r.year_and_month_time = i.year_and_month_time
+        LEFT JOIN (
+            SELECT
+                CONCAT(YEAR(ipiis.create_time), '-', LPAD(MONTH(ipiis.create_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(ipiis.actual_received_amount, 0)) AS settled_money
+            FROM ins_ply_income_invoice_settlement ipiis
+            LEFT JOIN ins_ply_income_invoice ipii ON ipii.id = ipiis.invoice_id AND ipii.is_delete = 0
+            WHERE ipiis.is_delete = 0
+                AND ipii.system_code = #{systemCode}
+                AND ipii.invoice_type IN ('1','2','3','4','5','6')
+                AND YEAR(ipiis.create_time) between #{param.year[0]} and #{param.year[1]}
+            GROUP BY CONCAT(YEAR(ipiis.create_time), '-', LPAD(MONTH(ipiis.create_time), 2, '0'))
+        ) s ON r.year_and_month_time = s.year_and_month_time
+        ORDER BY r.year_and_month_time ASC
+    </select>
+
+    <select id="getReceivableStatisticsDetail" resultMap="ReceivableDetailResultMap">
+        SELECT
+            rc.company_id,
+            (SELECT NAME FROM esm_ins_company WHERE id = rc.company_id) AS company_name,
+            COALESCE(rc.receivable_commission, 0) AS receivable_commission_fee,
+            COALESCE(rc.receivable_follow, 0) AS receivable_follow_fee,
+            COALESCE(rc.receivable_platform, 0) AS receivable_platform,
+            (COALESCE(rc.receivable_commission, 0) + COALESCE(rc.receivable_follow, 0) + COALESCE(rc.receivable_platform, 0)) AS receivable_total,
+            (COALESCE(rc.receivable_commission, 0) - COALESCE(i.invoiced_commission, 0)) AS uninvoiced_commission_fee,
+            (COALESCE(rc.receivable_follow, 0) - COALESCE(i.invoiced_follow, 0)) AS uninvoiced_follow_fee,
+            0 AS uninvoiced_platform,
+            (COALESCE(rc.receivable_commission, 0) + COALESCE(rc.receivable_follow, 0) - COALESCE(i.invoiced_commission, 0) - COALESCE(i.invoiced_follow, 0)) AS uninvoiced_total,
+            COALESCE(i.invoiced_commission, 0) AS invoiced_commission_fee,
+            COALESCE(i.invoiced_follow, 0) AS invoiced_follow_fee,
+            0 AS invoiced_platform,
+            (COALESCE(i.invoiced_commission, 0) + COALESCE(i.invoiced_follow, 0)) AS invoiced_total,
+            COALESCE(us.unsettled_commission, 0) AS unsettled_commission_fee,
+            COALESCE(us.unsettled_follow, 0) AS unsettled_follow_fee,
+            COALESCE(us.unsettled_platform, 0) AS unsettled_platform,
+            (COALESCE(us.unsettled_commission, 0) + COALESCE(us.unsettled_follow, 0) + COALESCE(us.unsettled_platform, 0)) AS unsettled_total,
+            COALESCE(s.settled_commission, 0) AS settled_commission_fee,
+            COALESCE(s.settled_follow, 0) AS settled_follow_fee,
+            COALESCE(s.settled_platform, 0) AS settled_platform,
+            COALESCE(s.settled_commission, 0) + COALESCE(s.settled_follow, 0) + COALESCE(s.settled_platform, 0) AS settled_total
+        FROM (
+            SELECT
+                ipi.company_id AS company_id,
+                SUM(COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) + COALESCE(ipi.jy_supervise_costs_premiums, 0)) AS receivable_commission,
+                SUM(COALESCE(ipi.jq_other_costs_premiums, 0) + COALESCE(ipi.sy_other_costs_premiums, 0) + COALESCE(ipi.jy_other_costs_premiums, 0)) AS receivable_follow,
+                SUM(COALESCE(ipi.jq_receivable_premium, 0) + COALESCE(ipi.sy_receivable_premium, 0) + COALESCE(ipi.jy_receivable_premium, 0)) -
+                SUM(COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) + COALESCE(ipi.jy_supervise_costs_premiums, 0) +
+                    COALESCE(ipi.jq_other_costs_premiums, 0) + COALESCE(ipi.sy_other_costs_premiums, 0) + COALESCE(ipi.jy_other_costs_premiums, 0)) AS receivable_platform
+            FROM ins_ply_income ipi
+            WHERE ipi.is_delete = 0
+                AND ipi.system_code = #{systemCode}
+                AND YEAR(ipi.signing_time) between #{param.year[0]} and #{param.year[1]}
+            GROUP BY ipi.company_id, ipi.company_name
+        ) rc
+        LEFT JOIN (
+            SELECT
+                ipii.company_id AS company_id,
+                SUM(CASE WHEN ipii.invoice_type IN ('1','3') THEN COALESCE(ipii.receivable_supervise_premium, 0) ELSE 0 END) AS invoiced_commission,
+                SUM(CASE WHEN ipii.invoice_type IN ('2','4') THEN COALESCE(ipii.receivable_supervise_premium, 0) ELSE 0 END) AS invoiced_follow
+            FROM ins_ply_income_invoice ipii
+            WHERE ipii.is_delete = 0
+                AND ipii.system_code = #{systemCode}
+                AND ipii.invoice_type IN ('1','2','3','4')
+                AND YEAR(ipii.create_time) between #{param.year[0]} and #{param.year[1]}
+            GROUP BY ipii.company_id
+        ) i ON rc.company_id = i.company_id
+        LEFT JOIN (
+        SELECT
+            t.company_id,
+            t.settled_commission,
+            t.settled_follow,
+            t.settled_platform + plat.plat_amount AS settled_platform
+        FROM (
+            SELECT
+                ipii.company_id AS company_id,
+                SUM(CASE WHEN ipii.invoice_type IN ('1','3') THEN COALESCE(ipiis.actual_received_amount, 0) ELSE 0 END) AS settled_commission,
+                SUM(CASE WHEN ipii.invoice_type IN ('2','4') THEN COALESCE(ipiis.actual_received_amount, 0) ELSE 0 END) AS settled_follow,
+                SUM(CASE WHEN ipii.invoice_type IN ('5','6') THEN COALESCE(ipiis.actual_received_amount, 0) ELSE 0 END) AS settled_platform
+            FROM ins_ply_income_invoice_settlement ipiis
+            LEFT JOIN ins_ply_income_invoice ipii
+                ON ipii.id = ipiis.invoice_id
+                AND ipii.is_delete = 0
+                AND ipii.system_code = #{systemCode}
+            WHERE ipiis.is_delete = 0
+                AND YEAR(ipiis.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND ipii.company_id IS NOT NULL
+            GROUP BY ipii.company_id
+            ) t
+            CROSS JOIN (
+            SELECT SUM(COALESCE(ipiis.actual_received_amount,0)) AS plat_amount
+            FROM ins_ply_income_invoice_settlement ipiis
+            LEFT JOIN ins_ply_income_invoice ipii
+                ON ipii.id = ipiis.invoice_id
+                AND ipii.is_delete = 0
+                AND ipii.system_code = #{systemCode}
+            WHERE ipiis.is_delete = 0
+                AND YEAR(ipiis.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND ipii.company_id IS NULL
+            ) plat
+        ) s ON rc.company_id = s.company_id
+        LEFT JOIN (
+            SELECT
+                ipii.company_id AS company_id,
+                SUM(CASE WHEN ipii.invoice_type IN ('1','3') AND ipii.status = '0' THEN COALESCE(ipii.receivable_supervise_premium, 0) ELSE 0 END) AS unsettled_commission,
+                SUM(CASE WHEN ipii.invoice_type IN ('2','4') AND ipii.status = '0' THEN COALESCE(ipii.receivable_supervise_premium, 0) ELSE 0 END) AS unsettled_follow,
+                SUM(CASE WHEN ipii.invoice_type IN ('5','6') AND ipii.status = '0' THEN COALESCE(ipii.receivable_supervise_premium, 0) ELSE 0 END) AS unsettled_platform
+            FROM ins_ply_income_invoice ipii
+            WHERE ipii.is_delete = 0
+                AND ipii.system_code = #{systemCode}
+                AND ipii.invoice_type IN ('1','2','3','4','5','6')
+                AND YEAR(ipii.create_time) between #{param.year[0]} and #{param.year[1]}
+            GROUP BY ipii.company_id
+        ) us ON rc.company_id = us.company_id
+    </select>
+</mapper>