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 89
                 "    geom_name;"
90 90
     )
91 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 47
         value = "update model_info set category_id = null where model_id in :deleteList"
48 48
     )
49 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 4
 import com.lqkj.link.module.authority.repository.UserInfoRepository;
5 5
 import com.lqkj.link.module.zone.domain.ModelCategory;
6 6
 import com.lqkj.link.module.zone.domain.ModelInfo;
7
+import com.lqkj.link.module.zone.repository.GeomInfoRepository;
7 8
 import com.lqkj.link.module.zone.repository.ModelCategoryRepository;
8 9
 import com.lqkj.link.module.zone.repository.ModelInfoRepository;
9 10
 import com.lqkj.link.util.AliOSSUtils;
@@ -11,6 +12,7 @@ import com.lqkj.link.util.FileUtils;
11 12
 import com.lqkj.link.util.Unzipper;
12 13
 import jakarta.servlet.http.HttpServletRequest;
13 14
 import org.apache.commons.compress.archivers.ArchiveException;
15
+import org.checkerframework.checker.units.qual.A;
14 16
 import org.springframework.beans.factory.annotation.Autowired;
15 17
 import org.springframework.data.domain.Page;
16 18
 import org.springframework.data.domain.PageRequest;
@@ -32,6 +34,9 @@ public class ResourceService {
32 34
     @Autowired
33 35
     private AliOSSUtils aliOSSUtils;
34 36
 
37
+    @Autowired
38
+    private GeomInfoRepository geomInfoRepository;
39
+
35 40
     public ResourceService(ModelCategoryRepository categoryRepository, ModelInfoRepository infoRepository, UserInfoRepository userInfoRepository) {
36 41
         this.categoryRepository = categoryRepository;
37 42
         this.infoRepository = infoRepository;
@@ -62,6 +67,7 @@ public class ResourceService {
62 67
         category = categoryRepository.save(category);
63 68
         String filePath = category.getCompressFilePath();
64 69
         if (uploadCompress) {
70
+            checkIsReferenced(category.getCategoryId());
65 71
 //            infoRepository.deleteWithCategory(category.getCategoryId());
66 72
 //            Unzipper.unzip("." + filePath, "./upload/resource/" + category.getCategoryId() + "/", false);
67 73
             Unzipper.unZipFiles(new File("." + filePath), "./upload/resource/" + category.getCategoryId() + "/");
@@ -122,6 +128,14 @@ public class ResourceService {
122 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 139
     public void deleteModel(Integer modelId) {
126 140
         ModelInfo modelInfo = infoRepository.findById(modelId).get();
127 141
         infoRepository.deleteById(modelId);
@@ -130,6 +144,7 @@ public class ResourceService {
130 144
 
131 145
     @Transactional
132 146
     public void deleteCategory(List<Integer> categoryId) {
147
+        categoryId.forEach(this::checkIsReferenced);
133 148
         deleteOssFiles(categoryId);
134 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 92
         ZoneInfo zoneInfo1 = zoneInfoRepository.save(zoneInfo);
93 93
         if (StringUtils.isNotBlank(zoneInfo.getTemplateFilePath()) && isUpdated) {
94
+            checkIsReferenced(zoneInfo1.getZoneId());
94 95
             // 清除元素与模型
95 96
             geomInfoRepository.deleteAllByZoneId(zoneInfo1.getZoneId());
96 97
             modelInfoRepository.deleteAllByTemplateIds(Collections.singletonList(zoneInfo1.getZoneId()));
@@ -260,6 +261,14 @@ public class ZoneInfoService {
260 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 273
      * 检查zip包内容
265 274
      * @param zoneInfo
@@ -287,8 +296,12 @@ public class ZoneInfoService {
287 296
 
288 297
     @Transactional
289 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 307
     public List<String> autoCompleteMyWork(String userCode, String keyword) {