From 8a055c381ebe238ffd0be64006d9adedf939690a Mon Sep 17 00:00:00 2001 From: konbai <1527468660@qq.com> Date: Sat, 11 Jun 2022 01:36:04 +0800 Subject: [PATCH] =?UTF-8?q?add=20--=20=E6=96=B0=E5=A2=9E=20=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=AD=BE=E6=94=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/WfProcessController.java | 8 + .../ruoyi/workflow/domain/bo/WfProcessBo.java | 19 +++ .../workflow/service/IWfProcessService.java | 7 + .../service/impl/WfProcessServiceImpl.java | 50 ++++++ .../service/impl/WfTaskServiceImpl.java | 11 +- ruoyi-ui/src/api/workflow/process.js | 9 ++ ruoyi-ui/src/api/workflow/todo.js | 9 ++ ruoyi-ui/src/router/index.js | 6 + ruoyi-ui/src/views/workflow/work/claim.vue | 142 ++++++++++++++++++ 9 files changed, 258 insertions(+), 3 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/workflow/domain/bo/WfProcessBo.java create mode 100644 ruoyi-ui/src/views/workflow/work/claim.vue 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 4aabcf3d..c3db08b5 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 @@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.workflow.domain.bo.WfCopyBo; +import com.ruoyi.workflow.domain.bo.WfProcessBo; import com.ruoyi.workflow.domain.vo.WfCopyVo; import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import com.ruoyi.workflow.domain.vo.WfTaskVo; @@ -67,6 +68,13 @@ public class WfProcessController extends BaseController { return processService.queryPageTodoProcessList(pageQuery); } + @ApiOperation(value = "获取待签列表", response = WfTaskVo.class) + @SaCheckPermission("workflow:process:claimList") + @GetMapping(value = "/claimList") + public TableDataInfo claimProcess(WfProcessBo processBo, PageQuery pageQuery) { + return processService.queryPageClaimProcessList(processBo, pageQuery); + } + @ApiOperation(value = "获取已办列表", response = WfTaskVo.class) @SaCheckPermission("workflow:process:finishedList") @GetMapping(value = "/finishedList") diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/domain/bo/WfProcessBo.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/domain/bo/WfProcessBo.java new file mode 100644 index 00000000..8b24ceb9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/domain/bo/WfProcessBo.java @@ -0,0 +1,19 @@ +package com.ruoyi.workflow.domain.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 流程业务对象 + * + * @author KonBAI + * @createTime 2022/6/11 01:15 + */ +@Data +@ApiModel("流程业务对象") +public class WfProcessBo { + + @ApiModelProperty("流程名称") + private String processName; +} 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 23babb1f..84d52d6d 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 @@ -2,6 +2,7 @@ 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.WfProcessBo; import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import com.ruoyi.workflow.domain.vo.WfTaskVo; @@ -46,6 +47,12 @@ public interface IWfProcessService { */ TableDataInfo queryPageTodoProcessList(PageQuery pageQuery); + /** + * 查询待签任务列表 + * @param pageQuery 分页参数 + */ + TableDataInfo queryPageClaimProcessList(WfProcessBo processBo, PageQuery pageQuery); + /** * 查询已办任务列表 * @param pageQuery 分页参数 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 2bc1f2c0..8f7c55d0 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 @@ -16,6 +16,7 @@ import com.ruoyi.flowable.common.constant.TaskConstants; import com.ruoyi.flowable.factory.FlowServiceFactory; import com.ruoyi.flowable.utils.TaskUtils; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.workflow.domain.bo.WfProcessBo; import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import com.ruoyi.workflow.domain.vo.WfTaskVo; import com.ruoyi.workflow.service.IWfProcessService; @@ -243,6 +244,55 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce return TableDataInfo.build(page); } + @Override + public TableDataInfo queryPageClaimProcessList(WfProcessBo processBo, PageQuery pageQuery) { + Page page = new Page<>(); + Long userId = LoginHelper.getUserId(); + TaskQuery taskQuery = taskService.createTaskQuery() + .active() + .includeProcessVariables() + .taskCandidateUser(userId.toString()) + .taskCandidateGroupIn(TaskUtils.getCandidateGroup()) + .orderByTaskCreateTime().desc(); + if (StringUtils.isNotBlank(processBo.getProcessName())) { + taskQuery.processDefinitionNameLike("%" + processBo.getProcessName() + "%"); + } + 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()); + + flowList.add(flowTask); + } + page.setRecords(flowList); + return TableDataInfo.build(page); + } + @Override public TableDataInfo queryPageFinishedProcessList(PageQuery pageQuery) { Page page = new Page<>(); 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 6571bd1d..86b8604c 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 @@ -16,6 +16,7 @@ import com.ruoyi.flowable.factory.FlowServiceFactory; import com.ruoyi.flowable.flow.CustomProcessDiagramGenerator; import com.ruoyi.flowable.flow.FindNextNodeUtil; import com.ruoyi.flowable.flow.FlowableUtils; +import com.ruoyi.flowable.utils.TaskUtils; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.workflow.domain.bo.WfTaskBo; @@ -375,12 +376,16 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ /** * 认领/签收任务 * - * @param bo 请求实体参数 + * @param taskBo 请求实体参数 */ @Override @Transactional(rollbackFor = Exception.class) - public void claim(WfTaskBo bo) { - taskService.claim(bo.getTaskId(), bo.getUserId()); + public void claim(WfTaskBo taskBo) { + Task task = taskService.createTaskQuery().taskId(taskBo.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + throw new ServiceException("任务不存在"); + } + taskService.claim(taskBo.getTaskId(), TaskUtils.getUserId()); } /** diff --git a/ruoyi-ui/src/api/workflow/process.js b/ruoyi-ui/src/api/workflow/process.js index e8ba5801..f19c70c4 100644 --- a/ruoyi-ui/src/api/workflow/process.js +++ b/ruoyi-ui/src/api/workflow/process.js @@ -37,6 +37,15 @@ export function listTodoProcess(query) { }) } +// 我待签的流程 +export function listClaimProcess(query) { + return request({ + url: '/workflow/process/claimList', + method: 'get', + params: query + }) +} + // 我已办的流程 export function listFinishedProcess(query) { return request({ diff --git a/ruoyi-ui/src/api/workflow/todo.js b/ruoyi-ui/src/api/workflow/todo.js index 41318e77..27387ced 100644 --- a/ruoyi-ui/src/api/workflow/todo.js +++ b/ruoyi-ui/src/api/workflow/todo.js @@ -45,6 +45,15 @@ export function rejectTask(data) { }) } +// 签收任务 +export function claimTask(data) { + return request({ + url: '/workflow/task/claim', + method: 'post', + data: data + }) +} + // 可退回任务列表 export function returnList(data) { return request({ diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 2945a1b0..23433381 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -104,6 +104,12 @@ export const constantRoutes = [ name: 'own', meta: { title: '我的流程', icon: '' } }, + { + path: 'todo', + component: () => import('@/views/workflow/work/todo'), + name: 'todo', + meta: { title: '代办任务', icon: '' } + }, { path: 'detail', component: () => import('@/views/workflow/work/detail'), diff --git a/ruoyi-ui/src/views/workflow/work/claim.vue b/ruoyi-ui/src/views/workflow/work/claim.vue new file mode 100644 index 00000000..f8ea5d95 --- /dev/null +++ b/ruoyi-ui/src/views/workflow/work/claim.vue @@ -0,0 +1,142 @@ + + + + +