群里按 BOT 通道激活当前工单、航线报价和成交跟进;没有 TMS 报价编号时用工单字段补齐仍调锁舱,避免被本地规则拦住。 Co-authored-by: Cursor <cursoragent@cursor.com>
6.7 KiB
有多少个端,每个端负责什么
从「人对着什么说话 / 什么进程在跑」拆,现网约 10 类端。不要把 Jeecg 自带的演示模块当成询价产品端。
新系统不要按现网进程数复制。 对人仍是企微私聊/群、H5、Vue 后台;对进程合并为:主账 API、智能体 HTTP(含原 8809/8810/8811)、AIBOT 桥、一个后台 Worker(原 llm/recognition/quote/archive + 慢活)。8812 不建。详见 01「目标进程」。
1. 企业微信销售端(人)
- 私聊文字询价、图片、文件。
- 模板卡片:补问、采用报价、调价、成交/未成交、进群等。
- 点开 H5 补问表单或附件上传页。
- 不持有工单主账;只收消息、点卡片。身份以企微推送的 userid 为准,智能体侧解析为
sender_id,不要再反向拉取 ID。
2. 企业微信协同群(人 + 产品岗)
- 海运:销售/产品在应用自动建的群里报文字价、发报价附件;不用 @。
- 空运:人自建群,拉销售、航线、询价小助手 BOT、询价机器人(存档)。文字必须 @ BOT。发文件不能 @,靠存档听见,航线 Excel/PDF 当报价,发完马上回「附件已保存」。一群多单,先激活当前工单。锁舱/释放见空运群定稿。
- 存档席「询价机器人」只为会话存档可见,不能当报价应答人,不能当 @ 对象。
3. H5 补问 / 附件页(浏览器,挂在智能体 8810)
- 域名:
https://ai.ytd-scm.com/inquiry-form/{token}。 - 企微卡片打开一次性表单;URL 只有随机 token。
- 上传入口:
/inquiry-form/upload。 - 字段快照与流程状态仍在 LangGraph / PostgreSQL。
4. 管理后台 Web(Vue3)
正式入口为 新仓库 inquiry-backend/(Jeecg Vue3 + Vite)。只打新主账;不要挂现网 8080 前端进程。
启动:在 inquiry-backend/ 执行 pnpm run dev。业务只打新主账 inquiry-api/(8180)。
询价相关页面(新仓目录示例):
| 页面 | 职责 |
|---|---|
| 工作台 dashboard | 统计展示(读主账投影) |
| 工单 ticket | 列表/详情/时间线/状态迁移/异常处理 |
| 员工 staff | 企微 userid 与询价业务角色绑定 |
| 报价模板 template | Excel 模板上传/启用 |
| 识别/生成/存档 | 任务与死信只读 |
| 机器人回复 bot-reply | 话术配置 |
原则:后台 不创造第二套业务状态,只读/操作主账。
5. Java 工单/TMS 主账
入口为 Jeecg 单体启动模块(现网 8080)或新主账进程;询价业务 API 均为手写模块(现网包名 jeecg-module-inquiry),不是 Online/cgform。新系统替换主账时保持路径语义与后台 *.api.ts 可对接,仍禁止 Online 出生产接口。
负责:
- 工单与运输段正式主账、六态迁移、owner/权限。
- TMS V2:token、签名、字典投影、query/detail/lock/release。
- 源报价、客户报价、报价版本、费用、附件元数据。
- 群协同绑定、人员角色、时间线、后台 API。
- 字典同步接口
/api/v1/tms/dictionaries/sync。
Python 经 app/jeecg_client.py 调用。Java 成功才算正式业务成功;Graph 字段不能伪造。
6. Python 智能体核(LangGraph + 路由)
现网智能体运行链(不是 REL25 候选):
企微入站 → wecom_worker / callback / archive
→ 企微业务处理 + 会话/意图路由
→ DeepSeek A 意图 / DeepSeek B·千问语义
→ 流程编排(checkpoint、suspend、补问、查价、协同、报价、成交)
→ Java / 群 / 报价 Worker / outbox
→ 企微唯一外发
职责:自然语言只由模型处理;代码只做身份、Schema、类型、权限、状态、版本、唯一性、证据、幂等。
REL25 候选路由 未接管现网企微执行链。新项目不必沿用该目录名。
7. Python HTTP 进程(现网:同一代码树,多个 uvicorn)
| 进程 | 端口 | 职责 |
|---|---|---|
app.agent_api |
8810 | 测试询价入口、H5 表单与上传、部分公开页 |
app.bridge_api |
8809 | 接收 Java 唤醒;节点 20/21 时钟;识别/报价任务查询过渡;不直连 MySQL、不自己查 TMS |
app.wecom_callback |
8811 | 企微应用回调、卡片事件 |
app.wecom_robot |
8812 | 群机器人回调 |
新系统: 上述四个合成 一个 FastAPI(或等价),路由与实现按包分文件(回调、H5、唤醒各模块),禁止再做一个万行 app.py。Nginx 把 /inquiry-form、/wecom/callback、主账唤醒路径都打到这一端口。8812 不实现,除非产品明确再开群机器人。HTTP 必须线程池快回,慢活进 Worker 槽(见 06)。
8. Python Worker 进程(现网五个)
| Worker | 入口 | 职责 |
|---|---|---|
| wecom-worker | app.wecom_worker |
消费 inbox,业务处理,outbox 外发;现网 Redis 全局单例 |
| llm-worker | app.llm_worker |
DeepSeek/千问队列执行、重试、结果账 |
| recognition-worker | app.recognition_worker |
附件/图片识别、抽字段、推进 Graph |
| quote-worker | app.quote_generation_worker |
正式 Excel/PDF、对象存储、Java 附件、企微文件、wake |
| archive-worker | app.archive_worker |
微盛 Archive 拉消息/文件、部分群指令 |
现网:同一队列不要起两个同类 Worker。
新系统: 一个 Worker 进程(NSSM/服务只注册一份,靠部署停旧再起新,不要 Redis SET NX 全局单例)。队列条目用「认领 + 超时回收」防同一条消息被两个槽处理。LibreOffice 单槽,HTTP 类 2~3 槽。inbox/outbox 快路径不要和 soffice 串在同一条阻塞线上。Worker 代码仍按 jobs/llm/graph/channel 分包,不要合成一个 worker.py。
9. AIBOT 长连接桥(Node)
- 现网为 Node 长连接脚本,新项目可仍用 Node 或等价实现
- 端口 8813 仅 127.0.0.1(测试环境 8913)
- 只传输,不拥有业务状态。入站
/forward;出站/send-group走aibot_send_msg(空运群发文件后马上说话)
10. 运维/发布端(人 + 脚本)
- 本机:环境导入脚本、累计部署器(现网)
- 服务器:Nginx、NSSM/计划任务类常驻进程、
C:\yutongda\ops指针 - Git:真实
.env不进包
数据 Owner 一句话
| 事实 | Owner |
|---|---|
| 工单六态、报价版本、权限 | Java / MySQL |
| 会话、补问点、checkpoint、inbox/outbox | Python / PostgreSQL |
| TMS 价格与舱位 | TMS |
| 文件字节 | MinIO/S3 |
| 用户看到的消息 | 企微(发送成功 ≠ 业务成功) |
| 缓存协调、LLM 队列、限流 | Redis(不当真相;见 14) |
| 询价流程书签 | LangGraph checkpoint(PostgreSQL;见 14) |