Przeglądaj źródła

修改bug:
跟单应收,已开票金额是355,结算报表显示755

jiakai 3 miesięcy temu
rodzic
commit
9ae1c580e8

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

@@ -15,6 +15,10 @@ public class FollowCompanyFeeVO {
 
     private String companyId;
 
+    private String year;
+
+    private String month;
+
     @Schema(description = "对接人")
     private String contactPerson;
 
@@ -47,4 +51,19 @@ public class FollowCompanyFeeVO {
     /** 累计应收  totalReceivable */
     private BigDecimal totalReceivable;
 
+    /**
+     * 开票记录id
+     */
+    private String invoiceId;
+
+    /**
+     * 结算记录id
+     */
+    private String settlementId;
+
+    /**
+     * 跟单id
+     */
+    private String followId;
+
 }

+ 67 - 7
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -729,19 +729,79 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo) {
         log.info("私有协议-跟单结算记录-结算报表: settlementReportQueryVo=[{}]", JSONUtil.toJsonStr(settlementReportQueryVo));
 
+        // 返回值
+        List<FollowCompanyFeeVO> resultList = CollUtil.newArrayList();
+
         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;
+        if (CollUtil.isEmpty(data) || CollUtil.isEmpty(followCompanyFeeVos)){
+            return resultList;
         }
-        for (FollowCompanyFeeVO followCompanyFeeVo : followCompanyFeeVos) {
-            followCompanyFeeVo.setCompanyName(null != data.get(followCompanyFeeVo.getPartnerCompanyId()) ? data.get(followCompanyFeeVo.getPartnerCompanyId()).getName() : "");
-            followCompanyFeeVo.setTotalUnSettlementAmount(followCompanyFeeVo.getTotalInvoiced().subtract(followCompanyFeeVo.getTotalSettlementAmount()));
-            followCompanyFeeVo.setTotalUnInvoiced(followCompanyFeeVo.getTotalReceivable().subtract(followCompanyFeeVo.getTotalInvoiced()));
+
+        // 根据分支公司分组
+        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() : "");
+
+            resultList.add(followCompanyFeeVO);
         }
-        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()));
+//            followCompanyFeeVo.setTotalUnInvoiced(followCompanyFeeVo.getTotalReceivable().subtract(followCompanyFeeVo.getTotalInvoiced()));
+//        }
+        return resultList;
     }
 
     /**

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

@@ -48,9 +48,11 @@
     <select id="selectFollowCompanySettlementReport" resultType="com.jzg.commons.entity.finance.vo.FollowCompanyFeeVO">
         SELECT
         ffo.partner_company_id AS partnerCompanyId,
-        SUM(COALESCE(ffo.invoiced, 0.00)) AS totalInvoiced,
-        SUM(COALESCE(sett.actual_received_amount, 0.00)) AS totalSettlementAmount,
-        MAX(COALESCE(ffo.reconciliation_amount, 0.00)) AS totalReceivable
+        ffo.id AS followId,
+        ffo.year,
+        ffo.month,
+        inv.id AS invoiceId,
+        sett.id AS settlementId
         FROM ins_fee_follow_order ffo
         -- 跟单订单关联发票中间表
         INNER JOIN ins_ply_follow_invoice_link link
@@ -84,7 +86,6 @@
                 AND sett.create_time BETWEEN #{query.settlementStartTime} AND #{query.settlementEndTime}
             </if>
         </where>
-        GROUP BY ffo.partner_company_id
     </select>