Browse Source

修改bug:
平台应收,删除结算记录后,车辆还是显示已结算,并且不能重新结算

jiakai 3 months ago
parent
commit
f42d32fd54

+ 35 - 6
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -130,6 +130,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Value("${upload.file.url}")
     @Value("${upload.file.url}")
     private String uploadUrl;
     private String uploadUrl;
 
 
+    // 常量定义,消除魔法值
+    private static final String SETTLE_STATUS_RESET = "0";
     // 车辆险种手续费结算锁
     // 车辆险种手续费结算锁
     private static final String CAR_INVOICING_COMMISSION_LOCK = "CAR_INVOICING_COMMISSION_LOCK:";
     private static final String CAR_INVOICING_COMMISSION_LOCK = "CAR_INVOICING_COMMISSION_LOCK:";
     // 车辆险种跟单费结算锁
     // 车辆险种跟单费结算锁
@@ -1448,18 +1450,45 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     }
     }
 
 
     @Override
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean deleteSettlementById(String id) {
     public boolean deleteSettlementById(String id) {
         log.info("私有协议-结算记录-删除: id=[{}]",id);
         log.info("私有协议-结算记录-删除: id=[{}]",id);
         InsPlyIncomeInvoiceSettlement settlement = insPlyIncomeInvoiceSettlementMapper.selectById(id);
         InsPlyIncomeInvoiceSettlement settlement = insPlyIncomeInvoiceSettlementMapper.selectById(id);
         if(settlement == null){
         if(settlement == null){
-            return false;
+            throw new SystemException("结算记录不存在");
         }
         }
         String invoiceId = settlement.getInvoiceId();
         String invoiceId = settlement.getInvoiceId();
-        if(StrUtil.isNotEmpty(invoiceId)){
-            insPlyIncomeInvoiceMapper.update(null,
-                    new LambdaUpdateWrapper<InsPlyIncomeInvoice>()
-                            .set(InsPlyIncomeInvoice::getStatus,"0").eq(InsPlyIncomeInvoice::getId,invoiceId));
-        }
+        if (StrUtil.isBlank(invoiceId)){
+            throw new SystemException("结算记录id不存在");
+        }
+        insPlyIncomeInvoiceMapper.update(null,
+                new LambdaUpdateWrapper<InsPlyIncomeInvoice>()
+                        .set(InsPlyIncomeInvoice::getStatus,"0").eq(InsPlyIncomeInvoice::getId,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);
+
+        // 提取incomeId列表
+        List<String> incomeIdList = 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, incomeIdList);
+
+        // 执行更新
+        baseMapper.update(null, incomeUpdateWrapper);
         return insPlyIncomeInvoiceSettlementMapper.deleteById(id) > 0;
         return insPlyIncomeInvoiceSettlementMapper.deleteById(id) > 0;
     }
     }