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=工作流状态无效