Browse Source

后管-电签监控
1、接口开发
u_information_query 新增字段 pdf_url_size

LHB 1 week ago
parent
commit
460572d1b1

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

@@ -0,0 +1,52 @@
+package org.springblade.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * @author LHB
+ */
+@Data
+public class TaskBatchMonitorDTO {
+
+    @ApiModelProperty("任务id")
+    private String formDataId;
+
+    @ApiModelProperty("任务类型:1-正在处理,2-排队中")
+    private Integer taskType;
+
+    @ApiModelProperty("所属系统:1-质检,2-试验")
+    private Integer type;
+
+    @ApiModelProperty("项目名称")
+    private String projectName;
+
+    @ApiModelProperty("合同段")
+    private String contractName;
+
+    @ApiModelProperty("任务名称")
+    private String taskName;
+
+    @ApiModelProperty("任务人")
+    private String userName;
+
+    @ApiModelProperty("任务类型:1-个人整数,2企业证书")
+    private String signType;
+
+    @ApiModelProperty("文件大小")
+    private Long pdfUrlSize;
+
+    @ApiModelProperty("任务开始时间")
+    private String createTime;
+
+    @ApiModelProperty("电签开始时间")
+    private String startTime;
+
+    @ApiModelProperty("完成时间")
+    private String finishTime;
+
+}

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

@@ -0,0 +1,25 @@
+package org.springblade.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author LHB
+ */
+@Data
+public class TaskBatchPage {
+    @ApiModelProperty("任务类型:1-正在处理,2-排队中")
+    private Integer taskType;
+    @ApiModelProperty("类型:1-质检,2-试验")
+    private Integer type;
+    @ApiModelProperty("项目id")
+    private Long projectId;
+    @ApiModelProperty("合同段id")
+    private Long contractId;
+    @ApiModelProperty("任务名称")
+    private String taskName;
+
+//    private Integer current;
+//    private Integer size;
+
+}

+ 42 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskBatchController.java

@@ -0,0 +1,42 @@
+package org.springblade.business.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.business.dto.TaskBatchMonitorDTO;
+import org.springblade.business.dto.TaskBatchPage;
+import org.springblade.business.service.ITaskBatchService;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author LHB
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/taskBatch")
+@Api(value = "电签相关接口", tags = "电签相关接口")
+public class TaskBatchController {
+
+    @Resource
+    private ITaskBatchService taskBatchService;
+
+    /**
+     * 电签监控接口
+     */
+    @PostMapping("/page")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "电签监控接口")
+    public R<List<TaskBatchMonitorDTO>> selectTaskBatchList(@RequestBody TaskBatchPage page){
+        return taskBatchService.selectTaskBatchList(page);
+    }
+}

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.java

@@ -17,6 +17,8 @@
 package org.springblade.business.mapper;
 
 import io.lettuce.core.dynamic.annotation.Param;
+import org.springblade.business.dto.TaskBatchMonitorDTO;
+import org.springblade.business.dto.TaskBatchPage;
 import org.springblade.business.entity.TaskBatch;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -36,4 +38,5 @@ public interface TaskBatchMapper extends BaseMapper<TaskBatch> {
 
     List<TaskBatch>  queryDataInfo();
 
+    List<TaskBatchMonitorDTO> selectTaskBatchList(@Param("query") TaskBatchPage page);
 }

+ 44 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml

@@ -28,5 +28,49 @@
     <select id="queryDataInfo" resultMap="taskBatchResultMap">
         SELECT a.* from u_task_batch a LIMIT 40
     </select>
+    <select id="selectTaskBatchList" resultType="org.springblade.business.dto.TaskBatchMonitorDTO">
+        SELECT
+            b.type,
+            d.project_name projectName,
+            c.contract_name contractName,
+            b.NAME taskName,
+            a.nick_name userName,
+            DATE_FORMAT(a.create_time,'%H:%i') createTime,
+            1 signType,
+            b.pdf_url_size pdfUrlSize
+        FROM
+            (
+                SELECT
+                    json_data ->> '$.formDataId' formDataId,
+                    GROUP_CONCAT( nick_name ) nick_name,
+                    create_time
+                FROM
+                    u_task_batch a
+                WHERE
+                    sign_type = 1
+                GROUP BY
+                    json_data ->> '$.formDataId'
+                ORDER BY
+                    create_time
+            ) a
+            LEFT JOIN u_information_query b ON a.formDataId = b.id
+            LEFT JOIN m_contract_info c ON b.contract_id = c.id
+            LEFT JOIN m_project_info d ON b.project_id = d.id
+        <where>
+            <if test="type != null">
+                AND b.type = #{type}
+            </if>
+            <if test="projectId != null">
+                AND b.project_id = #{projectId}
+            </if>
+            <if test="contractId != null">
+                AND b.contractId = #{contractId}
+            </if>
+            <if test="taskName != null and taskName != ''">
+                AND b.name like concat('%',#{taskName},'%')
+            </if>
+        </where>
+
+    </select>
 
 </mapper>

+ 5 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskBatchService.java

@@ -16,8 +16,12 @@
  */
 package org.springblade.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.business.dto.TaskBatchMonitorDTO;
+import org.springblade.business.dto.TaskBatchPage;
 import org.springblade.business.entity.TaskBatch;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
 
 import java.util.List;
 
@@ -36,4 +40,5 @@ public interface ITaskBatchService extends BaseService<TaskBatch> {
 
     List<TaskBatch> queryDataInfo();
 
+    R<List<TaskBatchMonitorDTO>> selectTaskBatchList(TaskBatchPage page);
 }

+ 74 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskBatchServiceImpl.java

@@ -16,13 +16,28 @@
  */
 package org.springblade.business.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.business.dto.TaskBatchMonitorDTO;
+import org.springblade.business.dto.TaskBatchPage;
 import org.springblade.business.entity.TaskBatch;
 import org.springblade.business.mapper.TaskBatchMapper;
 import org.springblade.business.service.ITaskBatchService;
+import org.springblade.business.utils.TimeConverter;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 服务实现类
@@ -32,6 +47,9 @@ import java.util.List;
  */
 @Service
 public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskBatch> implements ITaskBatchService {
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
 
     @Override
     public void deletedById(String id) {
@@ -47,4 +65,60 @@ public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskB
     public List<TaskBatch> queryDataInfo() {
         return baseMapper.queryDataInfo();
     }
+
+    @Override
+    public R<List<TaskBatchMonitorDTO>> selectTaskBatchList(TaskBatchPage page) {
+        //初始化查询参数
+        page.setTaskType(page.getTaskType() == null ? 1 : page.getTaskType());
+
+        List<TaskBatchMonitorDTO> list = baseMapper.selectTaskBatchList(page);
+        for (TaskBatchMonitorDTO taskBatchMonitorDTO : list) {
+            String value = redisTemplate.opsForValue().get("sign-" + taskBatchMonitorDTO.getFormDataId());
+            if(StringUtils.isNotEmpty(value)){
+                taskBatchMonitorDTO.setTaskType(1);
+                //开始时间
+                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();
+                    //判断偏移多少秒  每50M  30秒
+                    int time = calculateExecutionTime((double) pdfUrlSize / 1024 / 1024);
+
+                    DateTime dateTime = DateUtil.offsetSecond(startTime, time);
+
+                    String s = TimeConverter.secondsToMinutesSeconds(time);
+                    taskBatchMonitorDTO.setFinishTime(s + "(" + dateTime.toString("HH:mm") + ")");
+                }
+            }else{
+                taskBatchMonitorDTO.setTaskType(2);
+            }
+        }
+
+        return R.data(list.stream().filter(f -> Objects.equals(f.getTaskType(), page.getTaskType())).collect(Collectors.toList()));
+    }
+
+    /**
+     * 根据文件大小计算执行时间
+     * @param fileSizeMB 文件大小(MB)
+     * @return 执行时间(秒)
+     */
+    public static int calculateExecutionTime(double fileSizeMB) {
+        if (fileSizeMB < 0) {
+            throw new IllegalArgumentException("文件大小不能为负数: " + fileSizeMB);
+        }
+
+        if (fileSizeMB <= 50) {
+            return 30;
+        } else if (fileSizeMB <= 100) {
+            return 60;
+        } else if (fileSizeMB <= 150) {
+            return 90;
+        } else {
+            // 超过150MB,每50MB递增30秒
+            double excess = fileSizeMB - 150;
+            int increments = (int) Math.ceil(excess / 50); // 向上取整
+            return 90 + increments * 30;
+        }
+    }
 }

+ 42 - 0
blade-service/blade-business/src/main/java/org/springblade/business/utils/TimeConverter.java

@@ -0,0 +1,42 @@
+package org.springblade.business.utils;
+
+public class TimeConverter {
+
+    /**
+     * 将秒数转换为 "X分Y秒" 格式
+     * @param seconds 秒数
+     * @return 格式化的时间字符串
+     */
+    public static String secondsToMinutesSeconds(int seconds) {
+        if (seconds < 0) {
+            throw new IllegalArgumentException("秒数不能为负数: " + seconds);
+        }
+
+        int minutes = seconds / 60;
+        int remainingSeconds = seconds % 60;
+
+        if (minutes == 0) {
+            return remainingSeconds + "秒";
+        } else if (remainingSeconds == 0) {
+            return minutes + "分";
+        } else {
+            return minutes + "分" + remainingSeconds + "秒";
+        }
+    }
+
+    /**
+     * 将秒数转换为 "XX:XX" 格式(分钟:秒)
+     * @param seconds 秒数
+     * @return 格式化的时间字符串
+     */
+    public static String secondsToMinutesSecondsColon(int seconds) {
+        if (seconds < 0) {
+            throw new IllegalArgumentException("秒数不能为负数: " + seconds);
+        }
+
+        int minutes = seconds / 60;
+        int remainingSeconds = seconds % 60;
+
+        return String.format("%d:%02d", minutes, remainingSeconds);
+    }
+}

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -3219,7 +3219,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     contractId = wbsTreeContract.getContractId();
                 }
             }
-            String sql = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "' , sort = " + sort + ",e_visa_pdf_url = null" + " where classify='" + classify + "' and  wbs_id='" + nodeId + "' and contract_id ='" + contractId + "' ";
+            Long pdfSize = CommonUtil.getResourceLength(bladeFile.getLink());
+            String sql = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "',pdf_url_size = " + pdfSize + " , sort = " + sort + ",e_visa_pdf_url = null" + " where classify='" + classify + "' and  wbs_id='" + nodeId + "' and contract_id ='" + contractId + "' ";
             System.out.println(sql);
             jdbcTemplate.execute(sql);
         }