Files

5.4 KiB
Raw Permalink Blame History

提示词:工单 / TMS 主账 API

你负责新系统的 业务主账。产品决策(2026-09-12):主账以 JeecgBoot + 低代码(Online / cgform / 代码生成器) 为正式方式;库与端口走新系统(inquiry_robot、并存期 8180),禁止写现网 jeecg-boot。

决策说明见 docs/2026-09-12-jeecg-lowcode-ledger-decision.md。正式主账工程目录为 inquiry-api/(JeecgBoot)。

正式方式(已定 · 低代码)

  • 主账工程 = JeecgBoot(工程目录 inquiry-api/,保留手写 jeecg-module-inquiry)。
  • 允许 Online / cgform / 积木报表 / 代码生成器配置询价相关表单、列表、简单 CRUD 与菜单。
  • 登录、用户、角色、菜单走 Jeecg /sys/* + 低代码权限模型。
  • 复杂领域(六态 transition、TMS 适配、报价版本采用/调价、智能体唤醒)可继续用手写 jeecg-module-inquiry(低代码 + 手写模块混合);路径风格仍如 /inquiry/workOrder/...、/inquiry/quotes/...。
  • 后台以 Jeecg Vue3 为正式入口(本仓库 inquiry-backend/);defHttp + X-Access-Token;Nginx /jeecgboot → 新主账端口(inquiry-api/)。

模块划分

包 / 能力 职责
Jeecg /sys/* + Online 登录、菜单、字典、低代码表单/列表
jeecg-module-inquiry(或等价) 工单六态、报价版本、TMS、群门禁、智能体集成等复杂规则
TMS 适配 密钥不出业务乱写;智能体不直连 TMS

手写部分仍按领域拆分(工单 / 报价 / TMS / 人员 / 群 / 附件),不要一个上帝 Service。禁止把智能体 Graph 逻辑写进 Java。

类、公开方法、六态迁移、TMS 签名与投影:详细中文 JavaDoc/块注释。见 05 注释节。无注释不验收。

领域模型

  • 工单:单号、销售企微身份、客户、业务线 SEA/AIR/LAND、陆运二级类型、六态、版本。
  • 运输段 segment:多段预留但可关闭入口。
  • 源报价(TMS 绑定)、客户报价、quoteVersion、费用行、附件元数据。
  • 群绑定:chatId、角色、与工单/段/报价版本三门禁。
  • 人员角色:wecom_id ↔ 销售/产品/运营。
  • 时间线 / 异常单 / 重试状态。
  • TMS 字典投影表:按 tms-dictionary-projection-v2.json。

API 能力(与智能体、后台对齐)

  • 工单:创建、校验、查询、聚合视图、六态 transition、异常 handle/retry。
  • TMS:query、template-fields、detail、health、字典 sync。lock/release 接口可留,与现网共用 TMS 密钥期间默认关闭出站。
  • 报价决策:采用、调价、成本/售价基线(空运与海陆规则不同,与合同语义对齐)。
  • 模板、识别任务、生成任务的查询接口(任务执行可在智能体,主账存结果指针)。
  • 智能体回调:唤醒 Graph 的事件要鉴权 agentCallbackToken,打到智能体唯一 HTTP(不要假设还存在 8809 bridge_api)。
  • 人员:按入站已有的 wecom_id 查角色;不负责替智能体向企微换 userid。

TMS 适配器(本端独占密钥)

主账 HTTP 不许卡死线程池:TMS / DB 必须有超时;接口用容器线程池处理并发请求。禁止全局锁串行所有工单。智能体唤醒回调失败要可重试,不要在 Tomcat 线程里同步等 Python Graph 跑完。

实现现网 TMS 网关语义:

  • Token:POST {base}{tokenPath},Basic(clientId:clientSecret),body grantType=client_credentials,业务码 1,缓存 accessToken。
  • 查询类:Bearer。
  • 锁舱/释放:X-Signature HMAC,canonical timestamp + "\n" + nonce + "\n" + rawBody。
  • 审计日志脱敏:token/signature/password/secret 字段打码。
  • 熔断、超时、最多 3 次、query 对 code 1/1002 短缓存。
  • tmsEnabled=false 时不得出站。生产现网为 YTD_TMS_V2_ENABLED=true。

路径默认:/quote/v2/query、/quote/v2/detail、/quote/template-fields、/air/cabin/lock、/air/cabin/release、/auth/token。地址与 Client 三件套、字典 Token 直接用 03 现网值,不要另要一套 TMS。智能体仍只打新主账,不直连 TMS、不打现网 Java 8080。

字典投影

  • EXACT_ONLY,禁止模糊。
  • 空运包装缺省可投影 packageType=1(全部),并保留 raw。
  • 失败要返回智能体能区分的 source=TMS_DICTIONARY_PROJECTION 与明确错误码,不要装成「无报价」。

不要

  • 不要让 Python 写 MySQL 工单表。
  • 不要在主账里做自然语言抽取。
  • 不要把 Jeecg signatureSecret 默认值当生产密钥。
  • 后台登录与智能体服务账号分离。
  • 不要连接或 ALTER 现网 jeecg-boot;新系统只用 inquiry_robot。
  • 不要在并存期占用现网 8080;新主账用 8180(或合同约定的测试端口)。
  • 不要把无关 Jeecg 演示业务当询价主账;演示模块可删可关,Online 只配询价相关。

数据

MySQL 8、UTF8MB4、Asia/Shanghai。库名/用户/JDBC 全部环境变量(MYSQL_DB、MYSQL_USER、YTD_MYSQL_URL 等),对照 13。新系统连 inquiry_robot,禁止连现网 jeecg-boot。禁止在 yml 写死库名。Redis 前缀、MinIO 桶同样走环境变量。

开发期间缺表、缺列、要改列:直接写迁移并执行到当前 MYSQL_DB(新系统即 inquiry_robot),不要等批准。禁止动现网 jeecg-boot。实体/Mapper/API 与迁移同一提交。