|
@@ -6,15 +6,13 @@ import com.aizuda.boot.modules.flw.service.IFlwProcessApprovalService;
|
|
|
import com.aizuda.bpm.engine.FlowDataTransfer;
|
|
|
import com.aizuda.bpm.engine.FlowLongEngine;
|
|
|
import com.aizuda.bpm.engine.core.FlowCreator;
|
|
|
-import com.aizuda.bpm.engine.core.enums.EventType;
|
|
|
-import com.aizuda.bpm.engine.core.enums.NodeSetType;
|
|
|
-import com.aizuda.bpm.engine.core.enums.PerformType;
|
|
|
-import com.aizuda.bpm.engine.core.enums.TaskType;
|
|
|
+import com.aizuda.bpm.engine.core.enums.*;
|
|
|
import com.aizuda.bpm.engine.entity.FlwTask;
|
|
|
import com.aizuda.bpm.engine.listener.TaskListener;
|
|
|
import com.aizuda.bpm.engine.model.NodeModel;
|
|
|
import com.aizuda.bpm.engine.model.ProcessModel;
|
|
|
import com.aizuda.common.toolkit.StringUtils;
|
|
|
+import com.aizuda.core.api.ApiAssert;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
@@ -28,8 +26,20 @@ public class FlowTaskListener implements TaskListener {
|
|
|
private FlowLongEngine flowLongEngine;
|
|
|
|
|
|
@Override
|
|
|
- public boolean notify(EventType eventType, Supplier<FlwTask> supplier, FlowCreator flowCreator) {
|
|
|
- if (eventType == EventType.create || eventType == EventType.recreate) {
|
|
|
+ public boolean notify(EventType eventType, Supplier<FlwTask> supplier, NodeModel nodeModel, FlowCreator flowCreator) {
|
|
|
+ FlwTask flwTask = supplier.get();
|
|
|
+ if (EventType.create.eq(eventType) || EventType.recreate.eq(eventType)) {
|
|
|
+ // 获取当前节点信息
|
|
|
+ NodeModel currentNodeModel = this.getNodeModel(flwTask, nodeModel);
|
|
|
+ if (null != flwTask) {
|
|
|
+ if (NodeSetType.initiatorThemselves.eq(currentNodeModel.getSetType())) {
|
|
|
+ // 发起人自己,自动跳过
|
|
|
+ if (NodeApproveSelf.AutoSkip.eq(currentNodeModel.getApproveSelf())) {
|
|
|
+ // 执行自动跳转逻辑
|
|
|
+ flowLongEngine.autoJumpTask(flwTask.getId(), flowCreator);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
// 创建任务直接跳过
|
|
|
return true;
|
|
|
}
|
|
@@ -37,9 +47,7 @@ public class FlowTaskListener implements TaskListener {
|
|
|
// 监听处理其它任务事件
|
|
|
FlwProcessApproval fpa = new FlwProcessApproval();
|
|
|
fpa.setType(this.getType(eventType));
|
|
|
- FlwTask flwTask = supplier.get();
|
|
|
if (null != flwTask) {
|
|
|
- ApprovalContent content = new ApprovalContent();
|
|
|
fpa.setInstanceId(flwTask.getInstanceId());
|
|
|
fpa.setTaskId(flwTask.getId());
|
|
|
fpa.setTaskName(flwTask.getTaskName());
|
|
@@ -61,26 +69,34 @@ public class FlowTaskListener implements TaskListener {
|
|
|
fpa.setType(18);
|
|
|
}
|
|
|
}
|
|
|
- ProcessModel processModel = flowLongEngine.runtimeService().getProcessModelByInstanceId(flwTask.getInstanceId());
|
|
|
- NodeModel nodeModel = processModel.getNode(flwTask.getTaskKey());
|
|
|
- if (null != nodeModel) {
|
|
|
- if (eventType != EventType.cc) {
|
|
|
- String opinion = FlowDataTransfer.get("processApprovalOpinion");
|
|
|
- if (StringUtils.hasLength(opinion)) {
|
|
|
- content.setOpinion(opinion);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- if (NodeSetType.specifyMembers.eq(nodeModel.getSetType())) {
|
|
|
- // 指定成员类型
|
|
|
- content.setNodeUserList(nodeModel.getNodeAssigneeList());
|
|
|
- } else if (NodeSetType.role.eq(nodeModel.getSetType())) {
|
|
|
- // 角色类型
|
|
|
- content.setNodeRoleList(nodeModel.getNodeAssigneeList());
|
|
|
+ // 获取当前节点信息
|
|
|
+ NodeModel currentNodeModel = this.getNodeModel(flwTask, nodeModel);
|
|
|
+ boolean saveContent = false;
|
|
|
+ ApprovalContent content = new ApprovalContent();
|
|
|
+ if (EventType.cc.ne(eventType)) {
|
|
|
+ String opinion = FlowDataTransfer.get("processApprovalOpinion");
|
|
|
+ if (StringUtils.hasLength(opinion)) {
|
|
|
+ content.setOpinion(opinion);
|
|
|
+ saveContent = true;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (NodeSetType.specifyMembers.eq(currentNodeModel.getSetType())) {
|
|
|
+ // 指定成员类型
|
|
|
+ content.setNodeUserList(currentNodeModel.getNodeAssigneeList());
|
|
|
+ saveContent = true;
|
|
|
+ } else if (NodeSetType.role.eq(currentNodeModel.getSetType())) {
|
|
|
+ // 角色类型
|
|
|
+ content.setNodeRoleList(currentNodeModel.getNodeAssigneeList());
|
|
|
+ saveContent = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 记录审批内容
|
|
|
+ if (saveContent) {
|
|
|
+ fpa.setContent(content);
|
|
|
+ }
|
|
|
}
|
|
|
- fpa.setContent(content);
|
|
|
|
|
|
//用于流程图颜色标记
|
|
|
fpa.setTaskKey(flwTask.getTaskKey());
|
|
@@ -94,12 +110,25 @@ public class FlowTaskListener implements TaskListener {
|
|
|
return flwProcessApprovalService.save(fpa);
|
|
|
}
|
|
|
|
|
|
+ private NodeModel getNodeModel(FlwTask flwTask, NodeModel nodeModel) {
|
|
|
+ if (null == nodeModel) {
|
|
|
+ // 不存在情况从数据库中获取
|
|
|
+ ProcessModel processModel = flowLongEngine.runtimeService().getProcessModelByInstanceId(flwTask.getInstanceId());
|
|
|
+ ApiAssert.isEmpty(processModel, "流程模型节点查询异常");
|
|
|
+ return processModel.getNode(flwTask.getTaskKey());
|
|
|
+ }
|
|
|
+ return nodeModel;
|
|
|
+ }
|
|
|
+
|
|
|
private int getType(EventType eventType) {
|
|
|
// 办理
|
|
|
int type = 3;
|
|
|
if (eventType == EventType.start) {
|
|
|
// 发起
|
|
|
type = 1;
|
|
|
+ } else if (eventType == EventType.cc) {
|
|
|
+ // 抄送
|
|
|
+ type = 2;
|
|
|
} else if (eventType == EventType.reject) {
|
|
|
// 驳回
|
|
|
type = 4;
|
|
@@ -124,6 +153,15 @@ public class FlowTaskListener implements TaskListener {
|
|
|
} else if (eventType == EventType.timeout) {
|
|
|
// 超时
|
|
|
type = 17;
|
|
|
+ } else if (eventType == EventType.autoJump) {
|
|
|
+ // 自动跳转
|
|
|
+ type = 19;
|
|
|
+ } else if (eventType == EventType.autoComplete) {
|
|
|
+ // 自动完成
|
|
|
+ type = 20;
|
|
|
+ } else if (eventType == EventType.autoReject) {
|
|
|
+ // 自动拒绝
|
|
|
+ type = 21;
|
|
|
}
|
|
|
return type;
|
|
|
}
|