فهرست منبع

修改bug:
私有应收,跟单保险公司报表有开票和结算,但是这里数据显示都是0

jiakai 3 ماه پیش
والد
کامیت
0a6fc81201

+ 13 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -310,4 +310,17 @@ public class InsPlyIncome extends BaseModel {
     @Schema(description = "地区归属")
     private String companyNameSimple;
 
+    @TableField(exist = false)
+    @Schema(description = "交强总比例")
+    private String jqTotalProportion;
+
+    @TableField(exist = false)
+    @Schema(description = "商业总比例")
+    private String syTotalProportion;
+
+    @TableField(exist = false)
+    @Schema(description = "非车总比例")
+    private String jyTotalProportion;
+
+
 }

+ 36 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/FollowCompanyFeeVO.java

@@ -0,0 +1,36 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 保险公司结算费用实体
+ */
+@Data
+public class FollowCompanyFeeVO {
+
+    private String companyName;
+
+    private String companyId;
+
+    /** 分支保险公司ID partner_company_id */
+    private String partnerCompanyId;
+
+    /** 已开票总金额 SUM(invoiced) */
+    private BigDecimal totalInvoiced;
+
+    /** 未开票总金额 SUM(uninvoiced) */
+    private BigDecimal totalUnInvoiced;
+
+    /** 已结算总金额 SUM(实收金额 actual_received_amount) */
+    private BigDecimal totalSettlementAmount;
+
+    /** 未结算总金额  totalInvoiced - totalSettlementAmount */
+    private BigDecimal totalUnSettlementAmount;
+
+    /** 累计应收  totalReceivable */
+    private BigDecimal totalReceivable;
+
+}

+ 19 - 1
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -508,6 +508,12 @@ public class ReceivableController {
         return HttpResult.ok(receivableService.deleteInvoiceById(id) ? "删除成功":"删除失败");
     }
 
+    @DeleteMapping("/deleteFollowInvoiceById/{id}")
+    @Operation(summary = "删除跟单开票记录")
+    public HttpResult<Boolean> deleteFollowInvoiceById(@PathVariable String id){
+        return HttpResult.ok(receivableService.deleteFollowInvoiceById(id) ? "删除成功":"删除失败");
+    }
+
     /**
      * 私有协议批量修改
      *      修改手续费比例(商业险手续费比例, 交强险手续费比例)
@@ -679,7 +685,7 @@ public class ReceivableController {
     }
 
     /**
-     * 私有协议-手续费,跟单费,平台协议三个页面的保险公司报表统计接口
+     * 私有协议-手续费,平台协议两个页面的保险公司报表统计接口
      *
      * @author lipf
      * @date 2026/5/28 11:15
@@ -690,6 +696,18 @@ public class ReceivableController {
         return receivableService.companySuperviseSettlementReport(settlementReportQueryVo);
     }
 
+    /**
+     * 跟单费保险公司报表统计接口
+     *
+     * @author jk
+     * @date 2026/5/28 11:15
+     */
+    @PostMapping("/followCompanySuperviseSettlementReport")
+    @Operation(summary = "保险公司结算报表")
+    public HttpResult<List<FollowCompanyFeeVO>> followCompanySuperviseSettlementReport(@RequestBody SettlementReportQueryVo settlementReportQueryVo) {
+        return HttpResult.ok(receivableService.followCompanySuperviseSettlementReport(settlementReportQueryVo));
+    }
+
     /**
      * 设置指定发票为结算完成状态
      *

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/InsFeeFollowOrderMapper.java

@@ -2,7 +2,10 @@ package com.jzg.organization.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jzg.commons.entity.finance.po.InsFeeFollowOrder;
+import com.jzg.commons.entity.finance.vo.FollowCompanyFeeVO;
+import com.jzg.commons.entity.finance.vo.SettlementReportQueryVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -11,4 +14,10 @@ import java.util.List;
  */
 @Mapper
 public interface InsFeeFollowOrderMapper extends BaseMapper<InsFeeFollowOrder> {
+
+    /**
+     * 私有协议跟单结算报表 多表联查分组统计
+     */
+    List<FollowCompanyFeeVO> selectFollowCompanySettlementReport(@Param("query") SettlementReportQueryVo queryVo);
+
 }

+ 4 - 0
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -501,4 +501,8 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      * @date 2026/6/22 11:40
      */
     HttpResult<String> deletePlatformSettlementById(String id);
+
+    Boolean deleteFollowInvoiceById(String id);
+
+    List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo);
 }

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

@@ -563,6 +563,51 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return insPlyIncomeInvoiceMapper.deleteById(invoiceId) > 0;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean deleteFollowInvoiceById(String invoiceId) {
+        log.info("私有协议-跟单开票记录-删除: id=[{}]", invoiceId);
+        QueryWrapper<InsPlyFollowInvoiceLink> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(InsPlyFollowInvoiceLink::getInvoiceId, invoiceId);
+        queryWrapper.lambda().eq(InsPlyFollowInvoiceLink::getIsDelete, 0);
+        List<InsPlyFollowInvoiceLink> insPlyFollowInvoiceLinks = insPlyFollowInvoiceLinkMapper.selectList(queryWrapper);
+
+        if (CollUtil.isNotEmpty(insPlyFollowInvoiceLinks)){
+            List<String> ids = insPlyFollowInvoiceLinks.stream().map(InsPlyFollowInvoiceLink::getId).toList();
+            List<String> followIds = insPlyFollowInvoiceLinks.stream().map(InsPlyFollowInvoiceLink::getFollowId).toList();
+            insPlyFollowInvoiceLinkMapper.deleteByIds(ids);
+            return insFeeFollowOrderMapper.deleteByIds(followIds) > 0;
+        }
+        return Boolean.FALSE;
+    }
+
+    @Override
+    public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo) {
+        log.info("私有协议-跟单结算记录-结算报表: settlementReportQueryVo=[{}]", JSONUtil.toJsonStr(settlementReportQueryVo));
+
+        List<FollowCompanyFeeVO> followCompanyFeeVos = insFeeFollowOrderMapper.selectFollowCompanySettlementReport(settlementReportQueryVo);
+        // 查询所有保险公司,匹配保险公司的id和名称
+        HttpResult<Map<String, EsmInsCompany>> mapHttpResult = esmInsCompanyClient.queryAllCompanyMap();
+        Map<String, EsmInsCompany> data = mapHttpResult.getData();
+        if (CollUtil.isEmpty(data)){
+            return followCompanyFeeVos;
+        }
+        for (FollowCompanyFeeVO followCompanyFeeVo : followCompanyFeeVos) {
+            followCompanyFeeVo.setCompanyName(null != data.get(followCompanyFeeVo.getPartnerCompanyId()) ? data.get(followCompanyFeeVo.getPartnerCompanyId()).getName() : "");
+            followCompanyFeeVo.setTotalUnSettlementAmount(followCompanyFeeVo.getTotalInvoiced().subtract(followCompanyFeeVo.getTotalSettlementAmount()));
+        }
+        return followCompanyFeeVos;
+    }
+
+    /**
+     * BigDecimal安全相加工具:null值转为0
+     */
+    private BigDecimal addBigDecimal(BigDecimal base, BigDecimal num) {
+        if (num == null) {
+            return base;
+        }
+        return base.add(num);
+    }
 
     /**
      * 填充必要的字段

+ 92 - 0
tenant/organization/src/main/resources/mapper/InsFeeFollowOrderMapper.xml

@@ -0,0 +1,92 @@
+<?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.organization.mapper.InsFeeFollowOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.jzg.commons.entity.finance.po.InsFeeFollowOrder">
+        <id column="id" property="id" />
+        <result column="year" property="year" />
+        <result column="month" property="month" />
+        <result column="company_id" property="companyId" />
+        <result column="partner_company_id" property="partnerCompanyId" />
+        <result column="receivable_premium" property="receivablePremium" />
+        <result column="signing_time" property="signingTime" />
+        <result column="invoiced" property="invoiced" />
+        <result column="uninvoiced" property="uninvoiced" />
+        <result column="invoiced_amount_time" property="invoicedAmountTime" />
+        <result column="reconciliation_amount" property="reconciliationAmount" />
+        <result column="falsely_increased_difference" property="falselyIncreasedDifference" />
+        <result column="falsely_increased_reason" property="falselyIncreasedReason" />
+        <result column="system_code" property="systemCode" />
+        <!-- 继承自 BaseModel 的公共字段 -->
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="is_delete" property="isDelete" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, `year`, `month`, company_id, partner_company_id, receivable_premium,
+        signing_time, invoiced, uninvoiced, invoiced_amount_time, reconciliation_amount,
+        falsely_increased_difference, falsely_increased_reason, system_code,
+        create_by, create_time, update_by, update_time, is_delete
+    </sql>
+
+    <!-- 根据主键查询 -->
+    <select id="selectById" parameterType="java.lang.String" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List" />
+        FROM ins_fee_follow_order
+        WHERE id = #{id} AND is_delete = 0
+    </select>
+
+
+    <select id="selectFollowCompanySettlementReport" resultType="com.jzg.commons.entity.finance.vo.FollowCompanyFeeVO">
+        SELECT
+        ffo.partner_company_id AS partnerCompanyId,
+        COALESCE(SUM(ffo.invoiced), 0.00) AS totalInvoiced,
+        COALESCE(SUM(ffo.uninvoiced), 0.00) AS totalUnInvoiced,
+        COALESCE(SUM(sett.actual_received_amount), 0.00) AS totalSettlementAmount,
+        COALESCE(SUM(ffo.reconciliation_amount), 0.00) AS totalReceivable
+        FROM ins_fee_follow_order ffo
+        -- 跟单订单关联发票中间表
+        INNER JOIN ins_ply_follow_invoice_link link
+        ON ffo.id = link.follow_id AND link.is_delete = 0
+        -- 关联发票主表
+        INNER JOIN ins_ply_income_invoice inv
+        ON link.invoice_id = inv.id AND inv.is_delete = 0
+        -- 左连结算表(无结算数据时金额为0)
+        LEFT JOIN ins_ply_income_invoice_settlement sett
+        ON inv.id = sett.invoice_id AND sett.is_delete = 0
+        <where>
+            ffo.is_delete = 0
+            -- 保险公司companyId筛选
+            <if test="query.companyId != null and query.companyId != ''">
+                AND ffo.company_id = #{query.companyId}
+            </if>
+            -- 跟单订单创建时间范围
+            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+                AND ffo.create_time BETWEEN #{query.startTime} AND #{query.endTime}
+            </if>
+            -- 发票状态筛选
+            <if test="query.status != null">
+                AND inv.status = #{query.status}
+            </if>
+            -- 开票时间范围
+            <if test="query.invoiceStartTime != null and query.invoiceStartTime != '' and query.invoiceEndTime != null and query.invoiceEndTime != ''">
+                AND inv.invoice_time BETWEEN #{query.invoiceStartTime} AND #{query.invoiceEndTime}
+            </if>
+            -- 结算创建时间范围(子查询过滤结算时间)
+            <if test="query.settlementStartTime != null and query.settlementStartTime != '' and query.settlementEndTime != null and query.settlementEndTime != ''">
+                AND sett.create_time BETWEEN #{query.settlementStartTime} AND #{query.settlementEndTime}
+            </if>
+        </where>
+        GROUP BY ffo.partner_company_id
+    </select>
+
+
+</mapper>

+ 3 - 0
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -230,6 +230,9 @@
         (COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) + COALESCE(ipi.jy_supervise_costs_premiums, 0)) AS superviseCostsPremiums,
         -- 3. 总应收跟单费 (修复了括号位置错误,并为最后一个字段补充了默认值 0)
         (COALESCE(ipi.jq_other_costs_premiums, 0) + COALESCE(ipi.sy_other_costs_premiums, 0) + COALESCE(ipi.jy_other_costs_premiums, 0)) AS otherCostsPremiums,
+        (COALESCE(ipi.jq_supervise_costs_proportion, 0) + COALESCE(ipi.jq_other_costs_proportion, 0)) AS jqTotalProportion,
+        (COALESCE(ipi.sy_supervise_costs_proportion, 0) + COALESCE(ipi.sy_other_costs_proportion, 0)) AS syTotalProportion,
+        (COALESCE(ipi.jy_supervise_costs_proportion, 0) + COALESCE(ipi.jy_other_costs_proportion, 0)) AS jyTotalProportion,
         ipi.jq_supervise_costs_premiums,
         ipi.sy_supervise_costs_premiums,
         ipi.jy_supervise_costs_premiums,