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

电签管理员,与档案验收任务审批

qianxb 1 éve
szülő
commit
d0a6e698df

+ 101 - 9
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -20,11 +20,14 @@ import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.archive.dto.ArchiveTaskDTO;
+import org.springblade.archive.dto.SaveApplyDTO;
+import org.springblade.archive.feign.ArchiveAutoClient;
 import org.springblade.archive.vo.ArchiveTaskPageVO;
 import org.springblade.business.dto.*;
 import org.springblade.business.entity.*;
 import org.springblade.business.service.*;
 import org.springblade.business.socket.WebSocket;
+import org.springblade.business.utils.StringSPUtils;
 import org.springblade.business.vo.*;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -46,6 +49,7 @@ import org.springblade.feign.ArchiveFileTaskClient;
 import org.springblade.flow.core.entity.BladeFlow;
 import org.springblade.flow.core.feign.NewFlowClient;
 import org.springblade.flow.core.vo.SendPageVO;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.ProjectInfo;
@@ -56,11 +60,14 @@ import org.springblade.resource.feign.NewISmsClient;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.entity.Role;
 import org.springblade.system.feign.IDictBizClient;
+import org.springblade.system.user.dto.UserDTO;
 import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -101,6 +108,8 @@ public class TaskController extends BladeController {
     private final EVisaClient eVisaClient;
     private final ExcelTabClient excelTabClient;
     private final ArchiveFileTaskClient archiveFileTaskClient;
+    private final IUserClient userClient;
+    private final ArchiveAutoClient archiveClient;
 
     /**
      * 记录短信验证码超时时间
@@ -625,6 +634,7 @@ public class TaskController extends BladeController {
     @PostMapping("/batch-complete-approval-task-archive")
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "批量审批(档案 垂直审批)")
+    @Transactional
     public R<Boolean> batchCompleteApprovalTaskArchive(@RequestBody TaskArchiveOuterLayerDTO taskArchiveOuterLayerDTO) throws IOException {
         if (ObjectUtil.isEmpty(SecureUtil.getUser()) || ObjectUtil.isEmpty(SecureUtil.getUserId()) || SecureUtil.getUserId().equals(-1L)) {
             throw new ServiceException("未获取到当前登陆的用户信息,操作失败");
@@ -644,8 +654,74 @@ public class TaskController extends BladeController {
             for (TaskArchiveDTO taskArchiveDTO : taskArchiveOuterLayerDTO.getTaskArchiveDtoList()) {
                 if (StringUtils.isNotEmpty(taskArchiveDTO.getTaskId())) {
                     //通过checkArchiveTaskUserByCurrent检查,说明当前登陆用户是该条任务的审批人,修改审批任务状态
-                    Task task = jdbcTemplate.queryForObject("select process_instance_id,form_data_id from u_task where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(Task.class));
+                    Task task = jdbcTemplate.queryForObject("select id,contract_id,project_id,process_instance_id,form_data_id,type,archive_ids from u_task where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(Task.class));
                     if (task != null) {
+                        //判断任务类型是否是验收任务,档案验收任务单独处理修改状态直接返回
+                        if (task.getType() == 2){
+                            //是验收任务直接获取所有的副任务
+                            List<TaskParallel> parallelList = taskParallelService.list(new LambdaQueryWrapper<TaskParallel>().eq(TaskParallel::getProcessInstanceId, task.getId()));
+                            //修改当前用户的副任务状态,保存
+                            for (TaskParallel taskParallel : parallelList) {
+                                if (taskParallel.getTaskUser().equals(AuthUtil.getUserId()+"")){
+                                    taskParallel.setStatus(2);
+                                    taskParallel.setEVisaStatus(1);
+                                    taskParallelService.updateById(taskParallel);
+                                    break;
+                                }
+                            }
+                            parallelList.removeIf(l->l.getStatus() == 2);
+                            //判断是否所有副任务都是完成状态
+                            if (parallelList.size() == 0) {
+                                //都是完成状态,则修改主任务的状态
+                                task.setStatus(2);
+                                taskService.updateById(task);
+                                //保存专家账号
+                                String formDataId = task.getFormDataId();
+                                List<SaveApplyDTO.ExpertInfo> expertInfoList = JSON.parseArray(formDataId, SaveApplyDTO.ExpertInfo.class);
+                                for (SaveApplyDTO.ExpertInfo expertInfo : expertInfoList) {
+                                    UserDTO dto = new UserDTO();
+                                    String phone = expertInfo.getPhone();
+                                    String name = expertInfo.getName();
+                                    dto.setTenantId(AuthUtil.getTenantId());
+                                    dto.setAccount("expert"+phone);
+                                    StringSPUtils stringSPUtils = new StringSPUtils();
+                                    dto.setPassword(stringSPUtils.getStringSP(name)+phone);
+                                    dto.setUserType("3");
+                                    dto.setRealName(name);
+                                    dto.setPhone(phone);
+                                    dto.setDeptId(AuthUtil.getDeptId());
+                                    dto.setStatus(1);
+                                    List<SaveUserInfoByProjectDTO> list = new ArrayList<>();
+                                    SaveUserInfoByProjectDTO projectDTO = new SaveUserInfoByProjectDTO();
+                                    projectDTO.setProjectId(task.getProjectId());
+                                    //专家合同段设置为指挥部
+                                    projectDTO.setContractId(task.getContractId());
+                                    //判断是否为组长
+                                    if (expertInfo.getIsLeader() == 0){
+                                        projectDTO.setRoleId("1656191770880864257");
+                                    }else {
+                                        projectDTO.setRoleId("1656191696348082177");
+                                    }
+                                    list.add(projectDTO);
+                                    dto.setProjectAndUserList(list);
+                                    //单个保存专家信息
+                                    R<Boolean> booleanR = userClient.saveUserDTO(dto);
+                                    if (booleanR.getData() == null ||  booleanR.getData() != true){
+                                        throw new ServiceException("保存专家账号失败");
+                                    }
+                                }
+                                //修改档案类型
+                                String archiveIds = task.getArchiveIds();
+                                if (StringUtils.isNotBlank(archiveIds)){
+                                    List<Long> longs = Func.toLongList(archiveIds);
+                                    R<Boolean> booleanR = archiveClient.batchUpdateIsApply(1, longs);
+                                    if (booleanR.getData() == null || booleanR.getData() != true){
+                                        throw new ServiceException("修改档案类型失败");
+                                    }
+                                }
+                            }
+                           return R.data(true);
+                        }
                         org.springblade.evisa.vo.TaskArchiveDTO eVisaObj = new org.springblade.evisa.vo.TaskArchiveDTO();
                         BeanUtils.copyProperties(taskArchiveDTO, eVisaObj);
                         eVisaObj.setType(1); //审批
@@ -701,8 +777,23 @@ public class TaskController extends BladeController {
             return R.data(true);
 
         } else {
-            //废除任务
             List<String> taskIds = taskArchiveOuterLayerDTO.getTaskArchiveDtoList().stream().map(TaskArchiveDTO::getTaskId).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
+            //判断任务类型是否是验收任务,档案验收任务单独处理修改状态直接返回
+            if (taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0) == null || taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0).getTaskId() == null){
+                throw new ServiceException("参数错误,请传入任务id");
+            }
+            Task task = jdbcTemplate.queryForObject("select id,type from u_task where id = " + taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0).getTaskId(), new BeanPropertyRowMapper<>(Task.class));
+            if (task != null) {
+                //判断任务类型是否是验收任务,档案验收任务单独处理修改状态直接返回
+                if (task.getType() == 2) {
+                    //修改主任务表
+                    jdbcTemplate.execute("UPDATE u_task set status = 3 WHERE id in (" +StringUtils.join(taskIds, ",")+")");
+                    //修改副任务表
+                    jdbcTemplate.execute("UPDATE u_task_parallel set status = 3 WHERE process_instance_id in (\'"+ StringUtils.join(taskIds, "','")+"\')");
+                    return R.data(true);
+                }
+            }
+            //废除任务
             ArchiveTaskBatchRepealDTO dto = new ArchiveTaskBatchRepealDTO();
             dto.setType(2);
             dto.setIds(StringUtils.join(taskIds, ","));
@@ -1459,7 +1550,7 @@ public class TaskController extends BladeController {
         //封装入参SQL
         List<Object> params = new ArrayList<>();
         Integer eVisaStatus = dto.getVisaStatus();
-        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND status = " + eVisaStatus + " AND approval_type != 4 AND contract_id = " + dto.getContractId()); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
+        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE approval_type != 4 AND contract_id = " + dto.getContractId()); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
 
         if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
             if (dto.getStartTimeValue().equals(dto.getEndTimeValue())) {
@@ -1481,18 +1572,19 @@ public class TaskController extends BladeController {
         //根据每个审批人的情况判断是否成功
         if (eVisaStatus == 1) {
             if (StringUtils.isNotBlank(dto.getEVisaUserName())) {
-                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.e_visa_status = 99 AND u_task_parallel.status != 3 AND u_task_parallel.task_user_name LIKE ?)");
+                sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and task_user_name LIKE ? AND is_deleted=0) = 1");
                 params.add("%" + dto.getEVisaUserName() + "%");
-            } else {
-                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.e_visa_status = 99 AND u_task_parallel.status != 3)");
             }
+                sqlString.append(" AND (SELECT COUNT(1) FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.e_visa_status = 99" +
+                        " AND u_task_parallel.status != 3 and is_deleted=0) > 0");
         } else {
             if (StringUtils.isNotBlank(dto.getEVisaUserName())) {
-                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.e_visa_status = 1 AND u_task_parallel.status = 2 AND u_task_parallel.task_user_name LIKE ?)");
+                sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and task_user_name LIKE ? AND is_deleted=0) = 1");
                 params.add("%" + dto.getEVisaUserName() + "%");
-            } else {
-                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.e_visa_status = 1 AND u_task_parallel.status = 2)");
             }
+                sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and is_deleted=0) =" +
+                        "(SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.e_visa_status = 1 AND u_task_parallel.status = 2 and is_deleted=0)");
+
         }
 
         //总数量