From d69ec1a3b4190ca0865ac90ade82c5ed57a0bd62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Sat, 17 Oct 2026 12:59:40 +0800 Subject: [PATCH] =?UTF-8?q?:fix:=20HCS=E5=B1=A5=E7=BA=A6=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=B1=A5=E7=BA=A6=E7=B1=BB=E5=9E=8B=E7=AD=89?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E5=AD=97=E6=AE=B5=E6=94=B9=E4=BC=A0=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=85=B8=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/hcs/HcsExeStageSyncSupport.java | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsExeStageSyncSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsExeStageSyncSupport.java index 262e547e..07ad6d4d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsExeStageSyncSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsExeStageSyncSupport.java @@ -51,6 +51,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.UnaryOperator; /** * HCS 履约规则同步支撑组件(C103-9 新版行级同步,设计文档 §5.3,ADR-0002) @@ -129,20 +130,37 @@ public class HcsExeStageSyncSupport { } // 【必填】行级操作:add / update / delete stage.setFdEopExeplanOperateType(row.getRowOp()); - // 【必填】履约类型:payment=付款 / collection=收款 - stage.setFdPerformType(row.getPerformType()); - // 【必填】款项性质:prepayment/progress/acceptance/retention - stage.setFdFundNature(row.getFundNature()); + // 【必填】履约类型:传中文字典名(2026-10-17 确认;此前传枚举键,合规侧字典不命中) + stage.setFdPerformType(dictName("履约类型", row.getPerformType(), code -> switch (code) { + case HcsSyncConstant.PERFORM_TYPE_PAYMENT -> "付款"; + case HcsSyncConstant.PERFORM_TYPE_COLLECTION -> "收款"; + default -> null; + })); + // 【必填】款项性质:传中文字典名 + stage.setFdFundNature(dictName("款项性质", row.getFundNature(), code -> switch (code) { + case "prepayment" -> "预付款"; + case HcsSyncConstant.FUND_NATURE_PROGRESS -> "进度款"; + case "acceptance" -> "验收款"; + case "retention" -> "质保金"; + default -> null; + })); // 【必填】计划金额(元) stage.setFdFundAmount(row.getFundAmount()); // 【必填】资金日期(毫秒时间戳) stage.setFdFundDate(toMillis(row.getFundDate())); - // 【必填】开票规则:payFirst=先款后票 / invoiceFirst=先票后款 - stage.setFdInvoiceRule(row.getInvoiceRule()); + // 【必填】开票规则:传中文字典名 + stage.setFdInvoiceRule(dictName("开票规则", row.getInvoiceRule(), code -> switch (code) { + case "payFirst" -> "先款后票"; + case "invoiceFirst" -> "先票后款"; + default -> null; + })); // 【必填】账期(天) stage.setFdInvoiceCycle(row.getInvoiceCycle()); - // 金额类型:行维护值,空取配置 thirdParty.hcs.exe-stage.fund-type(默认 byAmount) - stage.setFdFundType(StringUtil.isBlank(row.getFundType()) ? hcsProperties.getExeStage().getFundType() : row.getFundType()); + // 金额类型:行维护值(空取配置 thirdParty.hcs.exe-stage.fund-type),传中文字典名 + stage.setFdFundType(dictName("金额类型", StringUtil.isBlank(row.getFundType()) ? hcsProperties.getExeStage().getFundType() : row.getFundType(), code -> switch (code) { + case "byAmount" -> "按金额"; + default -> null; + })); // 是否完成 stage.setFdIsFinish(row.getIsFinish() != null && row.getIsFinish() > 0); // 扩展内容 JSON 字符串:固定 "{}" @@ -153,6 +171,22 @@ public class HcsExeStageSyncSupport { return param; } + /** + * 字典编码 → 合规中文字典名(2026-10-17 确认合规侧按中文命中字典);空值原样传, + * 未命中原值直传并告警(照 HcsProjectSyncSupport#mapSettlementType 惯例) + */ + private String dictName(String fieldLabel, String value, UnaryOperator mapping) { + if (StringUtil.isBlank(value)) { + return value; + } + String name = mapping.apply(value); + if (name == null) { + log.warn("HCS履约规则{}编码[{}]未命中中文字典映射,原值直传", fieldLabel, value); + return value; + } + return name; + } + /** * 回填:fdExeplanId → 合同 hcs_exeplan_id;变更阶段 fdId 按行回填 hcs_stage_fd_id 并清除行级操作标记 *