|
@@ -1497,6 +1497,296 @@ public class TaskController extends BladeController {
|
|
|
return R.data(page);
|
|
|
}
|
|
|
|
|
|
+ @PostMapping("/pageset")
|
|
|
+ @ApiOperationSupport(order = 1)
|
|
|
+ @ApiOperation(value = "电签显示等待 batch中没有 用于跑电签数据的接口 手动调用", notes = "传入BusinessTaskDTO")
|
|
|
+ public R<IPage<BusinessTaskPageVO>> pageset(@RequestBody BusinessTaskDTO dto) throws IOException {
|
|
|
+ if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
|
|
|
+ throw new ServiceException("未获取到当前用户信息,请联系管理员");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(dto.getProjectIdValue())) {
|
|
|
+ throw new ServiceException("未获取到当前用户所在的项目信息,请联系管理员");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(dto.getCurrentContractId())) {
|
|
|
+ throw new ServiceException("未获取到当前用户所在的合同段信息,请联系管理员");
|
|
|
+ }
|
|
|
+ ProjectInfo projectInfo = jdbcTemplate.query("select approval_type from m_project_info where id = " + dto.getProjectIdValue(), new BeanPropertyRowMapper<>(ProjectInfo.class)).stream().findAny().orElse(null);
|
|
|
+ int current = dto.getCurrent();
|
|
|
+ int size = dto.getSize();
|
|
|
+ //封装入参SQL
|
|
|
+ List<Object> params = new ArrayList<>();
|
|
|
+ StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND is_deleted = 0 AND approval_type not in(4,5)");
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
|
|
|
+ sqlString.append(" AND type = ?");
|
|
|
+ params.add(dto.getTypeValue());
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getStatusValue())) {
|
|
|
+ sqlString.append(" AND status = ?");
|
|
|
+ params.add(dto.getStatusValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ ContractInfo contractInfo = jdbcTemplate.queryForObject("select contract_type from m_contract_info where id = " + dto.getCurrentContractId(), new BeanPropertyRowMapper<>(ContractInfo.class));
|
|
|
+ if (contractInfo != null && contractInfo.getContractType().equals(1)) {
|
|
|
+ //施工合同段正常查询
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getContractIdValue())) {
|
|
|
+ sqlString.append(" AND contract_id = ?");
|
|
|
+ params.add(dto.getContractIdValue());
|
|
|
+ } else {
|
|
|
+ //如果合同段id=null,那么查询当前项目下所有合同段任务
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getProjectIdValue())) {
|
|
|
+ sqlString.append(" AND project_id = ?");
|
|
|
+ params.add(dto.getProjectIdValue());
|
|
|
+ } else {
|
|
|
+ throw new ServiceException("未获取到当前用户所在的项目信息,请联系管理员");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (contractInfo != null && (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3))) {
|
|
|
+ if (ObjectUtil.isEmpty(dto.getOrdType())) { //Web端根据合同段查询
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getContractIdValue())) {
|
|
|
+ if (dto.getContractIdValue().equals(dto.getCurrentContractId())) {
|
|
|
+ //如果下拉框合同段选择框合同段=当前用户登陆合同段,那么查询全部合同段的数据
|
|
|
+ List<ContractRelationJlyz> contractRelationJLYZ = jdbcTemplate.query("select contract_id_sg from m_contract_relation_jlyz where contract_id_jlyz = " + dto.getCurrentContractId(), new BeanPropertyRowMapper<>(ContractRelationJlyz.class));
|
|
|
+ Set<Long> ids = contractRelationJLYZ.stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toSet());
|
|
|
+ ids.add(dto.getCurrentContractId()); //把监理本身也加入查询
|
|
|
+ sqlString.append(" AND contract_id in(").append(StringUtils.join(ids, ",")).append(")");
|
|
|
+ } else {
|
|
|
+ //如果下拉框合同段选择框合同段!=当前用户登陆合同段,那么查询下拉框合同段数据
|
|
|
+ sqlString.append(" AND contract_id = ?");
|
|
|
+ params.add(dto.getContractIdValue());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果下拉框合同段id=null,那么查询当前整个项目的数据
|
|
|
+ sqlString.append(" AND project_id = ?");
|
|
|
+ params.add(dto.getProjectIdValue());
|
|
|
+ }
|
|
|
+ } else { //App直接查询全部合同段,整个项目
|
|
|
+ sqlString.append(" AND project_id = ?");
|
|
|
+ params.add(dto.getProjectIdValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getBatchValue())) {
|
|
|
+ sqlString.append(" AND batch = ?");
|
|
|
+ params.add(dto.getBatchValue());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
|
|
|
+ sqlString.append(" AND start_time >= ?")
|
|
|
+ .append(" AND end_time <= ?");
|
|
|
+ params.add(dto.getStartTimeValue());
|
|
|
+ params.add(dto.getEndTimeValue());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getQueryValue())) {
|
|
|
+ sqlString.append(" AND task_name LIKE ?");
|
|
|
+ params.add("%" + dto.getQueryValue() + "%");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getSelectedType())) {
|
|
|
+ sqlString.append(" AND (");
|
|
|
+ if (dto.getSelectedType().equals(1)) { //待办页面
|
|
|
+
|
|
|
+ //如果是待办页面,且 任务状态下拉框 选择的是 待审批状态 的任务,那么才查询数据
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getStatusValue()) && dto.getStatusValue().equals(1)) {
|
|
|
+ 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());
|
|
|
+
|
|
|
+ //如果是待办页面,且 任务状态下拉框 选择的不是 待审批状态 的任务,那么直接返回null
|
|
|
+ } else if (ObjectUtil.isNotEmpty(dto.getStatusValue()) && !dto.getStatusValue().equals(1)) {
|
|
|
+ return null;
|
|
|
+
|
|
|
+ //如果是待办页面,没选择 任务状态下拉框,那么就默认查询 待审批状态 任务
|
|
|
+ } else if (ObjectUtil.isEmpty(dto.getStatusValue())) {
|
|
|
+ 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());
|
|
|
+ sqlString.append(" AND status = 1");
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (dto.getSelectedType().equals(2)) { //已办页面
|
|
|
+ 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 in(2,3) AND u_task_parallel.task_user = ?)");
|
|
|
+ //当前自己的任务必须是已审批、已废除 status = 2,3 ,才视为已办
|
|
|
+ params.add(SecureUtil.getUserId());
|
|
|
+
|
|
|
+ } else if (dto.getSelectedType().equals(3)) { //我发起页面
|
|
|
+ sqlString.append("report_user = ?");
|
|
|
+ params.add(SecureUtil.getUserId());
|
|
|
+ }
|
|
|
+ sqlString.append(")");
|
|
|
+ }
|
|
|
+
|
|
|
+ //总数量
|
|
|
+ String sqlCount = sqlString.toString().replace("*", "count(1)");
|
|
|
+ Optional<Integer> totalCountOptional = Optional.ofNullable(jdbcTemplate.queryForObject(sqlCount, Integer.class, params.toArray()));
|
|
|
+ int totalCount = totalCountOptional.orElse(0);
|
|
|
+
|
|
|
+ //分页
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getOrdType())) {
|
|
|
+ //App端排序
|
|
|
+ if (dto.getOrdType() == 1) {
|
|
|
+ sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
|
|
|
+ } else if (dto.getOrdType() == 2) {
|
|
|
+ sqlString.append(" ORDER BY create_time ASC LIMIT ? OFFSET ?");
|
|
|
+ } else {
|
|
|
+ sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //Web端默认倒叙
|
|
|
+ sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
|
|
|
+ }
|
|
|
+ params.add(size);
|
|
|
+ params.add((current - 1) * size);
|
|
|
+
|
|
|
+ //执行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) {
|
|
|
+ String resultIds = processInstanceIds.stream()
|
|
|
+ .map(id -> "'" + id + "'")
|
|
|
+ .collect(Collectors.joining(","));
|
|
|
+ taskParallelGroupMap = jdbcTemplate.query("select process_instance_id,task_user,task_user_name,e_visa_status,e_visa_content,parallel_process_instance_id,status from u_task_parallel where process_instance_id in(" + resultIds + ") order by id", new BeanPropertyRowMapper<>(TaskParallel.class)).stream().collect(Collectors.groupingBy(TaskParallel::getProcessInstanceId));
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, List<TaskParallel>> finalTaskParallelGroupMap = taskParallelGroupMap;
|
|
|
+ //获取用户信息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<BusinessTaskPageVO> page = new Page<>(current, size);
|
|
|
+ List<BusinessTaskPageVO> pageList = resultList.stream()
|
|
|
+ .map(task -> {
|
|
|
+ BusinessTaskPageVO vo = new BusinessTaskPageVO();
|
|
|
+ vo.setId(task.getId());
|
|
|
+ vo.setTaskId(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())));
|
|
|
+ vo.setApprovalType(task.getApprovalType());
|
|
|
+ vo.setFormDataId(task.getFormDataId());
|
|
|
+ vo.setProcessInstanceId(task.getProcessInstanceId());
|
|
|
+ List<TaskParallel> taskParallelList = finalTaskParallelGroupMap.get(task.getProcessInstanceId());
|
|
|
+ if (taskParallelList != null && taskParallelList.size() > 0) {
|
|
|
+ //如果是垂直签,且是待办页面,判断是否是当前用户审批轮次,不是当前用户审批轮次就不显示该任务
|
|
|
+ if (projectInfo != null && projectInfo.getApprovalType() == 1 && dto.getSelectedType() == 1) {
|
|
|
+ boolean shouldDisplayTask = false; //标记是否显示当前任务
|
|
|
+ for (TaskParallel taskParallel : taskParallelList) {
|
|
|
+ if (SecureUtil.getUserId().equals(Long.parseLong(taskParallel.getTaskUser()))) {
|
|
|
+ shouldDisplayTask = true; //当前用户是审批人,需要显示任务
|
|
|
+ break;
|
|
|
+ } else if (taskParallel.getStatus() != 2) {
|
|
|
+ //之前的审批人员任务未完成,不显示任务
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!shouldDisplayTask) {
|
|
|
+ //跳过当前任务
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> names = taskParallelList.stream().map(TaskParallel::getTaskUserName).collect(Collectors.toList());
|
|
|
+ if (names.size() > 0) {
|
|
|
+ vo.setTaskApproveUserNames(StringUtils.join(names, ","));
|
|
|
+ }
|
|
|
+
|
|
|
+ //电签状态(始终只获取自己的电签任务状态信息)
|
|
|
+ TaskParallel taskParallel = taskParallelList.stream().filter(f -> ObjectUtil.isNotEmpty(f.getTaskUser()) && f.getTaskUser().equals(SecureUtil.getUserId().toString())).findAny().orElse(null);
|
|
|
+ if (taskParallel != null) {
|
|
|
+ vo.setEVisaStatus(taskParallel.getEVisaContent() != null ? taskParallel.getEVisaContent() : "");
|
|
|
+ vo.setParallelProcessInstanceId(taskParallel.getParallelProcessInstanceId());
|
|
|
+ }
|
|
|
+ if (vo.getTaskStatusName().equals("已废除")) {
|
|
|
+ vo.setEVisaStatus("废除成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断签字人的验证 2=绿色 3=黄色 999=红色 其他代表=灰色
|
|
|
+ List<TaskParallel> statList = new ArrayList<>();
|
|
|
+ for (TaskParallel taskPa : taskParallelList) {
|
|
|
+ if (taskPa.getStatus() == 2 && ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 1) {
|
|
|
+ taskPa.setEVisaStatus(2);
|
|
|
+ } else if (taskPa.getStatus() == 3 && taskPa.getTaskUser().equals(SecureUtil.getUserId().toString())) {
|
|
|
+ taskPa.setEVisaStatus(3);
|
|
|
+ } else if (ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 99) {
|
|
|
+ taskPa.setEVisaStatus(999);
|
|
|
+ } else {
|
|
|
+ taskPa.setEVisaStatus(1);
|
|
|
+ }
|
|
|
+ statList.add(taskPa);
|
|
|
+ }
|
|
|
+ vo.setTaskApproveUserNamesList(statList);
|
|
|
+ }
|
|
|
+ return vo;
|
|
|
+ })
|
|
|
+ .filter(Objects::nonNull) //过滤掉为null的任务
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //所有满足条件的任务 转map
|
|
|
+ Map<Long, Task> taskMap = new HashMap<>();
|
|
|
+ Map<String, List<OperationLog>> operationLogMap = new HashMap<>();
|
|
|
+ List<Long> taskIds = pageList.stream().filter(b -> "已废除".equals(b.getTaskStatusName())).map(BusinessTaskPageVO::getTaskId).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(taskIds)){
|
|
|
+ String joinTaskIds = StringUtils.join(taskIds, ",");
|
|
|
+ List<Task> tasks = jdbcTemplate.query("select id, create_time,form_data_id from u_task where id in ( " + joinTaskIds+")", new BeanPropertyRowMapper<>(Task.class));
|
|
|
+ taskMap = tasks.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ Task::getId,
|
|
|
+ task -> task));
|
|
|
+ }
|
|
|
+ //所有满足条件的日志 转map
|
|
|
+ String logQuery = "select business_id,create_user_name ,create_time from u_operation_log where operation_content like '%废除%'";
|
|
|
+ List<OperationLog> operationLogs = jdbcTemplate.query(logQuery, new BeanPropertyRowMapper<>(OperationLog.class));
|
|
|
+ if(ObjectUtil.isNotEmpty(operationLogs)){
|
|
|
+ operationLogMap = operationLogs.stream().collect(Collectors.groupingBy(OperationLog::getBusinessId));
|
|
|
+ }
|
|
|
+ for (BusinessTaskPageVO businessTaskPageVO : pageList) {
|
|
|
+ if("已废除".equals(businessTaskPageVO.getTaskStatusName())){
|
|
|
+ Long taskId = businessTaskPageVO.getTaskId();
|
|
|
+ Task task = taskMap.get(taskId);
|
|
|
+ if (ObjectUtil.isEmpty(task)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //任务创建时间
|
|
|
+ Date createTime = task.getCreateTime();
|
|
|
+ //废除时间肯定在任务创建时间之后 选择距离当前任务创建时间最近的一条数据
|
|
|
+ List<OperationLog> operationLogsF = operationLogMap.get(task.getFormDataId());
|
|
|
+ /*List<OperationLog> operationLogs = jdbcTemplate.query("select create_user_name ,create_time from u_operation_log where business_id = '" +
|
|
|
+ task.getFormDataId() + "'and operation_content like '%废除%' and create_time >= '"+format+"' ORDER BY ABS(TIMESTAMPDIFF(SECOND, '"+format+"', create_time)) LIMIT 1"
|
|
|
+ , new BeanPropertyRowMapper<>(OperationLog.class));*/
|
|
|
+ if(ObjectUtil.isNotEmpty(operationLogsF)){
|
|
|
+ Optional<OperationLog> min = operationLogsF.stream().filter(o -> o.getCreateTime().compareTo(createTime) >= 0)
|
|
|
+ .min(Comparator.comparing(t -> t.getCreateTime().getTime() - createTime.getTime()));
|
|
|
+ if (min.isPresent()){
|
|
|
+ OperationLog operationLog = min.get();
|
|
|
+ businessTaskPageVO.setEVisaStatus(businessTaskPageVO.getEVisaStatus()+":"+operationLog.getCreateUserName()+"-"+operationLog.getCreateTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int i = 10;
|
|
|
+ for (BusinessTaskPageVO businessTaskPageVO : pageList) {
|
|
|
+ List<TaskParallel> taskApproveUserNamesList = businessTaskPageVO.getTaskApproveUserNamesList();
|
|
|
+ for (TaskParallel taskParallel : taskApproveUserNamesList) {
|
|
|
+ String eVisaContent = taskParallel.getEVisaContent();
|
|
|
+ if(ObjectUtil.isNotEmpty(eVisaContent) && eVisaContent.contains("当前等待电签的批次较多")){
|
|
|
+ String sql = "INSERT INTO `u_task_batch` (id,json_data,create_user,update_user,nick_name)VALUES("+i+",'{\"approvalFileList\":[],\"approvalType\":"+businessTaskPageVO.getApprovalType()+",\"comment\":\"OK\",\"flag\":\"OK\",\"formDataId\":\""+businessTaskPageVO.getFormDataId()+"\",\"parallelProcessInstanceId\":\""+taskParallel.getParallelProcessInstanceId()+"\",\"pass\":true,\"taskId\":\""+businessTaskPageVO.getTaskId()+"\"}',"+taskParallel.getTaskUser()+","+taskParallel.getTaskUser()+",'"+taskParallel.getTaskUserName()+"')";
|
|
|
+ jdbcTemplate.execute(sql);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ page.setRecords(pageList);
|
|
|
+ page.setTotal(totalCount);
|
|
|
+ return R.data(page);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -1672,6 +1962,21 @@ public class TaskController extends BladeController {
|
|
|
return R.success("任务已经成功提交重签,请耐心等待!");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 试验系统-试验检测(自检)-一键重签
|
|
|
+ */
|
|
|
+ @PostMapping("/reSigningTrial")
|
|
|
+ @ApiOperationSupport(order = 3)
|
|
|
+ @ApiOperation(value = "试验检测(自检)-一键重签", notes = "传入试验自检id")
|
|
|
+ public R<Object> reSigningTrial(@RequestBody TrialResignDto dto, HttpServletRequest request) {
|
|
|
+ if (ObjectUtil.isEmpty(dto.getTrialIds())) {
|
|
|
+ return R.fail("请选择一条记录");
|
|
|
+ }
|
|
|
+ String header = request.getHeader("Blade-Auth");
|
|
|
+ taskService.reSigningTrial(dto,request);
|
|
|
+ return R.success("任务已经成功提交重签,请耐心等待!");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 质检-日志-一键重签
|
|
|
*/
|