|
@@ -1,21 +1,28 @@
|
|
package org.springblade.evisa.controller;
|
|
package org.springblade.evisa.controller;
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import io.swagger.annotations.*;
|
|
import io.swagger.annotations.*;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
|
+import org.springblade.business.entity.TaskBatch;
|
|
|
|
+import org.springblade.business.vo.TaskApprovalVO;
|
|
import org.springblade.core.boot.ctrl.BladeController;
|
|
import org.springblade.core.boot.ctrl.BladeController;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
import java.io.BufferedReader;
|
|
import java.io.BufferedReader;
|
|
|
|
+import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.InputStreamReader;
|
|
|
|
+import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
-import java.util.concurrent.ArrayBlockingQueue;
|
|
|
|
-import java.util.concurrent.LinkedBlockingQueue;
|
|
|
|
-import java.util.concurrent.ThreadPoolExecutor;
|
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
+import java.util.concurrent.*;
|
|
|
|
|
|
import java.lang.management.ManagementFactory;
|
|
import java.lang.management.ManagementFactory;
|
|
import java.lang.management.OperatingSystemMXBean;
|
|
import java.lang.management.OperatingSystemMXBean;
|
|
@@ -29,71 +36,96 @@ import java.lang.management.OperatingSystemMXBean;
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
@RequestMapping("/evisaInfo")
|
|
@RequestMapping("/evisaInfo")
|
|
@Api(value = "电签类", tags = "电签类接口")
|
|
@Api(value = "电签类", tags = "电签类接口")
|
|
|
|
+@Slf4j
|
|
public class EVisaController {
|
|
public class EVisaController {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
StringRedisTemplate RedisTemplate;
|
|
StringRedisTemplate RedisTemplate;
|
|
|
|
|
|
- // 线程池中初始线程个数
|
|
|
|
- private final static Integer CORE_POOL_SIZE =20;
|
|
|
|
- // 线程池中允许的最大线程数
|
|
|
|
- private final static Integer MAXIMUM_POOL_SIZE = 30;
|
|
|
|
- // 当线程数大于初始线程时。终止多余的空闲线程等待新任务的最长时间
|
|
|
|
- private final static Long KEEP_ALIVE_TIME = 10L;
|
|
|
|
- // 任务缓存队列 ,即线程数大于初始线程数时先进入队列中等待,此数字可以稍微设置大点,避免线程数超过最大线程数时报错。或者直接用无界队列
|
|
|
|
- private final static LinkedBlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<Runnable>();
|
|
|
|
- ThreadPoolExecutor threadPoolExecutor = null;
|
|
|
|
- // 自定义线程池,开发推荐使用
|
|
|
|
- public static ThreadPoolExecutor ITDragonThreadPoolExecutor() {
|
|
|
|
- // 构建一个,初始线程数量为3,最大线程数据为8,等待时间10分钟 ,队列长度为5 的线程池
|
|
|
|
- ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
|
|
|
|
- CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.MINUTES, WORK_QUEUE);
|
|
|
|
- return threadPoolExecutor;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // @Scheduled(cron = "0 */3 * * * ?")
|
|
|
|
- public void StartEvisInfo() {
|
|
|
|
- if(threadPoolExecutor==null){
|
|
|
|
- threadPoolExecutor = ITDragonThreadPoolExecutor();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for (int i = 0; i < 10; i++) { // 执行8个任务,若超过MAXIMUM_POOL_SIZE则会报错 RejectedExecutionException
|
|
|
|
- RedisTemplate.opsForValue().set("sign-" + i, "1", 63, TimeUnit.SECONDS);
|
|
|
|
- }
|
|
|
|
- System.out.println("完成");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Scheduled(cron = "0 */1 * * * ?")
|
|
|
|
- public void runEvisInfo() {
|
|
|
|
-
|
|
|
|
- Set<String> keys = RedisTemplate.keys("sign-*");
|
|
|
|
- System.out.println(keys.size());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- static class MyRunnableTest implements Runnable {
|
|
|
|
- private Integer num; // 正在执行的任务数
|
|
|
|
- public MyRunnableTest(Integer num) {
|
|
|
|
- this.num = num;
|
|
|
|
- }
|
|
|
|
- public void run() {
|
|
|
|
- System.out.println("正在执行的MyRunnable " + num);
|
|
|
|
- try {
|
|
|
|
- Thread.sleep(1000);// 模拟执行事务需要耗时
|
|
|
|
- } catch (InterruptedException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- System.out.println("MyRunnable " + num + "执行完毕");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- public static void main2(String[] args) {
|
|
|
|
- OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
|
|
|
|
- double cpuUsage = operatingSystemMXBean.getSystemLoadAverage();
|
|
|
|
- System.out.println("CPU Usage: " + cpuUsage);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ private final JdbcTemplate jdbcTemplate;
|
|
|
|
+
|
|
|
|
+ // 线程池
|
|
|
|
+ @Resource(name = "taskExecutor1")
|
|
|
|
+ private ThreadPoolExecutor executor;
|
|
|
|
+
|
|
|
|
+ // 电签主类
|
|
|
|
+// @Scheduled(cron = "0 */1 * * * ?")
|
|
|
|
+// public void SignInfo() {
|
|
|
|
+// //执行代码
|
|
|
|
+// log.info("扫描开始");
|
|
|
|
+// String sql = "SELECT * from u_task_batch where is_deleted not in(2,4) LIMIT 100";
|
|
|
|
+// List<TaskBatch> maps = jdbcTemplate.queryForList(sql,TaskBatch.class);
|
|
|
|
+// if (maps != null && maps.size() >= 1) {
|
|
|
|
+// for (TaskBatch dataInfo : maps) {
|
|
|
|
+// String jsonData = dataInfo.getJsonData();
|
|
|
|
+// TaskApprovalVO taskApprovalVO = JSON.parseObject(jsonData, TaskApprovalVO.class);
|
|
|
|
+// String taskBatchId = dataInfo.getId().toString();
|
|
|
|
+// Long userId = dataInfo.getCreateUser();
|
|
|
|
+// String nickName = dataInfo.getNickName();
|
|
|
|
+//
|
|
|
|
+// Boolean istrue = true;
|
|
|
|
+// try {
|
|
|
|
+// Thread.sleep(500);
|
|
|
|
+// } catch (InterruptedException e) {
|
|
|
|
+// throw new RuntimeException(e);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// Boolean aBoolean = RedisTemplate.hasKey("sign-" + taskApprovalVO.getFormDataId());
|
|
|
|
+// System.out.println(taskApprovalVO.getFormDataId()+"---"+aBoolean);
|
|
|
|
+// if (aBoolean) {
|
|
|
|
+// istrue = false;
|
|
|
|
+// }
|
|
|
|
+// if (istrue) {
|
|
|
|
+// int wtask = executor.getQueue().size();
|
|
|
|
+// if (wtask >= 200) {
|
|
|
|
+// break;
|
|
|
|
+// }
|
|
|
|
+// jdbcTemplate.execute("update u_task_batch set is_deleted=2 where id="+taskBatchId+"");
|
|
|
|
+// RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1", 66, TimeUnit.SECONDS);
|
|
|
|
+// CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
|
|
|
|
+// try {
|
|
|
|
+// this.checkIsExsitTaskBatch(taskApprovalVO, taskBatchId, userId, nickName);
|
|
|
|
+// } catch (FileNotFoundException e) {
|
|
|
|
+// e.printStackTrace();
|
|
|
|
+// }
|
|
|
|
+// }, executor);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void checkIsExsitTaskBatch(TaskApprovalVO taskApprovalVO, String batchId, Long userId, String nickName) throws FileNotFoundException {
|
|
|
|
+// log.info("【任务审核】当前批次开始电签。批次ID:" + batchId);
|
|
|
|
+// taskApprovalVO.setId(batchId);
|
|
|
|
+// taskApprovalVO.setUserId(userId);
|
|
|
|
+// taskApprovalVO.setNickName(nickName);
|
|
|
|
+// String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
|
|
|
|
+//
|
|
|
|
+// System.out.println("电签操作成功buss-----" + pdfUrlEVisa + "---batchId=" + batchId);
|
|
|
|
+// //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) liuYc 2023-03-16 ==============
|
|
|
|
+// if ("OK".equals(taskApprovalVO.getFlag()) && StringUtils.isNotEmpty(pdfUrlEVisa)) {
|
|
|
|
+// //已审批
|
|
|
|
+// this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(pdfUrlEVisa, taskApprovalVO);
|
|
|
|
+// //executor删除掉对应批次
|
|
|
|
+// this.taskBatchService.deletedById(batchId);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// if (!"OK".equals(taskApprovalVO.getFlag())) {
|
|
|
|
+// //已废除
|
|
|
|
+// this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatusFC(taskApprovalVO);
|
|
|
|
+// //executor删除掉对应批次
|
|
|
|
+// this.taskBatchService.deletedById(batchId);
|
|
|
|
+// }
|
|
|
|
+// RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private String completeApprovalTask(TaskApprovalVO taskApprovalVO) {
|
|
|
|
+// if ("OK".equals(taskApprovalVO.getFlag())) { // 电签流程
|
|
|
|
+//
|
|
|
|
+// }else { //任务废除
|
|
|
|
+//
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// return "";
|
|
|
|
+// }
|
|
}
|
|
}
|