Explorar o código

Merge remote-tracking branch 'origin/dev_jzg_lipf_v20260622' into dev_jzg_lipf_v20260622

lipf hai 1 mes
pai
achega
1b2bdecb67

+ 2 - 1
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -3,6 +3,7 @@ package com.jzg.commons.entity.finance.po;
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -56,7 +57,7 @@ public class InsPlyIncome extends BaseModel {
 
     @Schema(description = "签单时间")
     //@TableField(exist = false)
-    @ExcelIgnore
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime signingTime;
 
     @Schema(description = "签单年份")

+ 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>

+ 8 - 8
consoleStatistics/src/main/resources/mapper/ReportReceivableDataMapper.xml

@@ -57,7 +57,7 @@
             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]}
+                AND YEAR(ipi.signing_time) = #{param.year[0]}
             GROUP BY CONCAT(YEAR(ipi.signing_time), '-', LPAD(MONTH(ipi.signing_time), 2, '0'))
         ) r
         LEFT JOIN (
@@ -68,7 +68,7 @@
             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]}
+                AND YEAR(ipii.create_time) = #{param.year[0]}
             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 (
@@ -80,7 +80,7 @@
             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]}
+                AND YEAR(ipiis.create_time) = #{param.year[0]}
             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
@@ -127,7 +127,7 @@
             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]}
+                AND YEAR(ipi.signing_time) = #{param.year[0]}
             GROUP BY ipi.company_id, ipi.company_name
         ) rc
         LEFT JOIN (
@@ -139,7 +139,7 @@
             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]}
+                AND YEAR(ipii.create_time) = #{param.year[0]}
             GROUP BY ipii.company_id
         ) i ON rc.company_id = i.company_id
         LEFT JOIN (
@@ -160,7 +160,7 @@
                 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 YEAR(ipiis.create_time) = #{param.year[0]}
                 AND ipii.company_id IS NOT NULL
             GROUP BY ipii.company_id
             ) t
@@ -172,7 +172,7 @@
                 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 YEAR(ipiis.create_time) = #{param.year[0]}
                 AND ipii.company_id IS NULL
             ) plat
         ) s ON rc.company_id = s.company_id
@@ -186,7 +186,7 @@
             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]}
+                AND YEAR(ipii.create_time) = #{param.year[0]}
             GROUP BY ipii.company_id
         ) us ON rc.company_id = us.company_id
     </select>

+ 1 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -5422,6 +5422,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if(CollUtil.isNotEmpty(records)){
             exportOtherExcelDtos = records.stream().map(action->{
                 ExportOtherExcelDto dto = new  ExportOtherExcelDto();
+                dto.setSigningTime(null != action.getSigningTime() ? action.getSigningTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
                 BeanUtils.copyProperties(action,dto);
                 return dto;
             }).toList();