Browse Source

修改后台模版管理和资源管理bug

liaoyitao 1 week ago
parent
commit
d6ae10059b

+ 11 - 0
src/main/java/com/lqkj/link/module/zone/repository/GeomInfoRepository.java

@@ -89,4 +89,15 @@ public interface GeomInfoRepository extends JpaRepository<GeomInfo, String> {
89
                 "    geom_name;"
89
                 "    geom_name;"
90
     )
90
     )
91
     List<GeomInfo> getNavigationInfo(Integer zoneId);
91
     List<GeomInfo> getNavigationInfo(Integer zoneId);
92
+
93
+
94
+    @Query(nativeQuery = true,
95
+        value = "select count(*) from geom_info where model_id in :infoIds and "
96
+    )
97
+    Integer findByModelIdIn(List<Integer> infoIds);
98
+
99
+    @Query(nativeQuery = true,
100
+        value = "select count(*) from geom_info where model_id in :infoIds and zone_id != :zoneId"
101
+    )
102
+    Integer findByModelIdInAndZoneId(List<Integer> infoIds, Integer zoneId);
92
 }
103
 }

+ 12 - 0
src/main/java/com/lqkj/link/module/zone/repository/ModelInfoRepository.java

@@ -47,4 +47,16 @@ public interface ModelInfoRepository extends JpaRepository<ModelInfo, Integer> {
47
         value = "update model_info set category_id = null where model_id in :deleteList"
47
         value = "update model_info set category_id = null where model_id in :deleteList"
48
     )
48
     )
49
     void updateAllByIdInBatch(List<Integer> deleteList);
49
     void updateAllByIdInBatch(List<Integer> deleteList);
50
+
51
+
52
+    @Query(nativeQuery = true,
53
+        value = "select model_id from model_info where category_id = :categoryId"
54
+    )
55
+    List<Integer> findByCategoryId(Integer categoryId);
56
+
57
+
58
+    @Query(nativeQuery = true,
59
+        value = "select model_id from model_info where template_id = :zoneId"
60
+    )
61
+    List<Integer> findByTemplateId(Integer zoneId);
50
 }
62
 }

+ 15 - 0
src/main/java/com/lqkj/link/module/zone/service/ResourceService.java

@@ -4,6 +4,7 @@ import com.lqkj.link.module.authority.domain.UserInfo;
4
 import com.lqkj.link.module.authority.repository.UserInfoRepository;
4
 import com.lqkj.link.module.authority.repository.UserInfoRepository;
5
 import com.lqkj.link.module.zone.domain.ModelCategory;
5
 import com.lqkj.link.module.zone.domain.ModelCategory;
6
 import com.lqkj.link.module.zone.domain.ModelInfo;
6
 import com.lqkj.link.module.zone.domain.ModelInfo;
7
+import com.lqkj.link.module.zone.repository.GeomInfoRepository;
7
 import com.lqkj.link.module.zone.repository.ModelCategoryRepository;
8
 import com.lqkj.link.module.zone.repository.ModelCategoryRepository;
8
 import com.lqkj.link.module.zone.repository.ModelInfoRepository;
9
 import com.lqkj.link.module.zone.repository.ModelInfoRepository;
9
 import com.lqkj.link.util.AliOSSUtils;
10
 import com.lqkj.link.util.AliOSSUtils;
@@ -11,6 +12,7 @@ import com.lqkj.link.util.FileUtils;
11
 import com.lqkj.link.util.Unzipper;
12
 import com.lqkj.link.util.Unzipper;
12
 import jakarta.servlet.http.HttpServletRequest;
13
 import jakarta.servlet.http.HttpServletRequest;
13
 import org.apache.commons.compress.archivers.ArchiveException;
14
 import org.apache.commons.compress.archivers.ArchiveException;
15
+import org.checkerframework.checker.units.qual.A;
14
 import org.springframework.beans.factory.annotation.Autowired;
16
 import org.springframework.beans.factory.annotation.Autowired;
15
 import org.springframework.data.domain.Page;
17
 import org.springframework.data.domain.Page;
16
 import org.springframework.data.domain.PageRequest;
18
 import org.springframework.data.domain.PageRequest;
@@ -32,6 +34,9 @@ public class ResourceService {
32
     @Autowired
34
     @Autowired
33
     private AliOSSUtils aliOSSUtils;
35
     private AliOSSUtils aliOSSUtils;
34
 
36
 
37
+    @Autowired
38
+    private GeomInfoRepository geomInfoRepository;
39
+
35
     public ResourceService(ModelCategoryRepository categoryRepository, ModelInfoRepository infoRepository, UserInfoRepository userInfoRepository) {
40
     public ResourceService(ModelCategoryRepository categoryRepository, ModelInfoRepository infoRepository, UserInfoRepository userInfoRepository) {
36
         this.categoryRepository = categoryRepository;
41
         this.categoryRepository = categoryRepository;
37
         this.infoRepository = infoRepository;
42
         this.infoRepository = infoRepository;
@@ -62,6 +67,7 @@ public class ResourceService {
62
         category = categoryRepository.save(category);
67
         category = categoryRepository.save(category);
63
         String filePath = category.getCompressFilePath();
68
         String filePath = category.getCompressFilePath();
64
         if (uploadCompress) {
69
         if (uploadCompress) {
70
+            checkIsReferenced(category.getCategoryId());
65
 //            infoRepository.deleteWithCategory(category.getCategoryId());
71
 //            infoRepository.deleteWithCategory(category.getCategoryId());
66
 //            Unzipper.unzip("." + filePath, "./upload/resource/" + category.getCategoryId() + "/", false);
72
 //            Unzipper.unzip("." + filePath, "./upload/resource/" + category.getCategoryId() + "/", false);
67
             Unzipper.unZipFiles(new File("." + filePath), "./upload/resource/" + category.getCategoryId() + "/");
73
             Unzipper.unZipFiles(new File("." + filePath), "./upload/resource/" + category.getCategoryId() + "/");
@@ -122,6 +128,14 @@ public class ResourceService {
122
         return null;
128
         return null;
123
     }
129
     }
124
 
130
 
131
+    private void checkIsReferenced(Integer categoryId) {
132
+        List<Integer> infoIds = infoRepository.findByCategoryId(categoryId);
133
+        Integer count = geomInfoRepository.findByModelIdIn(infoIds);
134
+        if (count > 0) {
135
+            throw new RuntimeException("资源被引用,无法修改和删除");
136
+        }
137
+    }
138
+
125
     public void deleteModel(Integer modelId) {
139
     public void deleteModel(Integer modelId) {
126
         ModelInfo modelInfo = infoRepository.findById(modelId).get();
140
         ModelInfo modelInfo = infoRepository.findById(modelId).get();
127
         infoRepository.deleteById(modelId);
141
         infoRepository.deleteById(modelId);
@@ -130,6 +144,7 @@ public class ResourceService {
130
 
144
 
131
     @Transactional
145
     @Transactional
132
     public void deleteCategory(List<Integer> categoryId) {
146
     public void deleteCategory(List<Integer> categoryId) {
147
+        categoryId.forEach(this::checkIsReferenced);
133
         deleteOssFiles(categoryId);
148
         deleteOssFiles(categoryId);
134
         categoryRepository.deleteAllByIdInBatch(categoryId);
149
         categoryRepository.deleteAllByIdInBatch(categoryId);
135
         // 更新用户资源刷新状态
150
         // 更新用户资源刷新状态

+ 15 - 2
src/main/java/com/lqkj/link/module/zone/service/ZoneInfoService.java

@@ -91,6 +91,7 @@ public class ZoneInfoService {
91
         }
91
         }
92
         ZoneInfo zoneInfo1 = zoneInfoRepository.save(zoneInfo);
92
         ZoneInfo zoneInfo1 = zoneInfoRepository.save(zoneInfo);
93
         if (StringUtils.isNotBlank(zoneInfo.getTemplateFilePath()) && isUpdated) {
93
         if (StringUtils.isNotBlank(zoneInfo.getTemplateFilePath()) && isUpdated) {
94
+            checkIsReferenced(zoneInfo1.getZoneId());
94
             // 清除元素与模型
95
             // 清除元素与模型
95
             geomInfoRepository.deleteAllByZoneId(zoneInfo1.getZoneId());
96
             geomInfoRepository.deleteAllByZoneId(zoneInfo1.getZoneId());
96
             modelInfoRepository.deleteAllByTemplateIds(Collections.singletonList(zoneInfo1.getZoneId()));
97
             modelInfoRepository.deleteAllByTemplateIds(Collections.singletonList(zoneInfo1.getZoneId()));
@@ -260,6 +261,14 @@ public class ZoneInfoService {
260
         return result;
261
         return result;
261
     }
262
     }
262
 
263
 
264
+    private void checkIsReferenced(Integer zoneId) {
265
+        List<Integer> infoIds = modelInfoRepository.findByTemplateId(zoneId);
266
+        Integer count = geomInfoRepository.findByModelIdInAndZoneId(infoIds, zoneId);
267
+        if (count > 0) {
268
+            throw new RuntimeException("模板被引用,无法修改和删除");
269
+        }
270
+    }
271
+
263
     /**
272
     /**
264
      * 检查zip包内容
273
      * 检查zip包内容
265
      * @param zoneInfo
274
      * @param zoneInfo
@@ -287,8 +296,12 @@ public class ZoneInfoService {
287
 
296
 
288
     @Transactional
297
     @Transactional
289
     public void deleteTemplate(List<Integer> zoneIds) {
298
     public void deleteTemplate(List<Integer> zoneIds) {
290
-        zoneInfoRepository.deleteAllByIdInBatch(zoneIds);
291
-        modelInfoRepository.deleteAllByTemplateIds(zoneIds);
299
+        zoneIds.forEach(zoneId -> {
300
+            checkIsReferenced(zoneId);
301
+            zoneInfoRepository.deleteAllByIdInBatch(zoneIds);
302
+            modelInfoRepository.deleteAllByTemplateIds(zoneIds);
303
+
304
+        });
292
     }
305
     }
293
 
306
 
294
     public List<String> autoCompleteMyWork(String userCode, String keyword) {
307
     public List<String> autoCompleteMyWork(String userCode, String keyword) {