# 有多少个端,每个端负责什么 从「人对着什么说话 / 什么进程在跑」拆,**现网**约 **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`) |