用户主动终止流程

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

View File

@ -34,4 +34,9 @@ public class AuditingBaseDTO implements Serializable {
*/ */
private Boolean backPreviousTask = null; 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.dto.TaskDTO;
import io.renren.modules.activiti.service.ActTaskService; import io.renren.modules.activiti.service.ActTaskService;
import io.renren.modules.security.user.SecurityUser; 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.dto.SysUserDTO;
import io.renren.modules.sys.service.SysUserService; import io.renren.modules.sys.service.SysUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -295,11 +296,12 @@ public class ActTaskController {
}) })
// @RequiresPermissions("sys:task:all") // @RequiresPermissions("sys:task:all")
public Result endProcess(String taskId, String instanceId, String comment) { public Result endProcess(String taskId, String instanceId, String comment) {
final UserDetail user = SecurityUser.getUser();
if (!StringUtils.isEmpty(taskId)) { // 存在taskId if (!StringUtils.isEmpty(taskId)) { // 存在taskId
actTaskService.endProcess(taskId, comment); actTaskService.endProcess(taskId, comment);
} }
if (StringUtils.isEmpty(taskId) && !StringUtils.isEmpty(instanceId)) { // 通过实例id if (StringUtils.isEmpty(taskId) && !StringUtils.isEmpty(instanceId)) { // 通过实例id
actTaskService.endProcessInstanceId(taskId, comment); actTaskService.endProcessInstanceId(instanceId, comment, user.getId().toString());
} }
return new Result(); return new Result();
} }

View File

@ -430,6 +430,31 @@ public class ActTaskService extends BaseServiceImpl {
return flag; 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) @Transactional(rollbackFor = Exception.class)
public void endProcessInstanceId(String instanceId, String comment) { public void endProcessInstanceId(String instanceId, String comment, String userId) {
if (isMultiInstance(instanceId)) { if (isMultiInstanceByInstanceId(instanceId, userId)) {
throw new RenException(ErrorCode.END_PROCESS_PARALLEL_ERROR); throw new RenException(ErrorCode.END_PROCESS_PARALLEL_ERROR);
} }
Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult(); Task task = taskService.createTaskQuery().processInstanceId(instanceId).taskAssignee(userId).list().stream().sorted(
List<Task> tasks = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()) 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(); .taskDefinitionKey(task.getTaskDefinitionKey()).list();
if (tasks.size() > 1) { if (tasks.size() > 1) {
throw new RenException(ErrorCode.END_PROCESS_HANDLEING_ERROR); throw new RenException(ErrorCode.END_PROCESS_HANDLEING_ERROR);
@ -644,7 +678,7 @@ public class ActTaskService extends BaseServiceImpl {
taskService.resolveTask(task.getId()); taskService.resolveTask(task.getId());
} }
taskService.addComment(task.getId(), task.getProcessInstanceId(), comment); taskService.addComment(task.getId(), task.getProcessInstanceId(), comment);
taskService.complete(instanceId); taskService.complete(task.getId());
} else { } else {
ActivityImpl currActivity = findActivitiImplByInstanceId(instanceId, null); ActivityImpl currActivity = findActivitiImplByInstanceId(instanceId, null);
List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>(); List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>();
@ -664,8 +698,9 @@ public class ActTaskService extends BaseServiceImpl {
comment = message + "[" + comment + "]"; comment = message + "[" + comment + "]";
taskService.addComment(task.getId(), task.getProcessInstanceId(), comment); taskService.addComment(task.getId(), task.getProcessInstanceId(), comment);
taskService.setVariable(task.getId(), Task_HANDLE_STATE, Task_HANDLE_STATE_STOP); 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.setVariable(task.getId(), "reject", Boolean.TRUE); // 存在被拒绝的批示
taskService.complete(instanceId); taskService.complete(task.getId());
pointActivity.getIncomingTransitions().remove(newTransition); pointActivity.getIncomingTransitions().remove(newTransition);
List<PvmTransition> pvmTransitionListC = currActivity.getOutgoingTransitions(); List<PvmTransition> pvmTransitionListC = currActivity.getOutgoingTransitions();
pvmTransitionListC.clear(); pvmTransitionListC.clear();
@ -701,7 +736,7 @@ public class ActTaskService extends BaseServiceImpl {
} }
private ActivityImpl findActivitiImplByInstanceId(String instanceId, String activityId) { 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) { if (task == null) {
return null; return null;
} }