Ver código fonte

bugfix:平台应收-报表-对接人结算报表 数据不对的bug修复

lipf 3 meses atrás
pai
commit
31102d572c

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/finance/dto/ReceiverSettlementReportDto.java

@@ -49,4 +49,7 @@ public class ReceiverSettlementReportDto {
 
 
     @Schema(description = "未结算总计")
     @Schema(description = "未结算总计")
     private String unSettledAmount;
     private String unSettledAmount;
+
+    @Schema(description = "已结算发票的发票号")
+    private String invoiceIds;
 }
 }

+ 12 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -573,6 +573,18 @@ public class ReceivableController {
         return HttpResult.ok(receivableService.deleteSettlementById(id) ? "删除成功":"删除失败");
         return HttpResult.ok(receivableService.deleteSettlementById(id) ? "删除成功":"删除失败");
     }
     }
 
 
+    /**
+     * 删除平台结算记录
+     *
+     * @author lipf
+     * @date 2026/6/22 16:18
+     */
+    @DeleteMapping("/deletePlatformSettlementById/{id}")
+    @Operation(summary = "删除平台结算记录")
+    public HttpResult<String> deletePlatformSettlementById(@PathVariable String id){
+        return receivableService.deletePlatformSettlementById(id);
+    }
+
 
 
     @PostMapping("exportSuperviseSettlementExcel")
     @PostMapping("exportSuperviseSettlementExcel")
     @Operation(summary = "导出应收手续费结算记录excel文件")
     @Operation(summary = "导出应收手续费结算记录excel文件")

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

@@ -258,4 +258,13 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
     List<InsPlyIncomeDto> queryFollowIncome(@Param("startYear") Integer startYear,
     List<InsPlyIncomeDto> queryFollowIncome(@Param("startYear") Integer startYear,
                                             @Param("endYear") Integer endYear,
                                             @Param("endYear") Integer endYear,
                                             @Param("systemCode")  String systemCode);
                                             @Param("systemCode")  String systemCode);
+
+    /**
+     * 查询发票结算的金额
+     *
+     * @author lipf
+     * @date 2026/6/22 15:47
+     */
+    BigDecimal querySettledAmountByInvoiceIds(@Param("invoiceIdList") List<String> invoiceIdList);
+
 }
 }

+ 12 - 2
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -426,10 +426,11 @@ public interface ReceivableService extends IService<InsPlyIncome> {
 
 
     /**
     /**
      * 删除结算记录
      * 删除结算记录
-     * @param id
+     *
+     * @param settlementId
      * @return
      * @return
      */
      */
-    boolean deleteSettlementById(String id);
+    boolean deleteSettlementById(String settlementId);
 
 
     /**
     /**
      * 查询所有订单的应收总额
      * 查询所有订单的应收总额
@@ -484,4 +485,13 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      * @date 2026/6/11 9:33
      * @date 2026/6/11 9:33
      */
      */
     int updateSettlementStatus(String invoiceId);
     int updateSettlementStatus(String invoiceId);
+
+    /**
+     * 平台协议结算
+     *
+     * @param id 平台协议结算记录的序号
+     * @author lipf
+     * @date 2026/6/22 11:40
+     */
+    HttpResult<String> deletePlatformSettlementById(String id);
 }
 }

+ 77 - 4
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -200,6 +200,10 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      */
      */
     @Override
     @Override
     public HttpResult<List<ContractVO>> queryReceivableContact(InvoicingVo invoicingVo) {
     public HttpResult<List<ContractVO>> queryReceivableContact(InvoicingVo invoicingVo) {
+        List<String> incomeIds = invoicingVo.getIncomeIds();
+        if(CollUtil.isEmpty(incomeIds)){
+            return HttpResult.error("请勾选未结算的订单数据");
+        }
         List<InsPlyIncome> insPlyIncomes = baseMapper.queryIncomeByIds(invoicingVo);
         List<InsPlyIncome> insPlyIncomes = baseMapper.queryIncomeByIds(invoicingVo);
         List<ContractVO> contractVOS = insPlyIncomes.stream().map(action -> new ContractVO(action.getContactPerson(), action.getContactPersonPhone())).distinct().toList();
         List<ContractVO> contractVOS = insPlyIncomes.stream().map(action -> new ContractVO(action.getContactPerson(), action.getContactPersonPhone())).distinct().toList();
         log.info("根据订单编号查询得到的对接人信息[{}]个", CollUtil.size(contractVOS));
         log.info("根据订单编号查询得到的对接人信息[{}]个", CollUtil.size(contractVOS));
@@ -1462,12 +1466,66 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return importExcelResultVo;
         return importExcelResultVo;
     }
     }
 
 
+
+    /**
+     * 平台协议结算
+     *
+     * @param settlementId 平台协议结算记录的序号
+     * @author lipf
+     * @date 2026/6/22 11:40
+     */
+    @Override
+    public HttpResult<String> deletePlatformSettlementById(String settlementId) {
+        log.info("平台删除结算记录。settlementId=[{}]",settlementId);
+        InsPlyIncomeInvoiceSettlement settlement = insPlyIncomeInvoiceSettlementMapper.selectById(settlementId);
+        if(settlement == null){
+            log.info("平台删除结算记录.序号为[{}]的结算记录不存在", settlementId);
+            throw new SystemException("结算记录不存在");
+        }
+        String invoiceId = settlement.getInvoiceId();
+        if (StrUtil.isBlank(invoiceId)){
+            throw new SystemException("结算记录id不存在");
+        }
+        insPlyIncomeInvoiceMapper.deleteById(invoiceId);
+        // 查询中间表:使用 QueryWrapper,增加逻辑删除过滤
+        LambdaQueryWrapper<InsPlyIncomeInvoiceLink> linkQueryWrapper = new LambdaQueryWrapper<>();
+        linkQueryWrapper.eq(InsPlyIncomeInvoiceLink::getInvoiceId, invoiceId);
+        linkQueryWrapper.eq(InsPlyIncomeInvoiceLink::getIsDelete, SETTLE_STATUS_RESET);
+        List<InsPlyIncomeInvoiceLink> linkList = insPlyIncomeInvoiceLinkMapper.selectList(linkQueryWrapper);
+
+        if(CollUtil.isNotEmpty(linkList)){
+            for (InsPlyIncomeInvoiceLink insPlyIncomeInvoiceLink : linkList) {
+                insPlyIncomeInvoiceLinkMapper.deleteByInvoiceId(insPlyIncomeInvoiceLink.getInvoiceId());
+            }
+        }
+        // 提取incomeId列表
+        List<String> incomeIds = linkList.stream()
+                .map(InsPlyIncomeInvoiceLink::getIncomeId)
+                .distinct()
+                .collect(Collectors.toList());
+        // 构造更新条件,增加主表逻辑删除过滤
+        LambdaUpdateWrapper<InsPlyIncome> incomeUpdateWrapper = new LambdaUpdateWrapper<>();
+        incomeUpdateWrapper.set(InsPlyIncome::getSettlementStatus, SETTLE_STATUS_RESET)
+                .set(InsPlyIncome::getSuperviseSettlement, SETTLE_STATUS_RESET)
+                .set(InsPlyIncome::getOtherSettlement, SETTLE_STATUS_RESET)
+                .set(InsPlyIncome::getJySuperviseSettlement, SETTLE_STATUS_RESET)
+                .set(InsPlyIncome::getJyOtherSettlement, SETTLE_STATUS_RESET)
+                .eq(InsPlyIncome::getIsDelete, SETTLE_STATUS_RESET)
+                .in(InsPlyIncome::getId, incomeIds);
+
+        // 执行更新
+        baseMapper.update(null, incomeUpdateWrapper);
+        insPlyIncomeInvoiceSettlementMapper.deleteById(settlementId);
+        return HttpResult.ok("删除结算记录成功");
+    }
+
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public boolean deleteSettlementById(String id) {
-        log.info("私有协议-结算记录-删除: id=[{}]",id);
-        InsPlyIncomeInvoiceSettlement settlement = insPlyIncomeInvoiceSettlementMapper.selectById(id);
+    public boolean deleteSettlementById(String settlementId) {
+        log.info("私有协议-结算记录-删除: id=[{}]", settlementId);
+        InsPlyIncomeInvoiceSettlement settlement = insPlyIncomeInvoiceSettlementMapper.selectById(settlementId);
         if(settlement == null){
         if(settlement == null){
+            log.info("序号为[{}]的结算记录不存在", settlementId);
             throw new SystemException("结算记录不存在");
             throw new SystemException("结算记录不存在");
         }
         }
         String invoiceId = settlement.getInvoiceId();
         String invoiceId = settlement.getInvoiceId();
@@ -1502,7 +1560,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
 
         // 执行更新
         // 执行更新
         baseMapper.update(null, incomeUpdateWrapper);
         baseMapper.update(null, incomeUpdateWrapper);
-        return insPlyIncomeInvoiceSettlementMapper.deleteById(id) > 0;
+        return insPlyIncomeInvoiceSettlementMapper.deleteById(settlementId) > 0;
     }
     }
 
 
     /**
     /**
@@ -3563,8 +3621,22 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     action.setCompanyName(esmInsCompany.getNameSimple());
                     action.setCompanyName(esmInsCompany.getNameSimple());
                 }
                 }
                 action.setCompanyALlName(allCompanyHierarchyPaths.get(action.getCompanyId()));
                 action.setCompanyALlName(allCompanyHierarchyPaths.get(action.getCompanyId()));
+                String invoiceIds = action.getInvoiceIds();
+                if(StrUtil.isNotEmpty(invoiceIds)){
+                    List<String> invoiceIdList = Arrays.asList(invoiceIds.split(","));
+                    log.info("invoiceIdList.size=[{}]", CollUtil.size(invoiceIdList));
+                    log.info("invoiceIdList=[{}]", JSONUtil.toJsonStr(invoiceIdList));
+                    BigDecimal amount = baseMapper.querySettledAmountByInvoiceIds(invoiceIdList);
+                    action.setSettledAmount(Objects.toString(amount,"0"));
+                    action.setUnSettledAmount(BigDecimalUtil.subtract(new BigDecimal(action.getTotalReceivable()),amount).toString());
+                }else{
+                    action.setSettledAmount("0");
+                    action.setUnSettledAmount(BigDecimalUtil.subtract(new BigDecimal(action.getTotalReceivable()),BigDecimal.ZERO).toString());
+                }
             }).toList();
             }).toList();
             receiverSettlementReport.setRecords(records);
             receiverSettlementReport.setRecords(records);
+
+
         }
         }
         return receiverSettlementReport;
         return receiverSettlementReport;
     }
     }
@@ -3572,6 +3644,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Override
     @Override
     public void exportReceiverSettlementReportExcel(Page page, SettlementReportQueryVo settlementReportQueryVo) {
     public void exportReceiverSettlementReportExcel(Page page, SettlementReportQueryVo settlementReportQueryVo) {
         settlementReportQueryVo.setSystemCode(baseController.getSystemCode());
         settlementReportQueryVo.setSystemCode(baseController.getSystemCode());
+        // TODO 这里需要进行调整 2026年6月22日15:38:02
         Page<ReceiverSettlementReportDto> receiverSettlementReport = baseMapper.getReceiverSettlementReport(page, settlementReportQueryVo);
         Page<ReceiverSettlementReportDto> receiverSettlementReport = baseMapper.getReceiverSettlementReport(page, settlementReportQueryVo);
         List<ReceiverSettlementReportDto> receiverSettlementReportDtos = receiverSettlementReport.getRecords();
         List<ReceiverSettlementReportDto> receiverSettlementReportDtos = receiverSettlementReport.getRecords();
         EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), ReceiverSettlementReportDto.class, receiverSettlementReportDtos, "对接人结算报表");
         EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), ReceiverSettlementReportDto.class, receiverSettlementReportDtos, "对接人结算报表");

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

@@ -1594,6 +1594,7 @@
         ORDER BY  eic.name
         ORDER BY  eic.name
     </select>
     </select>
 
 
+    <!-- invoice 表是income表  聚合得到的,因此,不能将income left jion invoide, 后对invoice的金额进行求和 2026年6月22日15:39:34  -->
     <select id="getReceiverSettlementReport" resultType="com.jzg.commons.entity.finance.dto.ReceiverSettlementReportDto">
     <select id="getReceiverSettlementReport" resultType="com.jzg.commons.entity.finance.dto.ReceiverSettlementReportDto">
         SELECT
         SELECT
         ipi.contact_person AS receiver,
         ipi.contact_person AS receiver,
@@ -1606,10 +1607,11 @@
         ) AS totalReceivable,
         ) AS totalReceivable,
         --SUM(CASE WHEN ipii.`status` = 1 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS settledSuperviseFee,
         --SUM(CASE WHEN ipii.`status` = 1 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS settledSuperviseFee,
         -- SUM(CASE WHEN ipii.`status` = 1 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS settledFollowFee,
         -- SUM(CASE WHEN ipii.`status` = 1 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS settledFollowFee,
-        SUM(CASE WHEN ipii.`status` = 1 AND ipii.invoice_type IN (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS settledAmount,
-        --SUM(CASE WHEN ipii.`status` = 0 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS unSettledSuperviseFee
+        -- SUM(CASE WHEN ipii.`status` = 1 AND ipii.invoice_type IN (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS settledAmount,
+        -- SUM(CASE WHEN ipii.`status` = 0 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS unSettledSuperviseFee
         -- ,SUM(CASE WHEN ipii.`status` = 0 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS unSettledFollowFee,
         -- ,SUM(CASE WHEN ipii.`status` = 0 AND ipii.invoice_type in (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS unSettledFollowFee,
-        SUM(CASE WHEN ipii.`status` = 0 AND ipii.invoice_type IN (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS unSettledAmount
+        -- SUM(CASE WHEN ipii.`status` = 0 AND ipii.invoice_type IN (5,6) THEN ipii.receivable_supervise_premium ELSE 0 END) AS unSettledAmount,
+        GROUP_CONCAT(distinct ipii.id) as invoice_ids
         FROM
         FROM
         ins_ply_income ipi
         ins_ply_income ipi
         LEFT JOIN ins_ply_income_invoice_link ipil ON ipi.id = ipil.income_id AND ipil.is_delete = 0
         LEFT JOIN ins_ply_income_invoice_link ipil ON ipi.id = ipil.income_id AND ipil.is_delete = 0
@@ -1624,6 +1626,12 @@
             <if test="settlementReportQueryVo.receiver != null and settlementReportQueryVo.receiver != ''">
             <if test="settlementReportQueryVo.receiver != null and settlementReportQueryVo.receiver != ''">
                 AND ipi.contact_person = #{settlementReportQueryVo.receiver}
                 AND ipi.contact_person = #{settlementReportQueryVo.receiver}
             </if>
             </if>
+            <if test="settlementReportQueryVo.invoiceTypes != null and settlementReportQueryVo.invoiceTypes.size() > 0" >
+                and ipii.invoice_type in
+                <foreach collection="settlementReportQueryVo.invoiceTypes" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
             <if test="settlementReportQueryVo.startTime != null and settlementReportQueryVo.startTime != ''">
             <if test="settlementReportQueryVo.startTime != null and settlementReportQueryVo.startTime != ''">
                 AND ipi.signing_time BETWEEN #{settlementReportQueryVo.startTime} AND #{settlementReportQueryVo.endTime}
                 AND ipi.signing_time BETWEEN #{settlementReportQueryVo.startTime} AND #{settlementReportQueryVo.endTime}
                 AND (ipii.invoice_time BETWEEN #{settlementReportQueryVo.startTime} AND #{settlementReportQueryVo.endTime}
                 AND (ipii.invoice_time BETWEEN #{settlementReportQueryVo.startTime} AND #{settlementReportQueryVo.endTime}
@@ -1781,5 +1789,17 @@
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>
+    <!-- 查询发票结算的金额 2026年6月22日15:48:33 lipf  -->
+    <select id="querySettledAmountByInvoiceIds" resultType="java.math.BigDecimal">
+        select sum(ipiis.actual_received_amount ) from ins_ply_income_invoice_settlement ipiis
+        <where>
+            <if test="invoiceIdList != null and invoiceIdList.size() > 0">
+                and ipiis.invoice_id in
+                <foreach collection="invoiceIdList" item="item" open="(" separator="," close=")">
+                    ${item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 
 
 </mapper>
 </mapper>