mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-18 17:38:48 +08:00
fix 修复会签 票签撤销问题
This commit is contained in:
parent
0e96074dac
commit
33e28daba6
@ -197,23 +197,16 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
if (definition == null) {
|
||||
throw new ServiceException(ExceptionCons.NOT_FOUNT_DEF);
|
||||
}
|
||||
String message = bo.getMessage();
|
||||
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
||||
List<Task> list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
||||
//获取已发布的流程节点
|
||||
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, definition.getId()));
|
||||
AssertUtil.isTrue(CollUtil.isEmpty(flowNodes), ExceptionCons.NOT_PUBLISH_NODE);
|
||||
Node startNode = flowNodes.stream().filter(t -> NodeType.isStart(t.getNodeType())).findFirst().orElse(null);
|
||||
AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE);
|
||||
Node nextNode = nodeService.getNextNode(definition.getId(), startNode.getNodeCode(), null, SkipType.NONE.getKey());
|
||||
for (Task task : list) {
|
||||
FlowParams flowParams = FlowParams.build();
|
||||
flowParams.nodeCode(nextNode.getNodeCode());
|
||||
flowParams.message(bo.getMessage());
|
||||
flowParams.skipType(SkipType.PASS.getKey());
|
||||
flowParams.flowStatus(BusinessStatusEnum.CANCEL.getStatus()).hisStatus(TaskStatusEnum.CANCEL.getStatus());
|
||||
flowParams.ignore(true);
|
||||
taskService.skip(task.getId(), flowParams);
|
||||
}
|
||||
//撤销
|
||||
cancelTask(message, instance, nextNode);
|
||||
//判断申请人节点是否有多个,只保留一个
|
||||
List<Task> currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
||||
if (CollUtil.isNotEmpty(currentTaskList)) {
|
||||
@ -242,6 +235,39 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤销流程
|
||||
*
|
||||
* @param message 审批已经
|
||||
* @param instance 流程实例
|
||||
* @param nextNode 申请人节点
|
||||
*/
|
||||
private void cancelTask(String message, Instance instance, Node nextNode) {
|
||||
List<Task> list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
List<Task> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(nextNode.getNodeCode()));
|
||||
if (list.size() == tasks.size()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (Task task : list) {
|
||||
List<UserDTO> userList = flwTaskService.currentTaskAllUser(task.getId());
|
||||
FlowParams flowParams = FlowParams.build();
|
||||
flowParams.nodeCode(nextNode.getNodeCode());
|
||||
flowParams.message(message);
|
||||
flowParams.skipType(SkipType.PASS.getKey());
|
||||
flowParams.flowStatus(BusinessStatusEnum.CANCEL.getStatus()).hisStatus(TaskStatusEnum.CANCEL.getStatus());
|
||||
flowParams.ignore(true);
|
||||
//解决会签,或签撤销没权限问题
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
flowParams.handler(userList.get(0).getUserId().toString());
|
||||
}
|
||||
taskService.skip(task.getId(), flowParams);
|
||||
}
|
||||
//解决会签,或签多人审批问题
|
||||
cancelTask(message, instance, nextNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登陆人发起的流程实例
|
||||
*
|
||||
@ -423,6 +449,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
flowParams.message(bo.getComment());
|
||||
flowParams.flowStatus(BusinessStatusEnum.INVALID.getStatus())
|
||||
.hisStatus(TaskStatusEnum.INVALID.getStatus());
|
||||
flowParams.ignore(true);
|
||||
taskService.termination(flowTask.getId(), flowParams);
|
||||
}
|
||||
return true;
|
||||
|
||||
20
script/bpmn/leave4.xml
Normal file
20
script/bpmn/leave4.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<definition flowCode="leave4" flowName="请假申请-会签" version="1" category="1" formCustom="N">
|
||||
<node nodeType="start" nodeCode="9ce8bf00-f25b-4fc6-91b8-827082fc4876" nodeName="开始" nodeRatio="0.000" coordinate="320,240|320,240" skipAnyNode="N" formCustom="N">
|
||||
<skip coordinate="340,240;410,240" skipType="PASS">e90b98ef-35b4-410c-a663-bae8b7624b9f</skip>
|
||||
</node>
|
||||
<node nodeType="between" nodeCode="e90b98ef-35b4-410c-a663-bae8b7624b9f" nodeName="申请人" nodeRatio="0.000" coordinate="460,240|460,240" skipAnyNode="N" formCustom="N">
|
||||
<skip coordinate="510,240;590,240" skipType="PASS">768b5b1a-6726-4d67-8853-4cc70d5b1045</skip>
|
||||
</node>
|
||||
<node nodeType="between" nodeCode="768b5b1a-6726-4d67-8853-4cc70d5b1045" nodeName="百分之60通过" permissionFlag="${userList}" nodeRatio="60.000" coordinate="640,240|640,240" skipAnyNode="N" formCustom="N">
|
||||
<skip coordinate="690,240;770,240" skipType="PASS">2f9f2e21-9bcf-42a3-a07c-13037aad22d1</skip>
|
||||
</node>
|
||||
<node nodeType="between" nodeCode="2f9f2e21-9bcf-42a3-a07c-13037aad22d1" nodeName="全部审批通过" permissionFlag="role:1,role:3" nodeRatio="100.000" coordinate="820,240|820,240" skipAnyNode="N" formCustom="N">
|
||||
<skip coordinate="870,240;950,240" skipType="PASS">27461e01-3d9f-4530-8fe3-bd5ec7f9571f</skip>
|
||||
</node>
|
||||
<node nodeType="between" nodeCode="27461e01-3d9f-4530-8fe3-bd5ec7f9571f" nodeName="CEO" permissionFlag="1" nodeRatio="0.000" coordinate="1000,240|1000,240" skipAnyNode="N" formCustom="N">
|
||||
<skip coordinate="1050,240;1080,240;1080,240;1070,240;1070,240;1100,240" skipType="PASS">b62b88c3-8d8d-4969-911e-2aaea219e7fc</skip>
|
||||
</node>
|
||||
<node nodeType="end" nodeCode="b62b88c3-8d8d-4969-911e-2aaea219e7fc" nodeName="结束" nodeRatio="0.000" coordinate="1120,240|1120,240" skipAnyNode="N" formCustom="N"/>
|
||||
</definition>
|
||||
Loading…
Reference in New Issue
Block a user