Browse Source

1.档案任务相关
2.个别bug

liuyc 1 year ago
parent
commit
500fc0eda1

+ 3 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveTaskPageVO.java

@@ -38,4 +38,7 @@ public class ArchiveTaskPageVO implements Serializable {
     @ApiModelProperty(value = "电签状态")
     private String eVisaStatus;
 
+    @ApiModelProperty(value = "电签状态描述")
+    private String eVisaContents;
+
 }

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/Task.java

@@ -120,7 +120,7 @@ public class Task extends BaseEntity {
     /**
      * 上报类型,1填报资料,2工程文件
      */
-    @ApiModelProperty("上报类型,1填报资料,2工程文件,3日志资料")
+    @ApiModelProperty("上报类型,1填报资料,2工程文件,3日志资料,4档案")
     private Integer approvalType;
 
     @ApiModelProperty("项目ID")

+ 16 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ArchiveFileTaskPDFVO.java

@@ -0,0 +1,16 @@
+package org.springblade.business.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ArchiveFileTaskPDFVO implements Serializable {
+
+    private Long id;
+
+    private String pdfUrl;
+
+    private String fileName;
+
+}

+ 94 - 24
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java

@@ -1,6 +1,7 @@
 package org.springblade.archive.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.itextpdf.text.Image;
 import com.itextpdf.text.Rectangle;
@@ -14,6 +15,7 @@ import org.springblade.archive.dto.ArchiveTaskDTO;
 import org.springblade.archive.vo.ArchiveTaskPageVO;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.entity.Task;
+import org.springblade.business.entity.TaskParallel;
 import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.boot.ctrl.BladeController;
@@ -44,7 +46,6 @@ public class ArchiveFileTaskController extends BladeController {
     private final JdbcTemplate jdbcTemplate;
     private final SignPfxClient signPfxClient;
     private final EVisaClient eVisaClient;
-    private final ArchiveFileClient archiveFileClient;
 
     /**
      * 批量认证(水印图片签章默认认证电签)
@@ -147,59 +148,128 @@ public class ArchiveFileTaskController extends BladeController {
      */
     @PostMapping("/page")
     @ApiOperationSupport(order = 3)
-    @ApiOperation(value = "档案-任务管理-任务查看分页查询", notes = "传入用户userIds,字符串逗号分割拼接")
+    @ApiOperation(value = "档案-任务管理-任务查看分页查询", notes = "传入ArchiveTaskDTO")
     public R<IPage<ArchiveTaskPageVO>> page(@RequestBody ArchiveTaskDTO dto) {
         int current = dto.getCurrent();
         int size = dto.getSize();
-        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1");
+        //封装入参SQL
+        List<Object> params = new ArrayList<>();
+        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND approval_type = 4");
         if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
-            sqlString.append(" type = ").append(dto.getTypeValue());
+            sqlString.append(" type = ?");
+            params.add(dto.getTypeValue());
         }
         if (ObjectUtil.isNotEmpty(dto.getStatusValue())) {
-            sqlString.append(" AND status = ").append(dto.getStatusValue());
+            sqlString.append(" AND status = ?");
+            params.add(dto.getStatusValue());
         }
         if (ObjectUtil.isNotEmpty(dto.getContractIdValue())) {
-            sqlString.append(" AND contract_id = ").append(dto.getContractIdValue());
+            sqlString.append(" AND contract_id = ?");
+            params.add(dto.getContractIdValue());
         }
         if (ObjectUtil.isNotEmpty(dto.getBatchValue())) {
-            sqlString.append(" AND batch = ").append(dto.getBatchValue());
+            sqlString.append(" AND batch = ?");
+            params.add(dto.getBatchValue());
         }
         if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
-            sqlString.append(" AND start_time >= '")
+            sqlString.append(" AND start_time >= ?")
                     .append(dto.getStartTimeValue())
-                    .append("' AND end_time <= '")
-                    .append(dto.getEndTimeValue())
-                    .append("'");
+                    .append(" AND end_time <= ?");
+            params.add(dto.getStartTimeValue());
+            params.add(dto.getEndTimeValue());
         }
         if (StringUtils.isNotBlank(dto.getQueryValue())) {
-            sqlString.append(" AND task_name LIKE '%").append(dto.getQueryValue()).append("%'");
+            sqlString.append(" AND task_name LIKE ?");
+            params.add("%" + dto.getQueryValue() + "%");
         }
-
         if (ObjectUtil.isNotEmpty(dto.getSelectedType())) {
+            sqlString.append(" AND (");
             if (dto.getSelectedType().equals(1)) { //待办
-                sqlString.append(" AND EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = 1 AND u_task_parallel.task_user = ").append(SecureUtil.getUserId()).append(")");
+                sqlString.append("EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = ? AND u_task_parallel.task_user = ?)");
+                params.add(1);
+                params.add(SecureUtil.getUserId());
+                if (ObjectUtil.isEmpty(dto.getStatusValue())) {
+                    //如果未选择任务状态,那么默认待审批
+                    sqlString.append(" AND status = 1");
+                }
             } else if (dto.getSelectedType().equals(2)) { //已办
-                sqlString.append(" AND EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = 2 AND u_task_parallel.task_user = ").append(SecureUtil.getUserId()).append(")");
+                sqlString.append("EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = ? AND u_task_parallel.task_user = ?)");
+                params.add(2);
+                params.add(SecureUtil.getUserId());
+                if (ObjectUtil.isEmpty(dto.getStatusValue())) {
+                    //如果未选择任务状态,那么默认已审批、已废除
+                    sqlString.append(" AND status in(2,3)");
+                }
             } else if (dto.getSelectedType().equals(3)) { //我发起
-                sqlString.append(" AND report_user = ").append(SecureUtil.getUserId());
+                sqlString.append("report_user = ?");
+                params.add(SecureUtil.getUserId());
             }
+            sqlString.append(")");
         }
 
         //总数量
         String sqlCount = sqlString.toString().replace("*", "count(1)");
-        List<Task> count = jdbcTemplate.query(sqlCount, new BeanPropertyRowMapper<>(Task.class));
+        Optional<Integer> totalCountOptional = Optional.ofNullable(jdbcTemplate.queryForObject(sqlCount, Integer.class, params.toArray()));
+        int totalCount = totalCountOptional.orElse(0);
 
         //分页
-        sqlString.append(" ORDER BY create_time DESC LIMIT ")
-                .append((current - 1) * size) //计算起始位置
-                .append(",")
-                .append(size); //指定每页的记录数量
+        sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
+        params.add(size);
+        params.add((current - 1) * size);
 
-        List<Task> resultList = jdbcTemplate.query(String.valueOf(sqlString), new BeanPropertyRowMapper<>(Task.class));
+        //执行SQL获取数据
+        String sqlPage = sqlString.toString();
+        List<Task> resultList = jdbcTemplate.query(
+                sqlPage,
+                new BeanPropertyRowMapper<>(Task.class),
+                params.toArray()
+        );
 
+        //获取任务详情信息Map
+        Set<String> processInstanceIds = resultList.stream().map(Task::getProcessInstanceId).collect(Collectors.toSet());
+        Map<String, List<TaskParallel>> taskParallelGroupMap = new HashMap<>();
+        if (processInstanceIds.size() > 0) {
+            taskParallelGroupMap = jdbcTemplate.query("select process_instance_id,task_user_name,e_visa_status,e_visa_content from u_task_parallel where process_instance_id in(" + StringUtils.join(processInstanceIds, ",") + ") order by id", new BeanPropertyRowMapper<>(TaskParallel.class)).stream().collect(Collectors.groupingBy(TaskParallel::getProcessInstanceId));
+        }
+        Map<String, List<TaskParallel>> finalTaskParallelGroupMap = taskParallelGroupMap;
 
-        return null;
-    }
+        //获取用户信息Map
+        Map<Long, String> nameMap = jdbcTemplate.query("select id,name from blade_user where is_deleted = 0", new BeanPropertyRowMapper<>(User.class)).stream().collect(Collectors.toMap(User::getId, User::getName, (key1, key2) -> key1));
 
+        //解析page分页数据
+        IPage<ArchiveTaskPageVO> page = new Page<>(current, size);
+        List<ArchiveTaskPageVO> pageList = resultList.stream()
+                .map(task -> {
+                    ArchiveTaskPageVO vo = new ArchiveTaskPageVO();
+                    vo.setId(task.getId());
+                    vo.setTaskName(task.getTaskName());
+                    vo.setTaskTypeName(task.getType().equals(1) ? "普通任务" : task.getType().equals(2) ? "验收任务" : "移交任务");
+                    vo.setTaskStatusName(task.getStatus().equals(1) ? "待审批" : task.getStatus().equals(2) ? "已审批" : "已废除");
+                    vo.setStartTime(task.getStartTime());
+                    vo.setEndTime(task.getEndTime());
+                    vo.setTaskDesc(task.getTaskContent());
+                    vo.setTaskReportUserName(nameMap.get(Long.parseLong(task.getReportUser())));
+                    List<TaskParallel> taskParallelList = finalTaskParallelGroupMap.get(task.getProcessInstanceId());
+                    if (taskParallelList != null && taskParallelList.size() > 0) {
+                        List<String> names = taskParallelList.stream().map(TaskParallel::getTaskUserName).collect(Collectors.toList());
+                        if (names.size() > 0) {
+                            vo.setTaskApproveUserNames(StringUtils.join(names, ","));
+                        }
+                        Set<Integer> eVisaStatus = taskParallelList.stream().map(TaskParallel::getEVisaStatus).collect(Collectors.toSet());
+                        if (eVisaStatus.size() > 0) {
+                            vo.setEVisaStatus(StringUtils.join(eVisaStatus, ","));
+                        }
+                        Set<String> eVisaContents = taskParallelList.stream().map(TaskParallel::getEVisaContent).collect(Collectors.toSet());
+                        if (eVisaContents.size() > 0) {
+                            vo.setEVisaContents(StringUtils.join(eVisaContents, ","));
+                        }
+                    }
+                    return vo;
+                })
+                .collect(Collectors.toList());
+        page.setRecords(pageList);
+        page.setTotal(totalCount);
+        return R.data(page);
+    }
 
 }

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/ContractLogController.java

@@ -310,9 +310,9 @@ public class ContractLogController extends BladeController {
                     userId = json.getLong("userId");
                 }
                 //如果ids为空,说明是填报页上报,那么需要根据 nodePrimaryKeyId 和 recordTime 获取当前用户的填写记录
-                ContractLog log = this.contractLogService.getOne(Wrappers.<ContractLog>lambdaQuery().eq(ContractLog::getWbsNodeId, nodePrimaryKeyId)
+                ContractLog log = this.contractLogService.getBaseMapper().selectList(Wrappers.<ContractLog>lambdaQuery().eq(ContractLog::getWbsNodeId, nodePrimaryKeyId)
                         .eq(ContractLog::getRecordTime, recordTime).eq(ContractLog::getContractId, startTaskVO.getContractId())
-                        .eq(ContractLog::getCreateUser, userId));
+                        .eq(ContractLog::getCreateUser, userId)).stream().findAny().orElse(null);
                 if (log == null) {
                     return R.fail("未找到业务数据");
                 }

+ 143 - 62
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -364,7 +364,7 @@ public class TaskController extends BladeController {
     @PostMapping("/batch-report-task-archive")
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "批量上报-档案")
-    public R<Object> batchReportTaskArchive(@RequestBody ArchiveTaskBatchReportDTO archiveTaskBatchReportDTO) {
+    public R<Object> batchReportTaskArchive(@RequestBody ArchiveTaskBatchReportDTO archiveTaskBatchReportDTO) throws IOException {
         if (ObjectUtil.isEmpty(archiveTaskBatchReportDTO.getUserIds())
                 || ObjectUtil.isEmpty(archiveTaskBatchReportDTO.getDataIds())
                 || ObjectUtil.isEmpty(archiveTaskBatchReportDTO.getBatch())
@@ -377,68 +377,90 @@ public class TaskController extends BladeController {
         Map<Long, String> nameMap = jdbcTemplate.query("select id,name from blade_user where is_deleted = 0", new BeanPropertyRowMapper<>(User.class)).stream().collect(Collectors.toMap(User::getId, User::getName, (key1, key2) -> key1));
         Map<Long, String> fileNameMaps = jdbcTemplate.query("select id,file_name from u_archive_file where file_name is not null and id in (" + archiveTaskBatchReportDTO.getDataIds() + ")", new BeanPropertyRowMapper<>(ArchiveFile.class)).stream().collect(Collectors.toMap(ArchiveFile::getId, ArchiveFile::getFileName, (obj1, obj2) -> obj1));
         String[] archiveIds = archiveTaskBatchReportDTO.getDataIds().split(",");
-        for (String archiveId : archiveIds) {
-            //创建task审批任务
-            Long processInstanceId = SnowFlakeUtil.getId();
-            Task task = new Task();
-            task.setId(SnowFlakeUtil.getId());
-            Date nowTime = new Date();
-            task.setStartTime(DateUtil.format(nowTime, "yyyy-MM-dd"));
-            task.setEndTime(DateUtil.format(DateUtils.addDays(nowTime, archiveTaskBatchReportDTO.getRestrictDay()), "yyyy-MM-dd"));
-
-            task.setProcessDefinitionId(SnowFlakeUtil.getId().toString());
-            task.setProcessInstanceId(processInstanceId.toString()); //实例id
-
-            task.setReportUser(AuthUtil.getUserId().toString());
-            task.setReportUserName(AuthUtil.getNickName());
-
-            task.setCreateUser(AuthUtil.getUserId());
-            task.setCreateTime(nowTime);
-            task.setUpdateTime(nowTime);
-            task.setUpdateUser(AuthUtil.getUserId());
-            task.setCreateDept(null);
-
-            task.setTaskContent(ObjectUtil.isNotEmpty(archiveTaskBatchReportDTO.getTaskContent()) ? archiveTaskBatchReportDTO.getTaskContent() : null);
-            task.setTaskUser(null);
-            task.setFormDataId(archiveId); //数据指向
-            task.setTaskName(ObjectUtil.isNotEmpty(fileNameMaps.get(Long.parseLong(archiveId))) ? fileNameMaps.get(Long.parseLong(archiveId)) : "未获取到档案文件任务名");
-            task.setContractId(archiveTaskBatchReportDTO.getContractId());
-            task.setProjectId(archiveTaskBatchReportDTO.getProjectId());
-            task.setBatch(archiveTaskBatchReportDTO.getBatch());
-            task.setType(1);
-            task.setApprovalType(4); //档案审批
-            task.setFixedFlowId(0L);
-            task.setStatus(1); //待审批
-            task.setIsDeleted(0);
-            task.setTrialSelfInspectionRecordId(null);
-
-            taskService.save(task);
-
-            //创建任务相关信息
-            String[] userIds = archiveTaskBatchReportDTO.getUserIds().split(",");
-            for (String userId : userIds) {
-                TaskParallel taskParallel = new TaskParallel();
-                taskParallel.setId(SnowFlakeUtil.getId());
-                taskParallel.setProcessInstanceId(processInstanceId.toString());
-                taskParallel.setParallelProcessInstanceId(SnowFlakeUtil.getId().toString());
-                taskParallel.setTaskUser(userId);
-                if (nameMap.get(Long.parseLong(userId)) != null) {
-                    taskParallel.setTaskUserName(nameMap.get(Long.parseLong(userId)));
+        if (archiveIds.length > 0) {
+            for (String archiveId : archiveIds) {
+                //创建task审批任务
+                Long processInstanceId = SnowFlakeUtil.getId();
+                Task task = new Task();
+                task.setId(SnowFlakeUtil.getId());
+                Date nowTime = new Date();
+                task.setStartTime(DateUtil.format(nowTime, "yyyy-MM-dd"));
+                task.setEndTime(DateUtil.format(DateUtils.addDays(nowTime, archiveTaskBatchReportDTO.getRestrictDay()), "yyyy-MM-dd"));
+
+                task.setProcessDefinitionId(SnowFlakeUtil.getId().toString());
+                task.setProcessInstanceId(processInstanceId.toString()); //实例id
+
+                task.setReportUser(AuthUtil.getUserId().toString());
+                task.setReportUserName(AuthUtil.getNickName());
+
+                task.setCreateUser(AuthUtil.getUserId());
+                task.setCreateTime(nowTime);
+                task.setUpdateTime(nowTime);
+                task.setUpdateUser(AuthUtil.getUserId());
+                task.setCreateDept(null);
+
+                task.setTaskContent(ObjectUtil.isNotEmpty(archiveTaskBatchReportDTO.getTaskContent()) ? archiveTaskBatchReportDTO.getTaskContent() : null);
+                task.setTaskUser(null);
+                task.setFormDataId(archiveId); //数据指向
+                task.setTaskName(ObjectUtil.isNotEmpty(fileNameMaps.get(Long.parseLong(archiveId))) ? fileNameMaps.get(Long.parseLong(archiveId)) : "未获取到档案文件任务名");
+                task.setContractId(archiveTaskBatchReportDTO.getContractId());
+                task.setProjectId(archiveTaskBatchReportDTO.getProjectId());
+                task.setBatch(archiveTaskBatchReportDTO.getBatch());
+                task.setType(1);
+                task.setApprovalType(4); //档案审批
+                task.setFixedFlowId(0L);
+                task.setStatus(1); //待审批
+                task.setIsDeleted(0);
+                task.setTrialSelfInspectionRecordId(null);
+
+                taskService.save(task);
+
+                //创建任务相关信息
+                String[] userIds = archiveTaskBatchReportDTO.getUserIds().split(",");
+                for (String userId : userIds) {
+                    TaskParallel taskParallel = new TaskParallel();
+                    taskParallel.setId(SnowFlakeUtil.getId());
+                    taskParallel.setProcessInstanceId(processInstanceId.toString());
+                    taskParallel.setParallelProcessInstanceId(SnowFlakeUtil.getId().toString());
+                    taskParallel.setTaskUser(userId);
+                    if (nameMap.get(Long.parseLong(userId)) != null) {
+                        taskParallel.setTaskUserName(nameMap.get(Long.parseLong(userId)));
+                    }
+                    taskParallel.setInitiative(1);
+                    taskParallel.setCreateUser(AuthUtil.getUserId());
+                    taskParallel.setCreateTime(nowTime);
+                    taskParallel.setUpdateTime(nowTime);
+                    taskParallel.setUpdateUser(AuthUtil.getUserId());
+                    taskParallel.setCreateDept(null);
+                    taskParallel.setStatus(1);
+                    taskParallel.setIsDeleted(0);
+                    taskParallelService.save(taskParallel);
+                }
+
+                //修改档案业务数据任务状态为待审批
+                jdbcTemplate.execute("update u_archive_file set status = 1 where id = " + archiveId);
+            }
+
+            //WebSocket推送
+            if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
+                Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
+                Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
+                for (Map.Entry<String, String> entry : message) {
+                    String userId = entry.getKey();
+                    if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
+                        String projectAndContractId = entry.getValue();
+                        if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
+                            String projectId = projectAndContractId.split(",")[0];
+                            String contractId = projectAndContractId.split(",")[1];
+                            Map<String, String> stringMap = iTaskService.getTaskCountArchive(projectId, contractId, userId);
+                            webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
+                        }
+                    }
                 }
-                taskParallel.setInitiative(1);
-                taskParallel.setCreateUser(AuthUtil.getUserId());
-                taskParallel.setCreateTime(nowTime);
-                taskParallel.setUpdateTime(nowTime);
-                taskParallel.setUpdateUser(AuthUtil.getUserId());
-                taskParallel.setCreateDept(null);
-                taskParallel.setStatus(1);
-                taskParallel.setIsDeleted(0);
-                taskParallelService.save(taskParallel);
             }
             return R.success("上报成功");
         }
-
-        return R.fail(400, "上报失败");
+        return R.fail("操作失败");
     }
 
     /**
@@ -447,7 +469,7 @@ public class TaskController extends BladeController {
     @PostMapping("/batch-repeal-task-archive")
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "批量撤销(废除)-档案")
-    public R<Object> batchRepealTaskArchive(@RequestBody ArchiveTaskBatchRepealDTO repealDTO) {
+    public R<Object> batchRepealTaskArchive(@RequestBody ArchiveTaskBatchRepealDTO repealDTO) throws IOException {
         if (repealDTO.getType().equals(1)) { //文件收集废除
             String[] archiveIds = repealDTO.getIds().split(",");
             for (String archiveId : archiveIds) {
@@ -465,6 +487,23 @@ public class TaskController extends BladeController {
                     }
                 }
             }
+            //WebSocket推送
+            if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
+                Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
+                Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
+                for (Map.Entry<String, String> entry : message) {
+                    String userId = entry.getKey();
+                    if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
+                        String projectAndContractId = entry.getValue();
+                        if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
+                            String projectId = projectAndContractId.split(",")[0];
+                            String contractId = projectAndContractId.split(",")[1];
+                            Map<String, String> stringMap = iTaskService.getTaskCountArchive(projectId, contractId, userId);
+                            webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
+                        }
+                    }
+                }
+            }
             return R.success("操作成功");
         } else if (repealDTO.getType().equals(2)) { //任务审批废除
             String[] taskIds = repealDTO.getIds().split(",");
@@ -479,6 +518,23 @@ public class TaskController extends BladeController {
                     jdbcTemplate.execute("update u_archive_file set status = 3 where id = " + task.getFormDataId());
                 }
             }
+            //WebSocket推送
+            if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
+                Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
+                Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
+                for (Map.Entry<String, String> entry : message) {
+                    String userId = entry.getKey();
+                    if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
+                        String projectAndContractId = entry.getValue();
+                        if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
+                            String projectId = projectAndContractId.split(",")[0];
+                            String contractId = projectAndContractId.split(",")[1];
+                            Map<String, String> stringMap = iTaskService.getTaskCountArchive(projectId, contractId, userId);
+                            webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
+                        }
+                    }
+                }
+            }
             return R.success("操作成功");
         }
         return R.fail(400, "操作失败");
@@ -552,7 +608,7 @@ public class TaskController extends BladeController {
                         if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
                             String projectId = projectAndContractId.split(",")[0];
                             String contractId = projectAndContractId.split(",")[1];
-                            Map<String, String> stringMap = iTaskService.getTaskCount(projectId, contractId, userId);
+                            Map<String, String> stringMap = iTaskService.getTaskCountArchive(projectId, contractId, userId);
                             webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
                         }
                     }
@@ -579,7 +635,7 @@ public class TaskController extends BladeController {
                             if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
                                 String projectId = projectAndContractId.split(",")[0];
                                 String contractId = projectAndContractId.split(",")[1];
-                                Map<String, String> stringMap = iTaskService.getTaskCount(projectId, contractId, userId);
+                                Map<String, String> stringMap = iTaskService.getTaskCountArchive(projectId, contractId, userId);
                                 webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
                             }
                         }
@@ -593,6 +649,31 @@ public class TaskController extends BladeController {
         return R.data(false);
     }
 
+    /**
+     * 批量审批-获取档案审批任务对应业务数据的pdf信息
+     */
+    @PostMapping("/getArchiveFileTaskPdfs")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "批量审批-获取档案审批任务对应业务数据的pdf信息", notes = "传入任务id,封装成taskIds,字符串逗号分割拼接")
+    public R<List<ArchiveFileTaskPDFVO>> getArchiveFileTaskPdfs(@RequestParam String taskIds) {
+        if (StringUtils.isNotEmpty(taskIds)) {
+            List<Task> taskList = jdbcTemplate.query("select form_data_id from u_task where approval_type = 4 and id in(" + taskIds + ")", new BeanPropertyRowMapper<>(Task.class));
+            Set<String> formDataIds = taskList.stream().map(Task::getFormDataId).collect(Collectors.toSet());
+            if (formDataIds.size() > 0) {
+                List<ArchiveFile> archiveFiles = jdbcTemplate.query("select id,file_name,pdf_file_url,e_visa_file from u_archive_file where id in(" + StringUtils.join(formDataIds, ",") + ")", new BeanPropertyRowMapper<>(ArchiveFile.class));
+                List<ArchiveFileTaskPDFVO> collect = archiveFiles.stream()
+                        .map(obj -> {
+                            ArchiveFileTaskPDFVO vo = new ArchiveFileTaskPDFVO();
+                            vo.setId(obj.getId());
+                            vo.setPdfUrl(ObjectUtil.isNotEmpty(obj.getEVisaFile()) ? obj.getEVisaFile() : obj.getPdfFileUrl());
+                            vo.setFileName(obj.getFileName());
+                            return vo;
+                        }).collect(Collectors.toList());
+                return R.data(collect);
+            }
+        }
+        return R.data(null);
+    }
 
     /**
      * 检查档案审批是否按照顺序审批

+ 7 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -63,10 +63,15 @@ public interface ITaskService extends BaseService<Task> {
     Boolean abolishTask(Task task);
 
     /**
-     * 获取任务数量
+     * 获取任务数量 - 非档案,其他任务
      */
     Map<String, String> getTaskCount(String projectId, String contractId, String userId);
 
+    /**
+     * 获取任务数量 - 档案任务
+     */
+    Map<String, String> getTaskCountArchive(String projectId, String contractId, String userId);
+
     /**
      * 获取当前合同段有哪些上报批次
      */
@@ -87,5 +92,5 @@ public interface ITaskService extends BaseService<Task> {
     /**
      * 清除废除任务是的业务数据
      */
-    void delArchiveFileBusinessData(Long projectId,Long wbsId);
+    void delArchiveFileBusinessData(Long projectId, Long wbsId);
 }

+ 74 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -372,6 +372,14 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         return true;
     }
 
+    /**
+     * 非档案任务
+     *
+     * @param projectId
+     * @param contractId
+     * @param userId
+     * @return
+     */
     @Override
     public Map<String, String> getTaskCount(String projectId, String contractId, String userId) {
         if (StringUtils.isNotEmpty(projectId) && StringUtils.isNotEmpty(contractId)) {
@@ -379,7 +387,72 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     .select(Task::getProcessInstanceId)
                     .eq(Task::getProjectId, projectId)
                     .eq(Task::getContractId, contractId)
-                    .eq(Task::getStatus, 1)); //只获取待办任务数量
+                    .eq(Task::getStatus, 1) //只获取待办任务数量
+                    .ne(Task::getApprovalType, 4));//不等于4,不查档案的任务,档案单独处理
+
+            //任务主表相关数量
+            List<String> taskCountIds = tasks.stream().map(Task::getProcessInstanceId).collect(Collectors.toList());
+
+            //任务附表中当前用户的相关任务数量
+            long taskAllCount = 0;
+            if (taskCountIds.size() > 0) {
+                taskAllCount = taskParallelService.getBaseMapper().selectCount(Wrappers.<TaskParallel>lambdaQuery()
+                        .in(TaskParallel::getProcessInstanceId, taskCountIds)
+                        .eq(TaskParallel::getTaskUser, userId)
+                        .eq(TaskParallel::getStatus, 1));
+            }
+
+            //未读消息提醒数量
+            List<MessageWarning> messageWarnings = messageWarningService.getBaseMapper().selectList(Wrappers.<MessageWarning>lambdaQuery()
+                    .select(MessageWarning::getType)
+                    .eq(MessageWarning::getProjectId, projectId)
+                    .eq(MessageWarning::getContractId, contractId)
+                    .eq(MessageWarning::getPushUser, userId)
+                    .eq(MessageWarning::getIsRead, 0)
+            );
+
+            long messageCount1 = messageWarnings.stream().filter(f -> f.getType().equals(1)).count();
+            long messageCount2 = messageWarnings.stream().filter(f -> f.getType().equals(2)).count();
+            long messageCount3 = messageWarnings.stream().filter(f -> f.getType().equals(3)).count();
+            long messageCount4 = messageWarnings.stream().filter(f -> f.getType().equals(4)).count();
+            long messageCount5 = messageWarnings.stream().filter(f -> f.getType().equals(5)).count();
+            Map<String, String> map = new HashMap<>();
+            map.put("allCount", String.valueOf(taskAllCount + messageWarnings.size()));//任务管理
+            map.put("taskCount", String.valueOf(taskAllCount));//任务查看
+            map.put("messageCount", String.valueOf(messageWarnings.size()));//消息提醒
+            map.put("messageCount_1", String.valueOf(messageCount1));//任务催办
+            map.put("messageCount_2", String.valueOf(messageCount2));//监测预警
+            map.put("messageCount_3", String.valueOf(messageCount3));//废除通知
+            map.put("messageCount_4", String.valueOf(messageCount4));//工单反馈
+            map.put("messageCount_5", String.valueOf(messageCount5));//系统消息
+            map.put("userId", userId);
+            return map;
+        } else {
+            Map<String, String> map = new HashMap<>();
+            List<BusinessUserOpinionVO> businessUserOpinionVOS = userOpinionService.getBaseMapper().queryManageUserOpinionList(userId).stream().filter(f -> f.getIsCurrent().equals(false)).collect(Collectors.toList());
+            map.put("myMessageCount", String.valueOf(businessUserOpinionVOS.size()));//后管消息区-我的消息-未处理
+            map.put("userId", userId);
+            return map;
+        }
+    }
+
+    /**
+     * 档案任务相关
+     *
+     * @param projectId
+     * @param contractId
+     * @param userId
+     * @return
+     */
+    @Override
+    public Map<String, String> getTaskCountArchive(String projectId, String contractId, String userId) {
+        if (StringUtils.isNotEmpty(projectId) && StringUtils.isNotEmpty(contractId)) {
+            List<Task> tasks = this.baseMapper.selectList(Wrappers.<Task>lambdaQuery()
+                    .select(Task::getProcessInstanceId)
+                    .eq(Task::getProjectId, projectId)
+                    .eq(Task::getContractId, contractId)
+                    .eq(Task::getStatus, 1) //只获取待办任务数量
+                    .eq(Task::getApprovalType, 4));//只查询档案的任务,档案单独处理
 
             //任务主表相关数量
             List<String> taskCountIds = tasks.stream().map(Task::getProcessInstanceId).collect(Collectors.toList());