|
@@ -4,9 +4,9 @@ import lombok.SneakyThrows;
|
|
import org.activiti.engine.history.HistoricActivityInstance;
|
|
import org.activiti.engine.history.HistoricActivityInstance;
|
|
import org.activiti.engine.history.HistoricProcessInstance;
|
|
import org.activiti.engine.history.HistoricProcessInstance;
|
|
import org.activiti.engine.history.HistoricTaskInstance;
|
|
import org.activiti.engine.history.HistoricTaskInstance;
|
|
|
|
+import org.activiti.engine.history.HistoricVariableInstance;
|
|
import org.activiti.engine.impl.RepositoryServiceImpl;
|
|
import org.activiti.engine.impl.RepositoryServiceImpl;
|
|
import org.activiti.engine.impl.TaskServiceImpl;
|
|
import org.activiti.engine.impl.TaskServiceImpl;
|
|
-import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
|
|
|
|
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
|
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
|
import org.activiti.engine.impl.pvm.PvmActivity;
|
|
import org.activiti.engine.impl.pvm.PvmActivity;
|
|
import org.activiti.engine.impl.pvm.PvmTransition;
|
|
import org.activiti.engine.impl.pvm.PvmTransition;
|
|
@@ -19,9 +19,9 @@ import org.activiti.engine.task.Task;
|
|
import org.hswebframework.ezorm.rdb.executor.SqlExecutor;
|
|
import org.hswebframework.ezorm.rdb.executor.SqlExecutor;
|
|
import org.hswebframework.utils.StringUtils;
|
|
import org.hswebframework.utils.StringUtils;
|
|
import org.hswebframework.web.BusinessException;
|
|
import org.hswebframework.web.BusinessException;
|
|
|
|
+import org.hswebframework.web.Maps;
|
|
import org.hswebframework.web.NotFoundException;
|
|
import org.hswebframework.web.NotFoundException;
|
|
import org.hswebframework.web.authorization.Authentication;
|
|
import org.hswebframework.web.authorization.Authentication;
|
|
-import org.hswebframework.web.authorization.User;
|
|
|
|
import org.hswebframework.web.workflow.dao.entity.ProcessHistoryEntity;
|
|
import org.hswebframework.web.workflow.dao.entity.ProcessHistoryEntity;
|
|
import org.hswebframework.web.workflow.service.ProcessHistoryService;
|
|
import org.hswebframework.web.workflow.service.ProcessHistoryService;
|
|
import org.hswebframework.web.workflow.service.config.ProcessConfigurationService;
|
|
import org.hswebframework.web.workflow.service.config.ProcessConfigurationService;
|
|
@@ -31,6 +31,7 @@ import org.hswebframework.web.workflow.flowable.utils.JumpTaskCmd;
|
|
import org.hswebframework.web.workflow.service.WorkFlowFormService;
|
|
import org.hswebframework.web.workflow.service.WorkFlowFormService;
|
|
import org.hswebframework.web.workflow.service.config.CandidateInfo;
|
|
import org.hswebframework.web.workflow.service.config.CandidateInfo;
|
|
import org.hswebframework.web.workflow.service.request.CompleteTaskRequest;
|
|
import org.hswebframework.web.workflow.service.request.CompleteTaskRequest;
|
|
|
|
+import org.hswebframework.web.workflow.service.request.JumpTaskRequest;
|
|
import org.hswebframework.web.workflow.service.request.RejectTaskRequest;
|
|
import org.hswebframework.web.workflow.service.request.RejectTaskRequest;
|
|
import org.hswebframework.web.workflow.service.request.SaveFormRequest;
|
|
import org.hswebframework.web.workflow.service.request.SaveFormRequest;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
@@ -38,13 +39,19 @@ import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.function.Consumer;
|
|
|
|
+import java.util.function.Function;
|
|
|
|
+import java.util.function.Predicate;
|
|
|
|
+import java.util.function.Supplier;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
- * @Author wangwei
|
|
|
|
- * @Date 2017/8/7.
|
|
|
|
|
|
+ * @author wangwei
|
|
|
|
+ * @author zhouhao
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@@ -71,17 +78,26 @@ public class BpmTaskServiceImpl extends AbstractFlowableService implements BpmTa
|
|
public List<Task> selectNowTask(String procInstId) {
|
|
public List<Task> selectNowTask(String procInstId) {
|
|
return taskService.createTaskQuery()
|
|
return taskService.createTaskQuery()
|
|
.processInstanceId(procInstId)
|
|
.processInstanceId(procInstId)
|
|
- .active().list();
|
|
|
|
|
|
+ .active()
|
|
|
|
+ .list();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<Task> selectTaskByProcessId(String procInstId) {
|
|
public List<Task> selectTaskByProcessId(String procInstId) {
|
|
- return taskService.createTaskQuery().processInstanceId(procInstId).active().list();
|
|
|
|
|
|
+ return taskService
|
|
|
|
+ .createTaskQuery()
|
|
|
|
+ .processInstanceId(procInstId)
|
|
|
|
+ .active()
|
|
|
|
+ .list();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Task selectTaskByTaskId(String taskId) {
|
|
public Task selectTaskByTaskId(String taskId) {
|
|
- return taskService.createTaskQuery().taskId(taskId).active().singleResult();
|
|
|
|
|
|
+ return taskService
|
|
|
|
+ .createTaskQuery()
|
|
|
|
+ .taskId(taskId)
|
|
|
|
+ .active()
|
|
|
|
+ .singleResult();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -118,7 +134,7 @@ public class BpmTaskServiceImpl extends AbstractFlowableService implements BpmTa
|
|
throw new BusinessException("只能完成自己的任务");
|
|
throw new BusinessException("只能完成自己的任务");
|
|
}
|
|
}
|
|
Map<String, Object> variable = new HashMap<>();
|
|
Map<String, Object> variable = new HashMap<>();
|
|
- variable.put("oldTaskId", task.getId());
|
|
|
|
|
|
+ variable.put("preTaskId", task.getId());
|
|
Map<String, Object> transientVariables = new HashMap<>();
|
|
Map<String, Object> transientVariables = new HashMap<>();
|
|
|
|
|
|
if (null != request.getVariables()) {
|
|
if (null != request.getVariables()) {
|
|
@@ -141,16 +157,18 @@ public class BpmTaskServiceImpl extends AbstractFlowableService implements BpmTa
|
|
transientVariables.putAll(request.getFormData());
|
|
transientVariables.putAll(request.getFormData());
|
|
}
|
|
}
|
|
|
|
|
|
- taskService.complete(task.getId(), variable, transientVariables);
|
|
|
|
|
|
+ taskService.complete(task.getId(), null, transientVariables);
|
|
|
|
|
|
//跳转
|
|
//跳转
|
|
if (!StringUtils.isNullOrEmpty(request.getNextActivityId())) {
|
|
if (!StringUtils.isNullOrEmpty(request.getNextActivityId())) {
|
|
- jumpTask(task, request.getNextActivityId());
|
|
|
|
|
|
+ doJumpTask(task, request.getNextActivityId(), (t) -> {
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
//下一步候选人
|
|
//下一步候选人
|
|
List<Task> tasks = selectNowTask(task.getProcessInstanceId());
|
|
List<Task> tasks = selectNowTask(task.getProcessInstanceId());
|
|
for (Task next : tasks) {
|
|
for (Task next : tasks) {
|
|
|
|
+ setVariablesLocal(next.getId(), variable);
|
|
if (!StringUtils.isNullOrEmpty(request.getNextClaimUserId())) {
|
|
if (!StringUtils.isNullOrEmpty(request.getNextClaimUserId())) {
|
|
taskService.addCandidateUser(next.getId(), request.getNextClaimUserId());
|
|
taskService.addCandidateUser(next.getId(), request.getNextClaimUserId());
|
|
} else {
|
|
} else {
|
|
@@ -174,99 +192,47 @@ public class BpmTaskServiceImpl extends AbstractFlowableService implements BpmTa
|
|
processHistoryService.insert(history);
|
|
processHistoryService.insert(history);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
@SneakyThrows
|
|
@SneakyThrows
|
|
public void reject(RejectTaskRequest request) {
|
|
public void reject(RejectTaskRequest request) {
|
|
request.tryValidate();
|
|
request.tryValidate();
|
|
- String activityId = request.getActivityId();
|
|
|
|
-
|
|
|
|
- //从任务历史中查找
|
|
|
|
- HistoricTaskInstance task = historyService.createHistoricTaskInstanceQuery()
|
|
|
|
- .taskDefinitionKey(activityId)
|
|
|
|
- .processInstanceId(request.getProcessInstanceId())
|
|
|
|
- .singleResult();
|
|
|
|
- if (task == null) {
|
|
|
|
- throw new NotFoundException("历史任务环节不存在");
|
|
|
|
|
|
+ String taskId = request.getTaskId();
|
|
|
|
+ Task curTask = selectTaskByTaskId(taskId);
|
|
|
|
+ if (curTask == null) {
|
|
|
|
+ throw new NotFoundException("任务不存在或未激活");
|
|
}
|
|
}
|
|
-
|
|
|
|
- ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
|
|
|
- .processInstanceId(task.getProcessInstanceId())
|
|
|
|
|
|
+ ProcessInstance processInstance = runtimeService
|
|
|
|
+ .createProcessInstanceQuery()
|
|
|
|
+ .processInstanceId(curTask.getProcessInstanceId())
|
|
.singleResult();
|
|
.singleResult();
|
|
- if (processInstance == null) {
|
|
|
|
- throw new NotFoundException("流程已经结束");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Map<String, Object> variables = processInstance.getProcessVariables();
|
|
|
|
-
|
|
|
|
- ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(task.getProcessDefinitionId());
|
|
|
|
- if (definition == null) {
|
|
|
|
- throw new BusinessException("流程定义未找到");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ActivityExecution execution = (ActivityExecution) runtimeService.createExecutionQuery()
|
|
|
|
- .executionId(task.getExecutionId()).singleResult();
|
|
|
|
- // 是否并行节点
|
|
|
|
- if (execution.isConcurrent()) {
|
|
|
|
- throw new BusinessException("并行节点不允许驳回");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 是否存在定时任务
|
|
|
|
- long num = managementService.createJobQuery().executionId(task.getExecutionId()).count();
|
|
|
|
- if (num > 0) {
|
|
|
|
- throw new BusinessException("当前环节不允许驳回");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 取得上一步活动
|
|
|
|
- ActivityImpl currActivity = definition.findActivity(task.getTaskDefinitionKey());
|
|
|
|
- List<PvmTransition> nextTransitionList = currActivity.getIncomingTransitions();
|
|
|
|
- // 清除当前活动的出口
|
|
|
|
- List<PvmTransition> oriPvmTransitionList = new ArrayList<>();
|
|
|
|
- List<PvmTransition> pvmTransitionList = currActivity.getOutgoingTransitions();
|
|
|
|
- oriPvmTransitionList.addAll(pvmTransitionList);
|
|
|
|
- pvmTransitionList.clear();
|
|
|
|
-
|
|
|
|
- // 建立新出口
|
|
|
|
- List<TransitionImpl> newTransitions = new ArrayList<>();
|
|
|
|
- for (PvmTransition nextTransition : nextTransitionList) {
|
|
|
|
- PvmActivity nextActivity = nextTransition.getSource();
|
|
|
|
- ActivityImpl nextActivityImpl = definition.findActivity(nextActivity.getId());
|
|
|
|
- TransitionImpl newTransition = currActivity.createOutgoingTransition();
|
|
|
|
- newTransition.setDestination(nextActivityImpl);
|
|
|
|
- newTransitions.add(newTransition);
|
|
|
|
- }
|
|
|
|
- // 完成任务
|
|
|
|
- List<Task> tasks = taskService.createTaskQuery()
|
|
|
|
- .processInstanceId(processInstance.getId())
|
|
|
|
- .taskDefinitionKey(task.getTaskDefinitionKey())
|
|
|
|
- .list();
|
|
|
|
|
|
|
|
- for (Task t : tasks) {
|
|
|
|
- taskService.complete(t.getId(), variables);
|
|
|
|
- historyService.deleteHistoricTaskInstance(t.getId());
|
|
|
|
- //删除连线
|
|
|
|
- List<HistoricActivityInstance> instance = historyService.createHistoricActivityInstanceQuery()
|
|
|
|
- .processInstanceId(processInstance.getProcessInstanceId())
|
|
|
|
- .activityId(t.getTaskDefinitionKey())
|
|
|
|
- .list();
|
|
|
|
- for (HistoricActivityInstance historicActivityInstance : instance) {
|
|
|
|
- sqlExecutor.delete("delete from act_hi_actinst where id_= #{id}", historicActivityInstance);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // 恢复方向
|
|
|
|
- for (TransitionImpl transitionImpl : newTransitions) {
|
|
|
|
- currActivity.getOutgoingTransitions().remove(transitionImpl);
|
|
|
|
- }
|
|
|
|
- pvmTransitionList.addAll(oriPvmTransitionList);
|
|
|
|
-
|
|
|
|
- //重新设置候选人
|
|
|
|
- List<Task> nowTasks = selectNowTask(processInstance.getProcessInstanceId());
|
|
|
|
- Task tmp = null;
|
|
|
|
- for (Task nowTask : nowTasks) {
|
|
|
|
- setCandidate(request.getRejectUserId(), nowTask);
|
|
|
|
- tmp = nowTask;
|
|
|
|
|
|
+ ProcessDefinitionEntity entity = (ProcessDefinitionEntity)
|
|
|
|
+ ((RepositoryServiceImpl) repositoryService)
|
|
|
|
+ .getDeployedProcessDefinition(curTask.getProcessDefinitionId());
|
|
|
|
+
|
|
|
|
+ ActivityImpl currActivity = entity.findActivity(curTask.getTaskDefinitionKey());
|
|
|
|
+
|
|
|
|
+ List<PvmActivity> transitions = new ArrayList<>();
|
|
|
|
+ //查找上一个环节
|
|
|
|
+ findActivity(currActivity,
|
|
|
|
+ activity ->
|
|
|
|
+ activity.getIncomingTransitions()
|
|
|
|
+ .stream()
|
|
|
|
+ .map(PvmTransition::getSource)
|
|
|
|
+ .collect(Collectors.toList()),
|
|
|
|
+ activity -> transitions.isEmpty() && "userTask".equals(activity.getProperty("type")),
|
|
|
|
+ transitions::add);
|
|
|
|
+
|
|
|
|
+ if (!transitions.isEmpty()) {
|
|
|
|
+ //跳转到上一环节
|
|
|
|
+ PvmActivity transition = transitions.get(transitions.size() - 1);
|
|
|
|
+ doJumpTask(curTask, transition.getId(), newTask -> {
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ throw new BusinessException("无法获取上一步任务");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //记录日志
|
|
ProcessHistoryEntity history = ProcessHistoryEntity.builder()
|
|
ProcessHistoryEntity history = ProcessHistoryEntity.builder()
|
|
.businessKey(processInstance.getBusinessKey())
|
|
.businessKey(processInstance.getBusinessKey())
|
|
.type("reject")
|
|
.type("reject")
|
|
@@ -275,37 +241,162 @@ public class BpmTaskServiceImpl extends AbstractFlowableService implements BpmTa
|
|
.creatorName(request.getRejectUserName())
|
|
.creatorName(request.getRejectUserName())
|
|
.processDefineId(processInstance.getProcessDefinitionId())
|
|
.processDefineId(processInstance.getProcessDefinitionId())
|
|
.processInstanceId(processInstance.getProcessInstanceId())
|
|
.processInstanceId(processInstance.getProcessInstanceId())
|
|
- .taskId(tmp != null ? tmp.getId() : null)
|
|
|
|
- .taskDefineKey(tmp != null ? tmp.getTaskDefinitionKey() : null)
|
|
|
|
- .taskName(tmp != null ? tmp.getName() : null)
|
|
|
|
|
|
+ .taskId(taskId)
|
|
|
|
+ .taskDefineKey(curTask.getTaskDefinitionKey())
|
|
|
|
+ .taskName(curTask.getName())
|
|
.data(request.getData())
|
|
.data(request.getData())
|
|
.build();
|
|
.build();
|
|
|
|
|
|
- historyService.deleteHistoricTaskInstance(task.getId());
|
|
|
|
processHistoryService.insert(history);
|
|
processHistoryService.insert(history);
|
|
}
|
|
}
|
|
|
|
|
|
- public Task jumpTask(Task task, String activityId) {
|
|
|
|
|
|
+ protected void findActivity(
|
|
|
|
+ PvmActivity activity,
|
|
|
|
+ Function<PvmActivity, List<PvmActivity>> function,
|
|
|
|
+ Predicate<PvmActivity> predicate,
|
|
|
|
+ Consumer<PvmActivity> consumer) {
|
|
|
|
+
|
|
|
|
+ List<PvmActivity> activities = function.apply(activity);
|
|
|
|
+ for (PvmActivity pvmActivity : activities) {
|
|
|
|
+ consumer.accept(pvmActivity);
|
|
|
|
+ if (predicate.test(pvmActivity)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ //往下查找
|
|
|
|
+ findActivity(pvmActivity, function, predicate, consumer);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @SneakyThrows
|
|
|
|
+ public void doJumpTask(Task task, String activityId, Consumer<Task> newTaskConsumer) {
|
|
|
|
+
|
|
|
|
+ ProcessDefinitionEntity entity = (ProcessDefinitionEntity)
|
|
|
|
+ ((RepositoryServiceImpl) repositoryService)
|
|
|
|
+ .getDeployedProcessDefinition(task.getProcessDefinitionId());
|
|
|
|
+
|
|
|
|
+ String sourceId = task.getTaskDefinitionKey();
|
|
|
|
+
|
|
|
|
+ ActivityImpl targetActivity = entity.findActivity(activityId);
|
|
|
|
+ ActivityImpl sourceActivity = entity.findActivity(sourceId);
|
|
|
|
+
|
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
|
+ logger.debug("流程[{}({})]跳转[{}]->[{}]",
|
|
|
|
+ entity.getName(),
|
|
|
|
+ entity.getId(),
|
|
|
|
+ sourceActivity.getId(),
|
|
|
|
+ targetActivity.getId());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //回退的节点
|
|
|
|
+ List<PvmActivity> backActivities = new ArrayList<>();
|
|
|
|
+ //如果目标节点的Outgoing中有源节点,说明是回退需要删除对应的连线
|
|
|
|
+ findActivity(targetActivity,
|
|
|
|
+ activity -> activity
|
|
|
|
+ .getOutgoingTransitions()
|
|
|
|
+ .stream()
|
|
|
|
+ .map(PvmTransition::getDestination)
|
|
|
|
+ .collect(Collectors.toList()),
|
|
|
|
+ activity -> sourceActivity.getId().equals(activity.getId()),
|
|
|
|
+ backActivities::add);
|
|
|
|
+
|
|
|
|
+ //回退
|
|
|
|
+ if (!backActivities.isEmpty()) {
|
|
|
|
+ for (PvmActivity pvmTransition : backActivities) {
|
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
|
+ logger.debug("流程[{}({})]回退[{}]->[{}],删除链接线:{}",
|
|
|
|
+ entity.getName(),
|
|
|
|
+ entity.getId(),
|
|
|
|
+ sourceActivity.getId(),
|
|
|
|
+ targetActivity.getId(),
|
|
|
|
+ pvmTransition.getId());
|
|
|
|
+ }
|
|
|
|
+ //删除连线
|
|
|
|
+ List<HistoricActivityInstance> instance = historyService
|
|
|
|
+ .createHistoricActivityInstanceQuery()
|
|
|
|
+ .processInstanceId(task.getProcessInstanceId())
|
|
|
|
+ .activityId(pvmTransition.getId())
|
|
|
|
+ .list();
|
|
|
|
+ for (HistoricActivityInstance historicActivityInstance : instance) {
|
|
|
|
+ sqlExecutor.delete("delete from act_hi_actinst where id_= #{id}", historicActivityInstance);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //执行回退命令
|
|
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) taskService;
|
|
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) taskService;
|
|
taskServiceImpl.getCommandExecutor().execute(new JumpTaskCmd(task.getExecutionId(), activityId));
|
|
taskServiceImpl.getCommandExecutor().execute(new JumpTaskCmd(task.getExecutionId(), activityId));
|
|
- return task;
|
|
|
|
- }
|
|
|
|
|
|
+ //设置候选人并回调
|
|
|
|
+ selectNowTask(task.getProcessInstanceId())
|
|
|
|
+ .forEach(t -> {
|
|
|
|
+ //设置候选人
|
|
|
|
+ setCandidate(task.getAssignee(), t);
|
|
|
|
+ newTaskConsumer.accept(t);
|
|
|
|
+ });
|
|
|
|
|
|
- @Override
|
|
|
|
- public Task jumpTask(String taskId, String activity) {
|
|
|
|
- return jumpTask(selectTaskByTaskId(taskId), activity);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setAssignee(String taskId, String userId) {
|
|
|
|
- taskService.setAssignee(taskId, userId);
|
|
|
|
|
|
+ public void jumpTask(JumpTaskRequest request) {
|
|
|
|
+ request.tryValidate();
|
|
|
|
+
|
|
|
|
+ Task task = taskService.createTaskQuery()
|
|
|
|
+ .taskId(request.getTaskId())
|
|
|
|
+ .singleResult();
|
|
|
|
+
|
|
|
|
+ //记录跳转后的节点到日志
|
|
|
|
+ List<Map<String, String>> targetTask = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ doJumpTask(task, request.getTargetActivityId(), t -> {
|
|
|
|
+ Map<String, String> target = new HashMap<>();
|
|
|
|
+ target.put("taskId", t.getId());
|
|
|
|
+ target.put("taskName", t.getName());
|
|
|
|
+ target.put("activityId", t.getTaskDefinitionKey());
|
|
|
|
+ targetTask.add(target);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ if (request.isRecordLog()) {
|
|
|
|
+
|
|
|
|
+ ProcessInstance processInstance = runtimeService
|
|
|
|
+ .createProcessInstanceQuery()
|
|
|
|
+ .processInstanceId(task.getProcessInstanceId())
|
|
|
|
+ .singleResult();
|
|
|
|
+
|
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
|
+ data.put("targetTask", targetTask);
|
|
|
|
+ if (request.getData() != null) {
|
|
|
|
+ data.putAll(request.getData());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ProcessHistoryEntity history = ProcessHistoryEntity.builder()
|
|
|
|
+ .businessKey(processInstance.getBusinessKey())
|
|
|
|
+ .type("jump")
|
|
|
|
+ .typeText("流程跳转")
|
|
|
|
+ .creatorId(request.getJumpUserId())
|
|
|
|
+ .creatorName(request.getJumpUserName())
|
|
|
|
+ .processDefineId(processInstance.getProcessDefinitionId())
|
|
|
|
+ .processInstanceId(processInstance.getProcessInstanceId())
|
|
|
|
+ .taskId(task.getId())
|
|
|
|
+ .taskDefineKey(task.getTaskDefinitionKey())
|
|
|
|
+ .taskName(task.getName())
|
|
|
|
+ .data(data)
|
|
|
|
+ .build();
|
|
|
|
+
|
|
|
|
+ processHistoryService.insert(history);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void endProcess(String procInstId) {
|
|
public void endProcess(String procInstId) {
|
|
- ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult();
|
|
|
|
- ActivityImpl activity = bpmActivityService.getEndEvent(processInstance.getProcessDefinitionId());
|
|
|
|
- jumpTask(procInstId, activity.getId());
|
|
|
|
|
|
+// ProcessInstance processInstance = runtimeService
|
|
|
|
+// .createProcessInstanceQuery()
|
|
|
|
+// .processInstanceId(procInstId)
|
|
|
|
+// .singleResult();
|
|
|
|
+// ActivityImpl activity = bpmActivityService.getEndEvent(processInstance.getProcessDefinitionId());
|
|
|
|
+// List<Task> tasks = selectNowTask(procInstId);
|
|
|
|
+//
|
|
|
|
+// if (!tasks.isEmpty()) {
|
|
|
|
+// doJumpTask(tasks.get(0).getId(), activity.getId());
|
|
|
|
+// }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -338,11 +429,14 @@ public class BpmTaskServiceImpl extends AbstractFlowableService implements BpmTa
|
|
List<CandidateInfo> candidateInfoList = processConfigurationService
|
|
List<CandidateInfo> candidateInfoList = processConfigurationService
|
|
.getActivityConfiguration(doingUserId, task.getProcessDefinitionId(), task.getTaskDefinitionKey())
|
|
.getActivityConfiguration(doingUserId, task.getProcessDefinitionId(), task.getTaskDefinitionKey())
|
|
.getCandidateInfo(task);
|
|
.getCandidateInfo(task);
|
|
-
|
|
|
|
- for (CandidateInfo candidateInfo : candidateInfoList) {
|
|
|
|
- Authentication user = candidateInfo.user();
|
|
|
|
- if (user != null) {
|
|
|
|
- taskService.addCandidateUser(task.getId(), user.getUser().getId());
|
|
|
|
|
|
+ if (CollectionUtils.isEmpty(candidateInfoList)) {
|
|
|
|
+ logger.warn("任务:{}未能设置候选人,此任务可能无法办理!", task);
|
|
|
|
+ } else {
|
|
|
|
+ for (CandidateInfo candidateInfo : candidateInfoList) {
|
|
|
|
+ Authentication user = candidateInfo.user();
|
|
|
|
+ if (user != null) {
|
|
|
|
+ taskService.addCandidateUser(task.getId(), user.getUser().getId());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|