From 857a32f29c71a29ffd565ea746ac83f7aacfde4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Wed, 28 Oct 2026 15:01:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=88=E5=90=8C=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=AF=B9=E9=BD=90=E9=A1=B9=E7=9B=AE=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=EF=BC=8C=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E5=86=85=E5=AE=B9=E5=B9=B6=E8=AE=B0=E5=BD=95=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ContractManageServiceImpl.java | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java index 3d2ac007..4a5719ac 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java @@ -67,6 +67,7 @@ import java.util.Objects; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * 合同管理 服务实现类 @@ -1279,11 +1280,12 @@ public class ContractManageServiceImpl extends BaseServiceImpl(beforeData.keySet())); record.put("beforeData", beforeData); record.put("afterData", afterData); } @@ -1291,6 +1293,54 @@ public class ContractManageServiceImpl extends BaseServiceImpl beforeData, + Map afterData) { + if (beforeData == null || afterData == null || beforeData.isEmpty()) { + return TransportBusinessSupport.trimToNull(contractManage.getChangeContent()); + } + return beforeData.entrySet().stream() + .map(entry -> "将【" + contractChangeFieldLabel(entry.getKey()) + "】由【" + formatChangeRecordValue(entry.getValue()) + + "】变更为【" + formatChangeRecordValue(afterData.get(entry.getKey())) + "】") + .collect(Collectors.joining("、")); + } + + /** + * 合同变更快照字段中文名(change_record_json 展示用,与前端变更字段标签一致) + */ + private static final Map CONTRACT_CHANGE_FIELD_LABELS = Map.ofEntries( + Map.entry("contractNo", "合同编号"), Map.entry("contractName", "合同名称"), + Map.entry("partyB", "乙方"), Map.entry("startDate", "开始日期"), + Map.entry("endDate", "结束日期"), Map.entry("contractFormat", "合同格式"), + Map.entry("settlementMode", "结算方式"), Map.entry("legalSealFlag", "是否需要加盖法人章"), + Map.entry("copyCount", "一式份数"), Map.entry("settlementCurrency", "结算币种"), + Map.entry("invoiceCycle", "开票周期(天)"), Map.entry("paymentDays", "回款账期(天)"), + Map.entry("contractAmount", "合同金额"), Map.entry("templateFlag", "是否范本"), + Map.entry("originalContractNo", "原件合同编号"), Map.entry("electronicSealFlag", "是否电子章"), + Map.entry("mainContent", "合同主要内容"), Map.entry("remark", "其他事项说明"), + Map.entry("feeGenerationMode", "费用生成模式"), Map.entry("billingPlanJson", "计费方案"), + Map.entry("settlementRuleJson", "结算生成规则"), Map.entry("preSettlementConfigJson", "预结算配置"), + Map.entry("formalSettlementConfigJson", "正式结算配置"), Map.entry("paymentRatioJson", "付款比例设置"), + Map.entry("contractFileJson", "合同主文件"), Map.entry("attachmentsJson", "其它附件"), + Map.entry("changeAttachmentsJson", "变更附件") + ); + + private String contractChangeFieldLabel(String field) { + return CONTRACT_CHANGE_FIELD_LABELS.getOrDefault(field, field); + } + + private String formatChangeRecordValue(Object value) { + if (value == null || (value instanceof String text && text.isBlank())) { + return "空"; + } + String text = String.valueOf(value); + // 计费方案/附件等长 JSON 文本截断,保证变更内容可读 + return text.length() > 100 ? text.substring(0, 100) + "…" : text; + } + private Map buildContractChangeSnapshot(ContractManage contractManage) { Map data = new LinkedHashMap<>(); data.put("contractNo", contractManage.getContractNo());