Browse Source

自测物理世界对象上传/下载逻辑,修复其中的bug

lijie 3 years ago
parent
commit
b6ecfd35a0

+ 59 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/DefaultAsycTaskConfig.java

@@ -0,0 +1,59 @@
+package com.persagy.dmp.rwd.config;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 
+ * @description 
+ * @author zhangqiankun
+ * @since 2020年10月21日:	上午9:51:48
+ */
+@Setter
+@Getter
+@EnableAsync(proxyTargetClass = true)
+public class DefaultAsycTaskConfig {
+    /**
+     *  线程池维护线程的最小数量.
+     */
+    @Value("${asyc-task.corePoolSize:10}")
+    private int corePoolSize;
+    /**
+     *  线程池维护线程的最大数量
+     */
+    @Value("${asyc-task.maxPoolSize:200}")
+    private int maxPoolSize;
+    /**
+     *  队列最大长度
+     */
+    @Value("${asyc-task.queueCapacity:10}")
+    private int queueCapacity;
+    /**
+     *  线程池前缀
+     */
+    @Value("${asyc-task.threadNamePrefix:integrated-executor-}")
+    private String threadNamePrefix;
+
+    @Bean
+    public ThreadPoolTaskExecutor taskExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(corePoolSize);
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setThreadNamePrefix(threadNamePrefix);
+        /*
+           rejection-policy:当pool已经达到max size的时候,如何处理新任务
+           CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        */
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        executor.initialize();
+        return executor;
+    }
+}

+ 1 - 1
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/DownloadService.java

@@ -77,7 +77,7 @@ public abstract class DownloadService {
      * @date :2021/4/28 17:20
      * Update By lijie 2021/4/28 17:20
      */
-    protected abstract void handleWorkbook(Workbook workbook);
+    protected abstract void handleWorkbook(Workbook workbook) throws InterruptedException;
     /***
      * Description: 获取文件路径
      * @return : java.lang.String

+ 2 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/InitService.java

@@ -202,6 +202,8 @@ public class InitService extends BaseService {
 		sql.append("   `note` text,                                                               \n");
 		sql.append("   `sub_flag` int(11) DEFAULT NULL,                                           \n");
 		sql.append("   `weak_point` int(11) DEFAULT NULL,                                         \n");
+		sql.append("   `alias_first_tag` varchar(40) DEFAULT NULL,                                \n");
+		sql.append("   `alias_second_tag` varchar(40) DEFAULT NULL,                               \n");
 		sql.append("   PRIMARY KEY (`id`),                                                        \n");
 		sql.append("   KEY `class_code` (`class_code`,`code`),                                    \n");
 		sql.append("   KEY `class_code_2` (`class_code`,`orig_code`)                              \n");

+ 20 - 4
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/impl/BatchHandleObjectServiceImpl.java

@@ -43,6 +43,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Name;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -53,6 +55,8 @@ import java.io.IOException;
 import java.text.Collator;
 import java.util.*;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Future;
 import java.util.stream.Collectors;
 
 /***
@@ -102,6 +106,8 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
 
     private final ProjectDao projectDao;
 
+    private final ThreadPoolTaskExecutor taskExecutor;
+
 
     /***
      * Description: 下载模板接口
@@ -117,7 +123,7 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
         // 下载Excel模板类
         new DownloadService() {
             @Override
-            protected void handleWorkbook(Workbook workbook) {
+            protected void handleWorkbook(Workbook workbook) throws InterruptedException {
                 // 1.填充对象类数据
                 fillDataToWorkbook(workbook,groupCode);
             }
@@ -576,7 +582,16 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
      * @date :2021/9/22 10:23
      * Update By lijie 2021/9/22 10:23
      */
-    private void fillDataToWorkbook(Workbook workbook,String groupCode) {
+    private void fillDataToWorkbook(Workbook workbook,String groupCode) throws InterruptedException {
+//        final CountDownLatch countDownLatch = new CountDownLatch(1);
+//        taskExecutor.submit(() -> {
+//            // 6.填充专业系统设备类,异步线程执行
+//            try {
+//                fillObjectClazzDataToWorkbook(workbook, groupCode);
+//            }finally {
+//                countDownLatch.countDown();
+//            }
+//        });
         // 1.填充建筑功能类型
         fillBuildFuncDataToWorkbook(workbook,groupCode);
         // 2.设置建筑功能类型的下拉框-交给Excel自己实现
@@ -587,8 +602,9 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
         fillSpaceZoneDataToWorkbook(workbook,groupCode);
         // 5.填充空间功能类型
         fillSpaceFuncTypesDataToWorkbook(workbook,groupCode);
-        // 6.填充专业系统设备类
-        fillObjectClazzDataToWorkbook(workbook,groupCode);
+        // 6.填充专业系统设备类,异步线程执行
+        fillObjectClazzDataToWorkbook(workbook, groupCode);
+        //countDownLatch.await(); //主线程挂起,直到CountDownLatch的值为0
     }
     /***
      * Description: 填充专业系统设备类型

BIN
dmp-rwd/src/main/resources/template/ObjectInfoTemplate.xlsx


+ 1 - 1
pom.xml

@@ -163,7 +163,7 @@
             <dependency>
                 <groupId>cn.hutool</groupId>
                 <artifactId>hutool-all</artifactId>
-                <version>5.7.10</version>
+                <version>5.7.2</version>
             </dependency>
         </dependencies>