Răsfoiți Sursa

修改bug:
bug表901,私有应收 跟单结算报表-保险公司报表保险公司筛选项筛不出来

jiakai 1 lună în urmă
părinte
comite
41a7dbbd05

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

@@ -793,6 +793,17 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             return resultList;
         }
 
+        // 查询当前公司下所有的子公司
+        if (StrUtil.isNotBlank(settlementReportQueryVo.getCompanyId())){
+            // 将全量数据按照 parentId 进行分组,key 是 parentId,value 是该 parentId 下的所有公司列表
+            Map<String, List<EsmInsCompany>> parentGroupMap = companyMap.values().stream()
+                    .filter(c -> c.getParentId() != null)
+                    .collect(Collectors.groupingBy(EsmInsCompany::getParentId));
+            List<String> allChildIdspOtimized = getAllChildIdsOptimized(settlementReportQueryVo.getCompanyId(), parentGroupMap);
+            allChildIdspOtimized.add(settlementReportQueryVo.getCompanyId());
+            settlementReportQueryVo.setCompanyIdList(allChildIdspOtimized);
+        }
+
         // 2. 查询跟单主数据并分组聚合
         List<FollowCompanyFeeVO> originalFollowList = insFeeFollowOrderMapper.selectFollowCompanySettlementReport(settlementReportQueryVo);
         if (CollUtil.isNotEmpty(originalFollowList)) {
@@ -928,6 +939,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     .map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
             vo.setTotalSettlementAmount(totalSettlementAmount);
+
+            // 回款差额
+            BigDecimal totalPaymentDifference = settlementIds.stream()
+                    .map(settlementMap::get)
+                    .filter(Objects::nonNull)
+                    .map(InsPlyIncomeInvoiceSettlement::getSettlementPaymentDifference)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            vo.setTotalPaymentDifference(totalPaymentDifference);
+
             // 设置未结算总金额,获取所有ins_fee_follow_order数据,只有所以的都结算了,才能算已结算
             List<InsFeeFollowOrder> insFeeFollowOrderList = followOrderMap.values().stream().filter(insFeeFollowOrder -> insFeeFollowOrder.getYear().toString().equals(year) && insFeeFollowOrder.getMonth().toString().equals(month) && insFeeFollowOrder.getPartnerCompanyId().equals(partnerCompanyId) && insFeeFollowOrder.getInvoiceType().equals(invoiceType)).toList();
             if (insFeeFollowOrderList.size() == insFeeFollowOrderList.stream().filter(insFeeFollowOrder -> SettlementIdentificationEnum.SETTLED.getCode().equals(insFeeFollowOrder.getSettlementIdentification())).count()){
@@ -991,7 +1011,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     private List<InsPlyIncomeDto> queryFollowIncomeData(SettlementReportQueryVo queryVo) {
         QueryFollowIncomeVo incomeVo = QueryFollowIncomeVo.builder()
                 .systemCode(baseController.getSystemCode())
-                .companyId(queryVo.getCompanyId())
+                .companyIdList(queryVo.getCompanyIdList())
                 .startTime(queryVo.getStartTime()).endTime(queryVo.getEndTime())
                 .signingStartTime(queryVo.getSigningStartTime()).signingEndTime(queryVo.getSigningEndTime())
                 .build();
@@ -6514,5 +6534,18 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ISO_LOCAL_DATE);
         return date.atTime(23, 59, 59, 999999999);
     }
+
+    // 递归获取所有子孙ID
+    private List<String> getAllChildIdsOptimized(String parentId, Map<String, List<EsmInsCompany>> parentGroupMap) {
+        List<String> result = new ArrayList<>();
+        // 直接通过 parentId 获取子节点列表,无需遍历全量数据
+        List<EsmInsCompany> children = parentGroupMap.getOrDefault(parentId, Collections.emptyList());
+
+        for (EsmInsCompany company : children) {
+            result.add(company.getId());
+            result.addAll(getAllChildIdsOptimized(company.getId(), parentGroupMap));
+        }
+        return result;
+    }
 }
 

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

@@ -74,9 +74,9 @@
                     #{item}
                 </foreach>
             </if>
-            <if test="query.companyId != null and query.companyId != ''" >
+            <!--<if test="query.companyId != null and query.companyId != ''" >
                 AND ffo.partner_company_id = #{query.companyId}
-            </if>
+            </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}

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

@@ -2126,7 +2126,7 @@
                 AND a.create_time between #{query.startTime} and #{query.endTime}
             </if>
             <if test="query.companyIdList != null and query.companyIdList.size() > 0" >
-                AND a.company_id in
+                AND b.partner_company_id in
                 <foreach collection="query.companyIdList" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>