用户主动终止流程

This commit is contained in:
wangliwen 2022-08-02 11:29:24 +08:00
parent fe7b406f52
commit d5fd0d2858
4 changed files with 61 additions and 13 deletions

View File

@ -144,13 +144,16 @@ public class ActivitiNoticeAspect {
try {
String result;
Boolean termination = Boolean.valueOf(kv.get("termination") != null ? kv.get("termination").toString() : Boolean.FALSE.toString()); // 直接终结
Boolean endByUser = Boolean.valueOf(kv.get("endByUser") != null ? kv.get("endByUser").toString() : Boolean.FALSE.toString()); // 用户终止
Boolean reject = Boolean.valueOf(kv.get("reject") != null ? kv.get("reject").toString() : Boolean.FALSE.toString()); // 被拒绝
if (Boolean.TRUE.equals(termination)) {
result = "终止被拒";
if (Boolean.TRUE.equals(endByUser)) {
result = " 发起者终止";
} else if (Boolean.TRUE.equals(termination)) {
result = " 终止被拒";
} else if (reject) {
result = "被拒";
result = " 被拒";
} else {
result = "通过";
result = " 通过";
}
String finalCreator = creator;
String finalResult = result;
@ -215,8 +218,11 @@ public class ActivitiNoticeAspect {
try {
String result;
Boolean termination = Boolean.valueOf(kv.get("termination") != null ? kv.get("termination").toString() : Boolean.FALSE.toString()); // 直接终结
Boolean endByUser = Boolean.valueOf(kv.get("endByUser") != null ? kv.get("endByUser").toString() : Boolean.FALSE.toString()); // 用户终止
Boolean reject = Boolean.valueOf(kv.get("reject") != null ? kv.get("reject").toString() : Boolean.FALSE.toString()); // 被拒绝
if (Boolean.TRUE.equals(termination)) {
if (Boolean.TRUE.equals(endByUser)) {
result = " 发起者终止";
} else if (Boolean.TRUE.equals(termination)) {
result = "终止被拒";
} else if (Boolean.TRUE.equals(reject)) {
result = "被拒";

View File

@ -34,4 +34,9 @@ public class AuditingBaseDTO implements Serializable {
*/
private Boolean backPreviousTask = null;
/**
* 发起者主动终止流程
*/
private Boolean endByUser = null;
}

View File

@ -9,6 +9,7 @@ import io.renren.common.utils.Result;
import io.renren.modules.activiti.dto.TaskDTO;
import io.renren.modules.activiti.service.ActTaskService;
import io.renren.modules.security.user.SecurityUser;
import io.renren.modules.security.user.UserDetail;
import io.renren.modules.sys.dto.SysUserDTO;
import io.renren.modules.sys.service.SysUserService;
import io.swagger.annotations.Api;
@ -295,11 +296,12 @@ public class ActTaskController {
})
// @RequiresPermissions("sys:task:all")
public Result endProcess(String taskId, String instanceId, String comment) {
final UserDetail user = SecurityUser.getUser();
if (!StringUtils.isEmpty(taskId)) { // 存在taskId
actTaskService.endProcess(taskId, comment);
}
if (StringUtils.isEmpty(taskId) && !StringUtils.isEmpty(instanceId)) { // 通过实例id
actTaskService.endProcessInstanceId(taskId, comment);
actTaskService.endProcessInstanceId(instanceId, comment, user.getId().toString());
}
return new Result();
}

View File

@ -430,6 +430,31 @@ public class ActTaskService extends BaseServiceImpl {
return flag;
}
private boolean isMultiInstanceByInstanceId(String instanceId, String userId) {
boolean flag = false;
Task task = taskService.createTaskQuery().processInstanceId(instanceId).taskAssignee(userId).list().stream().sorted(
Comparator.comparing(x -> {
Task index = (Task) x;
return index.getCreateTime();
}).reversed()
).limit(1).findAny().orElse(null);
if (task != null) {
// 获取流程定义id
String processDefinitionId = task.getProcessDefinitionId();
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
// 根据活动id获取活动实例
ActivityImpl activityImpl = processDefinitionEntity.findActivity(task.getTaskDefinitionKey());
if ((activityImpl).getActivityBehavior() instanceof ParallelMultiInstanceBehavior) {
ParallelMultiInstanceBehavior behavior = (ParallelMultiInstanceBehavior) activityImpl.getActivityBehavior();
if (behavior != null && behavior.getCollectionExpression() != null) {
flag = true;
}
}
}
return flag;
}
/**
* 删除任务下的所有变量
*
@ -625,12 +650,21 @@ public class ActTaskService extends BaseServiceImpl {
}
@Transactional(rollbackFor = Exception.class)
public void endProcessInstanceId(String instanceId, String comment) {
if (isMultiInstance(instanceId)) {
public void endProcessInstanceId(String instanceId, String comment, String userId) {
if (isMultiInstanceByInstanceId(instanceId, userId)) {
throw new RenException(ErrorCode.END_PROCESS_PARALLEL_ERROR);
}
Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult();
List<Task> tasks = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId())
Task task = taskService.createTaskQuery().processInstanceId(instanceId).taskAssignee(userId).list().stream().sorted(
Comparator.comparing(x -> {
Task index = (Task) x;
return index.getCreateTime();
}).reversed()
).limit(1).findAny().orElse(null);
if (task == null) {
logger.error("查不到流程对应task");
return;
}
List<Task> tasks = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).taskAssignee(userId)
.taskDefinitionKey(task.getTaskDefinitionKey()).list();
if (tasks.size() > 1) {
throw new RenException(ErrorCode.END_PROCESS_HANDLEING_ERROR);
@ -644,7 +678,7 @@ public class ActTaskService extends BaseServiceImpl {
taskService.resolveTask(task.getId());
}
taskService.addComment(task.getId(), task.getProcessInstanceId(), comment);
taskService.complete(instanceId);
taskService.complete(task.getId());
} else {
ActivityImpl currActivity = findActivitiImplByInstanceId(instanceId, null);
List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>();
@ -664,8 +698,9 @@ public class ActTaskService extends BaseServiceImpl {
comment = message + "[" + comment + "]";
taskService.addComment(task.getId(), task.getProcessInstanceId(), comment);
taskService.setVariable(task.getId(), Task_HANDLE_STATE, Task_HANDLE_STATE_STOP);
taskService.setVariable(task.getId(), "endByUser", Boolean.TRUE); // 主动终止流程
taskService.setVariable(task.getId(), "reject", Boolean.TRUE); // 存在被拒绝的批示
taskService.complete(instanceId);
taskService.complete(task.getId());
pointActivity.getIncomingTransitions().remove(newTransition);
List<PvmTransition> pvmTransitionListC = currActivity.getOutgoingTransitions();
pvmTransitionListC.clear();
@ -701,7 +736,7 @@ public class ActTaskService extends BaseServiceImpl {
}
private ActivityImpl findActivitiImplByInstanceId(String instanceId, String activityId) {
Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult();
Task task = taskService.createTaskQuery().processInstanceId(instanceId).list().stream().findAny().orElse(null);
if (task == null) {
return null;
}