大声道撒旦
This commit is contained in:
parent
7652a9ad27
commit
f6e19d7c24
@ -0,0 +1,85 @@
|
|||||||
|
package com.qqchen.deploy.backend.workflow.delegate;
|
||||||
|
|
||||||
|
import com.qqchen.deploy.backend.workflow.constants.WorkFlowConstants;
|
||||||
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.ApprovalNodeLocalVariables;
|
||||||
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.ApprovalNodePanelVariables;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.flowable.engine.TaskService;
|
||||||
|
import org.flowable.engine.delegate.BpmnError;
|
||||||
|
import org.flowable.engine.delegate.DelegateExecution;
|
||||||
|
import org.flowable.task.api.Task;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批节点的委派者实现
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class ApprovalNodeDelegate extends BaseNodeDelegate<ApprovalNodePanelVariables, ApprovalNodeLocalVariables> {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TaskService taskService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<ApprovalNodePanelVariables> getPanelVariablesClass() {
|
||||||
|
return ApprovalNodePanelVariables.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<ApprovalNodeLocalVariables> getLocalVariablesClass() {
|
||||||
|
return ApprovalNodeLocalVariables.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void executeInternal(DelegateExecution execution, ApprovalNodePanelVariables panelVariables, ApprovalNodeLocalVariables localVariables) {
|
||||||
|
if (panelVariables == null) {
|
||||||
|
throw new BpmnError(WorkFlowConstants.WORKFLOW_EXEC_ERROR, "Panel variables are required but not provided");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 创建用户任务
|
||||||
|
Task task = taskService.createTaskQuery()
|
||||||
|
.processInstanceId(execution.getProcessInstanceId())
|
||||||
|
.taskDefinitionKey(execution.getCurrentActivityId())
|
||||||
|
.singleResult();
|
||||||
|
|
||||||
|
if (task == null) {
|
||||||
|
throw new BpmnError(WorkFlowConstants.WORKFLOW_EXEC_ERROR, "Failed to create approval task");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置任务属性
|
||||||
|
task.setName(panelVariables.getName());
|
||||||
|
task.setDescription(panelVariables.getDescription());
|
||||||
|
|
||||||
|
// 设置审批人
|
||||||
|
if (panelVariables.getAssignee() != null) {
|
||||||
|
task.setAssignee(panelVariables.getAssignee());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置候选组
|
||||||
|
if (panelVariables.getCandidateGroup() != null) {
|
||||||
|
taskService.addCandidateGroup(task.getId(), panelVariables.getCandidateGroup());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置超时时间
|
||||||
|
if (panelVariables.getTimeoutHours() != null) {
|
||||||
|
Date dueDate = java.sql.Timestamp.valueOf(LocalDateTime.now().plusHours(panelVariables.getTimeoutHours()));
|
||||||
|
task.setDueDate(dueDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新任务
|
||||||
|
taskService.saveTask(task);
|
||||||
|
|
||||||
|
log.info("Created approval task: {}, assignee: {}, candidateGroup: {}",
|
||||||
|
task.getId(), panelVariables.getAssignee(), panelVariables.getCandidateGroup());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Failed to create approval task", e);
|
||||||
|
throw new BpmnError(WorkFlowConstants.WORKFLOW_EXEC_ERROR, "Failed to create approval task: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
package com.qqchen.deploy.backend.workflow.dto.definition.node.fromVariables;
|
||||||
|
|
||||||
|
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批节点表单变量
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ApprovalNodeFormVariables extends BaseNodeFormVariables {
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批意见",
|
||||||
|
description = "请填写审批意见",
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
private String comment;
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批结果",
|
||||||
|
description = "请选择审批结果",
|
||||||
|
required = true,
|
||||||
|
enumValues = {"APPROVED", "REJECTED"},
|
||||||
|
enumNames = {"同意", "拒绝"}
|
||||||
|
)
|
||||||
|
private String approvalResult;
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
|
||||||
|
|
||||||
|
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批节点运行时变量
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ApprovalNodeLocalVariables {
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批意见",
|
||||||
|
description = "审批人填写的意见"
|
||||||
|
)
|
||||||
|
private String comment;
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批结果",
|
||||||
|
description = "审批结果",
|
||||||
|
enumValues = {"APPROVED", "REJECTED"},
|
||||||
|
enumNames = {"同意", "拒绝"}
|
||||||
|
)
|
||||||
|
private String approvalResult;
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批时间",
|
||||||
|
description = "审批完成时间"
|
||||||
|
)
|
||||||
|
private String approvalTime;
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
package com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables;
|
||||||
|
|
||||||
|
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批节点配置
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class ApprovalNodePanelVariables extends BaseNodePanelVariables {
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批人",
|
||||||
|
description = "审批人用户ID",
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
private String assignee;
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "审批组",
|
||||||
|
description = "审批组ID"
|
||||||
|
)
|
||||||
|
private String candidateGroup;
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "超时时间(小时)",
|
||||||
|
description = "审批超时时间,单位小时",
|
||||||
|
required = true,
|
||||||
|
defaultValue = "24"
|
||||||
|
)
|
||||||
|
private Integer timeoutHours;
|
||||||
|
|
||||||
|
@SchemaProperty(
|
||||||
|
title = "是否需要会签",
|
||||||
|
description = "是否需要所有审批人同意",
|
||||||
|
defaultValue = "false"
|
||||||
|
)
|
||||||
|
private Boolean needAllApprove;
|
||||||
|
}
|
||||||
@ -3,20 +3,23 @@ package com.qqchen.deploy.backend.workflow.enums;
|
|||||||
import com.fasterxml.jackson.annotation.JsonValue;
|
import com.fasterxml.jackson.annotation.JsonValue;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.fromVariables.DeployNodeFormVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.fromVariables.DeployNodeFormVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.fromVariables.ScriptNodeFormVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.fromVariables.ScriptNodeFormVariables;
|
||||||
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.fromVariables.ApprovalNodeFormVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.DeployNodeLocalVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.DeployNodeLocalVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.NotificationNodeLocalVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.NotificationNodeLocalVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.ScriptNodeLocalVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.ScriptNodeLocalVariables;
|
||||||
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.ApprovalNodeLocalVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.DeployNodePanelVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.DeployNodePanelVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.EndNodePanelVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.EndNodePanelVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.GatewayNodePanelVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.GatewayNodePanelVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.NotificationNodePanelVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.NotificationNodePanelVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.ScriptNodePanelVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.ScriptNodePanelVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.StartNodePanelVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.StartNodePanelVariables;
|
||||||
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.panelVariables.ApprovalNodePanelVariables;
|
||||||
import com.qqchen.deploy.backend.workflow.dto.definition.node.uiVariables.NodeUiVariables;
|
import com.qqchen.deploy.backend.workflow.dto.definition.node.uiVariables.NodeUiVariables;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工作<EFBFBD><EFBFBD>节点类型枚举
|
* 工作节点类型枚举
|
||||||
* 定义了工作流中所有可用的节点类型及其UI配置
|
* 定义了工作流中所有可用的节点类型及其UI配置
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@ -102,6 +105,17 @@ public enum NodeTypeEnums {
|
|||||||
BpmnNodeTypeEnums.SERVICE_TASK,
|
BpmnNodeTypeEnums.SERVICE_TASK,
|
||||||
NodeCategoryEnums.TASK,
|
NodeCategoryEnums.TASK,
|
||||||
"通知节点"
|
"通知节点"
|
||||||
|
),
|
||||||
|
APPROVAL_NODE(
|
||||||
|
"APPROVAL_NODE",
|
||||||
|
"审批节点",
|
||||||
|
ApprovalNodeLocalVariables.class,
|
||||||
|
ApprovalNodePanelVariables.class,
|
||||||
|
ApprovalNodeFormVariables.class,
|
||||||
|
NodeUiVariables.class,
|
||||||
|
BpmnNodeTypeEnums.USER_TASK,
|
||||||
|
NodeCategoryEnums.TASK,
|
||||||
|
"审批任务"
|
||||||
);
|
);
|
||||||
//
|
//
|
||||||
// /**
|
// /**
|
||||||
@ -146,7 +160,7 @@ public enum NodeTypeEnums {
|
|||||||
// * 脚本任务节点
|
// * 脚本任务节点
|
||||||
// * 执行自定义脚本的任务节点
|
// * 执行自定义脚本的任务节点
|
||||||
// * 特点:
|
// * 特点:
|
||||||
// * - 支持多种脚本语言(如Shell、Python等)
|
// * - 支持多种脚本语言(如Shell、Python等<EFBFBD><EFBFBD><EFBFBD>
|
||||||
// * - 可以执行自定义业务逻辑
|
// * - 可以执行自定义业务逻辑
|
||||||
// * - 适合复杂的数据处理和计算
|
// * - 适合复杂的数据处理和计算
|
||||||
// */
|
// */
|
||||||
@ -191,7 +205,7 @@ public enum NodeTypeEnums {
|
|||||||
// PARALLEL_GATEWAY(
|
// PARALLEL_GATEWAY(
|
||||||
// "PARALLEL_GATEWAY",
|
// "PARALLEL_GATEWAY",
|
||||||
// "并行网关",
|
// "并行网关",
|
||||||
// "并行分支控制",
|
// "<EFBFBD><EFBFBD>行分支控制",
|
||||||
// new WorkflowNodeGraph()
|
// new WorkflowNodeGraph()
|
||||||
// .setShape("diamond")
|
// .setShape("diamond")
|
||||||
// .setSize(50, 50)
|
// .setSize(50, 50)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user