5.4 KiB
提示词:工单 / 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(不要假设还存在 8809bridge_api)。 - 人员:按入站已有的
wecom_id查角色;不负责替智能体向企微换 userid。
TMS 适配器(本端独占密钥)
主账 HTTP 不许卡死线程池:TMS / DB 必须有超时;接口用容器线程池处理并发请求。禁止全局锁串行所有工单。智能体唤醒回调失败要可重试,不要在 Tomcat 线程里同步等 Python Graph 跑完。
实现现网 TMS 网关语义:
- Token:
POST {base}{tokenPath},Basic(clientId:clientSecret),bodygrantType=client_credentials,业务码 1,缓存 accessToken。 - 查询类:Bearer。
- 锁舱/释放:
X-SignatureHMAC,canonicaltimestamp + "\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 与迁移同一提交。