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 | 507 +++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 443 insertions(+), 64 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 e109539..ab53566 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,24 @@
package com.ycl.service.impl;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.ycl.common.constant.ProcessConstants;
+import com.ycl.common.core.domain.AjaxResult;
+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;
import com.ycl.service.ProjectProcessService;
import com.ycl.common.base.Result;
@@ -9,13 +26,30 @@
import com.ycl.domain.form.ProjectProcessForm;
import com.ycl.domain.vo.ProjectProcessVO;
import com.ycl.domain.query.ProjectProcessQuery;
+import com.ycl.system.service.ISysRoleService;
+import com.ycl.system.service.ISysUserService;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.bpmn.model.*;
+import org.flowable.bpmn.model.Process;
+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;
+import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import com.ycl.framework.utils.PageUtil;
import org.springframework.beans.BeanUtils;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -29,56 +63,14 @@
public class ProjectProcessServiceImpl extends ServiceImpl<ProjectProcessMapper, ProjectProcess> implements ProjectProcessService {
private final ProjectProcessMapper projectProcessMapper;
-
- /**
- * 娣诲姞
- * @param form
- * @return
- */
- @Override
- public Result add(ProjectProcessForm form) {
- ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null);
- baseMapper.insert(entity);
- return Result.ok("娣诲姞鎴愬姛");
- }
-
- /**
- * 淇敼
- * @param form
- * @return
- */
- @Override
- public Result update(ProjectProcessForm form) {
- ProjectProcess entity = baseMapper.selectById(form.getId());
-
- // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
- Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
- BeanUtils.copyProperties(form, entity);
- baseMapper.updateById(entity);
- return Result.ok("淇敼鎴愬姛");
- }
-
- /**
- * 鎵归噺鍒犻櫎
- * @param ids
- * @return
- */
- @Override
- public Result remove(List<String> ids) {
- baseMapper.deleteBatchIds(ids);
- return Result.ok("鍒犻櫎鎴愬姛");
- }
-
- /**
- * id鍒犻櫎
- * @param id
- * @return
- */
- @Override
- public Result removeById(String id) {
- baseMapper.deleteById(id);
- return Result.ok("鍒犻櫎鎴愬姛");
- }
+ private final RuntimeService runtimeService;
+ private final TaskService taskService;
+ private final IdentityService identityService;
+ private final RepositoryService repositoryService;
+ private final ProjectInfoMapper projectInfoMapper;
+ private final HistoryService historyService;
+ private final ISysUserService sysUserService;
+ private final ISysRoleService sysRoleService;
/**
* 鍒嗛〉鏌ヨ
@@ -92,25 +84,412 @@
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
- /**
- * 鏍规嵁id鏌ユ壘
- * @param id
- * @return
- */
@Override
- public Result detail(Integer id) {
- ProjectProcessVO vo = baseMapper.getById(id);
- Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
- return Result.ok().data(vo);
+ 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 all() {
- List<ProjectProcess> entities = baseMapper.selectList(null);
- return Result.ok().data(entities);
+ public Result detail(Long projectId, String processDefId) {
+ // 椤圭洰淇℃伅
+ ProjectInfo projectInfo = new LambdaQueryChainWrapper<>(projectInfoMapper)
+ .select(ProjectInfo::getId, ProjectInfo::getProjectName, ProjectInfo::getProjectCode)
+ .eq(ProjectInfo::getId, projectId)
+ .one();
+
+ if (Objects.isNull(projectInfo)) {
+ return Result.error("璇ラ」鐩笉瀛樺湪");
+ }
+
+ ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper)
+ .eq(ProjectProcess::getProjectId, projectId)
+ .eq(ProjectProcess::getProcessDefId, processDefId)
+ .one();
+ if (Objects.isNull(projectProcess)) {
+ return Result.error("璇ラ」鐩湭璁剧疆娴佺▼");
+ }
+
+ ProjectProcessDetailVO detail = new ProjectProcessDetailVO();
+ detail.setProjectId(projectId);
+ detail.setProjectName(projectInfo.getProjectName());
+ detail.setProjectCode(projectInfo.getProjectCode());
+
+ ProjectProcessDetailVO.TaskStatistics taskStatistics = new ProjectProcessDetailVO.TaskStatistics();
+ // 鐘舵�佺粺璁�
+ taskStatistics.setTotalTaskNum(this.getTotalTaskNum(processDefId));
+ taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId()));
+// taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId()));
+ taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId()));
+ detail.setStatistics(taskStatistics);
+
+ Result result = Result.ok();
+
+ // 浠e姙浠诲姟
+ this.getTodoTaskList(projectProcess.getProcessInsId(),"", 5, 1, result);
+ return result.data(detail);
+ }
+
+ @Override
+ 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.isNull(projectProcess)) {
+ throw new RuntimeException("璇ラ」鐩湭閰嶇疆娴佺▼");
+ }
+ 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;
+ }
+
+ private void getTodoTaskList(String processInsId, String taskName, int pageSize, int pageNum, Result result) {
+ TaskQuery taskQuery = taskService.createTaskQuery()
+ .active()
+ .processInstanceId(processInsId)
+ .includeProcessVariables()
+ .orderByTaskCreateTime().desc();
+
+// TODO 浼犲叆鍚嶇О鏌ヨ涓嶅埌鏁版嵁?
+ if (StringUtils.isNotBlank(taskName)) {
+ taskQuery.processDefinitionNameLike(taskName);
+ }
+ result.total(taskQuery.count());
+ List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize);
+ 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());
+
+ // 娴佺▼鍙戣捣浜轰俊鎭�
+ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
+ .processInstanceId(task.getProcessInstanceId())
+ .singleResult();
+ SysUser startUser = sysUserService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
+ 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) {
+ // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+ 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);
+ }
+ }
+ }
+ vos.add(taskVO);
+ }
+ result.put("taskList", vos);
+ }
+
+ /**
+ * 鑾峰彇鎵�鏈変换鍔�
+ *
+ * @param processDefinitionId 娴佺▼杩愯id
+ * @param processInsId 娴佺▼瀹炰緥id
+ * @param pageNum
+ * @param pageSize
+ * @param result
+ * @return
+ */
+ 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)
+ .singleResult();
+
+ if (processDefinition == null) {
+ throw new IllegalArgumentException("娴佺▼瀹氫箟ID鏃犳晥: " + processDefinitionId);
+ }
+
+ // 鑾峰彇BPMN妯″瀷
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
+ if (bpmnModel == null) {
+ throw new IllegalStateException("鏃犳硶鑾峰彇BPMN妯″瀷: " + processDefinitionId);
+ }
+
+ // 鑾峰彇娴佺▼瀵硅薄
+ Process process = bpmnModel.getProcessById(processDefinition.getKey());
+ if (process == null) {
+ throw new IllegalStateException("鏃犳硶鑾峰彇娴佺▼瀵硅薄: " + processDefinition.getKey());
+ }
+
+ List<FlowElement> flowElements = process.getFlowElements().stream().toList();
+ 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());
+ }
+
+ /**
+ * 鑾峰彇娴佺▼鍓╀綑鏈畬鎴愮殑浠诲姟鏁�
+ *
+ * @param processInstanceId
+ * @return
+ */
+ private Long getNotFinishedTaskNum(String processInstanceId) {
+ return historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).processUnfinished().count();
+ }
+
+ /**
+ * 鑾峰彇寰呭姙浠诲姟鏁�
+ *
+ * @param processInstanceId
+ * @return
+ */
+ private Long getTodoTaskNum(String processInstanceId) {
+ return taskService.createTaskQuery().active().processInstanceId(processInstanceId).count();
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鐜妭鐨勬墍鏈変换鍔℃暟
+ *
+ * @param processInstanceId
+ * @return
+ */
+ private List<Task> getCurrentNodeTaskList(String processInstanceId) {
+ return taskService.createTaskQuery().processDefinitionId(processInstanceId).list();
}
}
--
Gitblit v1.8.0