Переглянути джерело

电签监控
排队中 预计完成时间计算

LHB 6 днів тому
батько
коміт
f2e43678c1

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/TaskBatchMonitorDTO.java

@@ -49,4 +49,7 @@ public class TaskBatchMonitorDTO {
     @ApiModelProperty("完成时间")
     private String finishTime;
 
+    @ApiModelProperty("偏移秒数")
+    private Integer estimatedTimeSeconds;
+
 }

+ 2 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/TaskBatchPage.java

@@ -25,6 +25,8 @@ public class TaskBatchPage {
     private Integer current;
     @ApiModelProperty("数量")
     private Integer size;
+    @ApiModelProperty("偏移时间")
+    private Integer time;
     @ApiModelProperty("数量")
     private List<String> formDataIds;
 

+ 12 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml

@@ -30,6 +30,7 @@
     </select>
     <select id="selectTaskBatchList" resultType="org.springblade.business.dto.TaskBatchMonitorDTO">
         SELECT
+            a.formDataId,
             b.type,
             d.project_name projectName,
             c.contract_name contractName,
@@ -37,7 +38,11 @@
             a.nick_name userName,
             DATE_FORMAT(a.create_time,'%H:%i') createTime,
             1 signType,
-            b.pdf_url_size pdfUrlSize
+            b.pdf_url_size pdfUrlSize,
+            CASE
+                WHEN b.pdf_url_size/1024 &lt;= 51200 THEN 30 + ${query.time}  -- 0-50M固定30秒
+                ELSE GREATEST(30, CEIL(b.pdf_url_size/52428800) * 30) + ${query.time}
+            END AS estimated_time_seconds
         FROM
             (
                 SELECT
@@ -80,6 +85,7 @@
     </select>
     <select id="selectTaskBatchList2" resultType="org.springblade.business.dto.TaskBatchMonitorDTO">
         SELECT
+            a.formDataId,
             b.type,
             d.project_name projectName,
             c.contract_name contractName,
@@ -87,7 +93,11 @@
             a.nick_name userName,
             DATE_FORMAT(a.create_time,'%H:%i') createTime,
             1 signType,
-            b.pdf_url_size pdfUrlSize
+            b.pdf_url_size pdfUrlSize,
+            CASE
+                WHEN b.pdf_url_size/1024 &lt;= 51200 THEN 30
+                ELSE GREATEST(30, CEIL(b.pdf_url_size/52428800) * 30)
+            END AS estimated_time_seconds
         FROM
             (
                 SELECT

+ 32 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskBatchServiceImpl.java

@@ -95,8 +95,8 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
                         if (StringUtils.isNotEmpty(value)) {
                             taskBatchMonitorDTO.setTaskType(1);
                             //开始时间
-                            DateTime startTime = DateUtil.parse(value, "yyyy-MM-dd HH:MM:ss");
-                            taskBatchMonitorDTO.setStartTime(startTime.toString("HH:MM"));
+                            DateTime startTime = DateUtil.parse(value, "yyyy-MM-dd HH:mm:ss");
+                            taskBatchMonitorDTO.setStartTime(startTime.toString("HH:mm"));
                             //预计完成时间
                             if (taskBatchMonitorDTO.getPdfUrlSize() != null && taskBatchMonitorDTO.getPdfUrlSize() != 0) {
                                 Long pdfUrlSize = taskBatchMonitorDTO.getPdfUrlSize();
@@ -107,6 +107,8 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
 
                                 String s = TimeConverter.secondsToMinutesSeconds(time);
                                 taskBatchMonitorDTO.setFinishTime(s + "(" + dateTime.toString("HH:mm") + ")");
+                            }else{
+                                taskBatchMonitorDTO.setFinishTime("无法估算");
                             }
                             data.add(taskBatchMonitorDTO);
                         }
@@ -145,8 +147,27 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
 
     @Override
     public R<IPage<TaskBatchMonitorDTO>> pageOrder(TaskBatchPage page) {
+        boolean jarRunning = false;
+        try {
+            jarRunning = isJarRunning("blade-e-visa.jar");
+        } catch (Exception e) {
+        }
+        //获取正在处理的任务
+        Integer time = 0;
+        if(jarRunning){
+            R<List<TaskBatchMonitorDTO>> listR = selectTaskBatchList(new TaskBatchPage());
+            List<TaskBatchMonitorDTO> data = listR.getData();
+            if(CollectionUtil.isNotEmpty(data)){
+                List<TaskBatchMonitorDTO> collect = data.stream().filter(f -> f.getEstimatedTimeSeconds() != null).collect(Collectors.toList());
+                TaskBatchMonitorDTO taskBatchMonitorDTO = collect.get(collect.size() - 1);
+                //正在处理的任务最后一个偏移时间
+                time += taskBatchMonitorDTO.getEstimatedTimeSeconds();
+            }
+        }
+
         //初始化查询参数
         page.setTaskType(2);
+        page.setTime(time);
 
         Set<String> keys = redisTemplate.keys("sign-*");
         if (CollectionUtil.isNotEmpty(keys)) {
@@ -157,6 +178,15 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
             page.setFormDataIds(strings);
         }
         IPage<TaskBatchMonitorDTO> taskBatchMonitorDTOIPage = baseMapper.selectTaskBatchList(new Page<>(page.getCurrent(),page.getSize()),page);
+        taskBatchMonitorDTOIPage.getRecords().forEach(f->{
+            if(f.getEstimatedTimeSeconds() == null || page.getTime() == 0){
+                f.setFinishTime("无法估算");
+                return;
+            }
+            DateTime dateTime = DateUtil.offsetSecond(DateUtil.parse(f.getCreateTime()), f.getEstimatedTimeSeconds());
+            String s = TimeConverter.secondsToMinutesSeconds(f.getEstimatedTimeSeconds());
+            f.setFinishTime(s + "(" + dateTime.toString("HH:mm") + ")");
+        });
         return R.data(taskBatchMonitorDTOIPage);
     }
 

+ 2 - 1
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVController.java

@@ -1,5 +1,6 @@
 package org.springblade.evisa.controller;
 
+import cn.hutool.core.date.DateTime;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
@@ -98,7 +99,7 @@ public class EVController {
                         }
 
                         if(!aBoolean){
-                            RedisTemplate.opsForValue().set("sign-" + dataInfo.getFormDataId(), "1", 7200, TimeUnit.SECONDS);
+                            RedisTemplate.opsForValue().set("sign-" + dataInfo.getFormDataId(), DateTime.now().toString(), 7200, TimeUnit.SECONDS);
                             CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
                                 try {
                                     /*===============执行批量任务===============*/