From e75abff0e743fe1c83abeb64f2fe562bbf9ba07c Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期一, 03 三月 2025 11:32:01 +0800 Subject: [PATCH] bug --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 620 ++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 472 insertions(+), 148 deletions(-) diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java index 6f84aa6..4b71e9a 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -1,7 +1,6 @@ package com.ycl.service.impl; -import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -11,37 +10,31 @@ import com.ycl.common.constant.ProcessConstants; import com.ycl.common.constant.ProcessOverTimeConstants; import com.ycl.common.core.domain.entity.SysDept; +import com.ycl.common.core.domain.entity.SysDictData; import com.ycl.common.core.domain.entity.SysRole; import com.ycl.common.core.domain.entity.SysUser; -import com.ycl.common.enums.business.HandlerTypeEnum; -import com.ycl.common.enums.business.ProcessLogEventTypeEnum; -import com.ycl.common.enums.business.SuperviseTypeEnum; -import com.ycl.common.enums.business.TaskStatusEnum; +import com.ycl.common.enums.business.*; import com.ycl.common.utils.SecurityUtils; import com.ycl.constant.TaskTypeConstant; import com.ycl.domain.entity.*; -import com.ycl.domain.form.TaskDelegationForm; -import com.ycl.domain.form.TaskJumpForm; -import com.ycl.domain.form.TaskSuperviseForm; -import com.ycl.domain.json.DelegateData; -import com.ycl.domain.json.JumpData; -import com.ycl.domain.json.SuperviseData; -import com.ycl.domain.vo.CustomerTaskVO; -import com.ycl.domain.vo.IndexCustomerTaskVO; -import com.ycl.domain.vo.ProjectProcessDetailVO; +import com.ycl.domain.form.*; +import com.ycl.domain.json.*; +import com.ycl.domain.vo.*; import com.ycl.event.event.TaskLogEvent; +import com.ycl.mapper.ProjectEngineeringMapper; import com.ycl.mapper.ProjectInfoMapper; import com.ycl.mapper.ProjectProcessMapper; import com.ycl.service.*; import com.ycl.common.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ycl.domain.form.ProjectProcessForm; -import com.ycl.domain.vo.ProjectProcessVO; import com.ycl.domain.query.ProjectProcessQuery; import com.ycl.service.common.TaskCommonService; import com.ycl.system.service.ISysDeptService; +import com.ycl.system.service.ISysDictTypeService; import com.ycl.system.service.ISysRoleService; import com.ycl.system.service.ISysUserService; +import com.ycl.utils.TreeUtil; +import lombok.Synchronized; import org.apache.commons.lang3.StringUtils; import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.Process; @@ -83,6 +76,7 @@ private final IdentityService identityService; private final RepositoryService repositoryService; private final ProjectInfoMapper projectInfoMapper; + private final ProjectEngineeringMapper projectEngineeringMapper; private final HistoryService historyService; private final ISysUserService sysUserService; private final ISysRoleService sysRoleService; @@ -94,6 +88,8 @@ private final ApplicationEventPublisher publisher; private final ISysDeptService deptService; private final ProcessLogService processLogService; + private final ISysDictTypeService dictTypeService; + private final ProcessConfigInfoService processConfigInfoService; /** * 鍒嗛〉鏌ヨ @@ -106,7 +102,20 @@ IPage<ProjectProcessVO> page = PageUtil.getPage(query, ProjectProcessVO.class); baseMapper.getPage(query, page); for (ProjectProcessVO vo : page.getRecords()) { - if (Objects.nonNull(vo.getProcessDefId())) { + List<ProjectEngineeringVO> childList = baseMapper.getEngineeringList(vo.getId()); + childList.stream().forEach(child -> { + if (StringUtils.isNotBlank(child.getProcessDefId())) { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(child.getProcessDefId()).singleResult(); + if (Objects.nonNull(processDefinition)) { + child.setSuspended(processDefinition.isSuspended()); + child.setFlowableProcessName(processDefinition.getName() + "(v" + processDefinition.getVersion() + ")"); + child.setDeployId(processDefinition.getDeploymentId()); + } + } + }); + vo.setChildren(TreeUtil.treeForProjectEng(childList)); + vo.setStatus(vo.getProjectStatus()); + if (StringUtils.isNotBlank(vo.getProcessDefId())) { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(vo.getProcessDefId()).singleResult(); if (Objects.nonNull(processDefinition)) { vo.setSuspended(processDefinition.isSuspended()); @@ -124,6 +133,7 @@ // 鏌ヨ璇ラ」鐩槸鍚﹀凡缁忕粦瀹氳繃娴佺▼浜嗭紝妫�鏌ョ粦瀹氱殑娴佺▼鏄惁鍦ㄨ繍琛岋紝鍦ㄨ繍琛屽氨鍒犱簡 ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper) .eq(ProjectProcess::getProjectId, form.getProjectId()) + .eq(ProjectProcess::getProjectType, form.getProjectType()) .one(); if (Objects.isNull(pp)) { throw new RuntimeException("璇ラ」鐩湭缁戝畾娴佺▼"); @@ -143,23 +153,36 @@ } } } - ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper) - .select(ProjectInfo::getCreateBy) - .eq(ProjectInfo::getId, form.getProjectId()) - .one(); - if (Objects.isNull(project)) { - throw new RuntimeException("椤圭洰涓嶅瓨鍦�"); + Long unitId = null; + if (ProjectProcessTypeEnum.PROJECT.equals(form.getProjectType())) { + ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper) + .eq(ProjectInfo::getId, form.getProjectId()) + .one(); + if (Objects.isNull(project)) { + throw new RuntimeException("椤圭洰涓嶅瓨鍦�"); + } + unitId = project.getProjectOwnerUnit(); + } else if (ProjectProcessTypeEnum.ENGINEERING.equals(form.getProjectType())) { + ProjectEngineering projectEngineering = new LambdaQueryChainWrapper<>(projectEngineeringMapper) + .eq(ProjectEngineering::getId, form.getProjectId()) + .one(); + if (Objects.isNull(projectEngineering)) { + throw new RuntimeException("宸ョ▼涓嶅瓨鍦�"); + } + unitId = projectEngineering.getUnit(); } - SysUser user = sysUserService.selectUserById(project.getCreateBy()); - if (Objects.isNull(user)) { - throw new RuntimeException("椤圭洰涓氫富鍗曚綅涓嶅瓨鍦�"); + + SysDept dept = deptService.selectDeptById(unitId); + if (Objects.isNull(dept)) { + throw new RuntimeException("涓氫富鍗曚綅涓嶅瓨鍦�"); } - String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId(), user.getDeptId()); + String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId(), dept.getDeptId()); new LambdaUpdateChainWrapper<>(baseMapper) .eq(ProjectProcess::getProjectId, form.getProjectId()) + .eq(ProjectProcess::getProjectType, form.getProjectType()) .set(ProjectProcess::getProcessDefId, form.getProcessDefId()) .set(ProjectProcess::getProcessInsId, processInsId) - .set(ProjectProcess::getDataLaunch, project.getCreateBy()) + .set(ProjectProcess::getDataLaunch, unitId) .update(); return Result.ok("娴佺▼鍙樻洿鎴愬姛"); @@ -167,24 +190,36 @@ @Override @Transactional(rollbackFor = Exception.class) - public Result startProcess(Long projectId, String processDefId) { - ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper) - .select(ProjectInfo::getCreateBy) - .eq(ProjectInfo::getId, projectId) - .one(); - if (Objects.isNull(project)) { - throw new RuntimeException("椤圭洰涓嶅瓨鍦�"); + public Result startProcess(ProjectProcessForm form) { + Long unitId = null; + if (ProjectProcessTypeEnum.PROJECT.equals(form.getProjectType())) { + ProjectInfo project = new LambdaQueryChainWrapper<>(projectInfoMapper) + .eq(ProjectInfo::getId, form.getProjectId()) + .one(); + if (Objects.isNull(project)) { + throw new RuntimeException("椤圭洰涓嶅瓨鍦�"); + } + unitId = project.getProjectOwnerUnit(); + } else if (ProjectProcessTypeEnum.ENGINEERING.equals(form.getProjectType())) { + ProjectEngineering projectEngineering = new LambdaQueryChainWrapper<>(projectEngineeringMapper) + .eq(ProjectEngineering::getId, form.getProjectId()) + .one(); + if (Objects.isNull(projectEngineering)) { + throw new RuntimeException("宸ョ▼涓嶅瓨鍦�"); + } + unitId = projectEngineering.getUnit(); } - SysUser user = sysUserService.selectUserById(project.getCreateBy()); - if (Objects.isNull(user)) { - throw new RuntimeException("椤圭洰涓氫富鍗曚綅涓嶅瓨鍦�"); + SysDept dept = deptService.selectDeptById(unitId); + if (Objects.isNull(dept)) { + throw new RuntimeException("涓氫富鍗曚綅涓嶅瓨鍦�"); } - String processInsId = this.startPro(projectId, processDefId, user.getDeptId()); + String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId(), dept.getDeptId()); ProjectProcess entity = new ProjectProcess(); - entity.setProjectId(projectId); - entity.setProcessDefId(processDefId); + entity.setProjectId(form.getProjectId()); + entity.setProcessDefId(form.getProcessDefId()); entity.setProcessInsId(processInsId); - entity.setDataLaunch(project.getCreateBy()); + entity.setDataLaunch(unitId); + entity.setProjectType(form.getProjectType()); baseMapper.insert(entity); return Result.ok("娴佺▼鍚姩鎴愬姛"); @@ -197,7 +232,7 @@ * @param processDefId * @return */ - private String startPro(Long projectId, String processDefId, Long createBy) { + private String startPro(String projectId, String processDefId, Long createBy) { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId) @@ -210,8 +245,6 @@ SysUser sysUser = SecurityUtils.getLoginUser().getUser(); identityService.setAuthenticatedUserId(sysUser.getUserId().toString()); variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId()); - //娴嬭瘯瀹圭己 - variables.put("miss", true); // 灏嗚椤圭洰鐨勭敵璇蜂汉锛堜笟涓绘柟锛変綔涓烘祦绋嬩腑鏌愪簺鐜妭鐨勫鐞嗕汉 variables.put(ProcessConstants.DATA_LAUNCH, "dept:" + createBy); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId + "", variables); @@ -221,39 +254,51 @@ /** * 鑾峰彇娴佺▼璇︽儏 * - * @param projectId + * @param form * @return */ @Override - public Result detail(Long projectId, String processDefId) { - // 椤圭洰淇℃伅 - ProjectInfo projectInfo = new LambdaQueryChainWrapper<>(projectInfoMapper) - .select(ProjectInfo::getId, ProjectInfo::getProjectName, ProjectInfo::getProjectCode) - .eq(ProjectInfo::getId, projectId) - .one(); + public Result detail(ProjectProcessForm form) { - if (Objects.isNull(projectInfo)) { - return Result.error("璇ラ」鐩笉瀛樺湪"); + String projectName = ""; + String projectCode = ""; + if (ProjectProcessTypeEnum.PROJECT.equals(form.getProjectType())) { + ProjectInfo projectInfo = projectInfoMapper.selectById(form.getProjectId()); + if (Objects.isNull(projectInfo)) { + throw new RuntimeException("椤圭洰涓嶅瓨鍦�"); + } + projectName = projectInfo.getProjectName(); + projectCode = projectInfo.getProjectCode(); + } else if (ProjectProcessTypeEnum.ENGINEERING.equals(form.getProjectType())) { + ProjectEngineering projectEngineering = projectEngineeringMapper.selectById(form.getProjectId()); + if (Objects.isNull(projectEngineering)) { + throw new RuntimeException("宸ョ▼涓嶅瓨鍦�"); + } + projectName = projectEngineering.getProjectName(); } ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper) - .eq(ProjectProcess::getProjectId, projectId) - .eq(ProjectProcess::getProcessDefId, processDefId) + .eq(ProjectProcess::getProjectId, form.getProjectId()) + .eq(ProjectProcess::getProcessDefId, form.getProcessDefId()) + .eq(ProjectProcess::getProjectType, form.getProjectType()) .one(); if (Objects.isNull(projectProcess)) { - return Result.error("璇ラ」鐩湭璁剧疆娴佺▼"); + return Result.error("鏈缃祦绋�"); } ProjectProcessDetailVO detail = new ProjectProcessDetailVO(); - detail.setProjectId(projectId); - detail.setProjectName(projectInfo.getProjectName()); - detail.setProjectCode(projectInfo.getProjectCode()); + detail.setProjectType(form.getProjectType().getValue()); + detail.setProjectId(form.getProjectId()); + + + detail.setProjectName(projectName); + detail.setProjectCode(projectCode); ProjectProcessDetailVO.TaskStatistics taskStatistics = new ProjectProcessDetailVO.TaskStatistics(); // 鐘舵�佺粺璁� - taskStatistics.setTotalTaskNum(this.getTotalTaskNum(processDefId)); + taskStatistics.setTotalTaskNum(this.getTotalTaskNum(form.getProcessDefId())); taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId())); - taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(processDefId, projectProcess.getProcessInsId(), taskStatistics.getTotalTaskNum())); + taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(form.getProcessDefId(), projectProcess.getProcessInsId(), taskStatistics.getTotalTaskNum())); taskStatistics.setTimelyFinishedTaskNum(this.getTimelyTaskNum(projectProcess.getProcessInsId())); taskStatistics.setOvertimeTaskNum(this.getOvertimeTaskNum(projectProcess.getProcessInsId())); taskStatistics.setWillOvertimeTaskNum(this.getWillOvertimeTaskNum(projectProcess.getProcessInsId())); @@ -292,7 +337,7 @@ this.getRemainingTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok); break; case TaskTypeConstant.TIMELY: - this.getTimelyTask(query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok); + this.getTimelyTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok); break; case TaskTypeConstant.OVERTIME: this.getOvertimeTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok); @@ -313,9 +358,15 @@ .active() .includeProcessVariables() .orderByTaskCreateTime().desc(); - + List<String> insIds = baseMapper.getNormalInsIds(); + if (CollectionUtils.isEmpty(insIds)) { + result.data(new ArrayList<>()).total(0L); + return; + } else { + taskQuery.processInstanceIdIn(insIds); + } if (StringUtils.isNotBlank(taskName)) { - taskQuery.processDefinitionNameLike(taskName); + taskQuery.taskNameLike(taskName); } if (!SecurityUtils.getLoginUser().getUser().isAdmin()) { taskQuery @@ -342,7 +393,7 @@ .processDefinitionId(task.getProcessDefinitionId()) .singleResult(); taskVO.setDeployId(pd.getDeploymentId()); - taskVO.setProcessName(pd.getName()); + taskVO.setProcessName(pd.getName() + "(v" + pd.getVersion() + ")"); taskVO.setProcessInsId(task.getProcessInstanceId()); taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey()); @@ -410,14 +461,52 @@ } } } + // 妫�鏌ユ槸鍚︽寕璧� + if (processLogService.taskIsHangup(task.getId(), task.getProcessInstanceId())) { + taskVO.setTaskStatus(TaskStatusEnum.HANGUP); + } + // 璁$畻鍔炵悊鏃堕棿 + ProcessCoding processCoding = processCodingService.getByTaskId(task.getId()); + if (processCoding != null) { + if (StringUtils.isNotBlank(processCoding.getOvertime())) { + Long overtime = getTime(processCoding.getOvertime()); + long durationTime = 0l; + if (Objects.nonNull(processCoding.getStartTaskTime())) { + durationTime = ((new Date()).getTime() - processCoding.getStartTaskTime().getTime()) / 1000; + } else { + taskVO.setRemainingTime("鏈缃姙鐞嗘椂闂�"); + } + if (overtime > durationTime) { + taskVO.setRemainingTime((overtime - durationTime) / 3600 + "灏忔椂"); + } else { + taskVO.setRemainingTime("宸茶秴鏃�"); + } + } else { + taskVO.setRemainingTime("-"); + } + } this.distinctVo(taskVO); vos.add(taskVO); } - if (vos.size() < pageSize) { - result.total(vos.size()); - } result.put("taskList", vos); + } + + private Long getTime(String timeStr) { + Long time = null; + if (StringUtils.isNotBlank(timeStr)) { + String[] timeArr = timeStr.split("-"); + // 瑙f瀽澶╂暟鍜屽皬鏃舵暟 + int days = Integer.parseInt(timeArr[0]); + int hours = 0; + if (timeArr.length > 1) { + hours = Integer.parseInt(timeArr[1]); + } + time = (days * 24L + hours) * 3600L; +// //鍒�-绉� +// time= (days * 60L) + hours; + } + return time; } @Override @@ -611,7 +700,7 @@ jsonData.setAfterHandlerIds(afterHandlerIds); jsonData.setAfterHandlerType(form.getPeopleType()); // 鍙戝竷杞姙浜嬩欢 - publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), ProcessLogEventTypeEnum.DELEGATE, jsonData)); + publisher.publishEvent(new TaskLogEvent(this, null, SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), task.getTaskDefinitionKey(), task.getName(), ProcessLogEventTypeEnum.DELEGATE, jsonData)); return Result.ok("杞姙鎴愬姛"); } @@ -622,7 +711,7 @@ Task task = taskService.createTaskQuery().taskId(form.getTaskId()).processInstanceId(form.getProcessInsId()).singleResult(); if (Objects.nonNull(task)) { // 娣诲姞璺宠繃鏃ュ織 - publisher.publishEvent(new TaskLogEvent(this, null,SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc()))); + publisher.publishEvent(new TaskLogEvent(this, null, SecurityUtils.getUserId(), form.getProjectId(), form.getProcessInsId(), task.getId(), task.getTaskDefinitionKey(), task.getName(), ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc()))); // 鏌ュ嚭璇ヤ换鍔$粦瀹氱殑琛ㄥ崟 Map<String, Object> data = new HashMap<>(1); @@ -640,6 +729,10 @@ @Override public Result taskSupervise(TaskSuperviseForm form) { + Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + throw new RuntimeException("浠诲姟涓嶅瓨鍦�"); + } SuperviseData jsonData = new SuperviseData(); jsonData.setCreateTime(new Date()); jsonData.setContent(form.getContent()); @@ -648,12 +741,12 @@ jsonData.setReceiverIds(form.getReceiverIds()); jsonData.setReceiverType(form.getReceiverType()); jsonData.setSuperviseType(form.getSuperviseType()); - QueryWrapper<ProcessLog> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("task_id", form.getTaskId()); - queryWrapper.eq("event_type", ProcessLogEventTypeEnum.SUPERVISE); - queryWrapper.eq("process_ins_id", form.getProcessInsId()); - //鏌ヨ鐫e姙鏃ュ織 - ProcessLog processLog = processLogService.getOne(queryWrapper); + + ProcessLog processLog = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getTaskId, form.getTaskId()) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.SUPERVISE) + .eq(ProcessLog::getProcessInsId, form.getProcessInsId()) + .one(); List<SuperviseData> dataList; if (processLog != null) { String eventDataJson = processLog.getEventDataJson(); @@ -665,7 +758,123 @@ } dataList.add(jsonData); //娣诲姞鐫e姙鏃ュ織 - publisher.publishEvent(new TaskLogEvent(this, processLog.getId(), processLog.getUserId(), form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.SUPERVISE, dataList)); + publisher.publishEvent(new TaskLogEvent(this, + processLog.getId(), + processLog.getUserId(), + form.getProjectId(), + form.getProcessInsId(), + form.getTaskId(), + task.getTaskDefinitionKey(), + task.getName(), + ProcessLogEventTypeEnum.SUPERVISE, + dataList)); + return Result.ok("鎿嶄綔鎴愬姛"); + } + + @Override + @Synchronized + public Result taskHangup(TaskHangupForm form) { + Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + throw new RuntimeException("浠诲姟涓嶅瓨鍦�"); + } + List<ProcessLog> logs = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getTaskId, form.getTaskId()) + .eq(ProcessLog::getProcessInsId, form.getProcessInsId()) + .eq(ProcessLog::getProjectId, form.getProjectId()) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.HANGUP, ProcessLogEventTypeEnum.CANCEL_HANGUP) + .list(); + if (logs.size() % 2 != 0) { + throw new RuntimeException("璇ヤ换鍔℃鍦ㄦ寕璧蜂腑锛屼笉鑳藉啀娆℃寕璧�"); + } + // 浠诲姟鎸傝捣鍙渶瑕佸瓨鏃ュ織锛屾煡璇㈠緟鍔炴椂濡傛灉鏈夎繖涓棩蹇楄褰曪紝鍒欑鐢ㄦ彁浜ゆ寜閽紝浠ユ瀹炵幇浠诲姟鎸傝捣 + publisher.publishEvent(new TaskLogEvent(this, + null, + SecurityUtils.getUserId(), + form.getProjectId(), + form.getProcessInsId(), + form.getTaskId(), + task.getTaskDefinitionKey(), + task.getName(), + ProcessLogEventTypeEnum.HANGUP, + new HangupData(form.getReason()) + )); + return Result.ok("鎿嶄綔鎴愬姛"); + } + + @Override + @Synchronized + public Result cancelTaskHangup(TaskHangupForm form) { + Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + throw new RuntimeException("浠诲姟涓嶅瓨鍦�"); + } + List<ProcessLog> logs = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getTaskId, form.getTaskId()) + .eq(ProcessLog::getProcessInsId, form.getProcessInsId()) + .eq(ProcessLog::getProjectId, form.getProjectId()) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.HANGUP, ProcessLogEventTypeEnum.CANCEL_HANGUP) + .list(); + if (logs.size() % 2 == 0) { + throw new RuntimeException("璇ヤ换鍔℃湭琚寕璧凤紝涓嶈兘鍙栨秷鎸傝捣"); + } + publisher.publishEvent(new TaskLogEvent(this, + null, + SecurityUtils.getUserId(), + form.getProjectId(), + form.getProcessInsId(), + form.getTaskId(), + task.getTaskDefinitionKey(), + task.getName(), + ProcessLogEventTypeEnum.CANCEL_HANGUP, + new HangupData(form.getReason()) + )); + return Result.ok("鎿嶄綔鎴愬姛"); + } + + @Override + public Result taskTeamwork(TaskTeamWorkForm form) { + Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + return Result.error("浠诲姟涓嶅瓨鍦�"); + } + ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper) + .eq(ProjectProcess::getProcessInsId, task.getProcessInstanceId()) + .eq(ProjectProcess::getProcessDefId, task.getProcessDefinitionId()) + .one(); + if (Objects.isNull(projectProcess)) { + return Result.error("椤圭洰娴佺▼鏈粦瀹�"); + } + // 1. 淇濆瓨鍙戣捣浜哄~鍐欑殑琛ㄥ崟鏁版嵁锛屼絾涓嶇洿鎺ュ畬鎴愯浠诲姟銆傛彁浜ゅ悗浠诲姟澶勭悊浜哄繀椤荤瓑鍒板崗鍚屼汉澶勭悊瀹屼箣鍚庢墠鑳藉畬鎴愪换鍔� + Map<String, Object> processVariables = new HashMap<>(); + //鏌ュ嚭瀛楀吀涓渶瑕佹敞鍏ョ殑瀛楁淇℃伅 + List<String> dictList = dictTypeService.selectDictDataByType("flow_variables").stream().map(SysDictData::getDictValue).collect(Collectors.toList()); + Map<String, Object> newV = new HashMap<>(2); + if (!org.springframework.util.CollectionUtils.isEmpty(form.getVariables())) { + for (String key : form.getVariables().keySet()) { + newV.put(task.getTaskDefinitionKey() + "&" + key, form.getVariables().get(key)); + //瀛楀吀閲屾湁灏辨斁鍏ユ祦绋嬪彉閲忎腑 + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(dictList) && dictList.contains(key)) { + processVariables.put(key, form.getVariables().get(key)); + } + } + } + if (!processVariables.isEmpty()) { + taskService.setVariables(form.getTaskId(), processVariables); + } + + // 2. 淇濆瓨鏃ュ織 + publisher.publishEvent(new TaskLogEvent(this, + null, + SecurityUtils.getUserId(), + form.getProjectId(), + form.getProcessInsId(), + form.getTaskId(), + task.getTaskDefinitionKey(), + task.getName(), + ProcessLogEventTypeEnum.TEAM_WORK, + new TeamWorkData(form.getHandlerType(), form.getHandlerIds(), TeamWorkStatusEnum.NOT_FINISHED) + )); return Result.ok("鎿嶄綔鎴愬姛"); } @@ -679,7 +888,7 @@ * @param pageNum * @param result */ - public void getTodoTaskList(Long projectId, String processInsId, String taskName, int pageSize, int pageNum, Result result) { + public void getTodoTaskList(String projectId, String processInsId, String taskName, int pageSize, int pageNum, Result result) { TaskQuery taskQuery = taskService.createTaskQuery() .active() .processInstanceId(processInsId) @@ -688,7 +897,7 @@ .desc(); if (StringUtils.isNotBlank(taskName)) { - taskQuery.processDefinitionNameLike(taskName); + taskQuery.taskNameLike(taskName); } result.total(taskQuery.count()); List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize); @@ -696,6 +905,10 @@ for (Task task : taskList) { CustomerTaskVO taskVO = new CustomerTaskVO(); this.setRuntimeTaskInfo(task, taskVO, projectId); + // 妫�鏌ユ槸鍚︽寕璧� + if (processLogService.taskIsHangup(task.getId(), task.getProcessInstanceId())) { + taskVO.setTaskStatus(TaskStatusEnum.HANGUP); + } vos.add(taskVO); } result.put("taskList", vos); @@ -712,7 +925,7 @@ * @param result * @return */ - private List<CustomerTaskVO> getAllUserTask(Long projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { + private List<CustomerTaskVO> getAllUserTask(String projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); @@ -731,7 +944,7 @@ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); if (Objects.isNull(process)) { // 濡傛灉杩愯鏃舵壘涓嶅埌璇存槑鏄凡瀹屾垚鐨勬祦绋嬶紝鐩存帴鏌ュ巻鍙蹭换鍔� - List<CustomerTaskVO> vos = this.getFinishedProcessTaskInfo(userTasks, processInsId, processDefinitionId); + List<CustomerTaskVO> vos = this.getFinishedProcessTaskInfo(userTasks, projectId, processInsId, processDefinitionId); result.data(vos); return vos; } @@ -753,10 +966,16 @@ List<String> handlerNames = new ArrayList<>(2); List<Long> handlerUnitIds = new ArrayList<>(2); List<String> handlerUnitNames = new ArrayList<>(2); + List<String> promoterNames = new ArrayList<>(2); + List<String> promoterUnitNames = new ArrayList<>(2); vo.setHandlerId(handlerIds); vo.setHandlerName(handlerNames); vo.setHandlerUnitId(handlerUnitIds); vo.setHandlerUnitName(handlerUnitNames); + vo.setPromoterName(promoterNames); + vo.setPromoterUnitName(promoterUnitNames); + + this.setCandidateInfo(userTask, vo, projectId, processInsId); if (Objects.isNull(task)) { // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛岄渶瑕佷粠鍘嗗彶浠诲姟涓啀鎵句竴涓� @@ -768,28 +987,25 @@ .desc() .list(); if (CollectionUtils.isEmpty(historicTasks)) { - vo.setPromoterName("鏆傛棤"); - vo.setPromoterUnitName("鏆傛棤"); // 鏈紑濮嬬殑浠诲姟锛屽叾鍏宠仈鐨勭敤鎴风粍杩欎簺閮藉彲浠ヤ粠UserTask涓嬁鍒帮紝鍥犱负鏈韩鏈紑濮嬬殑浠诲姟鏄病鏈塼ask鐨勶紝鎵�浠ヨ繖閲岀洿鎺ユ煡 if (StringUtils.isNotBlank(userTask.getAssignee())) { vo.setHandlerType(HandlerTypeEnum.USER); SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee())); if (Objects.nonNull(sysUser)) { handlerIds.add(sysUser.getUserId()); - handlerNames.add(sysUser.getNickName()); + handlerNames.add(this.getUserShowName(sysUser)); if (Objects.nonNull(sysUser.getDept())) { handlerUnitIds.add(sysUser.getDept().getDeptId()); handlerUnitNames.add(sysUser.getDept().getDeptName()); } } - } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) { List<String> groupIds = userTask.getCandidateGroups(); for (String groupId : groupIds) { // 澶勭悊鍙橀噺琛ㄨ揪寮忥紝DATA_LAUNCH鍙彲鑳芥槸閮ㄩ棬涓嶄細鏄鑹诧紝鍥犱负浠h〃鐨勬槸涓氫富閮ㄩ棬 if (groupId.contains(ProcessConstants.DATA_LAUNCH)) { vo.setHandlerType(HandlerTypeEnum.DEPT); - this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT); + this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT, 1); } else if (groupId.startsWith("dept")) { // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1 vo.setHandlerType(HandlerTypeEnum.DEPT); String[] split = groupId.split(":"); @@ -799,6 +1015,7 @@ if (Objects.nonNull(dept)) { handlerUnitIds.add(dept.getDeptId()); handlerUnitNames.add(dept.getDeptName()); + handlerNames.add(this.getDeptLeaderShowName(dept)); } } } else { @@ -824,9 +1041,11 @@ SysUser handlerUser = sysUserService.selectUserById(handlerUserId); if (Objects.nonNull(handlerUser)) { handlerIds.add(handlerUserId); - handlerNames.add(handlerUser.getNickName()); - vo.setActualHandlerUserId(historicTasks.get(0).getAssignee()); - vo.setActualHandlerUserName(handlerUser.getNickName()); + handlerNames.add(this.getUserShowName(handlerUser)); + if (Objects.nonNull(handlerUser.getDept())) { + handlerUnitNames.add(handlerUser.getDept().getDeptName()); + handlerUnitIds.add(handlerUser.getDept().getDeptId()); + } } vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey()); this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks()); @@ -856,8 +1075,11 @@ * @param processDefId 娴佺▼瀹氫箟id * @return */ - private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) { + private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String projectId, String processInsId, String processDefId) { HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + if (Objects.isNull(hisProcess)) { + return new ArrayList<>(); + } List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { CustomerTaskVO vo = new CustomerTaskVO(); vo.setProcessInsId(hisProcess.getId()); @@ -865,6 +1087,23 @@ vo.setDeployId(hisProcess.getDeploymentId()); vo.setTaskName(userTask.getName()); vo.setProcessName(hisProcess.getProcessDefinitionName()); + + // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist + List<Long> handlerIds = new ArrayList<>(2); + List<String> handlerNames = new ArrayList<>(2); + List<Long> handlerUnitIds = new ArrayList<>(2); + List<String> handlerUnitNames = new ArrayList<>(2); + List<String> promoterNames = new ArrayList<>(2); + List<String> promoterUnitNames = new ArrayList<>(2); + vo.setHandlerId(handlerIds); + vo.setHandlerName(handlerNames); + vo.setHandlerUnitId(handlerUnitIds); + vo.setHandlerUnitName(handlerUnitNames); + vo.setPromoterName(promoterNames); + vo.setPromoterUnitName(promoterUnitNames); + + + this.setCandidateInfo(userTask, vo, projectId, processInsId); // 鏌ュ涓槸鍥犱负椹冲洖鍚庝細鏌ュ嚭涓ゆ潯鍙婁互涓婏紝鍙栨渶鏂颁竴鏉� List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() @@ -902,7 +1141,7 @@ * @param taskVO 浠诲姟vo * @param projectId 椤圭洰id */ - private void setRuntimeTaskInfo(Task task, CustomerTaskVO taskVO, Long projectId) { + private void setRuntimeTaskInfo(Task task, CustomerTaskVO taskVO, String projectId) { // 褰撳墠娴佺▼淇℃伅 taskVO.setTaskId(task.getId()); taskVO.setCreateTime(task.getCreateTime()); @@ -927,18 +1166,19 @@ taskVO.setProcessInsId(task.getProcessInstanceId()); taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey()); - // 娴佺▼鍙戣捣浜轰俊鎭� - this.setPromoterInfo(taskVO); - // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist List<Long> handlerIds = new ArrayList<>(2); List<String> handlerNames = new ArrayList<>(2); List<Long> handlerUnitIds = new ArrayList<>(2); List<String> handlerUnitNames = new ArrayList<>(2); + List<String> promoterNames = new ArrayList<>(2); + List<String> promoterUnitNames = new ArrayList<>(2); taskVO.setHandlerId(handlerIds); taskVO.setHandlerName(handlerNames); taskVO.setHandlerUnitId(handlerUnitIds); taskVO.setHandlerUnitName(handlerUnitNames); + taskVO.setPromoterName(promoterNames); + taskVO.setPromoterUnitName(promoterUnitNames); // 娴佺▼澶勭悊浜轰俊鎭� List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); @@ -954,10 +1194,12 @@ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); if (Objects.nonNull(sysUser)) { taskVO.getHandlerId().add(sysUser.getUserId()); - taskVO.getHandlerName().add(sysUser.getNickName()); + taskVO.getHandlerName().add(this.getUserShowName(sysUser)); if (Objects.nonNull(sysUser.getDept())) { taskVO.getHandlerUnitId().add(sysUser.getDept().getDeptId()); taskVO.getHandlerUnitName().add(sysUser.getDept().getDeptName()); + taskVO.getPromoterName().add(this.getUserShowName(sysUser)); + taskVO.getPromoterUnitName().add(sysUser.getDept().getDeptName()); } } // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂� @@ -971,6 +1213,8 @@ if (Objects.nonNull(dept)) { taskVO.getHandlerUnitId().add(dept.getDeptId()); taskVO.getHandlerUnitName().add(dept.getDeptName()); + taskVO.getPromoterName().add(this.getDeptLeaderShowName(dept)); + taskVO.getPromoterUnitName().add(dept.getDeptName()); } } } else { @@ -982,7 +1226,6 @@ } } } - this.distinctVo(taskVO); } } @@ -1041,7 +1284,7 @@ * @param result * @return */ - private List<CustomerTaskVO> getTimelyTask(String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { + private List<CustomerTaskVO> getTimelyTask(String projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; @@ -1124,11 +1367,16 @@ List<String> handlerNames = new ArrayList<>(2); List<Long> handlerUnitIds = new ArrayList<>(2); List<String> handlerUnitNames = new ArrayList<>(2); + List<String> promoterNames = new ArrayList<>(2); + List<String> promoterUnitNames = new ArrayList<>(2); vo.setHandlerId(handlerIds); vo.setHandlerName(handlerNames); vo.setHandlerUnitId(handlerUnitIds); vo.setHandlerUnitName(handlerUnitNames); + vo.setPromoterName(promoterNames); + vo.setPromoterUnitName(promoterUnitNames); + this.setCandidateInfo(userTask, vo, projectId, processInsId); HistoricTaskInstance hisTask = keyMap.get(userTask.getId()); if (Objects.nonNull(hisTask)) { vo.setTaskStatus(TaskStatusEnum.FINISHED); @@ -1142,9 +1390,7 @@ SysUser handlerUser = sysUserService.selectUserById(handlerUserId); if (Objects.nonNull(handlerUser)) { vo.getHandlerId().add(handlerUserId); - vo.getHandlerName().add(handlerUser.getNickName()); - vo.setActualHandlerUserId(hisTask.getAssignee()); - vo.setActualHandlerUserName(handlerUser.getNickName()); + vo.getHandlerName().add(this.getUserShowName(handlerUser)); } vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey()); this.setPromoterAndHandler(vo, hisTask.getIdentityLinks()); @@ -1155,6 +1401,26 @@ }).collect(Collectors.toList()); result.data(vos); return vos; + } + + /** + * 鐢ㄦ埛鍚嶇О鍚庨潰璺熺數璇濆彿鐮� + * + * @param user + * @return + */ + private String getUserShowName(SysUser user) { + return user.getNickName() + (StringUtils.isNotBlank(user.getPhonenumber()) ? "(" + user.getPhonenumber() + ")" : ""); + } + + /** + * 閮ㄩ棬璐熻矗浜哄悕绉板悗闈㈣窡鐢佃瘽鍙风爜 + * + * @param dept + * @return + */ + private String getDeptLeaderShowName(SysDept dept) { + return dept.getLeader() + (StringUtils.isNotBlank(dept.getPhone()) ? "(" + dept.getPhone() + ")" : ""); } /** @@ -1230,7 +1496,7 @@ * @param result * @return */ - private List<CustomerTaskVO> getOvertimeTask(Long projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { + private List<CustomerTaskVO> getOvertimeTask(String projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; @@ -1343,7 +1609,7 @@ * @param result * @return */ - private List<CustomerTaskVO> getWillOvertimeTask(Long projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { + private List<CustomerTaskVO> getWillOvertimeTask(String projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) { int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; @@ -1418,7 +1684,7 @@ * @param result * @return */ - private List<CustomerTaskVO> getRemainingTask(Long projectId, + private List<CustomerTaskVO> getRemainingTask(String projectId, String processDefinitionId, String processInsId, String taskName, @@ -1464,10 +1730,14 @@ List<String> handlerNames = new ArrayList<>(2); List<Long> handlerUnitIds = new ArrayList<>(2); List<String> handlerUnitNames = new ArrayList<>(2); + List<String> promoterNames = new ArrayList<>(2); + List<String> promoterUnitNames = new ArrayList<>(2); vo.setHandlerId(handlerIds); vo.setHandlerName(handlerNames); vo.setHandlerUnitId(handlerUnitIds); vo.setHandlerUnitName(handlerUnitNames); + vo.setPromoterName(promoterNames); + vo.setPromoterUnitName(promoterUnitNames); vo.setProcessInsId(process.getId()); vo.setProcessDefId(processDefinitionId); @@ -1475,6 +1745,9 @@ vo.setTaskName(userTask.getName()); vo.setProcessName(process.getProcessDefinitionName()); vo.setTaskStatus(TaskStatusEnum.NOT_START); + + this.setCandidateInfo(userTask, vo, projectId, processInsId); + // 鏈紑濮嬬殑浠诲姟锛屽叾鍏宠仈鐨勭敤鎴风粍杩欎簺閮藉彲浠ヤ粠UserTask涓嬁鍒帮紝鍥犱负鏈韩鏈紑濮嬬殑浠诲姟鏄病鏈塼ask鐨勶紝鎵�浠ヨ繖閲岀洿鎺ユ煡 if (StringUtils.isNotBlank(userTask.getAssignee())) { vo.setHandlerType(HandlerTypeEnum.USER); @@ -1493,7 +1766,7 @@ // 澶勭悊鍙橀噺琛ㄨ揪寮忥紝DATA_LAUNCH鍙彲鑳芥槸閮ㄩ棬涓嶄細鏄鑹诧紝鍥犱负浠h〃鐨勬槸涓氫富閮ㄩ棬 if (groupId.contains(ProcessConstants.DATA_LAUNCH)) { vo.setHandlerType(HandlerTypeEnum.DEPT); - this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT); + this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT, 1); } else if (groupId.startsWith("dept")) { // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1 vo.setHandlerType(HandlerTypeEnum.DEPT); String[] split = groupId.split(":"); @@ -1536,10 +1809,10 @@ /** * 澶勭悊娴佺▼鍙橀噺-涓氫富鍗曚綅 - * + * @param setType 0 璁剧疆璐d换鍗曚綅 1 璁剧疆鍔炵悊鍗曚綅 * @param vo */ - private void varYzReview(CustomerTaskVO vo, Long projectId, String processInsId, HandlerTypeEnum type) { + private void varYzReview(CustomerTaskVO vo, String projectId, String processInsId, HandlerTypeEnum type, Integer setType) { ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper) .eq(ProjectProcess::getProjectId, projectId) .eq(ProjectProcess::getProcessInsId, processInsId) @@ -1556,8 +1829,14 @@ } else if (HandlerTypeEnum.DEPT.equals(type)) { SysDept dept = deptService.selectDeptById(projectProcess.getDataLaunch()); if (Objects.nonNull(dept)) { - vo.getHandlerUnitId().add(dept.getDeptId()); - vo.getHandlerUnitName().add(dept.getDeptName()); + if (setType == 1) { + vo.getHandlerUnitId().add(dept.getDeptId()); + vo.getHandlerUnitName().add(dept.getDeptName()); + vo.getHandlerName().add(this.getDeptLeaderShowName(dept)); + } else { + vo.getPromoterUnitName().add(dept.getDeptName()); + vo.getPromoterName().add(this.getDeptLeaderShowName(dept)); + } } } else if (HandlerTypeEnum.ROLE.equals(type)) { SysRole role = sysRoleService.selectRoleById(projectProcess.getDataLaunch()); @@ -1595,6 +1874,52 @@ return totalNum - num; } + /** + * 璁剧疆鍊欓�変汉淇℃伅/璐d换鍗曚綅 + * + * @param userTask + * @param vo + * @param projectId + * @param processInsId + */ + private void setCandidateInfo(UserTask userTask, CustomerTaskVO vo, String projectId, String processInsId) { + if (StringUtils.isNotBlank(userTask.getAssignee())) { + SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee())); + if (Objects.nonNull(sysUser)) { + if (Objects.nonNull(sysUser.getDept())) { + // 濡傛灉鏄寚瀹氱殑鏌愪釜浜猴紝閭d箞璐d换鍗曚綅鏄繖涓汉鎵�鍦ㄧ殑閮ㄩ棬 + vo.getPromoterUnitName().add(sysUser.getDept().getDeptName()); + vo.getPromoterName().add(this.getUserShowName(sysUser)); + } + } + } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) { + List<String> groupIds = userTask.getCandidateGroups(); + for (String groupId : groupIds) { + // 澶勭悊鍙橀噺琛ㄨ揪寮忥紝DATA_LAUNCH鍙彲鑳芥槸閮ㄩ棬涓嶄細鏄鑹诧紝鍥犱负浠h〃鐨勬槸涓氫富閮ㄩ棬 + if (groupId.contains(ProcessConstants.DATA_LAUNCH)) { + vo.setHandlerType(HandlerTypeEnum.DEPT); + this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT, 0); + } else if (groupId.startsWith("dept")) { // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1 + vo.setHandlerType(HandlerTypeEnum.DEPT); + String[] split = groupId.split(":"); + if (split.length > 1) { + // 閮ㄩ棬 + SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); + if (Objects.nonNull(dept)) { + vo.getPromoterUnitName().add(dept.getDeptName()); + vo.getPromoterName().add(this.getDeptLeaderShowName(dept)); + } + } + } else { + vo.setHandlerType(HandlerTypeEnum.ROLE); + SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId)); + if (Objects.nonNull(role)) { + vo.getPromoterUnitName().add(role.getRoleName()); + } + } + } + } + } /** * 璁剧疆浠诲姟鐨勫彂璧蜂汉&澶勭悊浜� 鍙湁寰呭姙浠诲姟鍜屽凡瀹屾垚浠诲姟鎵嶄細鎺夎繖涓柟娉� @@ -1603,7 +1928,7 @@ * @param identityLinkInfos 濡傛灉鏄凡瀹屾垚鐨勪换鍔★紝鐢ㄨ繖涓幓鍙栧叧鑱旂殑鐢ㄦ埛/鐢ㄦ埛缁� */ private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) { - this.setPromoterInfo(taskVO); +// this.setPromoterInfo(taskVO); // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist List<Long> handlerIds = new ArrayList<>(2); @@ -1628,7 +1953,7 @@ if (Objects.nonNull(sysUser)) { taskVO.setHandlerType(HandlerTypeEnum.USER); handlerIds.add(sysUser.getUserId()); - handlerNames.add(sysUser.getNickName()); + handlerNames.add(this.getUserShowName(sysUser)); if (Objects.nonNull(sysUser.getDept())) { handlerUnitIds.add(sysUser.getDept().getDeptId()); handlerUnitNames.add(sysUser.getDept().getDeptName()); @@ -1665,7 +1990,7 @@ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); if (Objects.nonNull(sysUser)) { handlerIds.add(sysUser.getUserId()); - handlerNames.add(sysUser.getNickName()); + handlerNames.add(this.getUserShowName(sysUser)); if (Objects.nonNull(sysUser.getDept())) { handlerUnitIds.add(sysUser.getDept().getDeptId()); handlerUnitNames.add(sysUser.getDept().getDeptName()); @@ -1695,7 +2020,6 @@ } } } - this.distinctVo(taskVO); } @@ -1705,41 +2029,41 @@ * @param taskVO */ private void setPromoterInfo(CustomerTaskVO taskVO) { - // 鍙戣捣浜哄簲涓轰笂涓�鑺傜偣鐨勫鐞嗕汉 - List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey()); - List<SysUser> userList = beforeNodeKey.stream().map(key -> { - List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery() - .processInstanceId(taskVO.getProcessInsId()) - .taskDefinitionKey(key) - .orderByHistoricTaskInstanceStartTime() - .desc() - .list(); // 涔嬫墍浠ョ敤list鏄洜涓哄鏋滄煇涓换鍔¤椹冲洖杩囷紝涓斿鏋滆浠诲姟鍐嶆鎵ц鏃朵細鏈夊鏉℃暟鎹紝鍙栨渶鏂扮殑涓�鏉� - if (!CollectionUtils.isEmpty(historicTaskInstances)) { - // 瀹為檯棰嗗彇杩欎釜浠诲姟鐨勪汉锛屼篃灏辨槸澶勭悊浜� - String assignee = historicTaskInstances.get(0).getAssignee(); - SysUser startUser = sysUserService.selectUserById(Long.parseLong(assignee)); - return startUser; - } else { - return null; - } - }).filter(user -> Objects.nonNull(user)).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(userList)) { - taskVO.setPromoterName("鏆傛棤"); - taskVO.setPromoterUnitName("鏆傛棤"); - } else { - taskVO.setPromoterId(userList.stream().map(user -> { - return user.getUserId() + ""; - }).collect(Collectors.joining("銆�"))); - taskVO.setPromoterName(userList.stream().map(user -> { - return user.getNickName(); - }).collect(Collectors.joining("銆�"))); - taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { - return user.getDept().getDeptId() + ""; - }).collect(Collectors.joining("銆�"))); - taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { - return user.getDept().getDeptName() + ""; - }).collect(Collectors.joining("銆�"))); - } +// // 鍙戣捣浜哄簲涓轰笂涓�鑺傜偣鐨勫鐞嗕汉 +// List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey()); +// List<SysUser> userList = beforeNodeKey.stream().map(key -> { +// List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery() +// .processInstanceId(taskVO.getProcessInsId()) +// .taskDefinitionKey(key) +// .orderByHistoricTaskInstanceStartTime() +// .desc() +// .list(); // 涔嬫墍浠ョ敤list鏄洜涓哄鏋滄煇涓换鍔¤椹冲洖杩囷紝涓斿鏋滆浠诲姟鍐嶆鎵ц鏃朵細鏈夊鏉℃暟鎹紝鍙栨渶鏂扮殑涓�鏉� +// if (!CollectionUtils.isEmpty(historicTaskInstances)) { +// // 瀹為檯棰嗗彇杩欎釜浠诲姟鐨勪汉锛屼篃灏辨槸澶勭悊浜� +// String assignee = historicTaskInstances.get(0).getAssignee(); +// SysUser startUser = sysUserService.selectUserById(Long.parseLong(assignee)); +// return startUser; +// } else { +// return null; +// } +// }).filter(user -> Objects.nonNull(user)).collect(Collectors.toList()); +// if (CollectionUtils.isEmpty(userList)) { +// taskVO.setPromoterName("鏆傛棤"); +// taskVO.setPromoterUnitName("鏆傛棤"); +// } else { +// taskVO.setPromoterId(userList.stream().map(user -> { +// return user.getUserId() + ""; +// }).collect(Collectors.joining("銆�"))); +// taskVO.setPromoterName(userList.stream().map(user -> { +// return this.getUserShowName(user); +// }).collect(Collectors.joining("銆�"))); +// taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { +// return user.getDept().getDeptId() + ""; +// }).collect(Collectors.joining("銆�"))); +// taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> { +// return user.getDept().getDeptName() + ""; +// }).collect(Collectors.joining("銆�"))); +// } } /** -- Gitblit v1.8.0