diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfDefinitionController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfDefinitionController.java index 532aa9b9..68a8e19e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfDefinitionController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfDefinitionController.java @@ -23,7 +23,6 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; /** * 工作流程定义 @@ -122,17 +121,6 @@ public class WfDefinitionController extends BaseController { return R.ok("导入成功"); } - @Deprecated - @ApiOperation(value = "根据流程定义id启动流程实例") - @SaCheckPermission("workflow:definition:start") - @PostMapping("/start/{procDefId}") - public R start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, - @ApiParam(value = "变量集合,json对象") @RequestBody Map variables) { - flowDefinitionService.startProcessInstanceById(procDefId, variables); - return R.ok("流程启动成功"); - - } - @ApiOperation(value = "激活或挂起流程定义") @SaCheckPermission("workflow:definition:update") @PutMapping(value = "/updateState") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java index 2e212486..b09230a7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java @@ -50,8 +50,23 @@ public class WfProcessController extends BaseController { } @ApiOperation(value = "我拥有的流程", response = WfTaskVo.class) - @GetMapping(value = "/own") + @SaCheckPermission("workflow:process:ownList") + @GetMapping(value = "/ownList") public TableDataInfo ownProcess(PageQuery pageQuery) { return processService.queryPageOwnProcessList(pageQuery); } + + @ApiOperation(value = "获取待办列表", response = WfTaskVo.class) + @SaCheckPermission("workflow:process:todoList") + @GetMapping(value = "/todoList") + public TableDataInfo todoProcess(PageQuery pageQuery) { + return processService.queryPageTodoProcessList(pageQuery); + } + + @ApiOperation(value = "获取已办列表", response = WfTaskVo.class) + @SaCheckPermission("workflow:process:finishedList") + @GetMapping(value = "/finishedList") + public TableDataInfo finishedProcess(PageQuery pageQuery) { + return processService.queryPageFinishedProcessList(pageQuery); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java index 6482b92c..a9a57799 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfTaskController.java @@ -37,13 +37,6 @@ public class WfTaskController { private final IWfTaskService flowTaskService; - @Deprecated - @ApiOperation(value = "我发起的流程", response = WfTaskVo.class) - @GetMapping(value = "/myProcess") - public TableDataInfo myProcess(PageQuery pageQuery) { - return flowTaskService.myProcess(pageQuery); - } - @ApiOperation(value = "取消申请", response = WfTaskVo.class) @PostMapping(value = "/stopProcess") public R stopProcess(@RequestBody WfTaskBo bo) { @@ -58,6 +51,7 @@ public class WfTaskController { return R.ok(); } + @Deprecated @ApiOperation(value = "获取待办列表", response = WfTaskVo.class) @GetMapping(value = "/todoList") public TableDataInfo todoList(PageQuery pageQuery) { @@ -71,13 +65,6 @@ public class WfTaskController { return flowTaskService.finishedList(pageQuery); } - - @ApiOperation(value = "流程历史流转记录", response = WfTaskVo.class) - @GetMapping(value = "/flowRecord") - public R flowRecord(String procInsId, String deployId) { - return R.ok(flowTaskService.flowRecord(procInsId, deployId)); - } - @ApiOperation(value = "获取流程变量", response = WfTaskVo.class) @GetMapping(value = "/processVariables/{taskId}") public R processVariables(@ApiParam(value = "流程任务Id") @PathVariable(value = "taskId") String taskId) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfDefinitionService.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfDefinitionService.java index d90b2f4f..e36c5f50 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfDefinitionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfDefinitionService.java @@ -6,7 +6,6 @@ import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import java.io.IOException; import java.io.InputStream; -import java.util.Map; /** * @author KonBAI @@ -48,16 +47,6 @@ public interface IWfDefinitionService { */ String readXml(String definitionId) throws IOException; - /** - * 根据流程定义ID启动流程实例 - * - * @param procDefId - * @param variables - * @return - */ - - void startProcessInstanceById(String procDefId, Map variables); - /** * 激活或挂起流程定义 diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfInstanceService.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfInstanceService.java index e4d154ad..817f1b53 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfInstanceService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfInstanceService.java @@ -2,9 +2,7 @@ package com.ruoyi.workflow.service; import com.ruoyi.workflow.domain.bo.WfTaskBo; import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.task.api.Task; -import java.util.List; import java.util.Map; /** @@ -13,8 +11,6 @@ import java.util.Map; */ public interface IWfInstanceService { - List queryListByInstanceId(String instanceId); - /** * 结束流程实例 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java index 095b5d5c..23babb1f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfProcessService.java @@ -40,4 +40,15 @@ public interface IWfProcessService { */ TableDataInfo queryPageOwnProcessList(PageQuery pageQuery); + /** + * 查询代办任务列表 + * @param pageQuery 分页参数 + */ + TableDataInfo queryPageTodoProcessList(PageQuery pageQuery); + + /** + * 查询已办任务列表 + * @param pageQuery 分页参数 + */ + TableDataInfo queryPageFinishedProcessList(PageQuery pageQuery); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java index 46f04d53..ffdfe7f6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/IWfTaskService.java @@ -2,13 +2,12 @@ package com.ruoyi.workflow.service; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.workflow.domain.bo.WfTaskBo; import com.ruoyi.workflow.domain.dto.WfNextDto; import com.ruoyi.workflow.domain.vo.WfTaskVo; -import com.ruoyi.workflow.domain.bo.WfTaskBo; import com.ruoyi.workflow.domain.vo.WfViewerVo; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.task.api.Task; import java.io.InputStream; import java.util.List; @@ -86,14 +85,6 @@ public interface IWfTaskService { */ void transferTask(WfTaskBo bo); - /** - * 我发起的流程 - * - * @return - */ - @Deprecated - TableDataInfo myProcess(PageQuery pageQuery); - /** * 取消申请 * @param bo @@ -124,23 +115,6 @@ public interface IWfTaskService { */ TableDataInfo finishedList(PageQuery pageQuery); - /** - * 流程历史流转记录 - * - * @param procInsId 流程实例Id - * @return - */ - @Deprecated - Map flowRecord(String procInsId, String deployId); - - /** - * 根据任务ID查询挂载的表单信息 - * - * @param taskId 任务Id - * @return - */ - Task getTaskForm(String taskId); - /** * 获取流程过程图 * @param processId diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfDefinitionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfDefinitionServiceImpl.java index ba18cf9b..ffc20290 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfDefinitionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfDefinitionServiceImpl.java @@ -1,13 +1,8 @@ package com.ruoyi.workflow.service.impl; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.helper.LoginHelper; -import com.ruoyi.flowable.common.constant.ProcessConstants; -import com.ruoyi.flowable.common.enums.FlowComment; import com.ruoyi.flowable.factory.FlowServiceFactory; import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import com.ruoyi.workflow.domain.vo.WfFormVo; @@ -21,16 +16,17 @@ import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.DeploymentBuilder; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinitionQuery; -import org.flowable.engine.runtime.ProcessInstance; import org.flowable.image.impl.DefaultProcessDiagramGenerator; -import org.flowable.task.api.Task; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -196,46 +192,6 @@ public class WfDefinitionServiceImpl extends FlowServiceFactory implements IWfDe } - /** - * 根据流程定义ID启动流程实例 - * - * @param procDefId 流程定义Id - * @param variables 流程变量 - * @return - */ - @Deprecated - @Override - @Transactional(rollbackFor = Exception.class) - public void startProcessInstanceById(String procDefId, Map variables) { - try { - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() - .processDefinitionId(procDefId).singleResult(); - if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { - throw new ServiceException("流程已被挂起,请先激活流程"); - } -// variables.put("skip", true); -// variables.put(ProcessConstants.FLOWABLE_SKIP_EXPRESSION_ENABLED, true); - // 设置流程发起人Id到流程中 - String userIdStr = LoginHelper.getUserId().toString(); - identityService.setAuthenticatedUserId(userIdStr); - variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr); - ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); - // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题? - Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); - if (Objects.nonNull(task)) { - if (!StrUtil.equalsAny(task.getAssignee(), userIdStr)) { - throw new ServiceException("数据验证失败,该工作流第一个用户任务的指派人并非当前用户,不能执行该操作!"); - } - taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), LoginHelper.getNickName() + "发起流程申请"); - // taskService.setAssignee(task.getId(), userIdStr); - taskService.complete(task.getId(), variables); - } - } catch (Exception e) { - e.printStackTrace(); - throw new ServiceException("流程启动错误"); - } - } - /** * 激活或挂起流程定义 diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java index 5ae39498..9c887ab8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java @@ -24,7 +24,6 @@ import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.task.Comment; import org.flowable.identitylink.api.history.HistoricIdentityLink; -import org.flowable.task.api.Task; import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,11 +45,6 @@ public class WfInstanceServiceImpl extends FlowServiceFactory implements IWfInst private final ISysUserService userService; private final ISysRoleService roleService; - @Override - public List queryListByInstanceId(String instanceId) { - return taskService.createTaskQuery().processInstanceId(instanceId).active().list(); - } - /** * 结束流程实例 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java index 19e6bef1..d3897475 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java @@ -1,8 +1,12 @@ package com.ruoyi.workflow.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.BetweenFormatter; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; @@ -10,6 +14,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.flowable.common.constant.ProcessConstants; import com.ruoyi.flowable.factory.FlowServiceFactory; +import com.ruoyi.system.service.ISysUserService; import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import com.ruoyi.workflow.domain.vo.WfTaskVo; import com.ruoyi.workflow.service.IWfProcessService; @@ -22,7 +27,9 @@ import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinitionQuery; import org.flowable.engine.runtime.ProcessInstance; 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 org.springframework.transaction.annotation.Transactional; @@ -40,6 +47,7 @@ import java.util.Objects; public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProcessService { private final IWfTaskService wfTaskService; + private final ISysUserService userService; /** * 流程定义列表 @@ -185,6 +193,111 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce return TableDataInfo.build(page); } + @Override + public TableDataInfo queryPageTodoProcessList(PageQuery pageQuery) { + Page page = new Page<>(); + Long userId = LoginHelper.getUserId(); + TaskQuery taskQuery = taskService.createTaskQuery() + .active() + .includeProcessVariables() + .taskCandidateOrAssigned(userId.toString()) + .orderByTaskCreateTime().desc(); + page.setTotal(taskQuery.count()); + int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1); + List taskList = taskQuery.listPage(offset, pageQuery.getPageSize()); + List flowList = new ArrayList<>(); + for (Task task : taskList) { + WfTaskVo flowTask = new WfTaskVo(); + // 当前流程信息 + flowTask.setTaskId(task.getId()); + flowTask.setTaskDefKey(task.getTaskDefinitionKey()); + flowTask.setCreateTime(task.getCreateTime()); + flowTask.setProcDefId(task.getProcessDefinitionId()); + flowTask.setTaskName(task.getName()); + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(task.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setProcInsId(task.getProcessInstanceId()); + + // 流程发起人信息 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .singleResult(); + SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); + flowTask.setStartUserId(startUser.getNickName()); + flowTask.setStartUserName(startUser.getNickName()); + flowTask.setStartDeptName(startUser.getDept().getDeptName()); + + // 流程变量 + flowTask.setProcVars(this.getProcessVariables(task.getId())); + + flowList.add(flowTask); + } + page.setRecords(flowList); + return TableDataInfo.build(page); + } + + @Override + public TableDataInfo queryPageFinishedProcessList(PageQuery pageQuery) { + Page page = new Page<>(); + Long userId = LoginHelper.getUserId(); + HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables() + .finished() + .taskAssignee(userId.toString()) + .orderByHistoricTaskInstanceEndTime() + .desc(); + int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1); + List historicTaskInstanceList = taskInstanceQuery.listPage(offset, pageQuery.getPageSize()); + List hisTaskList = Lists.newArrayList(); + for (HistoricTaskInstance histTask : historicTaskInstanceList) { + WfTaskVo flowTask = new WfTaskVo(); + // 当前流程信息 + flowTask.setTaskId(histTask.getId()); + // 审批人员信息 + flowTask.setCreateTime(histTask.getCreateTime()); + flowTask.setFinishTime(histTask.getEndTime()); + flowTask.setDuration(DateUtil.formatBetween(histTask.getDurationInMillis(), BetweenFormatter.Level.SECOND)); + flowTask.setProcDefId(histTask.getProcessDefinitionId()); + flowTask.setTaskDefKey(histTask.getTaskDefinitionKey()); + flowTask.setTaskName(histTask.getName()); + + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(histTask.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setProcInsId(histTask.getProcessInstanceId()); + flowTask.setHisProcInsId(histTask.getProcessInstanceId()); + + // 流程发起人信息 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(histTask.getProcessInstanceId()) + .singleResult(); + SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); + flowTask.setStartUserId(startUser.getNickName()); + flowTask.setStartUserName(startUser.getNickName()); + flowTask.setStartDeptName(startUser.getDept().getDeptName()); + + // 流程变量 + flowTask.setProcVars(this.getProcessVariables(histTask.getId())); + + hisTaskList.add(flowTask); + } + page.setTotal(taskInstanceQuery.count()); + page.setRecords(hisTaskList); +// Map result = new HashMap<>(); +// result.put("result",page); +// result.put("finished",true); + return TableDataInfo.build(page); + } + /** * 扩展参数构建 * @param variables 扩展参数 @@ -194,4 +307,23 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce identityService.setAuthenticatedUserId(userIdStr); variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr); } + + + /** + * 获取流程变量 + * + * @param taskId 任务ID + * @return 流程变量 + */ + private Map getProcessVariables(String taskId) { + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables() + .finished() + .taskId(taskId) + .singleResult(); + if (Objects.nonNull(historicTaskInstance)) { + return historicTaskInstance.getProcessVariables(); + } + return taskService.getVariables(taskId); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java index 35150dea..9d5be68f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java @@ -13,7 +13,6 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; -import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.flowable.common.constant.ProcessConstants; import com.ruoyi.flowable.common.enums.FlowComment; @@ -24,12 +23,9 @@ import com.ruoyi.flowable.flow.FlowableUtils; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.workflow.domain.bo.WfTaskBo; -import com.ruoyi.workflow.domain.dto.WfCommentDto; import com.ruoyi.workflow.domain.dto.WfNextDto; -import com.ruoyi.workflow.domain.vo.WfFormVo; import com.ruoyi.workflow.domain.vo.WfTaskVo; import com.ruoyi.workflow.domain.vo.WfViewerVo; -import com.ruoyi.workflow.service.IWfDeployFormService; import com.ruoyi.workflow.service.IWfTaskService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -43,13 +39,9 @@ import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricActivityInstanceQuery; import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.history.HistoricProcessInstanceQuery; -import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.Execution; import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.engine.task.Comment; -import org.flowable.identitylink.api.history.HistoricIdentityLink; import org.flowable.image.ProcessDiagramGenerator; import org.flowable.task.api.DelegationState; import org.flowable.task.api.Task; @@ -79,8 +71,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ private final ISysRoleService sysRoleService; - private final IWfDeployFormService deployFormService; - /** * 完成任务 * @@ -457,60 +447,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ taskService.setAssignee(bo.getTaskId(), bo.getUserId()); } - /** - * 我发起的流程 - * - * @return - */ - @Override - public TableDataInfo myProcess(PageQuery pageQuery) { - Page page = new Page<>(); - Long userId = LoginHelper.getUserId(); - HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() - .startedBy(userId.toString()) - .orderByProcessInstanceStartTime() - .desc(); - int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1); - List historicProcessInstances = historicProcessInstanceQuery - .listPage(offset, pageQuery.getPageSize()); - page.setTotal(historicProcessInstanceQuery.count()); - List taskVoList = new ArrayList<>(); - for (HistoricProcessInstance hisIns : historicProcessInstances) { - WfTaskVo taskVo = new WfTaskVo(); - taskVo.setCreateTime(hisIns.getStartTime()); - taskVo.setFinishTime(hisIns.getEndTime()); - taskVo.setProcInsId(hisIns.getId()); - - // 计算耗时 - if (Objects.nonNull(hisIns.getEndTime())) { - long time = hisIns.getEndTime().getTime() - hisIns.getStartTime().getTime(); - taskVo.setDuration(getDate(time)); - } else { - long time = System.currentTimeMillis() - hisIns.getStartTime().getTime(); - taskVo.setDuration(getDate(time)); - } - // 流程部署实例信息 - Deployment deployment = repositoryService.createDeploymentQuery() - .deploymentId(hisIns.getDeploymentId()).singleResult(); - taskVo.setDeployId(hisIns.getDeploymentId()); - taskVo.setProcDefId(hisIns.getProcessDefinitionId()); - taskVo.setProcDefName(hisIns.getProcessDefinitionName()); - taskVo.setProcDefVersion(hisIns.getProcessDefinitionVersion()); - taskVo.setCategory(deployment.getCategory()); - // 当前所处流程 todo: 本地启动放开以下注释 - // List taskList = taskService.createTaskQuery().processInstanceId(hisIns.getId()).list(); - // if (CollectionUtils.isNotEmpty(taskList)) { - // flowTask.setTaskId(taskList.get(0).getId()); - // } else { - // List historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list(); - // flowTask.setTaskId(historicTaskInstance.get(0).getId()); - // } - taskVoList.add(taskVo); - } - page.setRecords(taskVoList); - return TableDataInfo.build(page); - } - /** * 取消申请 * @@ -723,97 +659,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ return t -> seen.add(keyExtractor.apply(t)); } - /** - * 流程历史流转记录 - * - * @param procInsId 流程实例Id - * @return - */ - @Override - public Map flowRecord(String procInsId, String deployId) { - Map map = new HashMap<>(); - if (StringUtils.isNotBlank(procInsId)) { - List list = historyService - .createHistoricActivityInstanceQuery() - .processInstanceId(procInsId) - .orderByHistoricActivityInstanceStartTime() - .desc().list(); - List hisFlowList = new ArrayList<>(); - for (HistoricActivityInstance histIns : list) { - if (StringUtils.isNotBlank(histIns.getTaskId())) { - WfTaskVo flowTask = new WfTaskVo(); - flowTask.setProcDefId(histIns.getProcessDefinitionId()); - flowTask.setTaskId(histIns.getTaskId()); - flowTask.setTaskName(histIns.getActivityName()); - flowTask.setCreateTime(histIns.getStartTime()); - flowTask.setFinishTime(histIns.getEndTime()); - if (StringUtils.isNotBlank(histIns.getAssignee())) { - SysUser sysUser = sysUserService.selectUserById(Long.parseLong(histIns.getAssignee())); - flowTask.setAssigneeId(sysUser.getUserId()); - flowTask.setAssigneeName(sysUser.getNickName()); - flowTask.setDeptName(sysUser.getDept().getDeptName()); - } - // 展示审批人员 - List linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getTaskId()); - StringBuilder stringBuilder = new StringBuilder(); - for (HistoricIdentityLink identityLink : linksForTask) { - if ("candidate".equals(identityLink.getType())) { - if (StringUtils.isNotBlank(identityLink.getUserId())) { - SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); - stringBuilder.append(sysUser.getNickName()).append(","); - } - if (StringUtils.isNotBlank(identityLink.getGroupId())) { - SysRole sysRole = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); - stringBuilder.append(sysRole.getRoleName()).append(","); - } - } - } - if (StringUtils.isNotBlank(stringBuilder)) { - flowTask.setCandidate(stringBuilder.substring(0, stringBuilder.length() - 1)); - } - - flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis())); - // 获取意见评论内容 - List commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId()); - commentList.forEach(comment -> { - if (histIns.getTaskId().equals(comment.getTaskId())) { - flowTask.setComment(WfCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); - } - }); - hisFlowList.add(flowTask); - } - } - map.put("flowList", hisFlowList); -// // 查询当前任务是否完成 -// List taskList = taskService.createTaskQuery().processInstanceId(procInsId).list(); -// if (CollectionUtils.isNotEmpty(taskList)) { -// map.put("finished", true); -// } else { -// map.put("finished", false); -// } - } - // 第一次申请获取初始化表单 - if (StringUtils.isNotBlank(deployId)) { - WfFormVo formVo = deployFormService.selectDeployFormByDeployId(deployId); - if (Objects.isNull(formVo)) { - throw new ServiceException("请先配置流程表单"); - } - map.put("formData", JsonUtils.parseObject(formVo.getContent(), Map.class)); - } - return map; - } - - /** - * 根据任务ID查询挂载的表单信息 - * - * @param taskId 任务Id - * @return - */ - @Override - public Task getTaskForm(String taskId) { - return taskService.createTaskQuery().taskId(taskId).singleResult(); - } - /** * 获取流程过程图 * diff --git a/ruoyi-ui/src/api/workflow/finished.js b/ruoyi-ui/src/api/workflow/finished.js index cae82088..69a1e8f2 100644 --- a/ruoyi-ui/src/api/workflow/finished.js +++ b/ruoyi-ui/src/api/workflow/finished.js @@ -1,23 +1,5 @@ import request from '@/utils/request' -// 查询已办任务列表 -export function finishedList(query) { - return request({ - url: '/workflow/task/finishedList', - method: 'get', - params: query - }) -} - -// 任务流转记录 -export function flowRecord(query) { - return request({ - url: '/workflow/task/flowRecord', - method: 'get', - params: query - }) -} - // 撤回任务 export function revokeProcess(data) { return request({ @@ -26,11 +8,3 @@ export function revokeProcess(data) { data: data }) } - -// 部署流程实例 -export function deployStart(deployId) { - return request({ - url: '/workflow/process/startFlow/' + deployId, - method: 'get', - }) -} diff --git a/ruoyi-ui/src/api/workflow/process.js b/ruoyi-ui/src/api/workflow/process.js index 0a8cd08e..3ba65436 100644 --- a/ruoyi-ui/src/api/workflow/process.js +++ b/ruoyi-ui/src/api/workflow/process.js @@ -22,7 +22,25 @@ export function startProcess(processDefId, data) { // 我的发起的流程 export function listOwnProcess(query) { return request({ - url: '/workflow/process/own', + url: '/workflow/process/ownList', + method: 'get', + params: query + }) +} + +// 我待办的流程 +export function listTodoProcess(query) { + return request({ + url: '/workflow/process/todoList', + method: 'get', + params: query + }) +} + +// 我已办的流程 +export function listFinishedProcess(query) { + return request({ + url: '/workflow/process/finishedList', method: 'get', params: query }) diff --git a/ruoyi-ui/src/api/workflow/todo.js b/ruoyi-ui/src/api/workflow/todo.js index 56f94384..41318e77 100644 --- a/ruoyi-ui/src/api/workflow/todo.js +++ b/ruoyi-ui/src/api/workflow/todo.js @@ -1,14 +1,5 @@ import request from '@/utils/request' -// 查询待办任务列表 -export function todoList(query) { - return request({ - url: '/workflow/task/todoList', - method: 'get', - params: query - }) -} - // 完成任务 export function complete(data) { return request({ diff --git a/ruoyi-ui/src/views/workflow/work/finished.vue b/ruoyi-ui/src/views/workflow/work/finished.vue index ca78b2dc..a7606630 100644 --- a/ruoyi-ui/src/views/workflow/work/finished.vue +++ b/ruoyi-ui/src/views/workflow/work/finished.vue @@ -82,7 +82,8 @@