Преглед на файлове

修改bug:
私有应收-跟单,报表查询永诚保司之后还是显示诚泰

jiakai преди 3 месеца
родител
ревизия
1957eaa677

+ 27 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/QueryFollowIncomeVo.java

@@ -0,0 +1,27 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+public class QueryFollowIncomeVo  extends PageRequest implements Serializable {
+
+    @Schema(description = "开始年份")
+    private Integer startYear;
+
+    @Schema(description = "结束年份")
+    private Integer endYear;
+
+    @Schema(description = "租户id")
+    private String systemCode;
+
+    @Schema(description = "保险公司id")
+    private List<String> companyIdList;
+
+}

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementReportQueryVo.java

@@ -16,6 +16,9 @@ public class SettlementReportQueryVo extends PageRequest {
     @Schema(description = "保险公司id")
     @Schema(description = "保险公司id")
     private String companyId;
     private String companyId;
 
 
+    @Schema(description = "保险公司id")
+    private List<String> companyIdList;
+
     @Schema(description = "对接人")
     @Schema(description = "对接人")
     private String contactPerson;
     private String contactPerson;
 
 

+ 2 - 6
tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java

@@ -269,14 +269,10 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
 
 
     /**
     /**
      * 查询
      * 查询
-     * @param startYear
-     * @param endYear
-     * @param systemCode
+     * @param queryFollowIncomeVo
      * @return
      * @return
      */
      */
-    List<InsPlyIncomeDto> queryFollowIncome(@Param("startYear") Integer startYear,
-                                            @Param("endYear") Integer endYear,
-                                            @Param("systemCode")  String systemCode);
+    List<InsPlyIncomeDto> queryFollowIncome(@Param("query") QueryFollowIncomeVo queryFollowIncomeVo);
 
 
     /**
     /**
      * 查询发票结算的金额
      * 查询发票结算的金额

+ 80 - 71
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -707,19 +707,25 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
     /**
      * 私有协议-跟单结算记录-结算报表查询
      * 私有协议-跟单结算记录-结算报表查询
      * <p>
      * <p>
-     * 该方法用于查询私有协议的跟单结算报表数据,包括以下处理逻辑:
-     * 1. 从数据库查询基础结算报表数据
-     * 2. 调用保险公司客户端获取所有保险公司信息
-     * 3. 如果保险公司数据为空,直接返回原始数据
-     * 4. 匹配并填充保险公司名称
-     * 5. 计算未结算金额(已开票金额 - 已结算金额)
-     * 6. 计算未开票金额(累计应收 - 已开票金额)
+     * 该方法用于查询私有协议下跟单车险的结算报表数据,主要处理逻辑包括:
+     * 1. 查询跟单费用结算报表基础数据
+     * 2. 获取保险公司信息并映射公司名称
+     * 3. 按合作公司ID、年份、月份分组统计结算数据
+     * 4. 计算各项金额指标:总应收、已开票、未开票、已结算、未结算等
+     * 5. 补充收入表中的其他费用应收数据(驾意险相关费用)
      * </p>
      * </p>
      *
      *
-     * @param settlementReportQueryVo 结算报表查询条件对象,包含以下主要查询参数:
-     * - companyId: 保险公司ID  - contactPerson: 对接人  - contactPersonPhone: 对接人手机号  - startTime/endTime: 创建时间范围    - invoiceStartTime/invoiceEndTime: 开票时间范围  - settlementStartTime/settlementEndTime: 结算时间范围     - status: 结算状态   - invoiceTypes: 开票类型列表(1-手续费, 2-跟单费, 3-驾意险手续费, 4-驾意险跟单费)  - agreementType: 协议类型  - invoiceStatus: 开票状态(0-未开票, 1-已开票) - systemCode: 租户代码  - signingStartTime/signingEndTime: 签单时间范围
-     * @return List<FollowCompanyFeeVO> 返回跟随公司费用视图对象列表,每个对象包含:
-     * - companyName: 保险公司名称(根据partnerCompanyId匹配填充) - companyId: 保险公司ID   - contactPerson: 对接人  - contactPersonPhone: 对接人手机号  - partnerCompanyId: 分支保险公司ID  - totalInvoiced: 已开票总金额  - totalUnInvoiced: 未开票总金额(计算得出:累计应收 - 已开票金额)   - totalSettlementAmount: 已结算总金额 - totalUnSettlementAmount: 未结算总金额(计算得出:已开票金额 - 已结算金额)  - totalPaymentDifference: 回款差额  - totalReceivable: 累计应收
+     * @param settlementReportQueryVo 结算报表查询条件对象,包含查询所需的过滤参数(如时间范围、公司ID等)
+     * @return List<FollowCompanyFeeVO> 返回跟单公司费用视图对象列表,每个对象包含:
+     *         - partnerCompanyId: 合作公司ID
+     *         - companyName: 合作公司名称
+     *         - year: 年份
+     *         - month: 月份
+     *         - totalReceivable: 总应收金额
+     *         - totalInvoiced: 已开票总金额
+     *         - totalUnInvoiced: 未开票总金额
+     *         - totalSettlementAmount: 已结算总金额
+     *         - totalUnSettlementAmount: 未结算总金额
      */
      */
     @Override
     @Override
     public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo) {
     public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo) {
@@ -732,72 +738,74 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         // 查询所有保险公司,匹配保险公司的id和名称
         // 查询所有保险公司,匹配保险公司的id和名称
         HttpResult<Map<String, EsmInsCompany>> mapHttpResult = esmInsCompanyClient.queryAllCompanyMap();
         HttpResult<Map<String, EsmInsCompany>> mapHttpResult = esmInsCompanyClient.queryAllCompanyMap();
         Map<String, EsmInsCompany> data = mapHttpResult.getData();
         Map<String, EsmInsCompany> data = mapHttpResult.getData();
-        if (CollUtil.isEmpty(data) || CollUtil.isEmpty(followCompanyFeeVos)){
+        if (CollUtil.isEmpty(data)){
             return resultList;
             return resultList;
         }
         }
 
 
-        // 根据分支公司分组
-        Map<String, List<FollowCompanyFeeVO>> followMap = followCompanyFeeVos.stream().collect(Collectors.groupingBy(follow -> follow.getPartnerCompanyId() + "_" + follow.getYear() + "_" + follow.getMonth()));
-        for (Map.Entry<String, List<FollowCompanyFeeVO>> entry : followMap.entrySet()) {
-            // key = 合作公司ID
-            String key = entry.getKey();
-
-            // 分组参数
-            String[] arr = key.split("_");
-            String partnerCompanyId = arr[0];
-            String year = arr[1];
-            String month = arr[2];
-
-
-            // value = 当前公司下所有VO集合
-            List<FollowCompanyFeeVO> voList = entry.getValue();
-
-            // 返回值
-            FollowCompanyFeeVO followCompanyFeeVO = new FollowCompanyFeeVO();
-            followCompanyFeeVO.setPartnerCompanyId(partnerCompanyId);
-
-            List<String> followIds = voList.stream().map(FollowCompanyFeeVO::getFollowId).toList();
-            List<String> invoiceIds = voList.stream().map(FollowCompanyFeeVO::getInvoiceId).toList();
-            List<String> settlementIds = voList.stream().map(FollowCompanyFeeVO::getSettlementId).toList();
-
-            // 根据所有followCompanyFeeVos的followId统计出已开票
-            LambdaQueryWrapper<InsFeeFollowOrder> insFeeFollowOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            insFeeFollowOrderLambdaQueryWrapper.in(InsFeeFollowOrder::getId, followIds);
-            List<InsFeeFollowOrder> insFeeFollowOrders = insFeeFollowOrderMapper.selectList(insFeeFollowOrderLambdaQueryWrapper);
-            // 总金额
-            InsFeeFollowOrder feeFollowOrder = CollUtil.getFirst(insFeeFollowOrders);
-            // 取对账金额
-            BigDecimal receivablePremium = feeFollowOrder.getReconciliationAmount();
-            followCompanyFeeVO.setTotalReceivable(receivablePremium);
-
-            BigDecimal totalInvoiced = insFeeFollowOrders.stream().map(InsFeeFollowOrder::getInvoiced).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-            // 已开票总金额
-            followCompanyFeeVO.setTotalInvoiced(totalInvoiced);
-
-            // 未结算金额
-            followCompanyFeeVO.setTotalUnInvoiced(receivablePremium.subtract(totalInvoiced));
-
-            // 统计结算金额
-            LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            insPlyIncomeInvoiceSettlementLambdaQueryWrapper.in(InsPlyIncomeInvoiceSettlement::getId, settlementIds);
-            List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(insPlyIncomeInvoiceSettlementLambdaQueryWrapper);
-            BigDecimal totalSettlementAmount = insPlyIncomeInvoiceSettlements.stream().map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-            // 已结算总金额
-            followCompanyFeeVO.setTotalSettlementAmount(totalSettlementAmount);
-
-            // 未结算金额
-            followCompanyFeeVO.setTotalUnSettlementAmount(totalInvoiced.subtract(totalSettlementAmount));
-            followCompanyFeeVO.setCompanyName(null != data.get(partnerCompanyId) ? data.get(partnerCompanyId).getName() : "");
-            followCompanyFeeVO.setYear(year);
-            followCompanyFeeVO.setMonth(month);
-
-            resultList.add(followCompanyFeeVO);
-        }
+        if (CollUtil.isNotEmpty(followCompanyFeeVos)){
+            // 根据分支公司分组
+            Map<String, List<FollowCompanyFeeVO>> followMap = followCompanyFeeVos.stream().collect(Collectors.groupingBy(follow -> follow.getPartnerCompanyId() + "_" + follow.getYear() + "_" + follow.getMonth()));
+            for (Map.Entry<String, List<FollowCompanyFeeVO>> entry : followMap.entrySet()) {
+                // key = 合作公司ID
+                String key = entry.getKey();
+
+                // 分组参数
+                String[] arr = key.split("_");
+                String partnerCompanyId = arr[0];
+                String year = arr[1];
+                String month = arr[2];
+
+
+                // value = 当前公司下所有VO集合
+                List<FollowCompanyFeeVO> voList = entry.getValue();
+
+                // 返回值
+                FollowCompanyFeeVO followCompanyFeeVO = new FollowCompanyFeeVO();
+                followCompanyFeeVO.setPartnerCompanyId(partnerCompanyId);
+
+                List<String> followIds = voList.stream().map(FollowCompanyFeeVO::getFollowId).toList();
+                List<String> invoiceIds = voList.stream().map(FollowCompanyFeeVO::getInvoiceId).toList();
+                List<String> settlementIds = voList.stream().map(FollowCompanyFeeVO::getSettlementId).toList();
+
+                // 根据所有followCompanyFeeVos的followId统计出已开票
+                LambdaQueryWrapper<InsFeeFollowOrder> insFeeFollowOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                insFeeFollowOrderLambdaQueryWrapper.in(InsFeeFollowOrder::getId, followIds);
+                List<InsFeeFollowOrder> insFeeFollowOrders = insFeeFollowOrderMapper.selectList(insFeeFollowOrderLambdaQueryWrapper);
+                // 总金额
+                InsFeeFollowOrder feeFollowOrder = CollUtil.getFirst(insFeeFollowOrders);
+                // 取对账金额
+                BigDecimal receivablePremium = feeFollowOrder.getReconciliationAmount();
+                followCompanyFeeVO.setTotalReceivable(receivablePremium);
+
+                BigDecimal totalInvoiced = insFeeFollowOrders.stream().map(InsFeeFollowOrder::getInvoiced).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+                // 已开票总金额
+                followCompanyFeeVO.setTotalInvoiced(totalInvoiced);
+
+                // 未结算金额
+                followCompanyFeeVO.setTotalUnInvoiced(receivablePremium.subtract(totalInvoiced));
+
+                // 统计结算金额
+                LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                insPlyIncomeInvoiceSettlementLambdaQueryWrapper.in(InsPlyIncomeInvoiceSettlement::getId, settlementIds);
+                List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(insPlyIncomeInvoiceSettlementLambdaQueryWrapper);
+                BigDecimal totalSettlementAmount = insPlyIncomeInvoiceSettlements.stream().map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+                // 已结算总金额
+                followCompanyFeeVO.setTotalSettlementAmount(totalSettlementAmount);
 
 
+                // 未结算金额
+                followCompanyFeeVO.setTotalUnSettlementAmount(totalInvoiced.subtract(totalSettlementAmount));
+                followCompanyFeeVO.setCompanyName(null != data.get(partnerCompanyId) ? data.get(partnerCompanyId).getName() : "");
+                followCompanyFeeVO.setYear(year);
+                followCompanyFeeVO.setMonth(month);
+
+                resultList.add(followCompanyFeeVO);
+            }
+        }
 
 
         // 根据incomes的partnerCompanyId + signYear + signMonth,过滤resultList的partnerCompanyId + year + month,根据过滤后的数据进行partnerCompanyId + signYear + signMonth的分组,然后将过滤后剩余的数据,将入到resultList中,
         // 根据incomes的partnerCompanyId + signYear + signMonth,过滤resultList的partnerCompanyId + year + month,根据过滤后的数据进行partnerCompanyId + signYear + signMonth的分组,然后将过滤后剩余的数据,将入到resultList中,
         // 并且设置partnerCompanyId、year、month、totalReceivable为incomes的partnerCompanyId、signYear、signMonth、jq_other_costs_premiums + sy_other_costs_premiums
         // 并且设置partnerCompanyId、year、month、totalReceivable为incomes的partnerCompanyId、signYear、signMonth、jq_other_costs_premiums + sy_other_costs_premiums
-        List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(null, null, baseController.getSystemCode());
+        QueryFollowIncomeVo queryFollowIncomeVo = new QueryFollowIncomeVo(null, null, baseController.getSystemCode(), settlementReportQueryVo.getCompanyIdList());
+        List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(queryFollowIncomeVo);
         if (CollUtil.isNotEmpty(incomes)) {
         if (CollUtil.isNotEmpty(incomes)) {
             // 1. 将resultList现有数据构建 key: partnerCompanyId_year_month 映射,方便快速匹配
             // 1. 将resultList现有数据构建 key: partnerCompanyId_year_month 映射,方便快速匹配
             Map<String, FollowCompanyFeeVO> existVoMap = resultList.stream()
             Map<String, FollowCompanyFeeVO> existVoMap = resultList.stream()
@@ -3700,7 +3708,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         String systemCode = baseController.getUserSystemCode();
         String systemCode = baseController.getUserSystemCode();
 
 
         // 查询该年份下的所有跟进收入数据,并按合作方公司ID进行分组
         // 查询该年份下的所有跟进收入数据,并按合作方公司ID进行分组
-        List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(startYear, endYear, systemCode);
+        QueryFollowIncomeVo queryFollowIncomeVo = new QueryFollowIncomeVo(startYear, endYear, systemCode, null);
+        List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(queryFollowIncomeVo);
 
 
         // ====================== 增加动态条件过滤 ======================
         // ====================== 增加动态条件过滤 ======================
         List<InsPlyIncomeDto> filterIncomes = new ArrayList<>();
         List<InsPlyIncomeDto> filterIncomes = new ArrayList<>();

+ 5 - 2
tenant/organization/src/main/resources/mapper/InsFeeFollowOrderMapper.xml

@@ -66,8 +66,11 @@
         <where>
         <where>
             ffo.is_delete = 0
             ffo.is_delete = 0
             -- 保险公司companyId筛选
             -- 保险公司companyId筛选
-            <if test="query.companyId != null and query.companyId != ''">
-                AND ffo.company_id = #{query.companyId}
+            <if test="query.companyIdList != null and query.companyIdList.size() > 0" >
+                AND ffo.partner_company_id in
+                <foreach collection="query.companyIdList" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
             </if>
             </if>
             -- 跟单订单创建时间范围
             -- 跟单订单创建时间范围
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">

+ 10 - 4
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -2039,11 +2039,17 @@
             a.is_delete=0
             a.is_delete=0
             AND a.agreement_type = 2
             AND a.agreement_type = 2
             AND a.signing_time is not null
             AND a.signing_time is not null
-            <if test="startYear != null and endYear != null">
-                AND YEAR(a.signing_time) BETWEEN #{startYear} AND #{endYear}
+            <if test="query.startYear != null and query.endYear != null">
+                AND YEAR(a.signing_time) BETWEEN #{query.startYear} AND #{query.endYear}
             </if>
             </if>
-            <if test="systemCode != null">
-                AND a.system_code = #{systemCode}
+            <if test="query.systemCode != null">
+                AND a.system_code = #{query.systemCode}
+            </if>
+            <if test="query.companyIdList != null and query.companyIdList.size() > 0" >
+                AND a.company_id in
+                <foreach collection="query.companyIdList" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>