Forráskód Böngészése

新增电签方式相关

liuyc 1 éve
szülő
commit
ba6cefa329

+ 6 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/BusinessTaskFailedPageVO.java

@@ -25,6 +25,12 @@ public class BusinessTaskFailedPageVO implements Serializable {
     @ApiModelProperty(value = "电签状态名称")
     private String eVisaStatusName;
 
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    private String endTime;
+
     @ApiModelProperty(value = "审批时间")
     private String eVisaUpdateDate;
 

+ 7 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java

@@ -155,7 +155,6 @@ public class ProjectInfo extends BaseEntity {
      */
     private Integer isArchivesAuto;
 
-
     /**
      * wbs私有树引用wbs模板类型--征拆
      */
@@ -167,4 +166,11 @@ public class ProjectInfo extends BaseEntity {
      */
     @ApiModelProperty(value = "wbs私有树引用wbs模板id--征拆")
     private String referenceWbsTemplateTypeLar;
+
+    /**
+     * 审批类型(电签方式) 1=垂直审批(顺序审批) 2=平行审批
+     */
+    @ApiModelProperty(value = "审批类型(电签方式) 1=垂直审批(顺序审批) 2=平行审批")
+    private Integer approvalType;
+
 }

+ 42 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -47,6 +47,7 @@ import org.springblade.flow.core.feign.NewFlowClient;
 import org.springblade.flow.core.vo.SendPageVO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractRelationJlyz;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ExcelTabClient;
 import org.springblade.resource.feign.CommonFileClient;
@@ -301,7 +302,7 @@ public class TaskController extends BladeController {
     }
 
     /**
-     * 批量审批(质检、试验 平行审批)
+     * 批量审批(质检、试验 平行或垂直审批)
      */
     @PostMapping("/batch-complete-approval-task")
     @ApiOperationSupport(order = 8)
@@ -311,6 +312,44 @@ public class TaskController extends BladeController {
         String parallelProcessInstanceIds = batchTaskVO.getParallelProcessInstanceIds();
         if (StringUtils.isNotEmpty(taskIds)) {
             String[] taskIdArray = taskIds.split(",");
+            if (taskIdArray.length == 0) {
+                throw new ServiceException("未获取到任务信息");
+            }
+
+            //校验当前项目是否为垂直审批
+            List<Task> taskList = taskService.getBaseMapper().selectList(Wrappers.<Task>lambdaQuery().select(Task::getProjectId, Task::getTaskName, Task::getProcessInstanceId).in(Task::getId, Arrays.asList(taskIdArray)));
+            for (Task task : taskList) {
+                if (ObjectUtil.isEmpty(task.getProjectId())) {
+                    throw new ServiceException("未获取到任务【" + task.getTaskName() + "】对应的项目信息");
+                }
+                ProjectInfo projectInfo = jdbcTemplate.query("select approval_type from m_project_info where id = " + task.getProjectId(), new BeanPropertyRowMapper<>(ProjectInfo.class)).stream().findAny().orElse(null);
+                //如果是垂直审批,那么检查当前用户是否符合当前顺序
+                if (projectInfo != null && projectInfo.getApprovalType() != null && new Integer(1).equals(projectInfo.getApprovalType())) {
+                    List<TaskParallel> taskParallelList = jdbcTemplate.query("select id,process_instance_id,task_user,task_user_name,status from u_task_parallel where process_instance_id ='" + task.getProcessInstanceId() + "'", new BeanPropertyRowMapper<>(TaskParallel.class));
+                    taskParallelList.sort(Comparator.comparing(TaskParallel::getId)); //根据id排序
+                    Map<String, List<TaskParallel>> taskParallelGroup = taskParallelList.stream().collect(Collectors.groupingBy(TaskParallel::getProcessInstanceId));
+                    for (Map.Entry<String, List<TaskParallel>> taskObj : taskParallelGroup.entrySet()) {
+                        //获取当前审批人前面的审批人信息
+                        List<TaskParallel> frontTaskUser = new LinkedList<>();
+                        for (TaskParallel taskParallel : taskObj.getValue()) {
+                            Long userId = SecureUtil.getUserId();
+                            if (!userId.toString().equals(taskParallel.getTaskUser())) {
+                                frontTaskUser.add(taskParallel);
+                            } else {
+                                //如果是当前的审批人,那么直接跳过
+                                break;
+                            }
+                        }
+                        List<TaskParallel> resultTaskStatus = frontTaskUser.stream().filter(f -> !f.getStatus().equals(2)).collect(Collectors.toList());
+                        if (resultTaskStatus.size() > 0) {
+                            String names = resultTaskStatus.stream().map(TaskParallel::getTaskUserName).collect(Collectors.joining("、"));
+                            throw new ServiceException("当前任务【" + task.getTaskName() + "】还有【" + names + "】未完成审批,请您稍后再试");
+                        }
+                    }
+                }
+            }
+
+            //正常流程(平行签直接执行,垂直签会校验完再执行)
             String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
             String[] approvalType = batchTaskVO.getApprovalType().split(",");
             String[] formDataId = batchTaskVO.getFormDataId().split(",");
@@ -1427,6 +1466,8 @@ public class TaskController extends BladeController {
                     BusinessTaskFailedPageVO vo = new BusinessTaskFailedPageVO();
                     vo.setId(task.getId());
                     vo.setTaskName(task.getTaskName());
+                    vo.setStartTime(task.getStartTime());
+                    vo.setEndTime(task.getEndTime());
                     vo.setTaskStatusName(task.getStatus().equals(1) ? "待审批" : task.getStatus().equals(2) ? "已审批" : "已废除");
                     vo.setEVisaStatusName("电签失败");
                     vo.setTaskReportUserName(nameMap.get(Long.parseLong(task.getReportUser())));