diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java index 1a32c86c..99d8d75c 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java @@ -15,10 +15,10 @@ import com.qqchen.deploy.backend.system.repository.IUserRepository; import com.fasterxml.jackson.databind.ObjectMapper; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceStartRequest; +import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO; import com.qqchen.deploy.backend.workflow.dto.inputmapping.ApprovalInputMapping; import com.qqchen.deploy.backend.workflow.dto.outputs.ApprovalOutputs; import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition; -import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog; import com.qqchen.deploy.backend.workflow.model.NodeContext; import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository; import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService; @@ -1028,7 +1028,7 @@ public class DeployServiceImpl implements IDeployService { result.setNodeId(nodeId); // 查询日志 - List logs = workflowNodeLogService.getNodeLogs(processInstanceId, nodeId); + List logs = workflowNodeLogService.getNodeLogs(processInstanceId, nodeId); if (logs.isEmpty()) { // 判断是过期还是还没有日志 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowNodeLog.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowNodeLog.java deleted file mode 100644 index db3d73d6..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowNodeLog.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.qqchen.deploy.backend.workflow.entity; - -import com.qqchen.deploy.backend.framework.domain.Entity; -import com.qqchen.deploy.backend.workflow.enums.LogLevel; -import com.qqchen.deploy.backend.workflow.enums.LogSource; -import jakarta.persistence.*; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 工作流节点日志实体 - * - * @author qqchen - * @since 2025-11-03 - */ -@Data -@Table(name = "workflow_node_log") -@jakarta.persistence.Entity -@EqualsAndHashCode(callSuper = true) -public class WorkflowNodeLog extends Entity { - - /** - * 流程实例ID(Flowable processInstanceId) - */ - @Column(name = "process_instance_id", nullable = false, length = 64) - private String processInstanceId; - - /** - * 节点ID(Flowable nodeId, 例如: sid_xxx) - */ - @Column(name = "node_id", nullable = false, length = 64) - private String nodeId; - - /** - * 日志序号(保证同一节点内日志有序,从1开始递增) - */ - @Column(name = "sequence_id", nullable = false) - private Long sequenceId; - - /** - * 时间戳(Unix毫秒) - */ - @Column(nullable = false) - private Long timestamp; - - /** - * 日志级别(INFO, WARN, ERROR, DEBUG) - */ - @Column(nullable = false, length = 10) - @Enumerated(EnumType.STRING) - private LogLevel level; - - /** - * 日志来源(JENKINS, FLOWABLE, SHELL, NOTIFICATION) - */ - @Column(nullable = false, length = 20) - @Enumerated(EnumType.STRING) - private LogSource source; - - /** - * 日志内容 - */ - @Column(columnDefinition = "TEXT", nullable = false) - private String message; -} - diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/repository/IWorkflowNodeLogRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/repository/IWorkflowNodeLogRepository.java deleted file mode 100644 index 9bf98050..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/repository/IWorkflowNodeLogRepository.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.qqchen.deploy.backend.workflow.repository; - -import com.qqchen.deploy.backend.framework.repository.IBaseRepository; -import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * 工作流节点日志 Repository - * - * @author qqchen - * @since 2025-11-03 - */ -@Repository -public interface IWorkflowNodeLogRepository extends IBaseRepository { - - /** - * 根据流程实例ID和节点ID查询日志(按序号排序) - */ - List findByProcessInstanceIdAndNodeIdOrderBySequenceIdAsc( - String processInstanceId, String nodeId); - - /** - * 根据流程实例ID和节点ID分页查询日志 - */ - Page findByProcessInstanceIdAndNodeIdOrderBySequenceIdAsc( - String processInstanceId, String nodeId, Pageable pageable); - - /** - * 根据流程实例ID查询所有节点的日志 - */ - List findByProcessInstanceIdOrderBySequenceIdAsc(String processInstanceId); - - /** - * 删除节点的所有日志 - */ - void deleteByProcessInstanceIdAndNodeId(String processInstanceId, String nodeId); - - /** - * 统计节点的日志数量 - */ - long countByProcessInstanceIdAndNodeId(String processInstanceId, String nodeId); -} - diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowNodeLogService.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowNodeLogService.java index d1d8c3f8..6fcdebe2 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowNodeLogService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IWorkflowNodeLogService.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.workflow.service; -import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog; +import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO; import com.qqchen.deploy.backend.workflow.enums.LogLevel; import com.qqchen.deploy.backend.workflow.enums.LogSource; import org.springframework.data.domain.Page; @@ -45,12 +45,12 @@ public interface IWorkflowNodeLogService { /** * 查询节点的所有日志 */ - List getNodeLogs(String processInstanceId, String nodeId); + List getNodeLogs(String processInstanceId, String nodeId); /** * 分页查询节点日志 */ - Page getNodeLogs(String processInstanceId, String nodeId, Pageable pageable); + Page getNodeLogs(String processInstanceId, String nodeId, Pageable pageable); /** * 删除节点日志 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowNodeLogServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowNodeLogServiceImpl.java index 4dab30a8..7010f683 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowNodeLogServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowNodeLogServiceImpl.java @@ -1,7 +1,7 @@ package com.qqchen.deploy.backend.workflow.service.impl; import com.qqchen.deploy.backend.framework.utils.RedisUtil; -import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog; +import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO; import com.qqchen.deploy.backend.workflow.enums.LogLevel; import com.qqchen.deploy.backend.workflow.enums.LogSource; import com.qqchen.deploy.backend.workflow.service.IWorkflowNodeLogService; @@ -122,7 +122,7 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService { } @Override - public List getNodeLogs(String processInstanceId, String nodeId) { + public List getNodeLogs(String processInstanceId, String nodeId) { try { String streamKey = buildStreamKey(processInstanceId, nodeId); @@ -139,7 +139,7 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService { return Collections.emptyList(); } - // 转换为实体 + // 转换为 DTO return records.stream() .map(record -> convertToWorkflowNodeLog(processInstanceId, nodeId, record)) .collect(Collectors.toList()); @@ -152,8 +152,8 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService { } @Override - public Page getNodeLogs(String processInstanceId, String nodeId, Pageable pageable) { - List allLogs = getNodeLogs(processInstanceId, nodeId); + public Page getNodeLogs(String processInstanceId, String nodeId, Pageable pageable) { + List allLogs = getNodeLogs(processInstanceId, nodeId); int start = (int) pageable.getOffset(); int end = Math.min(start + pageable.getPageSize(), allLogs.size()); @@ -162,7 +162,7 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService { return new PageImpl<>(Collections.emptyList(), pageable, allLogs.size()); } - List pageContent = allLogs.subList(start, end); + List pageContent = allLogs.subList(start, end); return new PageImpl<>(pageContent, pageable, allLogs.size()); } @@ -179,11 +179,11 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService { } /** - * 将 Redis Stream Record 转换为 WorkflowNodeLog 实体 + * 将 Redis Stream Record 转换为 WorkflowNodeLogDTO */ - private WorkflowNodeLog convertToWorkflowNodeLog(String processInstanceId, String nodeId, + private WorkflowNodeLogDTO convertToWorkflowNodeLog(String processInstanceId, String nodeId, MapRecord record) { - WorkflowNodeLog log = new WorkflowNodeLog(); + WorkflowNodeLogDTO log = new WorkflowNodeLogDTO(); log.setProcessInstanceId(processInstanceId); log.setNodeId(nodeId); diff --git a/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql b/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql index e367011d..29cd9289 100644 --- a/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql +++ b/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql @@ -659,29 +659,9 @@ CREATE TABLE workflow_node_instance CONSTRAINT FK_workflow_node_instance_instance FOREIGN KEY (workflow_instance_id) REFERENCES workflow_instance (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点实例表'; --- 工作流节点日志表 -CREATE TABLE workflow_node_log -( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', - create_by VARCHAR(255) NULL COMMENT '创建人', - create_time DATETIME(6) NULL COMMENT '创建时间', - deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)', - update_by VARCHAR(255) NULL COMMENT '更新人', - update_time DATETIME(6) NULL COMMENT '更新时间', - version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', - - process_instance_id VARCHAR(64) NOT NULL COMMENT '流程实例ID(Flowable processInstanceId)', - node_id VARCHAR(64) NOT NULL COMMENT '节点ID(Flowable nodeId, 例如: sid_xxx)', - sequence_id BIGINT NOT NULL COMMENT '日志序号(保证同一节点内日志有序,从1开始递增)', - timestamp BIGINT NOT NULL COMMENT '时间戳(Unix毫秒)', - level VARCHAR(10) NOT NULL COMMENT '日志级别(INFO, WARN, ERROR, DEBUG)', - source VARCHAR(20) NOT NULL COMMENT '日志来源(JENKINS, FLOWABLE, SHELL, NOTIFICATION)', - message TEXT NOT NULL COMMENT '日志内容', - - INDEX idx_process_node_seq (process_instance_id, node_id, sequence_id), - INDEX idx_process_seq (process_instance_id, sequence_id), - INDEX idx_timestamp (timestamp) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点日志表'; +-- ⚠️ workflow_node_log 表已废弃 +-- 日志现在存储在 Redis Stream 中,保留 7 天后自动删除 +-- 详见 WorkflowNodeLogServiceImpl(基于 RedisUtil) -- -------------------------------------------------------------------------------------- -- 项目管理相关表