feat: 新增多实例加签,减签后端实现

This commit is contained in:
tony
2022-12-26 16:53:17 +08:00
parent 6704ac5c51
commit 89ee31b140
4 changed files with 108 additions and 11 deletions

View File

@@ -138,6 +138,13 @@ public class FlowTaskController {
return AjaxResult.success();
}
@ApiOperation(value = "任务归还")
@PostMapping(value = "/delegate")
public AjaxResult resolveTask(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.resolveTask(flowTaskVo);
return AjaxResult.success();
}
@ApiOperation(value = "转办任务")
@PostMapping(value = "/assign")
public AjaxResult assign(@RequestBody FlowTaskVo flowTaskVo) {
@@ -145,6 +152,20 @@ public class FlowTaskController {
return AjaxResult.success();
}
@PostMapping(value = "/addMultiInstanceExecution")
@ApiOperation(value = "多实例加签")
public AjaxResult addMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.addMultiInstanceExecution(flowTaskVo);
return AjaxResult.success("加签成功");
}
@PostMapping(value = "/deleteMultiInstanceExecution")
@ApiOperation(value = "多实例减签")
public AjaxResult deleteMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.deleteMultiInstanceExecution(flowTaskVo);
return AjaxResult.success("减签成功");
}
@ApiOperation(value = "获取下一节点")
@PostMapping(value = "/nextFlowNode")
public AjaxResult getNextFlowNode(@RequestBody FlowTaskVo flowTaskVo) {
@@ -203,22 +224,24 @@ public class FlowTaskController {
/**
* 流程节点信息
* @param procInsId 流程实例id
*
* @param procInsId 流程实例id
* @return
*/
@GetMapping("/flowXmlAndNode")
public AjaxResult flowXmlAndNode(@RequestParam(value = "procInsId",required = false) String procInsId,
@RequestParam(value = "deployId",required = false) String deployId){
return flowTaskService.flowXmlAndNode(procInsId,deployId);
public AjaxResult flowXmlAndNode(@RequestParam(value = "procInsId", required = false) String procInsId,
@RequestParam(value = "deployId", required = false) String deployId) {
return flowTaskService.flowXmlAndNode(procInsId, deployId);
}
/**
* 流程节点表单
* @param taskId 流程任务编号
*
* @param taskId 流程任务编号
* @return
*/
@GetMapping("/flowTaskForm")
public AjaxResult flowTaskForm(@RequestParam(value = "taskId",required = false) String taskId) throws Exception {
public AjaxResult flowTaskForm(@RequestParam(value = "taskId", required = false) String taskId) throws Exception {
return flowTaskService.flowTaskForm(taskId);
}

View File

@@ -33,6 +33,14 @@ public class FlowTaskVo {
private String targetKey;
private String deploymentId;
@ApiModelProperty("流程环节定义ID")
private String defId;
@ApiModelProperty("子执行流ID")
private String currentChildExecutionId;
@ApiModelProperty("子执行流是否已执行")
private Boolean flag;
@ApiModelProperty("流程变量信息")
private Map<String, Object> variables;

View File

@@ -72,6 +72,13 @@ public interface IFlowTaskService {
*/
void delegateTask(FlowTaskVo flowTaskVo);
/**
* 任务归还
*
* @param flowTaskVo 请求实体参数
*/
void resolveTask(FlowTaskVo flowTaskVo);
/**
* 转办任务
@@ -80,6 +87,19 @@ public interface IFlowTaskService {
*/
void assignTask(FlowTaskVo flowTaskVo);
/**
* 多实例加签
* @param flowTaskVo
*/
void addMultiInstanceExecution(FlowTaskVo flowTaskVo);
/**
* 多实例减签
* @param flowTaskVo
*/
void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo);
/**
* 我发起的流程
* @param queryVo 请求参数

View File

@@ -55,7 +55,8 @@ 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.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
import org.flowable.engine.impl.cmd.AddMultiInstanceExecutionCmd;
import org.flowable.engine.impl.cmd.DeleteMultiInstanceExecutionCmd;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -416,6 +417,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
/**
* 认领/签收任务
* 认领以后,这个用户就会成为任务的执行人,任务会从其他成员的任务列表中消失
*
* @param flowTaskVo 请求实体参数
*/
@@ -438,6 +440,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
/**
* 委派任务
* 任务委派只是委派人将当前的任务交给被委派人进行审批,处理任务后又重新回到委派人身上。
*
* @param flowTaskVo 请求实体参数
*/
@@ -447,16 +450,58 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskService.delegateTask(flowTaskVo.getTaskId(), flowTaskVo.getAssignee());
}
/**
* 任务归还
* 被委派人完成任务之后,将任务归还委派人
*
* @param flowTaskVo 请求实体参数
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void resolveTask(FlowTaskVo flowTaskVo) {
taskService.resolveTask(flowTaskVo.getTaskId());
}
/**
* 转办任务
* 直接将办理人换成别人,这时任务的拥有者不再是转办人
*
* @param flowTaskVo 请求实体参数
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void assignTask(FlowTaskVo flowTaskVo) {
taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getComment());
// 直接转派就可以覆盖掉之前的
taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getAssignee());
// // 删除指派人重新指派
// taskService.deleteCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee());
// taskService.addCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee());
// // 如果要查询转给他人处理的任务可以同时将OWNER进行设置
// taskService.setOwner(flowTaskVo.getTaskId(), flowTaskVo.getAssignee());
}
/**
* 多实例加签
* act_ru_task、act_ru_identitylink各生成一条记录
*
* @param flowTaskVo
*/
@Override
public void addMultiInstanceExecution(FlowTaskVo flowTaskVo) {
managementService.executeCommand(new AddMultiInstanceExecutionCmd(flowTaskVo.getDefId(), flowTaskVo.getInstanceId(), flowTaskVo.getVariables()));
}
/**
* 多实例减签
* act_ru_task减1、act_ru_identitylink不变
*
* @param flowTaskVo
*/
@Override
public void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo) {
managementService.executeCommand(new DeleteMultiInstanceExecutionCmd(flowTaskVo.getCurrentChildExecutionId(), flowTaskVo.getFlag()));
}
/**
@@ -518,6 +563,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
/**
* 取消申请
* 目前实现方式: 直接将当前流程变更为已完成
*
* @param flowTaskVo
* @return
*/
@@ -529,8 +575,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
// 获取当前流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(flowTaskVo.getInstanceId())
.singleResult();
.processInstanceId(flowTaskVo.getInstanceId())
.singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
if (Objects.nonNull(bpmnModel)) {
Process process = bpmnModel.getMainProcess();
@@ -544,7 +590,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
// StringUtils.isBlank(flowTaskVo.getComment()) ? "取消申请" : flowTaskVo.getComment());
// 获取当前流程最后一个节点
String endId = endNodes.get(0).getId();
List<Execution> executions = runtimeService.createExecutionQuery()
List<Execution> executions = runtimeService.createExecutionQuery()
.parentId(processInstance.getProcessInstanceId()).list();
List<String> executionIds = new ArrayList<>();
executions.forEach(execution -> executionIds.add(execution.getId()));