|
@@ -8,9 +8,11 @@ import com.aizuda.boot.modules.flw.flow.FlowHelper;
|
|
|
import com.aizuda.boot.modules.flw.mapper.FlowlongMapper;
|
|
|
import com.aizuda.boot.modules.flw.service.*;
|
|
|
import com.aizuda.boot.modules.system.service.ISysSSEService;
|
|
|
+import com.aizuda.bpm.engine.FlowDataTransfer;
|
|
|
import com.aizuda.bpm.engine.FlowLongEngine;
|
|
|
import com.aizuda.bpm.engine.RuntimeService;
|
|
|
import com.aizuda.bpm.engine.TaskService;
|
|
|
+import com.aizuda.bpm.engine.core.Execution;
|
|
|
import com.aizuda.bpm.engine.core.FlowCreator;
|
|
|
import com.aizuda.bpm.engine.core.enums.PerformType;
|
|
|
import com.aizuda.bpm.engine.core.enums.ProcessType;
|
|
@@ -26,6 +28,7 @@ import com.aizuda.service.web.UserSession;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.apache.commons.collections.MapUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
@@ -225,7 +228,7 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
|
|
|
} else {
|
|
|
flwProcessForm = flwProcessFormService.getByInstanceId(instanceId);
|
|
|
}
|
|
|
- return null == flwProcessForm ? null :flwProcessForm.getContent();
|
|
|
+ return null == flwProcessForm ? null : flwProcessForm.getContent();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -249,6 +252,40 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
|
|
|
return mapList;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> listNextNodes(NextNodesDTO dto) {
|
|
|
+ FlwInstance instance = flowLongEngine.queryService().getInstance(dto.getInstanceId());
|
|
|
+ ApiAssert.fail(null == instance, "当前流程实例不存在");
|
|
|
+ FlwExtInstance extInstance = flowLongEngine.queryService().getExtInstance(dto.getInstanceId());
|
|
|
+ NodeModel rootNodeModel = extInstance.model().getNodeConfig();
|
|
|
+ Execution execution = new Execution(FlowHelper.getFlowCreator(), dto.getArgs());
|
|
|
+ Map<String, Object> nodeModelsMap = new HashMap<>();
|
|
|
+ List<NodeModel> nodeModels = ModelHelper.getNextChildNodes(flowLongEngine.getContext(), execution, rootNodeModel, instance.getCurrentNodeKey());
|
|
|
+ if (null != nodeModels) {
|
|
|
+ // 1,普通审批
|
|
|
+ int nodeType = 1;
|
|
|
+ if (nodeModels.size() > 1) {
|
|
|
+ // 判断是否为条件分支,根据父节点确定分支类型
|
|
|
+ NodeModel nextParentNode = nodeModels.get(0).getParentNode();
|
|
|
+ if (TaskType.conditionNode.eq(nextParentNode.getType())) {
|
|
|
+ // 4,条件分支 8,并发分支 9,包容分支
|
|
|
+ nodeType = nextParentNode.getParentNode().getType();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ nodeModelsMap.put("nodeType", nodeType);
|
|
|
+ nodeModelsMap.put("nodeModels", nodeModels.stream().map(nodeModel -> {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("nodeName", nodeModel.getNodeName());
|
|
|
+ map.put("nodeKey", nodeModel.getNodeKey());
|
|
|
+ map.put("nodeAssigneeList", nodeModel.getNodeAssigneeList());
|
|
|
+ map.put("nodeCandidate", nodeModel.getNodeCandidate());
|
|
|
+ map.put("selectMode", nodeModel.getSelectMode());
|
|
|
+ return map;
|
|
|
+ }).toList());
|
|
|
+ }
|
|
|
+ return nodeModelsMap;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public boolean viewed(Long taskId) {
|
|
|
return flowLongEngine.taskService().viewTask(taskId, FlowHelper.getFlwTaskActor());
|
|
@@ -362,6 +399,14 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public boolean consent(TaskApprovalDTO dto) {
|
|
|
+ // 判断是否修改模型
|
|
|
+ if (MapUtils.isNotEmpty(dto.getAssigneeMap())) {
|
|
|
+
|
|
|
+ // 传递动态分配处理人员
|
|
|
+ FlowDataTransfer.dynamicAssignee(Collections.unmodifiableMap(dto.getAssigneeMap()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取任务,保存表单
|
|
|
FlwTask flwTask = this.getFlwTask(dto.getTaskId());
|
|
|
FlowHelper.setProcessApprovalOpinion(dto.getContent());
|
|
|
ApiAssert.fail(!flwProcessFormService.saveForm(flwTask.getInstanceId(), dto.getProcessForm()), "保存保单内容失败");
|