Forráskód Böngészése

修改bug:
bug表950,私有应收 跟单结算报表-保险公司报表未结算数据不对

jiakai 2 hónapja
szülő
commit
b2d3a9cd2d

+ 49 - 12
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -917,8 +917,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
         // 批量查询跟单订单
         Map<String, InsFeeFollowOrder> followOrderMap = batchQueryFollowOrder(allFollowIds);
-        // 批量查询未结算的开票信息
-        Map<String, InsPlyIncomeInvoice> invoiceMap = batchQueryInvoice(allInvoiceIds);
+        // 批量查询未结算的结算信息
+        Map<String, BigDecimal> invoiceNoSettlementDecimalMap = batchQueryInvoice(allInvoiceIds);
         // 批量查询结算单
         Map<String, InsPlyIncomeInvoiceSettlement> settlementMap = batchQuerySettlement(allSettlementIds);
 
@@ -989,12 +989,11 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 vo.setTotalUnSettlementAmount(BigDecimal.ZERO);
             }else{
                 // 和wwq讨论过了,这个就是统计已开票未结算的数据
-                BigDecimal invoiceNoSettlement = invoiceIds.stream()
-                        .map(invoiceMap::get)
+                BigDecimal reduce = invoiceIds.stream()
+                        .map(invoiceNoSettlementDecimalMap::get)
                         .filter(Objects::nonNull)
-                        .map(InsPlyIncomeInvoice::getReceivableSupervisePremium)
                         .reduce(BigDecimal.ZERO, BigDecimal::add);
-                vo.setTotalUnSettlementAmount(invoiceNoSettlement);
+                vo.setTotalUnSettlementAmount(reduce);
             }
 
             aggResult.add(vo);
@@ -1017,18 +1016,56 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     }
 
     /**
-     * 批量查询未结算的开票信息
+     * 批量查询未结算的结算信息
      */
-    private Map<String, InsPlyIncomeInvoice> batchQueryInvoice(Set<String> invoiceIdSet) {
+    private Map<String, BigDecimal> batchQueryInvoice(Set<String> invoiceIdSet) {
+        Map<String, BigDecimal> resultMap = new HashMap<>(0);
         if (CollUtil.isEmpty(invoiceIdSet)) {
-            return new HashMap<>(0);
+            return resultMap;
         }
+
+        // 1、查询有效发票主记录 status = "0"
         LambdaQueryWrapper<InsPlyIncomeInvoice> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(InsPlyIncomeInvoice::getId, invoiceIdSet);
         wrapper.eq(InsPlyIncomeInvoice::getStatus, "0");
-        List<InsPlyIncomeInvoice> insPlyIncomeInvoices = insPlyIncomeInvoiceMapper.selectList(wrapper);
-        return insPlyIncomeInvoices.stream()
-                .collect(Collectors.toMap(InsPlyIncomeInvoice::getId, Function.identity(), (k1, k2) -> k1));
+        List<InsPlyIncomeInvoice> invoiceList = insPlyIncomeInvoiceMapper.selectList(wrapper);
+        if (CollUtil.isEmpty(invoiceList)) {
+            return resultMap;
+        }
+
+        // 取出有效发票id集合
+        Set<String> validInvoiceIds = invoiceList.stream()
+                .map(InsPlyIncomeInvoice::getId)
+                .collect(Collectors.toSet());
+
+        // 2、批量查询所有对应的结算明细
+        LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> settleWrapper = new LambdaQueryWrapper<>();
+        settleWrapper.in(InsPlyIncomeInvoiceSettlement::getInvoiceId, validInvoiceIds);
+        List<InsPlyIncomeInvoiceSettlement> settlementList = insPlyIncomeInvoiceSettlementMapper.selectList(settleWrapper);
+
+        // 3、按invoiceId分组,累加 actualReceivedAmount
+        Map<String, BigDecimal> sumSettleMap = settlementList.stream()
+                .collect(Collectors.groupingBy(
+                        InsPlyIncomeInvoiceSettlement::getInvoiceId,
+                        Collectors.reducing(
+                                BigDecimal.ZERO,
+                                InsPlyIncomeInvoiceSettlement::getActualReceivedAmount,
+                                BigDecimal::add
+                        )
+                ));
+
+        // 4、应收监管保费 - 已实收总额
+        for (InsPlyIncomeInvoice invoice : invoiceList) {
+            String invoiceId = invoice.getId();
+            BigDecimal receivablePremium = invoice.getReceivableSupervisePremium() == null
+                    ? BigDecimal.ZERO
+                    : invoice.getReceivableSupervisePremium();
+            BigDecimal sumActual = sumSettleMap.getOrDefault(invoiceId, BigDecimal.ZERO);
+            BigDecimal surplus = receivablePremium.subtract(sumActual);
+            resultMap.put(invoiceId, surplus);
+        }
+
+        return resultMap;
     }
 
     /**