From a0e8d1bbff7a02f538be76e852aa233324bd8810 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 03 一月 2025 13:31:51 +0800 Subject: [PATCH] 赋码 --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 103 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 97 insertions(+), 6 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 46d7ee4..61d4bc3 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -20,6 +20,7 @@ import com.ycl.domain.entity.ProjectInfo; import com.ycl.domain.entity.ProjectProcess; import com.ycl.domain.form.RejectTaskForm; +import com.ycl.domain.form.TaskDelegationForm; import com.ycl.domain.vo.CustomerTaskVO; import com.ycl.domain.vo.ProjectProcessDetailVO; import com.ycl.mapper.ProjectInfoMapper; @@ -44,6 +45,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.identitylink.api.IdentityLink; import org.flowable.identitylink.api.IdentityLinkInfo; +import org.flowable.identitylink.api.IdentityLinkType; import org.flowable.identitylink.api.history.HistoricIdentityLink; import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; @@ -254,6 +256,7 @@ TaskQuery taskQuery = taskService.createTaskQuery() .active() .includeProcessVariables() + .includeIdentityLinks() .orderByTaskCreateTime().desc(); if (StringUtils.isNotBlank(taskName)) { @@ -284,8 +287,8 @@ this.setPromoterInfo(taskVO); // 娴佺▼澶勭悊浜轰俊鎭� - List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId()); - for (IdentityLink identityLink : identityLinksForTask) { + List<? extends IdentityLinkInfo> identityLinks = task.getIdentityLinks(); + for (IdentityLinkInfo identityLink : identityLinks) { // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂� if (StringUtils.isNotBlank(identityLink.getUserId())) { taskVO.setHandlerType(HandlerTypeEnum.USER); @@ -360,10 +363,36 @@ } @Override - public Result rejectTask(RejectTaskForm form) { - Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult(); - taskCommonService.reject(form.getRejectedTaskDefKey(), task.getTaskDefinitionKey(), task.getProcessInstanceId(), form.getTaskId(), form.getAuditOpinion()); - return Result.ok("椹冲洖鎴愬姛"); + public Result taskDelegation(TaskDelegationForm form) { + Task task = taskService.createTaskQuery().taskId(form.getTaskId()).includeIdentityLinks().singleResult(); + if (Objects.isNull(task)) { + throw new RuntimeException("鏈湪杩愯浠诲姟涓壘鍒拌浠诲姟锛屾棤娉曟墽琛岃浆鍔炴搷浣�"); + } + // 闇�瑕佸厛绉婚櫎涔嬪墠鐨勫鐞嗕汉 + for (IdentityLinkInfo identityLink : task.getIdentityLinks()) { + if (StringUtils.isNotBlank(identityLink.getUserId())) { + taskService.deleteCandidateUser(task.getId(), identityLink.getUserId()); + } else if (StringUtils.isNotBlank(identityLink.getGroupId())) { + taskService.deleteCandidateGroup(task.getId(), identityLink.getGroupId()); + } + } + // 鍐嶆柊澧炲鐞嗕汉 + switch (form.getPeopleType()) { + case FIX_USER: + // 鎸囧畾鐢ㄦ埛鐨勮瘽锛屽彧鑳介�変竴涓敤鎴� + taskService.delegateTask(task.getId(), form.getTargetId()); + break; + case USER: + // 鐢ㄦ埛缁勭殑璇濓紝鍙互閫夊涓敤鎴凤紝涓ユ牸鏉ヨ杩欓噷鐨勭敤鎴风粍骞朵笉鏄痜lowable涓殑缁勭殑姒傚康锛屽彧鏄紑婧愭鏋舵湁杩欎釜瀹氫箟 + break; + case DEPT: + taskService.addCandidateGroup(task.getId(), form.getTargetId()); + break; + default: + break; + } + + return Result.ok("杞姙鎴愬姛"); } /** @@ -483,6 +512,12 @@ List<UserTask> userTasks = allUserTaskElement.subList(startNum, end); // 鏌ュ嚭娴佺▼ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + if (Objects.isNull(process)) { + // 濡傛灉杩愯鏃舵壘涓嶅埌璇存槑鏄凡瀹屾垚鐨勬祦绋嬶紝鐩存帴鏌ュ巻鍙蹭换鍔� + List<CustomerTaskVO> vos = this.getFinishedProcessTaskInfo(userTasks, processInsId, processDefinitionId); + result.data(vos); + return vos; + } // 鍒ゆ柇浠诲姟鐘舵�� List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { CustomerTaskVO vo = new CustomerTaskVO(); @@ -573,6 +608,52 @@ } /** + * 鏌ヨ宸插畬鎴愮殑娴佺▼鐨勪换鍔′俊鎭� + * + * @param userTasks 浠诲姟鑺傜偣鍒楄〃 + * @param processInsId 娴佺▼瀹炰緥id + * @param processDefId 娴佺▼瀹氫箟id + * @return + */ + private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) { + HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { + CustomerTaskVO vo = new CustomerTaskVO(); + vo.setProcessInsId(hisProcess.getId()); + vo.setProcessDefId(processDefId); + vo.setDeployId(hisProcess.getDeploymentId()); + vo.setTaskName(userTask.getName()); + vo.setProcessName(hisProcess.getProcessDefinitionName()); + + // 鏌ュ涓槸鍥犱负椹冲洖鍚庝細鏌ュ嚭涓ゆ潯鍙婁互涓婏紝鍙栨渶鏂颁竴鏉� + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(hisProcess.getId()) + .taskDefinitionKey(userTask.getId()).includeIdentityLinks() + .orderByHistoricTaskInstanceStartTime() + .desc() + .list(); + + vo.setTaskStatus(TaskStatusEnum.FINISHED); + // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊� + vo.setTaskId(hisTaskList.get(0).getId()); + vo.setExecutionId(hisTaskList.get(0).getExecutionId()); + vo.setCreateTime(hisTaskList.get(0).getStartTime()); + // 鏌ヨ瀹為檯澶勭悊浜� + long handlerUserId = Long.parseLong(hisTaskList.get(0).getAssignee()); + SysUser handlerUser = sysUserService.selectUserById(handlerUserId); + if (Objects.nonNull(handlerUser)) { + vo.setHandlerId(handlerUserId); + vo.setHandlerName(handlerUser.getNickName()); + } + vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey()); + this.setPromoterAndHandler(vo, hisTaskList.get(0).getIdentityLinks()); + + return vo; + }).collect(Collectors.toList()); + return vos; + } + + /** * 鏌ヨ鍓╀綑浜嬮」锛堟湭寮�濮嬬殑浠诲姟锛� * * @param processDefinitionId @@ -601,6 +682,12 @@ List<UserTask> userTasks = allUserTaskElement.subList(startNum, end); // 鏌ュ嚭娴佺▼ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + if (Objects.isNull(process)) { + // 濡傛灉娴佺▼宸茬粡瀹屾垚锛岄偅涔堟病鏈夊墿浣欎簨椤逛簡 + List<CustomerTaskVO> vos = new ArrayList<>(1); + result.data(vos); + return vos; + } // 鍒ゆ柇浠诲姟鐘舵�� List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> { CustomerTaskVO vo = new CustomerTaskVO(); @@ -681,6 +768,10 @@ List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); // 鏌ュ嚭娴佺▼ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + if (Objects.isNull(process)) { + // 杩愯鏃舵湭鎵惧埌娴佺▼锛岃鏄庢祦绋嬪凡缁忕粨鏉熶簡 + return 0L; + } long num = 0L; // 鍒ゆ柇浠诲姟鐘舵�� for (UserTask userTask : allUserTaskElement) { -- Gitblit v1.8.0