From 74da9dfb5fb4085d8847d4c74a97048c6c677514 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 15 一月 2025 10:53:34 +0800
Subject: [PATCH] 完成任务bug(协同办理的才resolveTask)、转办前如果是指定人员删除不掉问题、提取获取运行时任务信息的方法
---
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 184 +++++++++++++++++++++++++++-------------------
flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 16 +--
2 files changed, 115 insertions(+), 85 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 9e7bda4..cce4972 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -52,6 +52,7 @@
import org.flowable.identitylink.api.IdentityLinkInfo;
import org.flowable.identitylink.api.IdentityLinkType;
import org.flowable.identitylink.api.history.HistoricIdentityLink;
+import org.flowable.identitylink.service.impl.persistence.entity.IdentityLinkEntityImpl;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
@@ -467,20 +468,25 @@
@Override
public Result taskDelegation(TaskDelegationForm form) {
- Task task = taskService.createTaskQuery().taskId(form.getTaskId()).includeIdentityLinks().singleResult();
+ Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult();
if (Objects.isNull(task)) {
throw new RuntimeException("鏈湪杩愯浠诲姟涓壘鍒拌浠诲姟锛屾棤娉曟墽琛岃浆鍔炴搷浣�");
}
+ List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
// 杞姙涔嬪墠鐨勫鐞嗕汉
List<String> beforeHandlerIds = new ArrayList<>(2);
// 杞姙涔嬪墠鐨勫鐞嗕汉绫诲瀷
HandlerTypeEnum beforeHandlerType = null;
// 闇�瑕佸厛绉婚櫎涔嬪墠鐨勫鐞嗕汉
- for (IdentityLinkInfo identityLink : task.getIdentityLinks()) {
+ for (IdentityLinkInfo identityLink : identityLinksForTask) {
if (StringUtils.isNotBlank(identityLink.getUserId())) {
beforeHandlerIds.add(identityLink.getUserId());
beforeHandlerType = HandlerTypeEnum.USER;
- taskService.deleteCandidateUser(task.getId(), identityLink.getUserId());
+ if (IdentityLinkType.ASSIGNEE.equals(identityLink.getType())) {
+ taskService.deleteUserIdentityLink(task.getId(), identityLink.getUserId(), IdentityLinkType.ASSIGNEE);
+ } else {
+ taskService.deleteCandidateUser(task.getId(), identityLink.getUserId());
+ }
} else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
beforeHandlerIds.add(identityLink.getGroupId());
if (identityLink.getGroupId().contains("dept")) {
@@ -567,73 +573,7 @@
List<CustomerTaskVO> vos = new ArrayList<>();
for (Task task : taskList) {
CustomerTaskVO taskVO = new CustomerTaskVO();
- // 褰撳墠娴佺▼淇℃伅
- taskVO.setTaskId(task.getId());
- taskVO.setCreateTime(task.getCreateTime());
- taskVO.setProcessDefId(task.getProcessDefinitionId());
- taskVO.setExecutionId(task.getExecutionId());
- taskVO.setTaskName(task.getName());
- taskVO.setTaskStatus(TaskStatusEnum.TODO);
- // 娴佺▼瀹氫箟淇℃伅
- ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
- .processDefinitionId(task.getProcessDefinitionId())
- .singleResult();
- taskVO.setDeployId(pd.getDeploymentId());
- taskVO.setProcessName(pd.getName());
- 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<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
- for (IdentityLink identityLink : identityLinksForTask) {
- // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
- if (StringUtils.isNotBlank(identityLink.getUserId())) {
- taskVO.setHandlerType(HandlerTypeEnum.USER);
- SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
- if (Objects.nonNull(sysUser)) {
- handlerIds.add(sysUser.getUserId());
- handlerNames.add(sysUser.getNickName());
- if (Objects.nonNull(sysUser.getDept())) {
- handlerUnitIds.add(sysUser.getDept().getDeptId());
- handlerUnitNames.add(sysUser.getDept().getDeptName());
- }
- }
- // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂�
- } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
- if (identityLink.getGroupId().startsWith("dept")) { // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
- taskVO.setHandlerType(HandlerTypeEnum.DEPT);
- String[] split = identityLink.getGroupId().split(":");
- if (split.length > 1) {
- // 閮ㄩ棬
- SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1]));
- if (Objects.nonNull(dept)) {
- handlerUnitIds.add(dept.getDeptId());
- handlerUnitNames.add(dept.getDeptName());
- }
- }
- } else {
- taskVO.setHandlerType(HandlerTypeEnum.ROLE);
- SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
- if (Objects.nonNull(role)) {
- handlerUnitIds.add(Long.parseLong(identityLink.getGroupId()));
- handlerUnitNames.add(role.getRoleName());
- }
- }
- }
- taskVO.setHandlerId(handlerIds);
- taskVO.setHandlerName(handlerNames);
- taskVO.setHandlerUnitId(handlerUnitIds);
- taskVO.setHandlerUnitName(handlerUnitNames);
- }
+ this.setRuntimeTaskInfo(task, taskVO);
vos.add(taskVO);
}
result.put("taskList", vos);
@@ -680,7 +620,10 @@
vo.setDeployId(process.getDeploymentId());
vo.setTaskName(userTask.getName());
vo.setProcessName(process.getProcessDefinitionName());
- Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
+ Task task = taskService.createTaskQuery()
+ .processInstanceId(process.getId())
+ .taskDefinitionKey(userTask.getId())
+ .singleResult();
// 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
List<Long> handlerIds = new ArrayList<>(2);
@@ -754,6 +697,10 @@
vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey());
this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks());
}
+ vo.setHandlerId(handlerIds);
+ vo.setHandlerName(handlerNames);
+ vo.setHandlerUnitId(handlerUnitIds);
+ vo.setHandlerUnitName(handlerUnitNames);
} else {
vo.setTaskStatus(TaskStatusEnum.TODO);
vo.setTaskId(task.getId());
@@ -762,11 +709,9 @@
vo.setTaskDefinitionKey(task.getTaskDefinitionKey());
this.setPromoterAndHandler(vo, null);
+ this.setRuntimeTaskInfo(task, vo);
}
- vo.setHandlerId(handlerIds);
- vo.setHandlerName(handlerNames);
- vo.setHandlerUnitId(handlerUnitIds);
- vo.setHandlerUnitName(handlerUnitNames);
+
return vo;
}).collect(Collectors.toList());
result.data(vos);
@@ -821,6 +766,85 @@
}
/**
+ * 璁剧疆杩愯鏃朵换鍔$殑淇℃伅
+ *
+ * @param task 浠诲姟
+ * @param taskVO 浠诲姟vo
+ */
+ private void setRuntimeTaskInfo(Task task, CustomerTaskVO taskVO) {
+ // 褰撳墠娴佺▼淇℃伅
+ taskVO.setTaskId(task.getId());
+ taskVO.setCreateTime(task.getCreateTime());
+ taskVO.setProcessDefId(task.getProcessDefinitionId());
+ taskVO.setExecutionId(task.getExecutionId());
+ taskVO.setTaskName(task.getName());
+ taskVO.setTaskStatus(TaskStatusEnum.TODO);
+ // 娴佺▼瀹氫箟淇℃伅
+ ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
+ .processDefinitionId(task.getProcessDefinitionId())
+ .singleResult();
+ taskVO.setDeployId(pd.getDeploymentId());
+ taskVO.setProcessName(pd.getName());
+ 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<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
+ for (IdentityLinkInfo identityLink : identityLinksForTask) {
+// if (StringUtils.isBlank(((IdentityLinkEntityImpl)identityLink).getId())) {
+// continue;
+// }
+ // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+ if (StringUtils.isNotBlank(identityLink.getUserId())) {
+ taskVO.setHandlerType(HandlerTypeEnum.USER);
+ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
+ if (Objects.nonNull(sysUser)) {
+ handlerIds.add(sysUser.getUserId());
+ handlerNames.add(sysUser.getNickName());
+ if (Objects.nonNull(sysUser.getDept())) {
+ handlerUnitIds.add(sysUser.getDept().getDeptId());
+ handlerUnitNames.add(sysUser.getDept().getDeptName());
+ }
+ }
+ // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂�
+ } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+ if (identityLink.getGroupId().startsWith("dept")) { // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
+ taskVO.setHandlerType(HandlerTypeEnum.DEPT);
+ String[] split = identityLink.getGroupId().split(":");
+ if (split.length > 1) {
+ // 閮ㄩ棬
+ SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1]));
+ if (Objects.nonNull(dept)) {
+ handlerUnitIds.add(dept.getDeptId());
+ handlerUnitNames.add(dept.getDeptName());
+ }
+ }
+ } else {
+ taskVO.setHandlerType(HandlerTypeEnum.ROLE);
+ SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
+ if (Objects.nonNull(role)) {
+ handlerUnitIds.add(Long.parseLong(identityLink.getGroupId()));
+ handlerUnitNames.add(role.getRoleName());
+ }
+ }
+ }
+ taskVO.setHandlerId(handlerIds);
+ taskVO.setHandlerName(handlerNames);
+ taskVO.setHandlerUnitId(handlerUnitIds);
+ taskVO.setHandlerUnitName(handlerUnitNames);
+ }
+ }
+
+ /**
* 鏌ヨ鍓╀綑浜嬮」锛堟湭寮�濮嬬殑浠诲姟锛�
*
* @param processDefinitionId
@@ -871,7 +895,10 @@
vo.setDeployId(process.getDeploymentId());
vo.setTaskName(userTask.getName());
vo.setProcessName(process.getProcessDefinitionName());
- Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
+ Task task = taskService.createTaskQuery()
+ .processInstanceId(process.getId())
+ .taskDefinitionKey(userTask.getId())
+ .singleResult();
if (Objects.isNull(task)) {
// 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛屽彧鏌ヨ鏈紑濮嬬殑
List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
@@ -927,6 +954,8 @@
} else {
continue;
}
+ } else {
+ this.setRuntimeTaskInfo(task, vo);
}
vos.add(vo);
}
@@ -979,6 +1008,9 @@
if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) {
List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskVO.getTaskId());
for (IdentityLink identityLink : identityLinksForTask) {
+ if (StringUtils.isBlank(((IdentityLinkEntityImpl)identityLink).getId())) {
+ continue;
+ }
// 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
if (StringUtils.isNotBlank(identityLink.getUserId())) {
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
diff --git a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index ca23fe6..0b762c0 100644
--- a/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/flowable/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -151,15 +151,13 @@
//娣诲姞娴佺▼鍙橀噺
if(!processVariables.isEmpty()) taskService.setVariables(taskId,processVariables);
taskService.addComment(taskId, task.getProcessInstanceId(), FlowComment.SUBMIT.getType(), "瀹屾垚鎻愪氦");
-// // 鍒ゆ柇褰撳墠浠诲姟鏄笉鏄浆鍔炶繃鐨�
-// Boolean delegation = flowLogService.taskDelegation(task.getProcessInstanceId(), task.getId());
-// if (delegation) {
-// taskService.resolveTask(taskId, newV);
-// }
- // 鍏堣褰撳墠鐢ㄦ埛璁ら杩欎釜浠诲姟
- taskService.claim(taskId, SecurityUtils.getUserId() + "");
- taskService.complete(taskId, newV);
-
+ if (DelegationState.PENDING.equals(task.getDelegationState())) {
+ taskService.resolveTask(taskId, newV);
+ } else {
+ // 鍏堣褰撳墠鐢ㄦ埛璁ら杩欎釜浠诲姟
+ taskService.claim(taskId, SecurityUtils.getUserId() + "");
+ taskService.complete(taskId, newV);
+ }
return AjaxResult.success("鎻愪氦鎴愬姛");
}
--
Gitblit v1.8.0