异步导入数据字典列表(JMS 发布受理)

验证状态:存在关键缺口,不可作为完整契约发布;适用基线:Web 7fe6dd10、services 89bd222c;核验日期:2026-09-12

用途与 App 场景

把一批数据字典写入请求发布到 JMS 通道 data dictionary import list(租户随载荷传递)。HTTP 成功只代表发布受理;最终消费方在仓外(见已知缺口),本页按质量标准标注为关键缺口页,不能当作可用的完整导入合同。

Web 使用位置

页面/功能 角色或空间分支 调用证据
XLSX 导入 后端授权 administrator 或 configuration-data-dictionary:create;Web 仅在该权限下接通导入入口 app/routes/($lng).$spaceId.configuration.data-dictionary._index/route.tsx:417

协议身份

operationId http-post-main-service-system-api-configuration-data-dictionary-importlist-010a4159
method + path POST /main-service/system-api/configuration/data-dictionary/importList
base URL 当前 Web 使用同源相对 URL;App 的部署 base URL 未由源码固定
headers Accept: application/json;charset=UTF-8;有登录态时 Authorization: Bearer <token>;body 操作为 Content-Type: application/json
序列化 array body 由公共 wrapper 执行 JSON.stringify

前置条件与权限

需要有效登录态,并满足 administrator 角色或 configuration-data-dictionary:create。 发布前用当前认证租户填充载荷(TenantIdSupplierExecutor),以 tenant-less 上下文发布;资源表写入侧的租户归属由仓外消费方决定,缺证。认证与空间

输入

JSON 路径/参数 JSON 类型 位置 必填 可空 默认值 枚举/范围/单位 说明 字段证据
body array body 函数默认 [] 元素见写入字段 DataDictionarySaveRequestDTO 数组;当前 Web 由 XLSX 可见列构造行,单元格以字符串读取后原样发送(raw:false),不含 dataDictionaryId Controller importListapp/.common/hooks/use-xlsx-table-io.ts:176-178

输出、应答或事件

JSON 路径 JSON 类型 出现条件 可空 枚举/范围/单位 说明 字段证据
timestamp number JSON 响应 epoch 毫秒 响应生成时间 gt-common-core/src/main/java/tech/gt/api/ApiResult.java
status number JSON 响应 成功为 200 不能只看 HTTP status gt-common-core/src/main/java/tech/gt/api/ApiResult.java
error/localizedError/path string | null JSON 响应 成功通常为 null;失败见差异页 gt-common-core/src/main/java/tech/gt/api/ApiResult.java
extraData object 成功 本操作无专属键,恒为 {} gt-common-core/src/main/java/tech/gt/api/ApiResult.java
data boolean 业务成功 true 仅表示 JMS 发布调用未抛异常,不代表任何行已落库 es-center-server-main-service/src/main/java/com/es/center/server/configuration/controller/DataDictionaryController.java:68 importList

完成判据

status=200 && data=true 只表示 JMS 发布调用已提交(事务后发布,TenantlessPublishExecutor)。它不是导入成功:仓内没有该通道的消费者,最终是否落库、逐行结果、失败回传全部缺证。调用方不得把该响应当作导入完成信号。

示例

以下均为按已核验契约构造的示例,不是真实联调记录;ID、时间与租户为占位值。

请求:

1[
2  {
3    "dataDictionaryTypeCode": "device-vendor",
4    "dataDictionaryCode": "hikvision",
5    "value": "海康威视",
6    "name": "海康威视",
7    "sort": 1
8  }
9]

成功响应:

1{
2  "timestamp": 1789142400000,
3  "status": 200,
4  "error": null,
5  "localizedError": null,
6  "path": null,
7  "extraData": {},
8  "data": true
9}

信封字段证据:gt-common-core/src/main/java/tech/gt/api/ApiResult.java(成功/失败信封)与 es-center-server-main-service/src/main/java/com/es/center/server/config/JsonFormatConfig.java:20-113(时间序列化)。

错误与边界

认证失败/权限失败:认证与资源权限拒绝的 wire 形态见错误差异页对应锚点。 Bean Validation(@NotBlank/@Size)与参数绑定失败适用请求校验(HTTP 200,body 400/1002-1004)。 @Valid 标注在 List 参数上,框架是否对元素逐项级联校验未由本仓源码或测试证明;空数组也会被发布。 公共 Web helper 默认 15 分钟超时(app/.common/lib/fetch-timeouts.ts:4-76 fetchTimeout/fetchTimeoutResponseJson)。本组写/导入操作没有幂等键,超时后须先读取资源状态再决定是否重试,不能仅凭超时盲重试。

调用关系与资源清理

HTTP 返回后 Web 直接 toast 成功并 reload 列表;由于消费方缺证,reload 看不到新数据不代表导入被拒绝,看到新数据也不代表全部行已按预期落库。

已知缺口

关键缺口(本页因此不可作为完整契约发布):services 全仓没有任何 @JmsListener 消费 data dictionary import list 通道;es-center-server-main-service/src/test/java/com/es/center/server/message/JmsChannelContractTest.java:70-93 把该通道显式列为 EXTERNAL_CONSUMER_BOUNDARY_DESTINATIONS("仓外消费状态无法由本仓证明;显式冻结边界可保留 wire")。因此:

  • 导入是否最终落库、以什么语义 upsert、逐行校验与失败回传、幂等与重试语义均缺证,责任端为仓外消费方。
  • XLSX 行以字符串读取后发送(sort 在 wire 上是字符串数字),服务端反序列化是否接受未经联调证明;App 导入应优先发送数字类型。 未执行真实 HTTP、JMS 或部署环境联调。

验证状态与依据

结论 状态 仓库/基线 路径、符号及定位 内容指纹(脏文件)
Web 方法、路径、序列化与消费 已源码核验 web 7fe6dd10 app/.client/api/system/configuration/dataDictionaryApi.ts:41 configurationdataDictionaryImportListApiapp/routes/($lng).$spaceId.configuration.data-dictionary._index/route.tsx:417;公共 wrapper:app/.common/lib/fetch-timeouts.ts:4-76 fetchTimeout/fetchTimeoutResponseJson 证据文件与 HEAD 一致
权限、输入、输出和完成语义 已源码核验 services 89bd222c es-center-server-main-service/src/main/java/com/es/center/server/configuration/controller/DataDictionaryController.java:68 importList 证据文件与 HEAD 一致
JSON 字段与时间类型 已源码核验 services 89bd222c 本资源族字段模型DataDictionaryListResponseDTO.javaDataDictionaryGetByIdResponseDTO.java(gt-common-configuration-dto/src/main/java/tech/gt/configuration/dto/) 证据文件与 HEAD 一致
清单归属 已重新比对 inventory .scratch/institutional-app-api-docs/inventory/operations.json SHA-256 b5cce137b4fc602840fdbe74c99d90667b3e581815bddc709e263ffcc64e00f9(工作树仅既有格式化漂移,本票未修改)
真实部署联调 未执行 未发送请求、未连接数据库/缓存/JMS