From f49c0915ec88cbe6c5a642830cb75f48039f8f21 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Thu, 4 Dec 2025 18:34:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0GIT=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/framework/utils/DateUtils.java | 27 +++++++ .../delegate/GitSyncCheckDelegate.java | 72 ++++++++++++------- .../delegate/HttpRequestNodeDelegate.java | 4 +- .../backend/workflow/util/BpmnConverter.java | 2 + 4 files changed, 78 insertions(+), 27 deletions(-) diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/DateUtils.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/DateUtils.java index b80fd496..55d9da45 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/DateUtils.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/utils/DateUtils.java @@ -45,4 +45,31 @@ public class DateUtils { long sec = seconds % 60L; return String.format("%02d:%02d:%02d", hours, minutes, sec); } + + /** + * 格式化 LocalDateTime 为默认格式 (yyyy-MM-dd HH:mm:ss) + * + * @param dateTime 日期时间对象 + * @return 格式化后的字符串,如果为 null 则返回 "N/A" + */ + public static String format(LocalDateTime dateTime) { + if (dateTime == null) { + return "N/A"; + } + return dateTime.format(DateTimeFormatter.ofPattern(DEFAULT_PATTERN)); + } + + /** + * 格式化 LocalDateTime 为指定格式 + * + * @param dateTime 日期时间对象 + * @param pattern 日期格式模板 + * @return 格式化后的字符串,如果为 null 则返回 "N/A" + */ + public static String format(LocalDateTime dateTime, String pattern) { + if (dateTime == null) { + return "N/A"; + } + return dateTime.format(DateTimeFormatter.ofPattern(pattern)); + } } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/GitSyncCheckDelegate.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/GitSyncCheckDelegate.java index 5ceaf262..8acfd70e 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/GitSyncCheckDelegate.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/GitSyncCheckDelegate.java @@ -6,6 +6,7 @@ import com.qqchen.deploy.backend.deploy.integration.response.GitCommitResponse; import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository; import com.qqchen.deploy.backend.framework.enums.ResponseCode; import com.qqchen.deploy.backend.framework.exception.BusinessException; +import com.qqchen.deploy.backend.framework.utils.DateUtils; import com.qqchen.deploy.backend.workflow.dto.CommitDifferenceInfo; import com.qqchen.deploy.backend.workflow.dto.inputmapping.GitSyncCheckInputMapping; import com.qqchen.deploy.backend.workflow.dto.outputs.GitSyncCheckOutputs; @@ -35,18 +36,19 @@ public class GitSyncCheckDelegate extends BaseNodeDelegate configs, - GitSyncCheckInputMapping input) { + protected void executeInternal(DelegateExecution execution, Map configs, GitSyncCheckInputMapping input) { - log.info("开始Git同步检测 - 源分支: {}/{}/{}, 目标分支: {}/{}/{}", - input.getSourceGitSystemId(), input.getSourceGitProjectId(), input.getSourceBranch(), - input.getTargetGitSystemId(), input.getTargetGitProjectId(), input.getTargetBranch()); + log.info("开始Git同步检测 - 源分支: {}/{}/{}, 目标分支: {}/{}/{}", input.getSourceGitSystemId(), input.getSourceGitProjectId(), input.getSourceBranch(), input.getTargetGitSystemId(), input.getTargetGitProjectId(), input.getTargetBranch()); try { // 0. 检查是否配置了目标Git信息(非强制,如果未配置则跳过检测) @@ -56,7 +58,7 @@ public class GitSyncCheckDelegate extends BaseNodeDelegate\n 时间: %s\n", + "%d. [%s] %s (%s %s)\n", i + 1, commit.getCommitId().substring(0, 8), commit.getShortMessage(), commit.getAuthor(), - commit.getAuthorEmail(), - commit.getCommittedDate() + DateUtils.format(commit.getCommittedDate()) )); } + // 如果还有更多未显示的提交 + if (compareResult.commitsBehind > displayCount) { + detailBuilder.append(String.format( + "\n...还有 %d 个未显示的提交\n", + compareResult.commitsBehind - displayCount + )); + } + + // 简化操作指引 + detailBuilder.append(String.format( + "\n请将上述提交回归到 [%s] %s 或确认为客户定制化代码", + sourceSystem.getName(), + input.getSourceBranch() + )); + String detail = detailBuilder.toString(); output.setStatus(NodeExecutionStatusEnum.FAILURE); output.setCheckDetail(detail); @@ -172,7 +196,7 @@ public class GitSyncCheckDelegate extends BaseNodeDelegate configs, - HttpRequestInputMapping input) { + protected void executeInternal(DelegateExecution execution, Map configs, HttpRequestInputMapping input) { long startTime = System.currentTimeMillis(); try { diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java index c49e6673..976709fe 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java @@ -431,6 +431,8 @@ public class BpmnConverter { return "${deployDelegate}"; case "HTTP_REQUEST": return "${httpRequestDelegate}"; + case "GIT_SYNC_CHECK": + return "${gitSyncCheckDelegate}"; default: log.warn("未知的节点类型: {}, 将不设置 delegateExpression", nodeCode); return null;