diff --git a/README.md b/README.md index ee4c8fc..ad425e5 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ 访问链接:http://129.211.46.183/ +#####为了方便体验,请勿删除和改动初始化的几个流程和表单,感谢!有其它流程实现,请自行定义新流程、表单。 + ## 工作流交流群 QQ群: [![加入QQ群](https://img.shields.io/badge/782924350-blue.svg)](https://jq.qq.com/?_wv=1027&k=2zE87c2G) 点击按钮入群。 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java similarity index 97% rename from ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java rename to ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java index 0df4920..2b81805 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.constant; +package com.ruoyi.flowable.common.constant; /** * 流程常量信息 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/FlowComment.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/enums/FlowComment.java similarity index 85% rename from ruoyi-common/src/main/java/com/ruoyi/common/enums/FlowComment.java rename to ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/enums/FlowComment.java index 91f7908..7065dfa 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/FlowComment.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/enums/FlowComment.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.enums; +package com.ruoyi.flowable.common.enums; /** * 流程意见类型 @@ -15,7 +15,8 @@ public enum FlowComment { REBACK("2", "退回意见"), REJECT("3", "驳回意见"), DELEGATE("4", "委派意见"), - ASSIGN("5", "转办意见"); + ASSIGN("5", "转办意见"), + STOP("6", "终止流程"); /** * 类型 diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java index 5c88db7..4952851 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowTaskController.java @@ -40,6 +40,12 @@ public class FlowTaskController { return flowTaskService.myProcess(pageNum, pageSize); } + @ApiOperation(value = "取消申请", response = FlowTaskDto.class) + @PostMapping(value = "/stopProcess") + public AjaxResult stopProcess(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.stopProcess(flowTaskVo); + } + @ApiOperation(value = "撤回流程", response = FlowTaskDto.class) @PostMapping(value = "/revokeProcess") public AjaxResult revokeProcess(@RequestBody FlowTaskVo flowTaskVo) { diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java index 1e82eab..e80ab3d 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowTaskService.java @@ -87,6 +87,13 @@ public interface IFlowTaskService { */ AjaxResult myProcess(Integer pageNum, Integer pageSize); + /** + * 取消申请 + * @param flowTaskVo + * @return + */ + AjaxResult stopProcess(FlowTaskVo flowTaskVo); + /** * 撤回流程 * @param flowTaskVo diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java index 86c0be2..a7f9889 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -1,17 +1,16 @@ package com.ruoyi.flowable.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.constant.ProcessConstants; +import com.ruoyi.flowable.common.constant.ProcessConstants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.enums.FlowComment; +import com.ruoyi.flowable.common.enums.FlowComment; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.flowable.domain.dto.FlowProcDefDto; import com.ruoyi.flowable.factory.FlowServiceFactory; import com.ruoyi.flowable.service.IFlowDefinitionService; import com.ruoyi.flowable.service.ISysDeployFormService; import com.ruoyi.system.domain.SysForm; -import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.service.ISysUserService; @@ -24,9 +23,7 @@ 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.flowable.task.api.TaskQuery; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -34,7 +31,6 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.stream.Collectors; /** * 流程定义 diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java index 014c3c5..9fe8c31 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java @@ -4,11 +4,11 @@ package com.ruoyi.flowable.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; -import com.ruoyi.common.constant.ProcessConstants; +import com.ruoyi.flowable.common.constant.ProcessConstants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.enums.FlowComment; +import com.ruoyi.flowable.common.enums.FlowComment; import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.flowable.domain.dto.FlowCommentDto; @@ -483,6 +483,43 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask return AjaxResult.success(page); } + /** + * 取消申请 + * + * @param flowTaskVo + * @return + */ + @Override + public AjaxResult stopProcess(FlowTaskVo flowTaskVo) { + Task task = taskService.createTaskQuery().processInstanceId(flowTaskVo.getInstanceId()).singleResult(); + if (task == null) { + throw new CustomException("流程未启动或已执行完成,无法撤回"); + } + + SysUser loginUser = SecurityUtils.getLoginUser().getUser(); + ProcessInstance processInstance = + runtimeService.createProcessInstanceQuery().processInstanceId(flowTaskVo.getInstanceId()).singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); + if (Objects.nonNull(bpmnModel)) { + Process process = bpmnModel.getMainProcess(); + List endNodes = process.findFlowElementsOfType(EndEvent.class, false); + if (CollectionUtils.isNotEmpty(endNodes)) { + Authentication.setAuthenticatedUserId(loginUser.getUserId().toString()); + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.STOP.getType(), + StringUtils.isBlank(flowTaskVo.getComment()) ? "取消申请" : flowTaskVo.getComment()); + String endId = endNodes.get(0).getId(); + List executions = + runtimeService.createExecutionQuery().parentId(processInstance.getProcessInstanceId()).list(); + List executionIds = new ArrayList<>(); + executions.forEach(execution -> executionIds.add(execution.getId())); + runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, + endId).changeState(); + } + } + + return AjaxResult.success(); + } + /** * 撤回流程 目前存在错误 * diff --git a/ruoyi-ui/src/api/flowable/process.js b/ruoyi-ui/src/api/flowable/process.js index a3eac95..effce34 100644 --- a/ruoyi-ui/src/api/flowable/process.js +++ b/ruoyi-ui/src/api/flowable/process.js @@ -19,10 +19,10 @@ export function complete(data) { }) } -// 撤回任务 -export function revokeProcess(data) { +// 取消申请 +export function stopProcess(data) { return request({ - url: '/flowable/task/revokeProcess', + url: '/flowable/task/stopProcess', method: 'post', data: data }) diff --git a/ruoyi-ui/src/views/flowable/task/process/index.vue b/ruoyi-ui/src/views/flowable/task/process/index.vue index d9034fc..28dad3f 100644 --- a/ruoyi-ui/src/views/flowable/task/process/index.vue +++ b/ruoyi-ui/src/views/flowable/task/process/index.vue @@ -107,8 +107,8 @@ size="mini" type="text" icon="el-icon-tickets" - @click="handleRevoke(scope.row)" - >撤回 + @click="handleStop(scope.row)" + >取消申请 { + stopProcess(params).then( res => { this.msgSuccess(res.msg); this.getList(); });