diff --git a/backend/pom.xml b/backend/pom.xml index 15df8042..bd79e7b1 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -216,6 +216,7 @@ org.liquibase liquibase-core + 4.25.1 org.junit.jupiter diff --git a/backend/replace_timestamps.py b/backend/replace_timestamps.py index 88d5ea01..9c9b8749 100644 --- a/backend/replace_timestamps.py +++ b/backend/replace_timestamps.py @@ -1,7 +1,7 @@ import re # 读取文件 -file_path = r'd:\work\java-space\deploy-ease-platform\backend\src\main\resources\db\changelog\changes\v1.0.0-data.sql' +file_path = r'd:\work\java-space\deploy-ease-platform\backend\src\main\resources\db\changelog\init\v1.0.0-data.sql' with open(file_path, 'r', encoding='utf-8') as f: content = f.read() diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java index c815025d..29edf804 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java @@ -62,7 +62,7 @@ public class DeployApiController { @GetMapping("/records/{deployRecordId}/flow-graph") @PreAuthorize("isAuthenticated()") public Response getDeployFlowGraph( - @Parameter(description = "部署记录ID", required = true) @PathVariable Long deployRecordId + @Parameter(description = "部署记录ID", required = true) @PathVariable Long deployRecordId ) { return Response.success(deployRecordService.getDeployFlowGraph(deployRecordId)); } @@ -73,13 +73,9 @@ public class DeployApiController { @Operation(summary = "获取我的部署审批任务", description = "查询当前登录用户待审批的部署任务,支持按团队和环境筛选") @GetMapping("/my-approval-tasks") @PreAuthorize("isAuthenticated()") - public Response> getMyApprovalTasks( - @Parameter(description = "团队ID(可选,用于筛选指定团队的审批任务)") - @RequestParam(required = false) Long teamId, - @Parameter(description = "环境ID(可选,用于筛选指定环境的审批任务)") - @RequestParam(required = false) Long environmentId, - @Parameter(description = "工作流定义Key列表(可选,支持查询多个工作流的待审批任务)") - @RequestParam(required = false) List workflowDefinitionKeys + public Response> getMyApprovalTasks(@Parameter(description = "团队ID(可选,用于筛选指定团队的审批任务)") @RequestParam(required = false) Long teamId, + @Parameter(description = "环境ID(可选,用于筛选指定环境的审批任务)") @RequestParam(required = false) Long environmentId, + @Parameter(description = "工作流定义Key列表(可选,支持查询多个工作流的待审批任务)") @RequestParam(required = false) List workflowDefinitionKeys ) { return Response.success(deployService.getMyApprovalTasks(teamId, environmentId, workflowDefinitionKeys)); } @@ -94,7 +90,7 @@ public class DeployApiController { deployService.completeApproval(request); return Response.success(); } - + /** * 获取节点日志 */ diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java index 64281c73..90717ec8 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/GitServiceIntegrationImpl.java @@ -244,7 +244,7 @@ public class GitServiceIntegrationImpl extends BaseExternalSystemIntegration imp } if (!allBranches.isEmpty()) { - log.info("Total fetched {} branches for project: {}, first branch: {}", + log.debug("Total fetched {} branches for project: {}, first branch: {}", allBranches.size(), projectId, allBranches.getFirst().getName()); } else { log.warn("No branches found for project: {}", projectId); diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/scheduler/ServerMonitorScheduler.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/scheduler/ServerMonitorScheduler.java index 04b50f33..a9138552 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/scheduler/ServerMonitorScheduler.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/scheduler/ServerMonitorScheduler.java @@ -83,10 +83,10 @@ public class ServerMonitorScheduler { config.setServerOfflineTemplateId(serverOfflineTemplateId); config.setResourceAlertTemplateId(resourceAlertTemplateId); - log.info("========== 开始采集服务器监控数据 ========== channelId={}, offlineTemplateId={}, alertTemplateId={}", + log.debug("开始采集服务器监控数据: channelId={}, offlineTemplateId={}, alertTemplateId={}", notificationChannelId, serverOfflineTemplateId, resourceAlertTemplateId); } else { - log.info("========== 开始采集服务器监控数据(不发送通知) =========="); + log.debug("开始采集服务器监控数据(不发送通知)"); } long startTime = System.currentTimeMillis(); @@ -99,7 +99,7 @@ public class ServerMonitorScheduler { return; } - log.info("发现 {} 台服务器,开始检测在线状态并采集监控数据", allServers.size()); + log.debug("发现 {} 台服务器,开始检测在线状态并采集监控数据", allServers.size()); // 2. 并发检测所有服务器的连接状态并采集监控数据 // - 连接失败 → 发送离线通知 @@ -130,7 +130,7 @@ public class ServerMonitorScheduler { // 5. 批量保存监控数据到数据库 if (!monitorDataList.isEmpty()) { monitorService.batchSaveMonitorData(monitorDataList); - log.info("监控数据已保存到数据库: count={}", monitorDataList.size()); + log.debug("监控数据已保存到数据库: count={}", monitorDataList.size()); } // 6. 检查告警规则(优化:只查询一次规则) @@ -206,16 +206,15 @@ public class ServerMonitorScheduler { server.setLastConnectTime(LocalDateTime.now()); serverRepository.save(server); - log.debug("服务器连接成功: serverId={}, name={}, ip={}", - server.getId(), server.getServerName(), server.getHostIp()); + log.info("✓ 服务器连接成功: {} ({})", server.getServerName(), server.getHostIp()); // 4. 采集监控数据(复用同一个SSH连接) return collectServerMonitorData(server, sshClient, sshService); } catch (Exception e) { // 连接失败,更新服务器状态为离线 - log.error("服务器连接失败: serverId={}, name={}, ip={}, error={}", - server.getId(), server.getServerName(), server.getHostIp(), e.getMessage()); + log.error("✗ 服务器连接失败: {} ({}) - {}", + server.getServerName(), server.getHostIp(), e.getMessage()); server.setStatus(ServerStatusEnum.OFFLINE); serverRepository.save(server); @@ -260,7 +259,7 @@ public class ServerMonitorScheduler { // 3. 发送通知(NotificationService会自动根据渠道类型创建请求对象) notificationService.send(request); - log.info("✅ 服务器离线通知已发送: serverId={}, serverName={}, ip={}", + log.info("服务器离线通知已发送: serverId={}, serverName={}, ip={}", server.getId(), server.getServerName(), server.getHostIp()); } catch (Exception e) { log.error("发送服务器离线通知异常: serverId={}", server.getId(), e); @@ -380,7 +379,7 @@ public class ServerMonitorScheduler { * 此方法由定时任务管理系统调用,建议每天凌晨执行 */ public void cleanOldMonitorData() { - log.info("========== 开始清理历史监控数据 =========="); + log.debug("开始清理历史监控数据"); try { // 删除30天前的数据 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 7abd758c..d83f27ed 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 @@ -25,6 +25,7 @@ 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.enums.WorkflowDefinitionStatusEnums; import com.qqchen.deploy.backend.workflow.model.NodeContext; import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository; import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService; @@ -826,6 +827,11 @@ public class DeployServiceImpl implements IDeployService { WorkflowDefinition workflowDefinition = workflowDefinitionRepository.findById(teamApp.getWorkflowDefinitionId()).orElseThrow(() -> new BusinessException(ResponseCode.DEPLOY_WORKFLOW_NOT_CONFIGURED)); + // 2. 检查工作流是否已发布 + if (workflowDefinition.getStatus() != WorkflowDefinitionStatusEnums.PUBLISHED) { + throw new BusinessException(ResponseCode.WORKFLOW_NOT_PUBLISHED); + } + // 2. 生成业务标识(使用前端传入的 executionNo) String businessKey = UUID.randomUUID().toString(); @@ -922,7 +928,7 @@ public class DeployServiceImpl implements IDeployService { List tasks = taskQuery.list(); if (tasks.isEmpty()) { - log.info("用户 {} 当前没有待办审批任务", currentUsername); + log.debug("用户 {} 当前没有待办审批任务", currentUsername); return Collections.emptyList(); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsBuildServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsBuildServiceImpl.java index e6b4c0c4..4ac11a5c 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsBuildServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsBuildServiceImpl.java @@ -153,7 +153,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl views = jenkinsViewRepository.findByExternalSystemId(context.getExternalSystem().getId()); if (views.isEmpty()) { - log.info("No views found for external system: {}", context.getExternalSystem().getId()); + log.debug("No views found for external system: {}", context.getExternalSystem().getId()); updateSyncHistorySuccess(context.getSyncHistory()); return 0; } @@ -200,7 +200,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl jobResponses = jenkinsServiceIntegration.listJobs(externalSystem, view.getViewName()); if (jobResponses.isEmpty()) { - log.info("No job information available for view: {}", view.getViewName()); + log.debug("No job information available for view: {}", view.getViewName()); return 0; } @@ -273,7 +273,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl new BusinessException(ResponseCode.DATA_NOT_FOUND)); int syncedCount = syncView(context.getExternalSystem(), view); - log.info("Synchronized {} builds for view: {}", syncedCount, view.getViewName()); + log.debug("Synchronized {} builds for view: {}", syncedCount, view.getViewName()); } else { // 全量同步 doSync(context); @@ -456,7 +456,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl */ private void checkBuildNotifications(Long externalSystemId) { - log.info("开始检查构建通知: externalSystemId={}", externalSystemId); + log.debug("开始检查构建通知: externalSystemId={}", externalSystemId); try { // 1. 获取外部系统信息 @@ -470,7 +470,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl teamApps = teamApplicationRepository .findByDeploySystemIdAndBuildType(externalSystemId, BuildTypeEnum.JENKINS); if (teamApps.isEmpty()) { - log.info("没有团队绑定该Jenkins系统: externalSystemId={}", externalSystemId); + log.debug("没有团队绑定该Jenkins系统: externalSystemId={}", externalSystemId); return; } @@ -479,7 +479,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl ta.getDeployJob() != null && !ta.getDeployJob().isEmpty()) .collect(Collectors.groupingBy(TeamApplication::getDeployJob)); if (teamAppsByJob.isEmpty()) { - log.info("没有配置deployJob的团队应用"); + log.debug("没有配置deployJob的团队应用"); return; } @@ -490,7 +490,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl configs = teamEnvironmentNotificationConfigRepository .findByTeamIdInAndEnvironmentIdInAndBuildNotificationEnabledTrue(teamIds, envIds); if (configs.isEmpty()) { - log.info("没有团队启用构建通知"); + log.debug("没有团队启用构建通知"); return; } @@ -540,7 +540,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl jobResponses = jenkinsServiceIntegration.listJobs(externalSystem, view.getViewName()); if (jobResponses.isEmpty()) { - log.info("No jobs found in Jenkins view: {}", view.getViewName()); + log.debug("No jobs found in Jenkins view: {}", view.getViewName()); return 0; } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsViewServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsViewServiceImpl.java index f9fbdd92..ce427cc7 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsViewServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/JenkinsViewServiceImpl.java @@ -99,7 +99,7 @@ public class JenkinsViewServiceImpl extends BaseServiceImpl viewResponses = jenkinsServiceIntegration.listViews(externalSystem); if (viewResponses.isEmpty()) { - log.info("No views found in Jenkins system: {}", externalSystemId); + log.debug("No views found in Jenkins system: {}", externalSystemId); // 更新同步历史为成功 syncHistory.setStatus(ExternalSystemSyncStatus.SUCCESS); jenkinsSyncHistoryService.saveOrUpdateHistory(syncHistory); diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java index e09827af..a45c4749 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryBranchServiceImpl.java @@ -298,11 +298,11 @@ public class RepositoryBranchServiceImpl extends BaseServiceImpl> future = CompletableFuture.supplyAsync(() -> { try { - log.info("Syncing branches for project: {} (ID: {}, GitLab ID: {})", project.getName(), project.getId(), project.getRepoProjectId()); + log.debug("Syncing branches for project: {} (ID: {}, GitLab ID: {})", project.getName(), project.getId(), project.getRepoProjectId()); // 5.1 获取当前项目在GitLab上的所有分支 List remoteBranches = gitServiceIntegration.branches(externalSystem, project.getRepoProjectId()); - log.info("Found {} remote branches for project: {}", remoteBranches.size(), project.getName()); + log.debug("Found {} remote branches for project: {}", remoteBranches.size(), project.getName()); List branchesToUpdate = new ArrayList<>(); Set processedBranches = new HashSet<>(); @@ -338,7 +338,7 @@ public class RepositoryBranchServiceImpl extends BaseServiceImpl remoteGroups = gitServiceIntegration.groups(externalSystem); if (remoteGroups.isEmpty()) { - log.info("No groups found in remote git system: {}", externalSystem.getName()); + log.debug("No groups found in remote git system: {}", externalSystem.getName()); repositorySyncHistoryService.updateSyncHistory(groupHistory.getId(), ExternalSystemSyncStatus.SUCCESS, null); return; } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java index 2d6063f6..84d9e9aa 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java @@ -170,7 +170,7 @@ public class RepositoryProjectServiceImpl extends BaseServiceImpl groups = getGroupsToSync(externalSystemId, repoGroupId); if (groups.isEmpty()) { - log.info("No groups found for external system: {}", externalSystem.getName()); + log.debug("No groups found for external system: {}", externalSystem.getName()); repositorySyncHistoryService.updateSyncHistory(projectHistory.getId(), ExternalSystemSyncStatus.SUCCESS, null); return; } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/TeamApplicationServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/TeamApplicationServiceImpl.java index d05b6abf..5cf279d6 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/TeamApplicationServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/TeamApplicationServiceImpl.java @@ -358,7 +358,7 @@ public class TeamApplicationServiceImpl extends BaseServiceImpl enabledJobs = jobRepository.findByStatusAndDeletedFalse(ScheduleJobStatusEnum.ENABLED); for (ScheduleJob job : enabledJobs) { try { startJob(job.getId()); - log.info("加载任务成功:jobId={}, jobName={}", job.getId(), job.getJobName()); + log.debug("加载任务成功:jobId={}, jobName={}", job.getId(), job.getJobName()); } catch (Exception e) { log.error("加载任务失败:jobId={}, jobName={}", job.getId(), job.getJobName(), e); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/system/listener/SystemReleaseStartupListener.java b/backend/src/main/java/com/qqchen/deploy/backend/system/listener/SystemReleaseStartupListener.java index e060b670..dee54d90 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/system/listener/SystemReleaseStartupListener.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/system/listener/SystemReleaseStartupListener.java @@ -66,7 +66,7 @@ public class SystemReleaseStartupListener { log.info("版本发布通知已发送并标记"); } else { - log.info("没有未通知的版本发布记录"); + log.debug("没有未通知的版本发布记录"); } log.info("========================================"); diff --git a/backend/src/main/java/com/qqchen/deploy/backend/system/service/impl/SystemReleaseServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/system/service/impl/SystemReleaseServiceImpl.java index 9159724f..767592e2 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/system/service/impl/SystemReleaseServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/system/service/impl/SystemReleaseServiceImpl.java @@ -129,7 +129,10 @@ public class SystemReleaseServiceImpl * 调度维护任务(延迟执行) */ private void scheduleMaintenanceTask(SystemRelease release) { - // 计算执行时间 + // 1. 立即发送维护通知(告知用户系统将在X分钟后维护) + sendMaintenanceNotification(release); + + // 2. 计算执行时间 Date executeTime = Date.from( LocalDateTime.now() .plusMinutes(release.getDelayMinutes()) @@ -140,7 +143,7 @@ public class SystemReleaseServiceImpl log.warn("已调度系统维护任务,版本: {}, 执行时间: {}, 预计耗时: {}分钟", release.getReleaseVersion(), executeTime, release.getEstimatedDuration()); - // 延迟执行维护任务,并保存任务引用 + // 3. 延迟执行维护任务(只负责关闭应用,不再发送通知) ScheduledFuture future = taskScheduler.schedule(() -> { executeMaintenance(release); // 执行完成后从Map中移除 @@ -154,7 +157,7 @@ public class SystemReleaseServiceImpl } /** - * 执行维护任务 + * 执行维护任务(仅负责关闭应用) */ private void executeMaintenance(SystemRelease release) { try { @@ -165,26 +168,36 @@ public class SystemReleaseServiceImpl log.warn("自动停止服务: {}", release.getEnableAutoShutdown()); log.warn("========================================"); - // 1. 发送维护通知 - sendMaintenanceNotification(release); - - // 2. 检查是否需要自动停止服务 + // 1. 检查是否需要自动停止服务 if (!Boolean.TRUE.equals(release.getEnableAutoShutdown())) { - log.warn("未启用自动停止服务,维护通知已发送,请手动停止服务进行维护"); + log.warn("未启用自动停止服务,请手动停止服务进行维护"); return; } - // 3. 等待3秒让通知发出去 - log.warn("等待3秒,确保通知发送完成..."); - Thread.sleep(3000); - - // 4. 优雅关闭应用 + // 2. 优雅关闭应用(使用独立线程,避免调度器死锁) log.warn("系统开始优雅关闭..."); - ((ConfigurableApplicationContext) applicationContext).close(); + log.info("使用独立线程执行应用关闭,避免调度器死锁"); + + // 创建独立的关闭线程 + Thread shutdownThread = new Thread(() -> { + try { + // 等待1秒,确保维护任务线程正常退出 + Thread.sleep(1000); + log.warn("执行应用上下文关闭..."); + ((ConfigurableApplicationContext) applicationContext).close(); + log.warn("应用上下文关闭完成"); + } catch (Exception e) { + log.error("应用关闭失败", e); + // 如果优雅关闭失败,强制退出 + System.exit(1); + } + }, "app-shutdown-thread"); + + shutdownThread.setDaemon(false); // 非守护线程,确保执行完成 + shutdownThread.start(); + + log.info("关闭指令已发出,维护任务线程即将退出"); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.error("系统维护任务被中断", e); } catch (Exception e) { log.error("系统维护任务执行失败", e); } @@ -200,16 +213,18 @@ public class SystemReleaseServiceImpl .orElseThrow(() -> new BusinessException(ResponseCode.DATA_NOT_FOUND, new Object[]{"通知渠道ID=" + notificationChannelId + "不存在"})); - // 准备维护通知内容(简化版,只显示关键信息) + // 准备维护通知内容(说明将在X分钟后维护) StringBuilder messageBuilder = new StringBuilder(); messageBuilder.append(String.format("版本号:%s\n", release.getReleaseVersion())); - messageBuilder.append("系统即将开始维护升级\n"); + messageBuilder.append(String.format("系统将在 %d 分钟后开始维护升级\n", release.getDelayMinutes())); messageBuilder.append(String.format("预计维护时长:%d 分钟\n", release.getEstimatedDuration() != null ? release.getEstimatedDuration() : 10)); // 如果启用自动停止,增加提示 if (Boolean.TRUE.equals(release.getEnableAutoShutdown())) { messageBuilder.append("本次升级程序将自动停止\n"); + } else { + messageBuilder.append("请在维护时间前做好准备\n"); } messageBuilder.append("\n望周知。"); diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 6903a4d3..2ffa4f1f 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -41,7 +41,8 @@ spring: # 是否允许JMX管理连接池 register-mbeans: true # 连接泄漏检测阈值(毫秒),超过此时间未归还的连接将被记录 - leak-detection-threshold: 60000 + # Jenkins 构建轮询最长30分钟,设置为35分钟避免误报 + leak-detection-threshold: 2100000 jpa: hibernate: ddl-auto: update @@ -109,6 +110,8 @@ logging: org.hibernate.orm.jdbc.bind: WARN # 业务日志(保留INFO级别,记录关键业务操作) com.qqchen.deploy.backend: INFO + # 屏蔽 SSHJ 底层日志(SecureRandom、Transport 等无业务价值的日志) + net.schmizz.sshj: WARN # 日志文件配置 file: name: logs/deploy-ease.log # 日志文件路径 @@ -133,7 +136,8 @@ management: endpoints: web: exposure: - include: health,metrics,info + # 添加 threaddump 用于线程监控,heapdump 用于内存分析 + include: health,metrics,info,threaddump,heapdump,env,loggers metrics: enable: hikari: true diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index bfdff990..d16cdfb2 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -41,7 +41,8 @@ spring: # 是否允许JMX管理连接池 register-mbeans: true # 连接泄漏检测阈值(毫秒),超过此时间未归还的连接将被记录 - leak-detection-threshold: 60000 + # Jenkins 构建轮询最长30分钟,设置为35分钟避免误报 + leak-detection-threshold: 2100000 jpa: hibernate: ddl-auto: update @@ -105,6 +106,8 @@ logging: org.hibernate.orm.jdbc.bind: INFO com.qqchen.deploy.backend.framework.utils.EntityPathResolver: DEBUG com.qqchen.deploy.backend: DEBUG + # 屏蔽 SSHJ 底层日志(SecureRandom、Transport 等无业务价值的日志) + net.schmizz.sshj: WARN # 日志文件配置 file: name: logs/deploy-ease.log # 日志文件路径 @@ -129,7 +132,8 @@ management: endpoints: web: exposure: - include: health,metrics,info + # 添加 threaddump 用于线程监控,heapdump 用于内存分析 + include: health,metrics,info,threaddump,heapdump,env,loggers metrics: enable: hikari: true diff --git a/backend/src/main/resources/db/changelog/changes/20251209141300-01.sql b/backend/src/main/resources/db/changelog/changes/20251209141300-01.sql deleted file mode 100644 index 2799915d..00000000 --- a/backend/src/main/resources/db/changelog/changes/20251209141300-01.sql +++ /dev/null @@ -1,23 +0,0 @@ --- -------------------------------------------------------------------------------------- --- 系统版本发布记录 - v1.1 --- 功能:记录Jenkins日志优化版本 --- 作者:qqchen --- 日期:2025-12-09 14:13 --- -------------------------------------------------------------------------------------- - --- 插入 1.1 日志优化发布记录 -INSERT INTO system_release ( - create_by, create_time, update_by, update_time, version, deleted, - release_version, module, release_date, changes, notified, delay_minutes, estimated_duration, enable_auto_shutdown -) -VALUES ( - 'system', NOW(), 'system', NOW(), 1, 0, - 1.11, 'BACKEND', NOW(), - '【后端】 -- 修复:服务器网络流量监控数据异常问题(过滤累计值减少的异常数据) -- 修复:服务器测试连接未更新在线状态问题(添加@Transactional事务注解) -【前端】 -- 优化:服务器列表数据加载(卡片/列表模式分别调用 list/page 接口,静默刷新优化体验) -- 优化:用户交互体验(表单必填校验、硬件采集详细反馈、操作流程简化)', - 0, NULL, NULL, 0 -); diff --git a/backend/src/main/resources/db/changelog/changes/20251209141300-changelog.xml b/backend/src/main/resources/db/changelog/changes/20251209141300-changelog.xml index 63b27ab1..2362cd87 100644 --- a/backend/src/main/resources/db/changelog/changes/20251209141300-changelog.xml +++ b/backend/src/main/resources/db/changelog/changes/20251209141300-changelog.xml @@ -6,6 +6,6 @@ - + diff --git a/backend/src/main/resources/db/changelog/db.changelog-master.xml b/backend/src/main/resources/db/changelog/db.changelog-master.xml index 4a6122d3..5ddfb0f9 100644 --- a/backend/src/main/resources/db/changelog/db.changelog-master.xml +++ b/backend/src/main/resources/db/changelog/db.changelog-master.xml @@ -28,7 +28,8 @@ - - - + + diff --git a/backend/src/main/resources/db/changelog/db.changelog-master.yaml111 b/backend/src/main/resources/db/changelog/db.changelog-master.yaml111 deleted file mode 100644 index b502e919..00000000 --- a/backend/src/main/resources/db/changelog/db.changelog-master.yaml111 +++ /dev/null @@ -1,43 +0,0 @@ -databaseChangeLog: - - changeSet: - id: v1.0.0-schema - author: qqchen - runOnChange: false - failOnError: true - comment: "初始化数据库表结构" - sqlFile: - path: db/changelog/changes/v1.0.0-schema.sql - stripComments: false - splitStatements: true - endDelimiter: ";" - rollback: - - empty - - - changeSet: - id: v1.0.0-data - author: qqchen - runOnChange: false - failOnError: true - comment: "初始化基础数据" - context: "!test" - sqlFile: - path: db/changelog/changes/v1.0.0-data.sql - stripComments: false - splitStatements: true - endDelimiter: ";" - rollback: - - empty - - - changeSet: - id: 20251209112700 - author: qqchen - runOnChange: false - failOnError: true - comment: "系统版本发布记录 - v1.5.0初始数据" - sqlFile: - path: db/changelog/changes/20251209112700-01.sql - stripComments: false - splitStatements: true - endDelimiter: ";" - rollback: - - empty \ No newline at end of file diff --git a/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql b/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql index fba54995..5a70bf28 100644 --- a/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql +++ b/backend/src/main/resources/db/changelog/init/v1.0.0-data.sql @@ -27,7 +27,8 @@ VALUES (11, NOW(), 'dengqichen', '$2a$10$fUdDZ33099YboexF/SNQT.55mXzK3Kejb82yc76iCdl25.uqAatkW', '邓骐辰', 'dengqichen@iscmtech.com', NULL, 5, 1), (12, NOW(), 'wangdongzhu', '$2a$10$OErv/EvBXUocMutXZJe3C.k1gq9/8rrF63pz8mWRBLoORGb/8ELIO', '王栋柱', 'wangdongzhu@iscmtech.com', NULL, 5, 1), (13, NOW(), 'yangzhenfu', '$2a$10$.WBc0pXTQnrDn2IUm.eRneH9jfu7TIZg2na.K3WaluvjIEts2Iasm', '杨振夫', 'yangzhenfu@iscmtech.com', '15842461837', 5, 1), -(14, NOW(), 'songwei', '$2a$10$8ChswMOtgkvZCGsa/wvMM.wfhL5NL9uqCasyHZ6hiDG45vFu/EQRG', '宋伟', 'songwei@iscmtech.com', NULL, 5, 1); +(14, NOW(), 'songwei', '$2a$10$8ChswMOtgkvZCGsa/wvMM.wfhL5NL9uqCasyHZ6hiDG45vFu/EQRG', '宋伟', 'songwei@iscmtech.com', NULL, 5, 1), +(15, NOW(), 'lukuan', '$2a$10$hlDCAqOWxZso7APbMClF1.Fp6xhnb8av5s.MDnC1tf0QfHfZRayNq', '路宽', 'lukuan@babyfs.cn', '13888888888', 7, 1); -- 初始化系统参数 INSERT INTO sys_param (id, create_time, code, name, value, type, description, enabled) @@ -100,7 +101,9 @@ VALUES -- 在线用户管理 (7, '在线用户', '/system/online', 'System/Online/List', 'UserSwitchOutlined', 'system:online:view', 2, 1, 60, FALSE, TRUE, 'system', NOW(), 0, FALSE), -- 系统版本管理 -(8, '系统版本', '/system/releases', 'System/Release/List', 'RocketOutlined', 'system:release', 2, 1, 70, FALSE, TRUE, 'system', NOW(), 0, FALSE); +(8, '系统版本', '/system/releases', 'System/Release/List', 'RocketOutlined', 'system:release', 2, 1, 70, FALSE, TRUE, 'system', NOW(), 0, FALSE), +-- 系统指标监控 +(9, '系统指标', '/system/metrics', 'System/Metrics/Dashboard', 'DashboardOutlined', 'system:metrics', 2, 1, 80, FALSE, TRUE, 'system', NOW(), 0, FALSE); -- ==================== 初始化角色数据 ==================== DELETE FROM sys_role WHERE id < 100; @@ -141,13 +144,14 @@ VALUES (11, 1), -- dengqichen - 管理员 (12, 3), -- wangdongzhu - 开发 (13, 3), -- yangzhenfu - 开发 -(14, 1); -- songwei - 管理员 +(14, 1), -- songwei - 管理员 +(15, 3); -- lukuan - 开发 -- 初始化角色菜单关联 INSERT INTO sys_role_menu (role_id, menu_id) VALUES -- 管理员角色(拥有所有菜单) -(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 99), (1, 100), (1, 101), (1, 102), (1, 104), (1, 200), (1, 201), (1, 202), (1, 203), (1, 204), (1, 205), (1, 206), (1, 300), (1, 301), (1, 302), (1, 303), (1, 304), (1, 1011), (1, 1041), (1, 1042), +(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 99), (1, 100), (1, 101), (1, 102), (1, 104), (1, 200), (1, 201), (1, 202), (1, 203), (1, 204), (1, 205), (1, 206), (1, 300), (1, 301), (1, 302), (1, 303), (1, 304), (1, 1011), (1, 1041), (1, 1042), -- 运维角色 (2, 99), (2, 200), (2, 201), (2, 202), (2, 203), (2, 204), (2, 205), (2, 300), (2, 301), (2, 302), (2, 303), (2, 304), -- 开发角色(只有工作台) @@ -637,7 +641,7 @@ INSERT INTO form_definition ( -- 工作流定义数据(graph字段已压缩为单行JSON) -- 注意:graph字段包含完整的流程图配置,数据较大 INSERT INTO `deploy-ease-platform`.`workflow_definition` (`id`, `name`, `key`, `category_id`, `form_definition_id`, `process_definition_id`, `flow_version`, `description`, `bpmn_xml`, `graph`, `status`, `create_by`, `create_time`, `deleted`, `update_by`, `update_time`, `version`) VALUES (1, 'JENKINS部署项目流程', 'jenkins-deploy-project-workflow', 2, 2, '', 1, '', '', '{\"edges\": [{\"id\": \"eid_a56acab7_5877_489d_a798_40ac0e3f7269\", \"to\": \"sid_20005e1e_f5e1_4ae7_a2cd_18e58434e095\", \"from\": \"sid_f1188946_c6ff_4480_964e_82f65fdcc514\", \"name\": \"${approval.required == \'true\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${approval.required == \'true\'}\"}}, \"vertices\": [{\"x\": -307, \"y\": -457}, {\"x\": -150, \"y\": -630}, {\"x\": 8, \"y\": -802}]}, {\"id\": \"eid_3a6a1429_8b9e_4b99_a762_3a99e6edc511\", \"to\": \"sid_ef9e9d5a_a6ac_4140_bac7_1747f0eab188\", \"from\": \"sid_f1188946_c6ff_4480_964e_82f65fdcc514\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": [{\"x\": -214, \"y\": -154}, {\"x\": 38, \"y\": -22}, {\"x\": 289, \"y\": 109}]}, {\"id\": \"eid_e80dd7a8_d81a_43b4_8dd4_9a5fa21d80dd\", \"to\": \"sid_ef9e9d5a_a6ac_4140_bac7_1747f0eab188\", \"from\": \"sid_20005e1e_f5e1_4ae7_a2cd_18e58434e095\", \"name\": \"${sid_20005e1e_f5e1_4ae7_a2cd_18e58434e095.outputs.approvalResult == \'APPROVED\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${sid_20005e1e_f5e1_4ae7_a2cd_18e58434e095.outputs.approvalResult == \'APPROVED\'}\"}}, \"vertices\": []}, {\"id\": \"eid_3eecd0ca_81e2_460f_a650_7ac2edc45bc8\", \"to\": \"sid_90bb343a_9bf9_48c4_be7c_334aeb71bf9d\", \"from\": \"sid_ef9e9d5a_a6ac_4140_bac7_1747f0eab188\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_1291d31c_5edf_475d_8f85_fd3ac232f487\", \"to\": \"sid_90bb343a_9bf9_48c4_be7c_334aeb71bf9d\", \"from\": \"sid_20005e1e_f5e1_4ae7_a2cd_18e58434e095\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_ee1b5152_2eb0_4013_9ab6_8d88561d2801\", \"to\": \"sid_e5f930da_062e_4819_b976_8d8172c7f14a\", \"from\": \"sid_dc8b078d_be3e_4644_b8c5_ed077e32dab2\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_ac3aca2b_a52a_4a91_a880_73a6757d030f\", \"to\": \"sid_0d0eb0be_a427_4966_8114_475ebeb5e724\", \"from\": \"sid_e5f930da_062e_4819_b976_8d8172c7f14a\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_d206c7b5_d839_4a53_ad24_976d91466f94\", \"to\": \"sid_f1188946_c6ff_4480_964e_82f65fdcc514\", \"from\": \"sid_0d0eb0be_a427_4966_8114_475ebeb5e724\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 999}}, \"vertices\": []}, {\"id\": \"eid_bd62e311_dd06_418d_ba98_e5e6cdb7a083\", \"to\": \"sid_ee2f5ea0_48d3_40dd_8ba3_5595ad49eb63\", \"from\": \"sid_0d0eb0be_a427_4966_8114_475ebeb5e724\", \"name\": \"${sid_e5f930da_062e_4819_b976_8d8172c7f14a.outputs.status == \'FAILURE\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${sid_e5f930da_062e_4819_b976_8d8172c7f14a.outputs.hasDifference == true}\"}}, \"vertices\": []}, {\"id\": \"eid_ce499e46_99db_4519_867c_d9d65a53b62e\", \"to\": \"sid_f1188946_c6ff_4480_964e_82f65fdcc514\", \"from\": \"sid_ee2f5ea0_48d3_40dd_8ba3_5595ad49eb63\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}], \"nodes\": [{\"id\": \"sid_dc8b078d_be3e_4644_b8c5_ed077e32dab2\", \"configs\": {\"nodeCode\": \"START_EVENT\", \"nodeName\": \"开始\", \"description\": \"工作流的起始节点\"}, \"outputs\": [], \"nodeCode\": \"START_EVENT\", \"nodeName\": \"开始\", \"nodeType\": \"START_EVENT\", \"position\": {\"x\": -2025, \"y\": -225}, \"inputMapping\": {}}, {\"id\": \"sid_ef9e9d5a_a6ac_4140_bac7_1747f0eab188\", \"configs\": {\"nodeCode\": \"JENKINS_BUILD\", \"nodeName\": \"Jenkins构建\", \"description\": \"通过Jenkins执行构建任务\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": [\"SUCCESS\", \"FAILURE\", \"ABORTED\", \"NOT_FOUND\"], \"name\": \"buildStatus\", \"type\": \"string\", \"title\": \"构建状态\", \"example\": null, \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"buildNumber\", \"type\": \"number\", \"title\": \"构建编号\", \"example\": 123, \"required\": true, \"description\": \"Jenkins构建的唯一编号\"}, {\"enum\": null, \"name\": \"buildUrl\", \"type\": \"string\", \"title\": \"构建URL\", \"example\": \"http://jenkins.example.com/job/app/123/\", \"required\": true, \"description\": \"Jenkins构建页面的访问地址\"}, {\"enum\": null, \"name\": \"artifactUrl\", \"type\": \"string\", \"title\": \"构建产物地址\", \"example\": \"http://jenkins.example.com/job/app/123/artifact/target/app-1.0.0.jar\", \"required\": false, \"description\": \"构建生成的jar/war包下载地址\"}, {\"enum\": null, \"name\": \"gitCommitId\", \"type\": \"string\", \"title\": \"Git提交ID\", \"example\": \"a3f5e8d2c4b1a5e9f2d3e7b8c9d1a2f3e4b5c6d7\", \"required\": true, \"description\": \"本次构建使用的Git提交哈希值\"}, {\"enum\": null, \"name\": \"buildDuration\", \"type\": \"number\", \"title\": \"构建时长\", \"example\": 120, \"required\": true, \"description\": \"构建执行的时长(秒)\"}, {\"enum\": null, \"name\": \"buildDurationMillis\", \"type\": \"number\", \"title\": \"构建时长(毫秒)\", \"example\": 158000, \"required\": false, \"description\": \"构建执行的时长(毫秒)\"}, {\"enum\": null, \"name\": \"buildDurationFormatted\", \"type\": \"string\", \"title\": \"构建时长(格式)\", \"example\": \"00:02:39\", \"required\": false, \"description\": \"构建执行的时长(格式:HH:mm:ss)\"}, {\"enum\": null, \"name\": \"buildEndTimeMillis\", \"type\": \"number\", \"title\": \"部署结束时间(ms)\", \"example\": 1700000000000, \"required\": false, \"description\": \"部署结束时间(毫秒)\"}, {\"enum\": null, \"name\": \"buildEndTime\", \"type\": \"string\", \"title\": \"部署结束时间\", \"example\": \"2025-11-14 15:30:00\", \"required\": false, \"description\": \"部署结束时间(格式化)\"}], \"nodeCode\": \"JENKINS_BUILD\", \"nodeName\": \"Jenkins构建\", \"nodeType\": \"JENKINS_BUILD\", \"position\": {\"x\": 435, \"y\": -315}, \"inputMapping\": {\"jobName\": \"${jenkins.jobName}\", \"serverId\": \"${jenkins.serverId}\", \"continueOnFailure\": true}}, {\"id\": \"sid_90bb343a_9bf9_48c4_be7c_334aeb71bf9d\", \"configs\": {\"nodeCode\": \"END_EVENT\", \"nodeName\": \"结束\", \"description\": \"工作流的结束节点\"}, \"outputs\": [], \"nodeCode\": \"END_EVENT\", \"nodeName\": \"结束\", \"nodeType\": \"END_EVENT\", \"position\": {\"x\": 2100, \"y\": -210}, \"inputMapping\": {}}, {\"id\": \"sid_20005e1e_f5e1_4ae7_a2cd_18e58434e095\", \"configs\": {\"nodeCode\": \"APPROVAL\", \"nodeName\": \"审批部署\", \"description\": \"人工审批节点,支持多种审批模式\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": [\"APPROVED\", \"REJECTED\", \"TIMEOUT\"], \"name\": \"approvalResult\", \"type\": \"string\", \"title\": \"审批结果\", \"example\": \"APPROVED\", \"required\": true, \"description\": \"审批的最终结果\"}, {\"enum\": null, \"name\": \"approver\", \"type\": \"string\", \"title\": \"审批人\", \"example\": \"张三\", \"required\": true, \"description\": \"实际执行审批的用户\"}, {\"enum\": null, \"name\": \"approverUserId\", \"type\": \"number\", \"title\": \"审批人ID\", \"example\": 1001, \"required\": true, \"description\": \"审批人的用户ID\"}, {\"enum\": null, \"name\": \"approvalTime\", \"type\": \"string\", \"title\": \"审批时间\", \"example\": \"2025-10-23T10:30:00Z\", \"required\": true, \"description\": \"审批完成的时间\"}, {\"enum\": null, \"name\": \"approvalComment\", \"type\": \"string\", \"title\": \"审批意见\", \"example\": \"同意发布到生产环境\", \"required\": false, \"description\": \"审批人填写的意见\"}, {\"enum\": null, \"name\": \"approvalDuration\", \"type\": \"number\", \"title\": \"审批用时(秒)\", \"example\": 3600, \"required\": true, \"description\": \"从创建到完成审批的时长\"}, {\"enum\": null, \"name\": \"allApprovers\", \"type\": \"array\", \"title\": \"所有审批人\", \"example\": [{\"time\": \"2025-10-23T10:30:00Z\", \"result\": \"APPROVED\", \"userId\": 1001, \"comment\": \"同意\", \"userName\": \"张三\"}], \"required\": false, \"description\": \"参与审批的所有人员列表(会签/或签时),格式:[{userId, userName, result, comment, time}]\"}], \"nodeCode\": \"APPROVAL\", \"nodeName\": \"审批部署\", \"nodeType\": \"APPROVAL\", \"position\": {\"x\": -45, \"y\": -900}, \"inputMapping\": {\"allowAddSign\": false, \"approvalMode\": \"ANY\", \"approverType\": \"VARIABLE\", \"allowDelegate\": false, \"approvalTitle\": \"部署工单\", \"timeoutAction\": \"NONE\", \"requireComment\": false, \"approvalContent\": \"部署工单待审批\", \"timeoutDuration\": 0, \"approverVariable\": \"${approval.userNames}\", \"continueOnFailure\": true}}, {\"id\": \"sid_f1188946_c6ff_4480_964e_82f65fdcc514\", \"configs\": {\"nodeCode\": \"GATEWAY\", \"nodeName\": \"是否需要审批\", \"description\": \"流程分支控制节点,支持排他、并行、包容三种模式\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"selectedBranches\", \"type\": \"array\", \"title\": \"已选分支\", \"example\": [\"branch_1\", \"branch_2\"], \"required\": true, \"description\": \"实际执行的分支ID列表(排他网关返回1个,并行网关返回多个,包容网关返回1-N个)\"}, {\"enum\": null, \"name\": \"gatewayType\", \"type\": \"string\", \"title\": \"网关类型\", \"example\": \"EXCLUSIVE\", \"required\": true, \"description\": \"当前网关的类型\"}, {\"enum\": null, \"name\": \"evaluationResults\", \"type\": \"object\", \"title\": \"条件评估结果\", \"example\": {\"branch_1\": true, \"branch_2\": false}, \"required\": false, \"description\": \"各分支条件的评估结果(仅当启用日志时)\"}], \"nodeCode\": \"GATEWAY\", \"nodeName\": \"是否需要审批\", \"nodeType\": \"GATEWAY_NODE\", \"position\": {\"x\": -570, \"y\": -300}, \"inputMapping\": {\"gatewayType\": \"exclusiveGateway\"}}, {\"id\": \"sid_e5f930da_062e_4819_b976_8d8172c7f14a\", \"configs\": {\"nodeCode\": \"GIT_SYNC_CHECK\", \"nodeName\": \"Git同步检测\", \"description\": \"检测源分支与目标分支的同步状态\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"hasDifference\", \"type\": \"boolean\", \"title\": \"是否存在差异\", \"example\": true, \"required\": true, \"description\": \"源分支和目标分支是否存在代码差异\"}, {\"enum\": null, \"name\": \"commitsAhead\", \"type\": \"number\", \"title\": \"源分支领先提交数\", \"example\": 5, \"required\": true, \"description\": \"源分支比目标分支多出的提交数量\"}, {\"enum\": null, \"name\": \"commitsBehind\", \"type\": \"number\", \"title\": \"目标分支领先提交数\", \"example\": 0, \"required\": true, \"description\": \"目标分支比源分支多出的提交数量\"}, {\"enum\": null, \"name\": \"differenceCommits\", \"type\": \"array\", \"title\": \"差异提交列表\", \"example\": [{\"author\": \"张三\", \"message\": \"feat: 添加新功能\", \"commitId\": \"a3f5e8d\", \"commitTime\": \"2025-12-04 10:30:00\"}], \"required\": false, \"description\": \"差异提交详情列表(最多显示20条)\"}, {\"enum\": null, \"name\": \"sourceLatestCommit\", \"type\": \"string\", \"title\": \"源分支最新提交SHA\", \"example\": \"a3f5e8d2c4b1a5e9f2d3e7b8c9d1a2f3e4b5c6d7\", \"required\": true, \"description\": \"源分支最新提交的完整SHA值\"}, {\"enum\": null, \"name\": \"targetLatestCommit\", \"type\": \"string\", \"title\": \"目标分支最新提交SHA\", \"example\": \"b2e4c7f8d1a3e5b9c2d6f9a8e7d1c4b5a3f6e8d2\", \"required\": true, \"description\": \"目标分支最新提交的完整SHA值\"}, {\"enum\": null, \"name\": \"checkDetail\", \"type\": \"string\", \"title\": \"检查结果详情\", \"example\": \"源分支 \'develop\' 领先目标分支 \'master\' 5个提交,需要同步代码\", \"required\": true, \"description\": \"检查结果的详细说明(用于通知模板)\"}], \"nodeCode\": \"GIT_SYNC_CHECK\", \"nodeName\": \"Git同步检测\", \"nodeType\": \"GIT_SYNC_CHECK\", \"position\": {\"x\": -1815, \"y\": -345}, \"inputMapping\": {\"sourceBranch\": \"${sourceRepository.branch}\", \"targetBranch\": \"${targetRepository.branch}\", \"continueOnFailure\": true, \"sourceGitSystemId\": \"${sourceRepository.systemId}\", \"targetGitSystemId\": \"${targetRepository.systemId}\", \"sourceGitProjectId\": \"${sourceRepository.projectId}\", \"targetGitProjectId\": \"${targetRepository.projectId}\"}}, {\"id\": \"sid_0d0eb0be_a427_4966_8114_475ebeb5e724\", \"configs\": {\"nodeCode\": \"GATEWAY\", \"nodeName\": \"代码同步检查网关\", \"description\": \"流程分支控制节点,支持排他、并行、包容三种模式\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"selectedBranches\", \"type\": \"array\", \"title\": \"已选分支\", \"example\": [\"branch_1\", \"branch_2\"], \"required\": true, \"description\": \"实际执行的分支ID列表(排他网关返回1个,并行网关返回多个,包容网关返回1-N个)\"}, {\"enum\": null, \"name\": \"gatewayType\", \"type\": \"string\", \"title\": \"网关类型\", \"example\": \"EXCLUSIVE\", \"required\": true, \"description\": \"当前网关的类型\"}, {\"enum\": null, \"name\": \"evaluationResults\", \"type\": \"object\", \"title\": \"条件评估结果\", \"example\": {\"branch_1\": true, \"branch_2\": false}, \"required\": false, \"description\": \"各分支条件的评估结果(仅当启用日志时)\"}], \"nodeCode\": \"GATEWAY\", \"nodeName\": \"代码同步检查网关\", \"nodeType\": \"GATEWAY_NODE\", \"position\": {\"x\": -1275, \"y\": -300}, \"inputMapping\": {\"gatewayType\": \"exclusiveGateway\"}}, {\"id\": \"sid_ee2f5ea0_48d3_40dd_8ba3_5595ad49eb63\", \"configs\": {\"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"Git同步检测异常通知\", \"description\": \"发送通知消息到指定渠道\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}], \"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"Git同步检测异常通知\", \"nodeType\": \"NOTIFICATION\", \"position\": {\"x\": -885, \"y\": 60}, \"inputMapping\": {\"channelId\": \"${notification.notificationChannelId}\", \"continueOnFailure\": true, \"notificationTemplateId\": 10}}]}', 'DRAFT', 'admin', NOW(), b'0', 'dengqichen', NOW(), 83); -INSERT INTO `deploy-ease-platform`.`workflow_definition` (`id`, `name`, `key`, `category_id`, `form_definition_id`, `process_definition_id`, `flow_version`, `description`, `bpmn_xml`, `graph`, `status`, `create_by`, `create_time`, `deleted`, `update_by`, `update_time`, `version`) VALUES (2, '国产化部署流程', 'localization-deploy-workflow', 2, 2, '', 1, '', '', '{\"edges\": [{\"id\": \"eid_353a1306_8521_4a45_851e_b5d1715e16d5\", \"to\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"from\": \"sid_d377019d_5dd0_4e24_9dc7_c81be855ad89\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_cc5d51f1_e380_4748_92e9_f4c86f0f06ba\", \"to\": \"sid_25103e74_107b_4cb8_98d8_8265e3e09fa0\", \"from\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_ce83cb80_bd13_43ba_98b0_916ce9eca8c7\", \"to\": \"sid_a2de62df_0b29_4d2d_8a82_43a1aaf2566a\", \"from\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"name\": \"${notification.deployNotificationEnabled == \'true\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${notification.buildNotificationEnabled == \'true\'}\"}}, \"vertices\": []}, {\"id\": \"eid_cb5f1775_919f_4313_a665_0de1a3a16d76\", \"to\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"from\": \"sid_6c622e3c_4eec_44a9_b00b_8933dc89b98c\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_2afd01f2_b2c7_4336_b05e_6ebdd8977ef4\", \"to\": \"sid_d377019d_5dd0_4e24_9dc7_c81be855ad89\", \"from\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"name\": \"${notification.buildNotificationEnabled == \'true\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${notification.buildNotificationEnabled == \'true\'}\"}}, \"vertices\": []}, {\"id\": \"eid_b91cf09f_4816_4665_aed2_0644017e6938\", \"to\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"from\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}], \"nodes\": [{\"id\": \"sid_6c622e3c_4eec_44a9_b00b_8933dc89b98c\", \"configs\": {\"nodeCode\": \"START_EVENT\", \"nodeName\": \"开始\", \"description\": \"工作流的起始节点\"}, \"outputs\": [], \"nodeCode\": \"START_EVENT\", \"nodeName\": \"开始\", \"nodeType\": \"START_EVENT\", \"position\": {\"x\": -480, \"y\": -15}, \"inputMapping\": {}}, {\"id\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"configs\": {\"nodeCode\": \"HTTP_REQUEST\", \"nodeName\": \"HTTP请求\", \"description\": \"发送HTTP/HTTPS请求并解析响应\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"statusCode\", \"type\": \"number\", \"title\": \"HTTP状态码\", \"example\": 200, \"required\": true, \"description\": \"响应的HTTP状态码(如 200, 404, 500)\"}, {\"enum\": null, \"name\": \"isSuccess\", \"type\": \"boolean\", \"title\": \"是否成功\", \"example\": true, \"required\": true, \"description\": \"状态码为2xx时返回true\"}, {\"enum\": null, \"name\": \"responseBody\", \"type\": \"object\", \"title\": \"响应体\", \"example\": {\"data\": {}, \"status\": \"success\"}, \"required\": false, \"description\": \"响应内容,JSON格式会自动解析为对象\"}, {\"enum\": null, \"name\": \"responseTime\", \"type\": \"number\", \"title\": \"响应时间(毫秒)\", \"example\": 150, \"required\": true, \"description\": \"请求耗时(毫秒)\"}, {\"enum\": null, \"name\": \"errorMessage\", \"type\": \"string\", \"title\": \"错误信息\", \"example\": \"Connection timeout\", \"required\": false, \"description\": \"失败时的错误描述\"}, {\"enum\": null, \"name\": \"responseHeaders\", \"type\": \"object\", \"title\": \"响应头\", \"example\": {\"content-type\": \"application/json\"}, \"required\": false, \"description\": \"HTTP响应头信息\"}], \"nodeCode\": \"HTTP_REQUEST\", \"nodeName\": \"HTTP请求\", \"nodeType\": \"HTTP_REQUEST\", \"position\": {\"x\": 885, \"y\": 120}, \"inputMapping\": {\"url\": \"http://124.127.238.38:8080/api/deploy\", \"body\": \"{\\n \\\"appName\\\": \\\"themetis-planner-workbench-server\\\"\\n}\", \"method\": \"POST\", \"headers\": [{\"key\": \"Content-Type\", \"value\": \"application/json\"}], \"timeout\": 300000, \"verifySsl\": false, \"queryParams\": [], \"followRedirects\": true, \"responseBodyType\": \"JSON\", \"continueOnFailure\": true}}, {\"id\": \"sid_25103e74_107b_4cb8_98d8_8265e3e09fa0\", \"configs\": {\"nodeCode\": \"END_EVENT\", \"nodeName\": \"结束\", \"description\": \"工作流的结束节点\"}, \"outputs\": [], \"nodeCode\": \"END_EVENT\", \"nodeName\": \"结束\", \"nodeType\": \"END_EVENT\", \"position\": {\"x\": 2250, \"y\": 240}, \"inputMapping\": {}}, {\"id\": \"sid_d377019d_5dd0_4e24_9dc7_c81be855ad89\", \"configs\": {\"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"构建部署通知\", \"description\": \"发送通知消息到指定渠道\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}], \"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"构建部署通知\", \"nodeType\": \"NOTIFICATION\", \"position\": {\"x\": 420, \"y\": -420}, \"inputMapping\": {\"channelId\": \"${notification.notificationChannelId}\", \"continueOnFailure\": true, \"notificationTemplateId\": \"${notification.buildNotificationTemplateId}\"}}, {\"id\": \"sid_a2de62df_0b29_4d2d_8a82_43a1aaf2566a\", \"configs\": {\"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"部署结束通知\", \"description\": \"发送通知消息到指定渠道\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}], \"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"部署结束通知\", \"nodeType\": \"NOTIFICATION\", \"position\": {\"x\": 1350, \"y\": -405}, \"inputMapping\": {\"channelId\": \"${notification.notificationChannelId}\", \"continueOnFailure\": true, \"notificationTemplateId\": \"${notification.buildNotificationTemplateId}\"}}, {\"id\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"configs\": {\"nodeCode\": \"GATEWAY\", \"nodeName\": \"网关节点\", \"description\": \"流程分支控制节点,支持排他、并行、包容三种模式\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"selectedBranches\", \"type\": \"array\", \"title\": \"已选分支\", \"example\": [\"branch_1\", \"branch_2\"], \"required\": true, \"description\": \"实际执行的分支ID列表(排他网关返回1个,并行网关返回多个,包容网关返回1-N个)\"}, {\"enum\": null, \"name\": \"gatewayType\", \"type\": \"string\", \"title\": \"网关类型\", \"example\": \"EXCLUSIVE\", \"required\": true, \"description\": \"当前网关的类型\"}, {\"enum\": null, \"name\": \"evaluationResults\", \"type\": \"object\", \"title\": \"条件评估结果\", \"example\": {\"branch_1\": true, \"branch_2\": false}, \"required\": false, \"description\": \"各分支条件的评估结果(仅当启用日志时)\"}], \"nodeCode\": \"GATEWAY\", \"nodeName\": \"网关节点\", \"nodeType\": \"GATEWAY_NODE\", \"position\": {\"x\": -165, \"y\": -90}, \"inputMapping\": {\"gatewayType\": \"exclusiveGateway\"}}]}', 'DRAFT', 'admin', NOW(), b'0', 'admin', NOW(), 62); +INSERT INTO `deploy-ease-platform`.`workflow_definition` (`id`, `name`, `key`, `category_id`, `form_definition_id`, `process_definition_id`, `flow_version`, `description`, `bpmn_xml`, `graph`, `status`, `create_by`, `create_time`, `deleted`, `update_by`, `update_time`, `version`) VALUES (2, '国产化部署流程', 'localization-deploy-workflow', 2, 2, '7db86d72-d4d0-11f0-a67d-2214183a8d30', 1, '', '', '{\"edges\": [{\"id\": \"eid_353a1306_8521_4a45_851e_b5d1715e16d5\", \"to\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"from\": \"sid_d377019d_5dd0_4e24_9dc7_c81be855ad89\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_cc5d51f1_e380_4748_92e9_f4c86f0f06ba\", \"to\": \"sid_25103e74_107b_4cb8_98d8_8265e3e09fa0\", \"from\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_ce83cb80_bd13_43ba_98b0_916ce9eca8c7\", \"to\": \"sid_a2de62df_0b29_4d2d_8a82_43a1aaf2566a\", \"from\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"name\": \"${notification.buildNotificationEnabled == \'true\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${notification.buildNotificationEnabled == \'true\'}\"}}, \"vertices\": []}, {\"id\": \"eid_cb5f1775_919f_4313_a665_0de1a3a16d76\", \"to\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"from\": \"sid_6c622e3c_4eec_44a9_b00b_8933dc89b98c\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}, {\"id\": \"eid_2afd01f2_b2c7_4336_b05e_6ebdd8977ef4\", \"to\": \"sid_d377019d_5dd0_4e24_9dc7_c81be855ad89\", \"from\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"name\": \"${notification.buildNotificationEnabled == \'true\'}\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"EXPRESSION\", \"priority\": 10, \"expression\": \"${notification.buildNotificationEnabled == \'true\'}\"}}, \"vertices\": []}, {\"id\": \"eid_b91cf09f_4816_4665_aed2_0644017e6938\", \"to\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"from\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"name\": \"\", \"config\": {\"type\": \"sequence\", \"condition\": {\"type\": \"DEFAULT\", \"priority\": 10}}, \"vertices\": []}], \"nodes\": [{\"id\": \"sid_6c622e3c_4eec_44a9_b00b_8933dc89b98c\", \"configs\": {\"nodeCode\": \"START_EVENT\", \"nodeName\": \"开始\", \"description\": \"工作流的起始节点\"}, \"outputs\": [], \"nodeCode\": \"START_EVENT\", \"nodeName\": \"开始\", \"nodeType\": \"START_EVENT\", \"position\": {\"x\": -480, \"y\": -15}, \"inputMapping\": {}}, {\"id\": \"sid_d7bd35dc_37cc_4868_9c8a_9c854d5d6bbf\", \"configs\": {\"nodeCode\": \"HTTP_REQUEST\", \"nodeName\": \"HTTP请求\", \"description\": \"发送HTTP/HTTPS请求并解析响应\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"statusCode\", \"type\": \"number\", \"title\": \"HTTP状态码\", \"example\": 200, \"required\": true, \"description\": \"响应的HTTP状态码(如 200, 404, 500)\"}, {\"enum\": null, \"name\": \"isSuccess\", \"type\": \"boolean\", \"title\": \"是否成功\", \"example\": true, \"required\": true, \"description\": \"状态码为2xx时返回true\"}, {\"enum\": null, \"name\": \"responseBody\", \"type\": \"object\", \"title\": \"响应体\", \"example\": {\"data\": {}, \"status\": \"success\"}, \"required\": false, \"description\": \"响应内容,JSON格式会自动解析为对象\"}, {\"enum\": null, \"name\": \"responseTime\", \"type\": \"number\", \"title\": \"响应时间(毫秒)\", \"example\": 150, \"required\": true, \"description\": \"请求耗时(毫秒)\"}, {\"enum\": null, \"name\": \"errorMessage\", \"type\": \"string\", \"title\": \"错误信息\", \"example\": \"Connection timeout\", \"required\": false, \"description\": \"失败时的错误描述\"}, {\"enum\": null, \"name\": \"responseHeaders\", \"type\": \"object\", \"title\": \"响应头\", \"example\": {\"content-type\": \"application/json\"}, \"required\": false, \"description\": \"HTTP响应头信息\"}], \"nodeCode\": \"HTTP_REQUEST\", \"nodeName\": \"HTTP请求\", \"nodeType\": \"HTTP_REQUEST\", \"position\": {\"x\": 885, \"y\": 120}, \"inputMapping\": {\"url\": \"http://124.127.238.38:8080/api/deploy\", \"body\": \"{\\n \\\"appName\\\": \\\"${applicationCode}\\\"\\n}\", \"method\": \"POST\", \"headers\": [{\"key\": \"Content-Type\", \"value\": \"application/json\"}], \"timeout\": 300000, \"verifySsl\": false, \"queryParams\": [], \"followRedirects\": true, \"responseBodyType\": \"JSON\", \"continueOnFailure\": true}}, {\"id\": \"sid_25103e74_107b_4cb8_98d8_8265e3e09fa0\", \"configs\": {\"nodeCode\": \"END_EVENT\", \"nodeName\": \"结束\", \"description\": \"工作流的结束节点\"}, \"outputs\": [], \"nodeCode\": \"END_EVENT\", \"nodeName\": \"结束\", \"nodeType\": \"END_EVENT\", \"position\": {\"x\": 2250, \"y\": 240}, \"inputMapping\": {}}, {\"id\": \"sid_d377019d_5dd0_4e24_9dc7_c81be855ad89\", \"configs\": {\"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"构建部署通知\", \"description\": \"发送通知消息到指定渠道\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}], \"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"构建部署通知\", \"nodeType\": \"NOTIFICATION\", \"position\": {\"x\": 420, \"y\": -420}, \"inputMapping\": {\"channelId\": \"${notification.notificationChannelId}\", \"continueOnFailure\": true, \"notificationTemplateId\": \"${notification.buildNotificationTemplateId}\"}}, {\"id\": \"sid_a2de62df_0b29_4d2d_8a82_43a1aaf2566a\", \"configs\": {\"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"部署结束通知\", \"description\": \"发送通知消息到指定渠道\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}], \"nodeCode\": \"NOTIFICATION\", \"nodeName\": \"部署结束通知\", \"nodeType\": \"NOTIFICATION\", \"position\": {\"x\": 1350, \"y\": -405}, \"inputMapping\": {\"channelId\": \"${notification.notificationChannelId}\", \"continueOnFailure\": true, \"notificationTemplateId\": \"${notification.buildNotificationTemplateId}\"}}, {\"id\": \"sid_e881dab6_4ec1_44d1_81d1_f68a1bca582a\", \"configs\": {\"nodeCode\": \"GATEWAY\", \"nodeName\": \"网关节点\", \"description\": \"流程分支控制节点,支持排他、并行、包容三种模式\"}, \"outputs\": [{\"enum\": [\"SUCCESS\", \"FAILURE\"], \"name\": \"status\", \"type\": \"string\", \"title\": \"执行状态\", \"example\": \"SUCCESS\", \"required\": true, \"description\": \"节点执行的最终状态\"}, {\"enum\": null, \"name\": \"selectedBranches\", \"type\": \"array\", \"title\": \"已选分支\", \"example\": [\"branch_1\", \"branch_2\"], \"required\": true, \"description\": \"实际执行的分支ID列表(排他网关返回1个,并行网关返回多个,包容网关返回1-N个)\"}, {\"enum\": null, \"name\": \"gatewayType\", \"type\": \"string\", \"title\": \"网关类型\", \"example\": \"EXCLUSIVE\", \"required\": true, \"description\": \"当前网关的类型\"}, {\"enum\": null, \"name\": \"evaluationResults\", \"type\": \"object\", \"title\": \"条件评估结果\", \"example\": {\"branch_1\": true, \"branch_2\": false}, \"required\": false, \"description\": \"各分支条件的评估结果(仅当启用日志时)\"}], \"nodeCode\": \"GATEWAY\", \"nodeName\": \"网关节点\", \"nodeType\": \"GATEWAY_NODE\", \"position\": {\"x\": -165, \"y\": -90}, \"inputMapping\": {\"gatewayType\": \"exclusiveGateway\"}}]}', 'DRAFT', 'admin', NOW(), b'0', 'admin', NOW(), 66); -- -------------------------------------------------------------------------------------- -- 初始化项目管理数据 -- -------------------------------------------------------------------------------------- @@ -659,7 +663,7 @@ INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_ INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (12, 'scp-process', 'scp-process', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (13, 'scp-service-manager', 'scp-service-manager', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (14, 'scp-customization-engine', 'scp-customization-engine', '', 0, 1, b'1', 0, 'admin', NOW(), 'admin', NOW(), 1, b'0'); - +INSERT INTO `deploy-ease-platform`.`deploy_application` (`id`, `app_code`, `app_name`, `app_desc`, `language`, `application_category_id`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (15, 'themetis-engine', 'themetis-engine', '', 0, 2, b'1', 0, 'dengqichen', NOW(), 'dengqichen', NOW(), 1, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (1, NULL, 'LONGI-DEV', '隆基DEV', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 2, b'0'); INSERT INTO `deploy-ease-platform`.`deploy_environment` (`id`, `tenant_code`, `env_code`, `env_name`, `env_desc`, `enabled`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (2, NULL, 'LONGI-UAT', '隆基UAT', NULL, b'1', 1, 'admin', NOW(), 'admin', NOW(), 3, b'0'); @@ -740,16 +744,38 @@ INSERT INTO `deploy-ease-platform`.`deploy_server_category` (`id`, `name`, `code INSERT INTO `deploy-ease-platform`.`deploy_server_category` (`id`, `name`, `code`, `icon`, `description`, `sort`, `enabled`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (9, '大连本地服务器', 'dalian_locals', '', '', 0, 1, 'admin', NOW(), 'admin', NOW(), 1, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (1, 'SY测试环境服务器', '192.168.1.82', 22, 'root', 'PASSWORD', 'FQbCHbafPmGdPDpS', '', '', 6, 'LINUX', 'CentOS Linux 7 (Core)', 'engine-k8s', 'ONLINE', '', 128, 314, 1532, '[{\"totalSize\": 1531, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', '[\"SY测试环境-临时用\", \"K8S\"]', NOW(), 'admin', NOW(), 'system', NOW(), 23, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (2, '国产化38(APP1)', '124.127.238.38', 22, 'root', 'PASSWORD', '@1sdgCq123', '', '', 7, 'LINUX', 'Kylin Linux Advanced Server V10 (Lance)', 'app01', 'ONLINE', '', 32, 63, 201, '[{\"totalSize\": 200, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'dengqichen', NOW(), 'system', NOW(), 18, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (3, '国产化(APP2)', '124.127.238.39', 22, 'root', 'PASSWORD', '@1sdgCq123', '', '', 7, 'LINUX', 'Kylin Linux Advanced Server V10 (Lance)', 'app02', 'ONLINE', '', 32, 63, 201, '[{\"totalSize\": 200, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'dengqichen', NOW(), 'system', NOW(), 17, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (4, '国产化(DBServer)', '219.142.42.183', 22, 'root', 'PASSWORD', '@1sdgCq123', '', '', 7, 'LINUX', 'Kylin Linux Advanced Server V10 (Lance)', 'dbserver', 'ONLINE', '', 8, 31, 501, '[{\"totalSize\": 500, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'dengqichen', NOW(), 'system', NOW(), 18, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (5, '华为云116', '172.16.0.116', 22, 'root', 'PASSWORD', 'lianyu_123', '', '', 8, 'LINUX', 'CentOS Linux 7 (Core)', 'mysql', 'ONLINE', '', 8, 31, 533, '[{\"totalSize\": 40, \"fileSystem\": \"ext4\", \"mountPoint\": \"/\"}, {\"totalSize\": 493, \"fileSystem\": \"ext4\", \"mountPoint\": \"/mnt/data\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 19, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (6, '华为云nexus', '172.16.0.191', 2222, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', 'CentOS Linux 8', 'ly-nexus', 'ONLINE', '', 8, 15, 493, '[{\"totalSize\": 99, \"fileSystem\": \"ext4\", \"mountPoint\": \"/\"}, {\"totalSize\": 394, \"fileSystem\": \"ext4\", \"mountPoint\": \"/mnt/data\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 25, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (7, 'k8s服务器-203', '192.168.2.203', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'k8s-master', 'ONLINE', '', 24, 70, 469, '[{\"totalSize\": 468, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 19, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (8, 'doris-fe-204', '192.168.2.204', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'doris', 'ONLINE', '', 8, 31, 193, '[{\"totalSize\": 192, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 19, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (9, 'doris-be-205', '192.168.2.205', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'middware-205', 'ONLINE', '', 8, 15, 191, '[{\"totalSize\": 190, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 17, 0); -INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (10, '192.168.2.201', '192.168.2.201', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'ly-dev', 'ONLINE', '', 16, 38, 459, '[{\"totalSize\": 457, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 19, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (1, 'SY测试环境服务器', '192.168.1.82', 22, 'root', 'PASSWORD', 'FQbCHbafPmGdPDpS', '', '', 6, 'LINUX', 'CentOS Linux 7 (Core)', 'engine-k8s', 'ONLINE', '', 128, 314, 1532, '[{\"totalSize\": 1531, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', '[\"SY测试环境-临时用\", \"K8S\"]', NOW(), 'admin', NOW(), 'system', NOW(), 30, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (2, '国产化38(APP1)', '124.127.238.38', 22, 'root', 'PASSWORD', '@1sdgCq123', '', '', 7, 'LINUX', 'Kylin Linux Advanced Server V10 (Lance)', 'app01', 'ONLINE', '', 32, 63, 201, '[{\"totalSize\": 200, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'dengqichen', NOW(), 'system', NOW(), 25, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (3, '国产化(APP2)', '124.127.238.39', 22, 'root', 'PASSWORD', '@1sdgCq123', '', '', 7, 'LINUX', 'Kylin Linux Advanced Server V10 (Lance)', 'app02', 'ONLINE', '', 32, 63, 201, '[{\"totalSize\": 200, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'dengqichen', NOW(), 'system', NOW(), 24, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (4, '国产化(DBServer)', '219.142.42.183', 22, 'root', 'PASSWORD', '@1sdgCq123', '', '', 7, 'LINUX', 'Kylin Linux Advanced Server V10 (Lance)', 'dbserver', 'ONLINE', '', 8, 31, 501, '[{\"totalSize\": 500, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'dengqichen', NOW(), 'system', NOW(), 25, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (5, '华为云116', '172.16.0.116', 22, 'root', 'PASSWORD', 'lianyu_123', '', '', 8, 'LINUX', 'CentOS Linux 7 (Core)', 'mysql', 'ONLINE', '', 8, 31, 533, '[{\"totalSize\": 40, \"fileSystem\": \"ext4\", \"mountPoint\": \"/\"}, {\"totalSize\": 493, \"fileSystem\": \"ext4\", \"mountPoint\": \"/mnt/data\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 26, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (6, '华为云nexus', '172.16.0.191', 2222, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', 'CentOS Linux 8', 'ly-nexus', 'ONLINE', '', 8, 15, 493, '[{\"totalSize\": 99, \"fileSystem\": \"ext4\", \"mountPoint\": \"/\"}, {\"totalSize\": 394, \"fileSystem\": \"ext4\", \"mountPoint\": \"/mnt/data\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 32, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (7, 'k8s服务器-203', '192.168.2.203', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'k8s-master', 'ONLINE', '', 24, 70, 469, '[{\"totalSize\": 468, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 26, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (8, 'doris-fe-204', '192.168.2.204', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'doris', 'ONLINE', '', 8, 31, 193, '[{\"totalSize\": 192, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 26, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (9, 'doris-be-205', '192.168.2.205', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'middware-205', 'ONLINE', '', 8, 15, 191, '[{\"totalSize\": 190, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 24, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (10, '192.168.2.201', '192.168.2.201', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 9, 'LINUX', 'CentOS Linux 7 (Core)', 'ly-dev', 'ONLINE', '', 16, 38, 459, '[{\"totalSize\": 457, \"fileSystem\": \"xfs\", \"mountPoint\": \"/\"}, {\"totalSize\": 1, \"fileSystem\": \"xfs\", \"mountPoint\": \"/boot\"}, {\"totalSize\": 1, \"fileSystem\": \"vfat\", \"mountPoint\": \"/boot/efi\"}]', NULL, NOW(), 'admin', NOW(), 'system', NOW(), 26, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (11, 'bj-ly-scp-worker06', '172.16.0.56', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 8, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (12, 'bj-ly-etl-engine', '172.16.0.4', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 7, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (13, 'bj-ly-scp-worker04', '172.16.0.18', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 6, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (14, 'bj-ly-scp-worker03', '172.16.0.205', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 5, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (15, 'bj-ly-scp-worker01', '172.16.0.106', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 5, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (16, 'bj-ly-scp-worker07', '172.16.0.221', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 5, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (17, 'bj-ly-scp-worker02', '172.16.0.225', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 5, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (18, 'bj-ly-scp-worker08', '172.16.0.145', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 4, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (19, 'bj-ly-scp-worker09', '172.16.0.142', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 4, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (20, 'bj-ly-scp-worker05', '172.16.0.52', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 4, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (21, 'bj-ly-scp-doris-be02', '172.16.0.17', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 4, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (22, 'bj-ly-scp-doris-fe', '172.16.0.242', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 3, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (23, 'bj-ly-scp-doris-be01', '172.16.0.223', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 3, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (24, 'engine-sit', '192.168.1.71', 22, 'yangfan', 'PASSWORD', 'pV7nx0xR', '', '', 6, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'admin', NOW(), 'system', NOW(), 3, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (25, 'bj-ly-scp-doris-be03', '172.16.0.77', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 2, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (26, 'engine-uat', '192.168.1.72', 22, 'yangfan', 'PASSWORD', 'pV7nx0xR', '', '', 6, 'LINUX', NULL, NULL, 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'admin', NOW(), 'system', NOW(), 2, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (27, 'bj-ly-oms-worker03', '172.16.0.150', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 2, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (28, 'bj-ly-oms-worker02', '172.16.0.143', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 2, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (29, 'bj-ly-oms-worker04', '172.16.0.5', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 2, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (30, 'bj-ly-oms-worker01', '172.16.0.194', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 2, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (31, 'bj-ly-jumpserver-113', '172.16.0.113', 22, 'root', 'PASSWORD', '52DjOiyumc*UiNHsj^b%', '', '', 8, 'LINUX', '', '', 'ONLINE', '', NULL, NULL, NULL, NULL, NULL, NOW(), 'songwei', NOW(), 'system', NOW(), 3, 0); +INSERT INTO `deploy-ease-platform`.`deploy_server` (`id`, `server_name`, `host_ip`, `ssh_port`, `ssh_user`, `auth_type`, `ssh_password`, `ssh_private_key`, `ssh_passphrase`, `category_id`, `os_type`, `os_version`, `hostname`, `status`, `description`, `cpu_cores`, `memory_size`, `disk_size`, `disk_info`, `tags`, `last_connect_time`, `create_by`, `create_time`, `update_by`, `update_time`, `version`, `deleted`) VALUES (32, 'bj-ly-gitlab', '172.16.0.28', 22, 'root', 'PASSWORD', 'pzr@p*rdW#hX', '', '', 8, 'LINUX', NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'songwei', NOW(), 'songwei', NOW(), 1, 0); -- ===================================================== -- 通知模板初始数据 diff --git a/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql b/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql new file mode 100644 index 00000000..c7d9a1f5 --- /dev/null +++ b/backend/src/main/resources/db/changelog/sql/20251209141300-01.sql @@ -0,0 +1,27 @@ +-- -------------------------------------------------------------------------------------- +-- 系统版本发布记录 - v1.1 +-- 功能:记录Jenkins日志优化版本 +-- 作者:qqchen +-- 日期:2025-12-09 14:13 +-- -------------------------------------------------------------------------------------- + +-- 插入 1.1 日志优化发布记录 +INSERT INTO system_release ( + create_by, create_time, update_by, update_time, version, deleted, + release_version, module, release_date, changes, notified, delay_minutes, estimated_duration, enable_auto_shutdown +) +VALUES ( + 'system', NOW(), 'system', NOW(), 1, 0, + 1.12, 'ALL', NOW(), + '【后端】 +- 优化:生产环境日志级别(空结果/开始日志/详细过程调整为DEBUG,减少冗余输出) +- 优化:HikariCP连接泄漏检测阈值(调整为35分钟,匹配Jenkins构建轮询时长) +- 优化:SSHJ底层日志屏蔽(Transport/SecureRandom等无业务价值日志降级为WARN) +- 优化:服务器连接状态日志(提升连接成功日志为INFO,便于生产监控) +- 优化:Liquibase配置(includeAll只扫描XML文件,避免SQL重复执行) +- 新增:系统指标监控菜单(实时查看JVM、CPU、内存、线程、连接池等性能指标) +- 新增:Actuator监控端点(threaddump/heapdump/env/loggers,支持动态调整日志级别) +- 数据:新增用户lukuan及角色绑定(深圳部门/开发角色) +', + 0, NULL, NULL, 0 +); diff --git a/backend/src/main/resources/messages.properties b/backend/src/main/resources/messages.properties index 49eb758c..f7bbd487 100644 --- a/backend/src/main/resources/messages.properties +++ b/backend/src/main/resources/messages.properties @@ -131,7 +131,7 @@ workflow.definition.not.published=工作流定义未发布 workflow.definition.already.published=工作流定义已发布 workflow.definition.cannot.delete=工作流定义已被使用,无法删除 workflow.not.draft=只有草稿状态的工作流定义可以发布 -workflow.not.published=只有已发布状态的工作流定义可以禁用 +workflow.not.published=工作流未发布,请联系部署管理员进行工作流调整 workflow.not.disabled=只有已禁用状态的工作流定义可以启用 workflow.disabled=工作流已禁用 workflow.invalid.status=工作流状态无效 diff --git a/backend/src/main/resources/messages_en_US.properties b/backend/src/main/resources/messages_en_US.properties index ad60f76d..efc94b76 100644 --- a/backend/src/main/resources/messages_en_US.properties +++ b/backend/src/main/resources/messages_en_US.properties @@ -127,7 +127,7 @@ workflow.definition.not.published=Workflow definition not published workflow.definition.already.published=Workflow definition already published workflow.definition.cannot.delete=Workflow definition is in use and cannot be deleted workflow.not.draft=Only draft workflow definitions can be published -workflow.not.published=Only published workflow definitions can be disabled +workflow.not.published=Workflow not published, please contact deployment administrator for workflow adjustment workflow.not.disabled=Only disabled workflow definitions can be enabled workflow.disabled=Workflow is disabled workflow.invalid.status=Invalid workflow status diff --git a/backend/src/main/resources/messages_zh_CN.properties b/backend/src/main/resources/messages_zh_CN.properties index 415e65ee..206094b4 100644 --- a/backend/src/main/resources/messages_zh_CN.properties +++ b/backend/src/main/resources/messages_zh_CN.properties @@ -127,7 +127,7 @@ workflow.definition.not.published=工作流定义未发布 workflow.definition.already.published=工作流定义已发布 workflow.definition.cannot.delete=工作流定义已被使用,无法删除 workflow.not.draft=只有草稿状态的工作流定义可以发布 -workflow.not.published=只有已发布状态的工作流定义可以禁用 +workflow.not.published=工作流未发布,请联系部署管理员进行工作流调整 workflow.not.disabled=只有已禁用状态的工作流定义可以启用 workflow.disabled=工作流已禁用 workflow.invalid.status=工作流状态无效