From ebaa73b40a23e28bef51fc0e2f698f6604aea145 Mon Sep 17 00:00:00 2001
From: xueqingkun <xueqingkun@126.com>
Date: Fri, 25 Oct 2024 14:46:24 +0800
Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8D=E8=AF=81=E6=8D=AE?=
 =?UTF-8?q?=E6=94=B9=E9=80=A0bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/CaseEvidenceController.java    |  7 ++++
 .../police/service/CaseEvidenceService.java   |  3 +-
 .../service/impl/CaseEvidenceServiceImpl.java | 42 +++++++++++++++----
 3 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java
index 0628e87..89eaca0 100644
--- a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java
+++ b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java
@@ -52,6 +52,13 @@ public class CaseEvidenceController {
         return R.ok(success);
     }
 
+    @Operation(summary = "批量删除案件证据信息")
+    @DeleteMapping("/batchDeleteEvidence")
+    public R<Boolean> batchDeleteEvidence(@RequestBody List<EvidenceIdWrapper> evidenceIdWrappers) {
+        boolean success = caseEvidenceService.batchDeleteEvidence(evidenceIdWrappers);
+        return R.ok(success);
+    }
+
 
     @Operation(summary = "分页查询案件证据信息列表")
     @GetMapping("/pageListEvidence")
diff --git a/src/main/java/com/supervision/police/service/CaseEvidenceService.java b/src/main/java/com/supervision/police/service/CaseEvidenceService.java
index 934f240..74f3ec7 100644
--- a/src/main/java/com/supervision/police/service/CaseEvidenceService.java
+++ b/src/main/java/com/supervision/police/service/CaseEvidenceService.java
@@ -34,6 +34,8 @@ public interface CaseEvidenceService  extends IService<CaseEvidence> {
      */
     boolean deleteEvidence(String evidenceId,String fileId);
 
+    boolean batchDeleteEvidence(List<EvidenceIdWrapper> evidenceIdWrappers);
+
     /**
      * 查询案件证据信息列表
      * @param caseId  案件id
@@ -144,5 +146,4 @@ public interface CaseEvidenceService  extends IService<CaseEvidence> {
     EvidenceDirectory createDirectory(EvidenceDirectoryReqVO evidenceDirectory);
 
     void syncEvidenceAnalysis(List<CaseEvidenceDetailDTO> evidenceList);
-
 }
diff --git a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java
index 3a3b852..1e630f9 100644
--- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java
@@ -129,24 +129,50 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
     public boolean deleteEvidence(String evidenceId, String fileId) {
 
         CaseEvidence caseEvidence = super.getOptById(evidenceId).orElseThrow(() -> new IllegalArgumentException("证据信息不存在"));
-        if (StrUtil.isEmpty(fileId)) {
+        // 同步删除文件夹
+        String caseId = caseEvidence.getCaseId();
+        List<EvidenceDirectoryDTO> evidenceDirectoryS = listDirectoryTree(caseId);
+        deleteEvidence(evidenceId, fileId, evidenceDirectoryS, caseEvidence);
+        return true;
+    }
+
+    private void deleteEvidence(String evidenceId, String fileId,
+                                List<EvidenceDirectoryDTO> evidenceDirectoryS, CaseEvidence caseEvidence) {
+        EvidenceDirectoryDTO directoryDTO = new EvidenceDirectoryDTO(evidenceDirectoryS);
+        EvidenceDirectoryDTO directory = directoryDTO.findDirectory(caseEvidence.getDirectoryId());
+
+        if (directory.getLevel() != 3 || StrUtil.isEmpty(fileId)) {
+            // 当前证据不属于三级目录下的证据,删除文件的同时也要清楚证据数据
             boolean remove = super.lambdaUpdate().eq(CaseEvidence::getId, evidenceId).remove();
             if (remove) {
                 evidenceFileService.lambdaUpdate().eq(EvidenceFile::getEvidenceId, evidenceId).remove();
-
-                // 同步删除文件夹
-                String caseId = caseEvidence.getCaseId();
-                List<EvidenceDirectoryDTO> evidenceDirectoryS = listDirectoryTree(caseId);
-                EvidenceDirectoryDTO directoryDTO = new EvidenceDirectoryDTO(evidenceDirectoryS);
-                EvidenceDirectoryDTO directory = directoryDTO.findDirectory(caseEvidence.getDirectoryId());
-                evidenceDirectoryService.removeDirectoryIf(directory.getId(),()->directory.getLevel() == 3);
+                evidenceDirectoryService.removeDirectoryIf(directory.getId(), () -> directory.getLevel() == 3);
                 caseStatusManageService.whenUpdateEvidence(caseEvidence.getCaseId());
             }
         } else {
             evidenceFileService.lambdaUpdate().eq(EvidenceFile::getEvidenceId, evidenceId)
                     .eq(EvidenceFile::getFileId, fileId).remove();
         }
+    }
 
+    @Override
+    @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
+    public boolean batchDeleteEvidence(List<EvidenceIdWrapper> wrappers) {
+
+        if (CollUtil.isEmpty(wrappers)){
+            return true;
+        }
+        List<String> evidenceIds = wrappers.stream().map(EvidenceIdWrapper::getEvidenceId).toList();
+        List<CaseEvidence> caseEvidenceList = super.listByIds(evidenceIds);
+        String caseId = CollUtil.getFirst(caseEvidenceList).getCaseId();
+        List<EvidenceDirectoryDTO> evidenceDirectoryS = listDirectoryTree(caseId);
+
+        // 同步删除文件夹
+        Map<String, CaseEvidence> caseEvidenceMap = caseEvidenceList.stream().collect(Collectors.toMap(CaseEvidence::getId, v -> v));
+        for (EvidenceIdWrapper evidenceIdWrapper : wrappers) {
+            deleteEvidence(evidenceIdWrapper.getEvidenceId(), evidenceIdWrapper.getFileId(),
+                    evidenceDirectoryS, caseEvidenceMap.get(evidenceIdWrapper.getEvidenceId()));
+        }
 
         return true;
     }