diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/BaseConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/BaseConverter.java index 95c4be0e..4df81fb1 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/BaseConverter.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/BaseConverter.java @@ -12,7 +12,8 @@ import java.util.stream.Collectors; @org.mapstruct.MapperConfig( componentModel = "spring", - unmappedTargetPolicy = org.mapstruct.ReportingPolicy.IGNORE + unmappedTargetPolicy = org.mapstruct.ReportingPolicy.IGNORE, + uses = {EnumListConverter.class} ) public interface BaseConverter, D extends BaseDTO> { diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/EnumListConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/EnumListConverter.java new file mode 100644 index 00000000..7e3d75ca --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/converter/EnumListConverter.java @@ -0,0 +1,31 @@ +package com.qqchen.deploy.backend.framework.converter; + +import org.mapstruct.Qualifier; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.List; + +/** + * 枚举列表转换器 + */ +public class EnumListConverter { + + @Qualifier + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.CLASS) + public @interface EnumMapping { + } + + @EnumMapping + public > List mapEnumList(List value) { + return value; + } + + @EnumMapping + public > T mapEnum(T value) { + return value; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/WorkflowDefinitionApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/WorkflowDefinitionApiController.java index 6152664a..2febe3f0 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/WorkflowDefinitionApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/WorkflowDefinitionApiController.java @@ -3,11 +3,13 @@ package com.qqchen.deploy.backend.workflow.api; import com.qqchen.deploy.backend.framework.api.Response; import com.qqchen.deploy.backend.framework.controller.BaseController; import com.qqchen.deploy.backend.framework.enums.ResponseCode; +import com.qqchen.deploy.backend.workflow.dto.WorkflowCategoryDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowExecutionDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceCreateDTO; import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition; +import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums; import com.qqchen.deploy.backend.workflow.query.WorkflowDefinitionQuery; import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService; @@ -56,7 +58,7 @@ public class WorkflowDefinitionApiController extends BaseController publishedWorkflowDesign(@PathVariable Long workflowDefinitionId){ + public Response publishedWorkflowDesign(@PathVariable Long workflowDefinitionId) { workflowDefinitionService.publishedWorkflowDesign(workflowDefinitionId); return Response.success(); } @@ -252,6 +254,14 @@ public class WorkflowDefinitionApiController extends BaseController> getWorkflowCategories() { + return Response.success(workflowDefinitionService.getWorkflowCategories()); + } + + @Override protected void exportData(HttpServletResponse response, List data) { diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/config/BpmnNodeConfig.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/config/BpmnNodeConfig.java deleted file mode 100644 index aa38fff0..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/config/BpmnNodeConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.qqchen.deploy.backend.workflow.config; - -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -/** - * BPMN节点配置 - */ -@Data -@Builder -public class BpmnNodeConfig { - - /** - * 节点类型 - */ - private String type; - - /** - * 节点名称 - */ - private String name; - - /** - * 是否异步执行 - */ - private boolean async; - - /** - * 必需的字段 - */ - private List requiredFields; - - /** - * 委托表达式 - */ - private String delegateExpression; -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/config/BpmnNodeManager.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/config/BpmnNodeManager.java deleted file mode 100644 index b5dc6ecf..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/config/BpmnNodeManager.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.qqchen.deploy.backend.workflow.config; - -import com.qqchen.deploy.backend.workflow.annotation.BpmnNode; -import jakarta.annotation.PostConstruct; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Component; - -import java.util.Arrays; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * BPMN节点管理器 - */ -@Slf4j -@Component -public class BpmnNodeManager { - - @Autowired - private ApplicationContext applicationContext; - - private final Map nodeConfigs = new ConcurrentHashMap<>(); - - @PostConstruct - public void init() { - // 扫描所有带有@BpmnNode注解的类 - Map beans = applicationContext.getBeansWithAnnotation(BpmnNode.class); - - beans.forEach((name, bean) -> { - BpmnNode annotation = bean.getClass().getAnnotation(BpmnNode.class); - if (annotation != null) { - BpmnNodeConfig config = BpmnNodeConfig.builder() - .type(annotation.type()) - .name(annotation.name()) - .async(annotation.async()) - .requiredFields(Arrays.asList(annotation.requiredFields())) - .delegateExpression(annotation.delegateExpression()) - .build(); - - nodeConfigs.put(annotation.type(), config); - log.info("Registered BPMN node type: {}", annotation.type()); - } - }); - } - - /** - * 获取节点配置 - */ - public BpmnNodeConfig getNodeConfig(String type) { - return nodeConfigs.get(type); - } - - /** - * 检查节点类型是否存在 - */ - public boolean hasNodeType(String type) { - return nodeConfigs.containsKey(type); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java deleted file mode 100644 index 8bcf54ff..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.qqchen.deploy.backend.workflow.constants; - -/** - * BPMN相关常量 - */ -public class BpmnConstants { - - /** - * 节点类型 - */ - public static class NodeShape { - public static final String START = "start"; - public static final String END = "end"; - public static final String EDGE = "edge"; - public static final String SHELL_TASK = "shellTask"; - } - - /** - * 节点属性 - */ - public static class NodeAttribute { - public static final String SHAPE = "shape"; - public static final String ID = "id"; - public static final String LABEL = "label"; - public static final String SOURCE = "source"; - public static final String TARGET = "target"; - public static final String DATA = "data"; - public static final String CONDITION = "condition"; - public static final String SERVICE_TASK = "serviceTask"; - public static final String FIELDS = "fields"; - } - - /** - * 默认节点ID - */ - public static class DefaultNodeId { - public static final String START_EVENT = "startEvent"; - public static final String END_EVENT = "endEvent"; - public static final String START_FLOW = "flow_start"; - public static final String END_FLOW = "flow_end"; - } - - /** - * 默认节点名称 - */ - public static class DefaultNodeName { - public static final String START_EVENT = "开始"; - public static final String END_EVENT = "结束"; - } - - /** - * 委托表达式类型 - */ - public static class DelegateExpression { - public static final String TYPE = "delegateExpression"; - public static final String SHELL_TASK = "${shellTaskDelegate}"; - } - - /** - * Shell任务配置 - */ - public static class ShellTaskConfig { - public static final String SCRIPT = "script"; - public static final String WORK_DIR = "workDir"; - public static final String TIMEOUT = "timeout"; - public static final String RETRY_COUNT = "retryCount"; - public static final String ENV = "env"; - public static final String PRIORITY = "priority"; - public static final String GROUP = "group"; - } - - /** - * 流程属性 - */ - public static class ProcessAttribute { - public static final String CELLS = "cells"; - public static final String EXECUTABLE = "true"; - } - - private BpmnConstants() { - // 防止实例化 - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowCategoryDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowCategoryDTO.java new file mode 100644 index 00000000..ca3227b6 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowCategoryDTO.java @@ -0,0 +1,19 @@ +package com.qqchen.deploy.backend.workflow.dto; + + +import lombok.Data; + +import java.util.List; + +@Data +public class WorkflowCategoryDTO { + + private String code; + + private String lable; + + private String description; + + private List supportedTriggers; + +} diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowDefinitionDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowDefinitionDTO.java index 7405e0f4..859a9571 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowDefinitionDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowDefinitionDTO.java @@ -3,54 +3,70 @@ package com.qqchen.deploy.backend.workflow.dto; import com.fasterxml.jackson.databind.JsonNode; import com.qqchen.deploy.backend.framework.dto.BaseDTO; import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph; +import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; +import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum; +import jakarta.persistence.Column; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.List; + /** * 工作流定义DTO + * * @author cascade * @date 2024-12-11 */ @Data @EqualsAndHashCode(callSuper = true) public class WorkflowDefinitionDTO extends BaseDTO { - + /** * 流程名称 */ private String name; - + /** * 流程标识 */ private String key; - + + /** + * 分类 + */ + private WorkflowCategoryEnum category; + + /** + * 触发类型列表 + */ + private List triggers; + /** * 流程版本 */ private Integer flowVersion; - + /** * BPMN XML内容 */ private String bpmnXml; - + /** * 图形数据 */ private WorkflowDefinitionGraph graph; - + /** * 表单配置 */ private JsonNode formConfig; - + /** * 流程状态 */ private WorkflowStatusEnums status; - + /** * 流程描述 */ diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowTriggerTypeDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowTriggerTypeDTO.java new file mode 100644 index 00000000..d120c55a --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowTriggerTypeDTO.java @@ -0,0 +1,12 @@ +package com.qqchen.deploy.backend.workflow.dto; + +import lombok.Data; + +@Data +public class WorkflowTriggerTypeDTO { + + private String code; + + private String lable; + +} diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowDefinition.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowDefinition.java index 79387526..6594e520 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowDefinition.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowDefinition.java @@ -3,11 +3,14 @@ package com.qqchen.deploy.backend.workflow.entity; import com.fasterxml.jackson.databind.JsonNode; import com.qqchen.deploy.backend.framework.annotation.LogicDelete; import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph; +import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; +import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum; import com.qqchen.deploy.backend.workflow.hibernate.WorkflowGraphType; import com.qqchen.deploy.backend.framework.domain.Entity; import com.vladmihalcea.hibernate.type.json.JsonType; import jakarta.persistence.Column; +import jakarta.persistence.Convert; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.Table; @@ -15,6 +18,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.hibernate.annotations.Type; +import java.util.List; + /** * 工作流定义实体 */ @@ -24,34 +29,46 @@ import org.hibernate.annotations.Type; @EqualsAndHashCode(callSuper = true) @LogicDelete public class WorkflowDefinition extends Entity { - + /** * 流程名称 */ @Column(nullable = false) private String name; - + /** * 流程标识 */ @Column(name = "`key`", nullable = false) private String key; + /** + * 流程分类 + */ + @Column(name = "category", nullable = false) + @Enumerated(EnumType.STRING) + private WorkflowCategoryEnum category; + + + @Column(name = "triggers", nullable = false) + @Convert(converter = WorkflowTriggerTypeListConverter.class) + private List triggers; + @Column(name = "process_definition_id", nullable = false) private String processDefinitionId; - + /** * 流程版本 */ @Column(name = "flow_version", nullable = false) private Integer flowVersion; - + /** * BPMN XML内容 */ @Column(name = "bpmn_xml", columnDefinition = "TEXT") private String bpmnXml; - + /** * 流程图数据,包含节点和连线的位置、样式等信息 */ @@ -72,7 +89,7 @@ public class WorkflowDefinition extends Entity { @Column(nullable = false) @Enumerated(EnumType.STRING) private WorkflowStatusEnums status; - + /** * 流程描述 */ @@ -91,11 +108,6 @@ public class WorkflowDefinition extends Entity { @Column(name = "target_namespace") private String targetNamespace = "http://www.flowable.org/test"; - /** - * 流程分类 - */ - @Column(name = "category") - private String category; /** * 流程标签,用于分组和过滤 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowTriggerTypeListConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowTriggerTypeListConverter.java new file mode 100644 index 00000000..bfb50965 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowTriggerTypeListConverter.java @@ -0,0 +1,47 @@ +package com.qqchen.deploy.backend.workflow.entity; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Converter +public class WorkflowTriggerTypeListConverter implements AttributeConverter, String> { + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public String convertToDatabaseColumn(List attribute) { + try { + return objectMapper.writeValueAsString( + attribute.stream() + .map(Enum::name) + .collect(Collectors.toList()) + ); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException("Error converting trigger type list to JSON", e); + } + } + + @Override + public List convertToEntityAttribute(String dbData) { + try { + if (StringUtils.isEmpty(dbData)) { + return new ArrayList<>(); + } + List triggerNames = objectMapper.readValue(dbData, new TypeReference>() { + }); + return triggerNames.stream() + .map(WorkflowTriggerTypeEnum::valueOf) + .collect(Collectors.toList()); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException("Error converting JSON to trigger type list", e); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowCategoryEnum.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowCategoryEnum.java new file mode 100644 index 00000000..720e22a3 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowCategoryEnum.java @@ -0,0 +1,72 @@ +package com.qqchen.deploy.backend.workflow.enums; + + +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; + +/** + * 工作流节点分类枚举 + */ +@Getter +public enum WorkflowCategoryEnum { + // 1. 脚本执行类 + SCRIPT_EXECUTION( + "脚本执行", + "用于执行各类脚本的流程", + Arrays.asList(WorkflowTriggerTypeEnum.MANUAL, WorkflowTriggerTypeEnum.SCHEDULED) + ), + + // 2. 部署类 + DEPLOYMENT( + "应用部署", + "用于应用部署的流程", + Arrays.asList(WorkflowTriggerTypeEnum.MANUAL, WorkflowTriggerTypeEnum.SCHEDULED, WorkflowTriggerTypeEnum.APPROVAL) + ), + + // 3. 数据同步类 + DATA_SYNC( + "数据同步", + "用于第三方系统数据同步的流程", + Arrays.asList(WorkflowTriggerTypeEnum.MANUAL, WorkflowTriggerTypeEnum.SCHEDULED) + ), + + // 4. 配置同步类 + CONFIG_SYNC( + "配置同步", + "用于配置中心数据同步的流程", + Arrays.asList(WorkflowTriggerTypeEnum.MANUAL, WorkflowTriggerTypeEnum.APPROVAL) + ), + + // 5. 审批流程类 + APPROVAL( + "审批流程", + "纯审批流程", + Arrays.asList(WorkflowTriggerTypeEnum.MANUAL) + ), + + // 6. 其他类型(用于扩展) + OTHER( + "其他", + "其他类型流程", + Arrays.asList(WorkflowTriggerTypeEnum.MANUAL) + ); + + private final String label; // 显示名称 + + private final String description; // 描述 + + private final List supportedTriggers; // 支持的触发方式 + + WorkflowCategoryEnum(String label, String description, List supportedTriggers) { + this.label = label; + this.description = description; + this.supportedTriggers = supportedTriggers; + } + + // 判断是否支持某种触发方式 + public boolean supportsTriggerType(WorkflowTriggerTypeEnum triggerType) { + return supportedTriggers.contains(triggerType); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowTriggerTypeEnum.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowTriggerTypeEnum.java new file mode 100644 index 00000000..eb86e41e --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowTriggerTypeEnum.java @@ -0,0 +1,18 @@ +package com.qqchen.deploy.backend.workflow.enums; + + +import lombok.Getter; + +@Getter +public enum WorkflowTriggerTypeEnum { + MANUAL("手动触发"), + SCHEDULED("定时触发"), + APPROVAL("审批触发"), + EVENT("事件触发"); // 预留将来可能的事件驱动场景 + + private final String label; + + WorkflowTriggerTypeEnum(String label) { + this.label = label; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/model/BpmnNodeConfig.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/model/BpmnNodeConfig.java deleted file mode 100644 index c44b4a46..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/model/BpmnNodeConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.qqchen.deploy.backend.workflow.model; - -import com.qqchen.deploy.backend.workflow.enums.BpmnNodeTypeEnums; -import lombok.Data; - -import java.util.HashMap; -import java.util.Map; - -/** - * BPMN节点配置 - */ -@Data -public class BpmnNodeConfig { - /** - * 节点ID - */ - private String id; - - /** - * 节点名称 - */ - private String name; - - /** - * 节点类型 - */ - private BpmnNodeTypeEnums type; - - /** - * 节点属性 - */ - private Map properties = new HashMap<>(); - - /** - * 扩展字段 - */ - private Map extensions = new HashMap<>(); -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowDefinitionService.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowDefinitionService.java index ca1e9930..78fbddf6 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowDefinitionService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowDefinitionService.java @@ -1,16 +1,19 @@ package com.qqchen.deploy.backend.workflow.service; import com.qqchen.deploy.backend.framework.service.IBaseService; +import com.qqchen.deploy.backend.workflow.dto.WorkflowCategoryDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowDesignDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowExecutionDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceCreateDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO; import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition; +import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum; import org.flowable.engine.repository.Deployment; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.transaction.annotation.Transactional; +import java.util.List; import java.util.Map; /** @@ -55,4 +58,6 @@ public interface IWorkflowDefinitionService extends IBaseService getWorkflowCategories(); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowDefinitionServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowDefinitionServiceImpl.java index 4b985de8..75243df0 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowDefinitionServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowDefinitionServiceImpl.java @@ -1,26 +1,22 @@ package com.qqchen.deploy.backend.workflow.service.impl; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; -import com.qqchen.deploy.backend.workflow.converter.WorkflowInstanceConverter; +import com.qqchen.deploy.backend.workflow.dto.WorkflowCategoryDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowExecutionDTO; -import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceCreateDTO; -import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO; +import com.qqchen.deploy.backend.workflow.dto.WorkflowTriggerTypeDTO; import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph; import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition; -import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance; -import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums; +import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowNodeInstanceStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository; -import com.qqchen.deploy.backend.workflow.repository.IWorkflowInstanceRepository; import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService; import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService; import com.qqchen.deploy.backend.workflow.util.BpmnConverter; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.SequenceFlow; -import org.flowable.bpmn.model.StartEvent; import org.flowable.engine.HistoryService; import org.flowable.engine.ManagementService; import org.flowable.engine.RepositoryService; @@ -38,8 +34,8 @@ import org.flowable.bpmn.model.FlowElement; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; @@ -340,4 +336,28 @@ public class WorkflowDefinitionServiceImpl extends BaseServiceImpl getWorkflowCategories() { + return Arrays.stream(WorkflowCategoryEnum.values()) + .map(category -> { + WorkflowCategoryDTO dto = new WorkflowCategoryDTO(); + dto.setCode(category.name()); + dto.setLable(category.getLabel()); + dto.setDescription(category.getDescription()); + // 获取该类别支持的触发方式 + dto.setSupportedTriggers( + category.getSupportedTriggers().stream() + .map(triggerType -> { + WorkflowTriggerTypeDTO triggerDto = new WorkflowTriggerTypeDTO(); + triggerDto.setCode(triggerType.name()); + triggerDto.setLable(triggerType.getLabel()); + return triggerDto; + }) + .collect(Collectors.toList()) + ); + return dto; + }) + .collect(Collectors.toList()); + } + } diff --git a/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql b/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql index a2d40bf7..aa80efb6 100644 --- a/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql +++ b/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql @@ -407,10 +407,11 @@ CREATE TABLE workflow_definition -- 基础信息 name VARCHAR(255) NOT NULL COMMENT '流程名称', `key` VARCHAR(255) NOT NULL COMMENT '流程标识', - process_definition_id VARCHAR(100) NULL COMMENT '工作流定义ID', - flow_version INT NOT NULL COMMENT '流程版本', - description TEXT COMMENT '流程描述', category VARCHAR(100) COMMENT '流程分类', + triggers VARCHAR(200) COMMENT '流程分类', + process_definition_id VARCHAR(100) NULL COMMENT '工作流定义ID', + flow_version INT NOT NULL COMMENT '流程版本', + description TEXT COMMENT '流程描述', -- 流程配置 bpmn_xml TEXT COMMENT 'BPMN XML内容', @@ -424,8 +425,8 @@ CREATE TABLE workflow_definition target_namespace VARCHAR(255) DEFAULT 'http://www.flowable.org/test' COMMENT '目标命名空间', -- 审计字段 - created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP (6) COMMENT '创建时间', - updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP (6) ON UPDATE CURRENT_TIMESTAMP (6) COMMENT '更新时间', + created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间', + updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间', created_by BIGINT COMMENT '创建人', updated_by BIGINT COMMENT '更新人', is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除', diff --git a/backend/src/main/resources/db/migration/V1.0.1__init_data.sql b/backend/src/main/resources/db/migration/V1.0.1__init_data.sql index 62f1a4ee..d3f68c00 100644 --- a/backend/src/main/resources/db/migration/V1.0.1__init_data.sql +++ b/backend/src/main/resources/db/migration/V1.0.1__init_data.sql @@ -158,7 +158,7 @@ INSERT INTO sys_external_system ( -- 工作流定义测试数据 INSERT INTO workflow_definition ( -- 基础信息 - name, `key`, process_definition_id, flow_version, description, category, + name, `key`, process_definition_id, flow_version, description, category, triggers, -- 流程配置 graph, form_config, tags, -- 流程属性 @@ -168,7 +168,7 @@ INSERT INTO workflow_definition ( ) VALUES -- 简单脚本流程:开始 -> 脚本任务 -> 结束 ( - '简单脚本流程', 'simple_script_flow', null, 1, '一个包含脚本任务的简单流程', 'test', + '简单脚本流程', 'simple_script_flow', null, 1, '一个包含脚本任务的简单流程', 'SCRIPT_EXECUTION', null, '{ "nodes" : [ { "id" : "startEvent1", @@ -337,7 +337,7 @@ INSERT INTO workflow_definition ( -- 复杂业务流程:开始 -> 脚本任务A -> 脚本任务B -> 结束 ( - '复杂业务流程', 'complex_business_flow', null, 1, '包含多个脚本任务节点的业务流程', 'business', + '复杂业务流程', 'complex_business_flow', null, 1, '包含多个脚本任务节点的业务流程', 'SCRIPT_EXECUTION', null, '{ "nodes" : [ { "id" : "startEvent1",