From 07c4ad96c75dc93b39e002feb19845219fede415 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 29 十一月 2024 16:49:09 +0800
Subject: [PATCH] 全部事项和待办事项查询功能完善
---
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 367 +++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 273 insertions(+), 94 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 4856ea1..ab53566 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -10,10 +10,13 @@
import com.ycl.common.core.domain.entity.SysRole;
import com.ycl.common.core.domain.entity.SysUser;
import com.ycl.common.enums.FlowComment;
+import com.ycl.common.enums.business.TaskStatusEnum;
import com.ycl.common.utils.SecurityUtils;
+import com.ycl.constant.TaskTypeConstant;
import com.ycl.domain.dto.FlowTaskDto;
import com.ycl.domain.entity.ProjectInfo;
import com.ycl.domain.entity.ProjectProcess;
+import com.ycl.domain.vo.CustomerTaskVO;
import com.ycl.domain.vo.ProjectProcessDetailVO;
import com.ycl.mapper.ProjectInfoMapper;
import com.ycl.mapper.ProjectProcessMapper;
@@ -26,15 +29,15 @@
import com.ycl.system.service.ISysRoleService;
import com.ycl.system.service.ISysUserService;
import org.apache.commons.lang3.StringUtils;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.FlowElement;
+import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
-import org.flowable.bpmn.model.StartEvent;
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.identitylink.api.IdentityLink;
+import org.flowable.identitylink.api.IdentityLinkInfo;
+import org.flowable.identitylink.api.history.HistoricIdentityLink;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
@@ -81,13 +84,62 @@
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
+ @Override
+ public Result projectSetProcess(ProjectProcessForm form) {
+ // 鏌ヨ璇ラ」鐩槸鍚﹀凡缁忕粦瀹氳繃娴佺▼浜嗭紝妫�鏌ョ粦瀹氱殑娴佺▼鏄惁鍦ㄨ繍琛岋紝鍦ㄨ繍琛屽氨鍒犱簡
+ ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, form.getProjectId())
+ .one();
+ if (Objects.nonNull(pp)) {
+ // TODO 澶勭悊涔嬪墠缁戝畾杩囩殑娴佺▼鏁版嵁
+ new LambdaUpdateChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, form.getProjectId())
+ .set(ProjectProcess::getProcessDefId, form.getProcessDefId())
+ .update();
+ } else {
+ ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null);
+ baseMapper.insert(entity);
+ }
+ return Result.ok("娴佺▼鍙樻洿鎴愬姛");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result startProcess(String projectId, String processDefId) {
+ ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId)
+ .latestVersion().singleResult();
+ if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
+ return Result.error("璇ユ祦绋嬪凡琚寕璧�,璇峰厛婵�娲绘祦绋�");
+ }
+ Map<String, Object> variables = new HashMap<>(2);
+ // 璁剧疆娴佺▼鍙戣捣浜篒d鍒版祦绋嬩腑
+ SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+ identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
+ variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
+ ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId, variables);
+// // 娴佺▼鍙戣捣鏃� 璺宠繃鍙戣捣浜鸿妭鐐�
+// // 缁欑涓�姝ョ敵璇蜂汉鑺傜偣璁剧疆浠诲姟鎵ц浜哄拰鎰忚
+// Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
+// if (Objects.nonNull(task)) {
+// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "鍙戣捣娴佺▼鐢宠");
+// taskService.complete(task.getId(), variables);
+// }
+ // 椤圭洰娴佺▼鍏宠仈娴佺▼瀹炰緥id
+ new LambdaUpdateChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, projectId)
+ .eq(ProjectProcess::getProcessDefId, processDefId)
+ .set(ProjectProcess::getProcessInsId, processInstance.getProcessInstanceId())
+ .update();
+ return Result.ok("娴佺▼鍚姩鎴愬姛");
+ }
+
/**
* 鑾峰彇娴佺▼璇︽儏
* @param projectId
* @return
*/
@Override
- public Result detail(Long projectId, String processId) {
+ public Result detail(Long projectId, String processDefId) {
// 椤圭洰淇℃伅
ProjectInfo projectInfo = new LambdaQueryChainWrapper<>(projectInfoMapper)
.select(ProjectInfo::getId, ProjectInfo::getProjectName, ProjectInfo::getProjectCode)
@@ -100,7 +152,7 @@
ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper)
.eq(ProjectProcess::getProjectId, projectId)
- .eq(ProjectProcess::getFlowableProcessId, processId)
+ .eq(ProjectProcess::getProcessDefId, processDefId)
.one();
if (Objects.isNull(projectProcess)) {
return Result.error("璇ラ」鐩湭璁剧疆娴佺▼");
@@ -113,110 +165,86 @@
ProjectProcessDetailVO.TaskStatistics taskStatistics = new ProjectProcessDetailVO.TaskStatistics();
// 鐘舵�佺粺璁�
- taskStatistics.setTotalTaskNum(this.getTotalTaskNum(processId));
- taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInstanceId()));
+ taskStatistics.setTotalTaskNum(this.getTotalTaskNum(processDefId));
+ taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId()));
// taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId()));
- taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInstanceId()));
+ taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId()));
detail.setStatistics(taskStatistics);
Result result = Result.ok();
// 浠e姙浠诲姟
- this.getTodoTaskList(projectProcess.getProcessInstanceId(),"", 1, 5, result);
+ this.getTodoTaskList(projectProcess.getProcessInsId(),"", 5, 1, result);
return result.data(detail);
}
-
@Override
- public Result projectSetProcess(ProjectProcessForm form) {
- // 鏌ヨ璇ラ」鐩槸鍚﹀凡缁忕粦瀹氳繃娴佺▼浜嗭紝妫�鏌ョ粦瀹氱殑娴佺▼鏄惁鍦ㄨ繍琛岋紝鍦ㄨ繍琛屽氨鍒犱簡
- ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper)
- .eq(ProjectProcess::getProjectId, form.getProjectId())
+ public Result taskList(com.ycl.domain.query.TaskQuery query) {
+ // 鑾峰彇椤圭洰瀵瑰簲鐨勬祦绋嬪疄渚媔d
+ ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, query.getProjectId())
+ .eq(ProjectProcess::getProcessDefId, query.getProcessDefId())
.one();
- if (Objects.nonNull(pp)) {
- // TODO 澶勭悊涔嬪墠缁戝畾杩囩殑娴佺▼鏁版嵁
- new LambdaUpdateChainWrapper<>(baseMapper)
- .eq(ProjectProcess::getProjectId, form.getProjectId())
- .set(ProjectProcess::getFlowableProcessId, form.getFlowableProcessId())
- .update();
- } else {
- ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null);
- baseMapper.insert(entity);
+ if (Objects.isNull(projectProcess)) {
+ throw new RuntimeException("璇ラ」鐩湭閰嶇疆娴佺▼");
}
- return Result.ok("娴佺▼鍙樻洿鎴愬姛");
+ Result ok = Result.ok();
+ switch (query.getTaskType()) {
+ case TaskTypeConstant.ALL:
+ this.getAllUserTask(query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName (), (int)query.getCurrentPage(), (int)query.getPageSize(), ok);
+ case TaskTypeConstant.TODO:
+ this.getTodoTaskList(projectProcess.getProcessInsId(), query.getTaskName(), (int)query.getPageSize(), (int)query.getCurrentPage(), ok);
+ case TaskTypeConstant.CURRENT:
+
+ case TaskTypeConstant.REMAINING:
+
+ default:
+
+
+ }
+ return ok;
}
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Result startProcess(String projectId, String processId) {
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processId)
- .latestVersion().singleResult();
- if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
- return Result.error("璇ユ祦绋嬪凡琚寕璧�,璇峰厛婵�娲绘祦绋�");
- }
- Map<String, Object> variables = new HashMap<>(2);
- // 璁剧疆娴佺▼鍙戣捣浜篒d鍒版祦绋嬩腑
- SysUser sysUser = SecurityUtils.getLoginUser().getUser();
- identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
- variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
- ProcessInstance processInstance = runtimeService.startProcessInstanceById(processId, projectId, variables);
-// // 娴佺▼鍙戣捣鏃� 璺宠繃鍙戣捣浜鸿妭鐐�
-// // 缁欑涓�姝ョ敵璇蜂汉鑺傜偣璁剧疆浠诲姟鎵ц浜哄拰鎰忚
-// Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
-// if (Objects.nonNull(task)) {
-// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "鍙戣捣娴佺▼鐢宠");
-// taskService.complete(task.getId(), variables);
-// }
- // 椤圭洰娴佺▼鍏宠仈娴佺▼瀹炰緥id
- new LambdaUpdateChainWrapper<>(baseMapper)
- .eq(ProjectProcess::getProjectId, projectId)
- .eq(ProjectProcess::getFlowableProcessId, processId)
- .set(ProjectProcess::getProcessInstanceId, processInstance.getProcessInstanceId())
- .update();
- return Result.ok("娴佺▼鍚姩鎴愬姛");
- }
-
-
- private void getTodoTaskList(String processInstanceId, String name, Integer pageNum, Integer pageSize, Result result) {
+ private void getTodoTaskList(String processInsId, String taskName, int pageSize, int pageNum, Result result) {
TaskQuery taskQuery = taskService.createTaskQuery()
.active()
- .processInstanceId(processInstanceId)
+ .processInstanceId(processInsId)
.includeProcessVariables()
.orderByTaskCreateTime().desc();
// TODO 浼犲叆鍚嶇О鏌ヨ涓嶅埌鏁版嵁?
- if (StringUtils.isNotBlank(name)) {
- taskQuery.processDefinitionNameLike(name);
+ if (StringUtils.isNotBlank(taskName)) {
+ taskQuery.processDefinitionNameLike(taskName);
}
result.total(taskQuery.count());
List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize);
- List<FlowTaskDto> flowList = new ArrayList<>();
+ List<CustomerTaskVO> vos = new ArrayList<>();
for (Task task : taskList) {
- FlowTaskDto flowTask = new FlowTaskDto();
+ CustomerTaskVO taskVO = new CustomerTaskVO();
// 褰撳墠娴佺▼淇℃伅
- flowTask.setTaskId(task.getId());
- flowTask.setTaskDefKey(task.getTaskDefinitionKey());
- flowTask.setCreateTime(task.getCreateTime());
- flowTask.setProcDefId(task.getProcessDefinitionId());
- flowTask.setExecutionId(task.getExecutionId());
- flowTask.setTaskName(task.getName());
+ 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();
- flowTask.setDeployId(pd.getDeploymentId());
- flowTask.setProcDefName(pd.getName());
- flowTask.setProcDefVersion(pd.getVersion());
- flowTask.setProcInsId(task.getProcessInstanceId());
+ taskVO.setDeployId(pd.getDeploymentId());
+ taskVO.setProcessName(pd.getName());
+ taskVO.setProcessInsId(task.getProcessInstanceId());
// 娴佺▼鍙戣捣浜轰俊鎭�
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId())
.singleResult();
SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
- flowTask.setStartUserId(startUser.getUserId().toString());
- flowTask.setStartUserName(startUser.getNickName());
- flowTask.setStartDeptName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : "");
+ taskVO.setPromoterId(startUser.getUserId());
+ taskVO.setPromoterName(startUser.getNickName());
+ taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : "");
+ taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null);
// 娴佺▼澶勭悊浜轰俊鎭�
List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
for (IdentityLink identityLink : identityLinksForTask) {
@@ -224,34 +252,179 @@
if (StringUtils.isNotBlank(identityLink.getUserId())) {
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
if (Objects.nonNull(sysUser)) {
- flowTask.setAssigneeId(sysUser.getUserId());
+ taskVO.setHandlerId(sysUser.getUserId());
if (Objects.nonNull(sysUser.getDept())) {
- flowTask.setAssigneeDeptName(sysUser.getDept().getDeptName());
+ taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
+ taskVO.setHandlerUnitName(sysUser.getDept().getDeptName());
}
- flowTask.setAssigneeName(sysUser.getNickName());
+ taskVO.setHandlerName(sysUser.getNickName());
}
- // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
+ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
} else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
if (Objects.nonNull(role)) {
- flowTask.setAssigneeId(Long.parseLong(identityLink.getGroupId()));
- flowTask.setAssigneeDeptName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
- flowTask.setAssigneeName("鏆傛湭澶勭悊");
+ taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
+ taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
+ taskVO.setHandlerName("鏆傛湭澶勭悊");
+ taskVO.setHandlerId(null);
}
}
}
- flowList.add(flowTask);
+ vos.add(taskVO);
}
- result.put("taskList", flowList);
+ result.put("taskList", vos);
}
/**
- * 鑾峰彇娴佺▼鑺傜偣鏁帮紙鎬讳换鍔℃暟锛屼笉鍖呭惈寮�濮嬨�佺粨鏉熺瓑鐗规畩鐨勶紝鍙粺璁serTask绫诲瀷鐨勶級
+ * 鑾峰彇鎵�鏈変换鍔�
*
- * @param processDefinitionId 娴佺▼瀹氫箟id
+ * @param processDefinitionId 娴佺▼杩愯id
+ * @param processInsId 娴佺▼瀹炰緥id
+ * @param pageNum
+ * @param pageSize
+ * @param result
* @return
*/
- private Long getTotalTaskNum(String processDefinitionId) {
+ private List<CustomerTaskVO> getAllUserTask(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);
+ result.total(allUserTaskElement.size());
+ if (startNum >= allUserTaskElement.size()) {
+ // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃
+ return new ArrayList<>();
+ }
+ if (StringUtils.isNotBlank(taskName)) {
+ // 妯℃嫙妯$硦鏌ヨ
+ allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList());
+ }
+ int end = Math.min(endNum, allUserTaskElement.size());
+ List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
+ // 鏌ュ嚭娴佺▼
+ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+ // 鍒ゆ柇浠诲姟鐘舵��
+ List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
+ CustomerTaskVO vo = new CustomerTaskVO();
+ vo.setProcessInsId(process.getId());
+ vo.setProcessDefId(processDefinitionId);
+ vo.setDeployId(process.getDeploymentId());
+ vo.setTaskName(userTask.getName());
+ vo.setProcessName(process.getProcessDefinitionName());
+ Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
+ if (Objects.isNull(task)) {
+ // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛岄渶瑕佷粠鍘嗗彶浠诲姟涓啀鎵句竴涓�
+ HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceId(process.getProcessInstanceId())
+ .taskDefinitionKey(userTask.getId())
+ .includeIdentityLinks()
+ .singleResult();
+ if (Objects.isNull(historicTask)) {
+ vo.setTaskStatus(TaskStatusEnum.NOT_START);
+ } else {
+ vo.setTaskStatus(TaskStatusEnum.FINISHED);
+ // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊�
+ vo.setTaskId(historicTask.getId());
+ vo.setExecutionId(historicTask.getExecutionId());
+ vo.setCreateTime(historicTask.getStartTime());
+ // 鏌ヨ瀹為檯澶勭悊浜�
+ long handlerUserId = Long.parseLong(historicTask.getAssignee());
+ SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
+ if (Objects.nonNull(handlerUser)) {
+ vo.setHandlerId(handlerUserId);
+ vo.setHandlerName(handlerUser.getNickName());
+ }
+ this.setPromoterAndHandler(vo, historicTask.getIdentityLinks());
+ }
+ } else {
+ vo.setTaskStatus(TaskStatusEnum.TODO);
+ vo.setTaskId(task.getId());
+ vo.setExecutionId(task.getExecutionId());
+ vo.setCreateTime(task.getCreateTime());
+ this.setPromoterAndHandler(vo, null);
+ }
+ return vo;
+ }).collect(Collectors.toList());
+ result.data(vos);
+ return vos;
+ }
+
+ /**
+ * 璁剧疆浠诲姟鐨勫彂璧蜂汉&澶勭悊浜�
+ *
+ * @param taskVO
+ * @param identityLinkInfos 濡傛灉鏄凡瀹屾垚鐨勪换鍔★紝鐢ㄨ繖涓幓鍙栧叧鑱旂殑鐢ㄦ埛/鐢ㄦ埛缁�
+ */
+ private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) {
+ // 娴佺▼鍙戣捣浜轰俊鎭�
+ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
+ .processInstanceId(taskVO.getProcessInsId())
+ .singleResult();
+ SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
+ taskVO.setPromoterId(startUser.getUserId());
+ taskVO.setPromoterName(startUser.getNickName());
+ taskVO.setPromoterUnitId(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptId() : null);
+ taskVO.setPromoterUnitName(Objects.nonNull(startUser.getDept()) ? startUser.getDept().getDeptName() : "");
+ // 娴佺▼澶勭悊浜轰俊鎭�
+ if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) {
+ List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskVO.getTaskId());
+ for (IdentityLink identityLink : identityLinksForTask) {
+ // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+ if (StringUtils.isNotBlank(identityLink.getUserId())) {
+ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
+ if (Objects.nonNull(sysUser)) {
+ taskVO.setHandlerId(sysUser.getUserId());
+ if (Objects.nonNull(sysUser.getDept())) {
+ taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
+ taskVO.setHandlerUnitName(sysUser.getDept().getDeptName());
+ }
+ taskVO.setHandlerName(sysUser.getNickName());
+ }
+ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
+ } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+ SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
+ if (Objects.nonNull(role)) {
+ taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
+ taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
+ taskVO.setHandlerName("鏆傛湭澶勭悊");
+ taskVO.setHandlerId(null);
+ }
+ }
+ }
+ } else if (TaskStatusEnum.FINISHED.equals(taskVO.getTaskStatus())){
+ for (IdentityLinkInfo identityLink : identityLinkInfos) {
+ // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+ if (StringUtils.isNotBlank(identityLink.getUserId())) {
+ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
+ if (Objects.nonNull(sysUser)) {
+// taskVO.setHandlerId(sysUser.getUserId());
+ if (Objects.nonNull(sysUser.getDept())) {
+ taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
+ taskVO.setHandlerUnitName(sysUser.getDept().getDeptName());
+ }
+// taskVO.setHandlerName(sysUser.getNickName());
+ }
+ // 缁戝畾鐨勬槸瑙掕壊锛屾煡鍑鸿鑹插悕绉�
+ } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+ SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
+ if (Objects.nonNull(role)) {
+ taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
+ taskVO.setHandlerUnitName("鐢辨嫢鏈夎鑹诧細銆�" + role.getRoleName() + "銆戠殑浜哄鐞�");
+// taskVO.setHandlerName(role.getRoleName());
+// taskVO.setHandlerId(null);
+ }
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 鑾峰彇鏌愪釜娴佺▼鐨勬墍鏈変换鍔¤妭鐐�
+ *
+ * @param processDefinitionId
+ * @return
+ */
+ private List<UserTask> getAllUserTaskElement(String processDefinitionId) {
// 鑾峰彇娴佺▼瀹氫箟
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
@@ -273,15 +446,21 @@
throw new IllegalStateException("鏃犳硶鑾峰彇娴佺▼瀵硅薄: " + processDefinition.getKey());
}
- // 璁$畻浠诲姟鑺傜偣鏁伴噺
- Long taskNodeCount = 0L;
List<FlowElement> flowElements = process.getFlowElements().stream().toList();
- for (FlowElement flowElement : flowElements) {
- if (flowElement instanceof org.flowable.bpmn.model.UserTask) {
- taskNodeCount++;
- }
- }
- return taskNodeCount;
+ List<UserTask> userTaskElements = flowElements.stream().filter(flowElement -> flowElement instanceof UserTask).map(flowElement -> {
+ return (UserTask) flowElement;
+ }).collect(Collectors.toList());
+ return userTaskElements;
+ }
+
+ /**
+ * 鑾峰彇娴佺▼鑺傜偣鏁帮紙鎬讳换鍔℃暟锛屼笉鍖呭惈寮�濮嬨�佺粨鏉熺瓑鐗规畩鐨勶紝鍙粺璁serTask绫诲瀷鐨勶級
+ *
+ * @param processDefinitionId 娴佺▼瀹氫箟id
+ * @return
+ */
+ private Long getTotalTaskNum(String processDefinitionId) {
+ return Long.valueOf(this.getAllUserTaskElement(processDefinitionId).size());
}
/**
--
Gitblit v1.8.0