diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsProjectSyncSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsProjectSyncSupport.java index 6a645871..45f8b7de 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsProjectSyncSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsProjectSyncSupport.java @@ -190,10 +190,10 @@ public class HcsProjectSyncSupport { // 可用单位列表:与创建单位一致(同走 creator-unit 配置)(废弃) // props.setFdAvailUnits(List.of(creatorUnit)); - // 结算类型:TMS settlementMode 原值(字典映射待联调,§9-U3) - props.setFdSettlementType(projectApply.getSettlementMode()); - // 计划保证金:TMS fundDemand(万元)× 10000 转 HCS 元(变更映射曾名"履约保证金",语义联调确认) - props.setFdProPlanDeposit(toYuan(projectApply.getFundDemand())); + // 结算类型:TMS settle_method 字典文本映射 HCS 编码(1=先款后票,2=先票后款,3=先款后票+先票后款(同时存在)) + props.setFdSettlementType(mapSettlementType(projectApply.getSettlementMode())); + // 计划保证金:TMS fundDemand 与 HCS fd_pro_plan_deposit 单位同为万元,直传不换算(接口说明 §5.1) + props.setFdProPlanDeposit(projectApply.getFundDemand()); // 是否自营项目:一期固定 "2"。是|1, 否|2 props.setFdIsSelfPro("2"); // TODO 待确认:项目收入目标 fd_pro_income_goal,TMS 无直接对应字段,一期不传(§5.1) @@ -211,6 +211,26 @@ public class HcsProjectSyncSupport { return formData; } + /** + * 结算方式字典文本映射 HCS 编码:先款后票=1、先票后款=2、先款后票+先票后款(同时存在)=3;未匹配时原值直传并告警 + */ + private String mapSettlementType(String settlementMode) { + if (StringUtil.isBlank(settlementMode)) { + return null; + } + String code = switch (settlementMode.trim()) { + case "先款后票" -> "1"; + case "先票后款" -> "2"; + case "先款后票+先票后款(同时存在)" -> "3"; + default -> null; + }; + if (code == null) { + log.warn("HCS项目立项结算类型未匹配编码,原值直传:settlementMode=[{}]", settlementMode); + return settlementMode; + } + return code; + } + /** * C102-3 项目立项查询判重(conditions={"fd_num": projectCode},§9-U4 查询能力联调确认) */