171 lines
8.7 KiB
Markdown
171 lines
8.7 KiB
Markdown
# 现状总览:语言、技术、框架、数据库、部署、域名
|
||
|
||
## 产品是什么
|
||
|
||
货代询价智能体:销售在企业微信私聊/群聊发文字、图片、Excel/PDF;系统抽字段、补问、建工单、查 TMS 报价、需要时建协同群、生成 Excel/PDF 报价、成交闭环。管理后台查看工单、报价、人员、模板、异常。
|
||
|
||
当前不是单体,而是多进程组合。
|
||
|
||
## 开发语言
|
||
|
||
| 语言 | 版本(建议/源码) | 用在哪 |
|
||
|---|---|---|
|
||
| Python | 3.12 | 智能体、企微 Worker、LangGraph、LLM/识别/报价/存档 |
|
||
| Java | 1.8(JDK 8) | JeecgBoot 工单/TMS 主账 |
|
||
| TypeScript / JavaScript | Node 18 或 20 | Vue3 管理后台;企微 AIBOT 长连接是 Node `.cjs` |
|
||
| PowerShell | 7(本机开发建议) | 环境导入、累计部署、远程运维 |
|
||
| SQL | MySQL / PostgreSQL 方言 | Java 业务库、Python 运行账迁移 |
|
||
|
||
## 主要框架与库
|
||
|
||
### Python(现网)
|
||
|
||
- FastAPI 0.137 + Uvicorn:HTTP 入口
|
||
- LangGraph 1.2.5 + `langgraph-checkpoint-postgres`:业务流程编排与 checkpoint(何时用、怎么用见 `14`)
|
||
- httpx:出站 HTTP
|
||
- psycopg / psycopg2:PostgreSQL
|
||
- redis:队列、限流、token 缓存;现网还有 Worker **全局单例锁**(新系统不要)。何时用见 `14`
|
||
- openpyxl / PyMuPDF / pypdf:Excel、PDF
|
||
- cryptography / python-dotenv
|
||
- PyMySQL:仅 metrics 等旁路读 MySQL(正式写走 Java)
|
||
|
||
### Java(现网主账)
|
||
|
||
- JeecgBoot 3.5.3
|
||
- Spring Boot 2.7.10
|
||
- Spring Cloud / Alibaba 组件在仓库里有,**生产活动形态是单体** `jeecg-system-start`,不是必开微服务
|
||
- MyBatis-Plus 3.5.1、Druid、Shiro、JWT
|
||
- MinIO Java SDK、Hutool、Fastjson、Knife4j
|
||
- 询价业务在 Jeecg 的 inquiry 模块
|
||
|
||
### 前端(现网管理后台)
|
||
|
||
- JeecgBoot Vue3 3.5.3
|
||
- Vue 3.2、Vite 3、Ant Design Vue 3、Pinia、TypeScript
|
||
- pnpm 7.33.x(锁文件 `pnpm-lock v5.4`,不要用 pnpm 11 重新生成锁文件)
|
||
- Axios、ECharts 等 Jeecg 全家桶
|
||
|
||
### 其它运行时
|
||
|
||
- Node.js:AIBOT 长连接脚本(只做传输)
|
||
- Nginx 1.18.0:`C:\nginx-1.18.0`,反代前端与 Java
|
||
- LibreOffice:报价 Excel → PDF(默认 `C:\Program Files\LibreOffice\program\soffice.exe`)
|
||
|
||
## 数据库与存储
|
||
|
||
| 组件 | 角色 | 谁写 |
|
||
|---|---|---|
|
||
| **MySQL** | 正式业务主账:工单六态、运输段、源报价/客户报价/版本、费用、附件元数据、人员角色、时间线、Jeecg 系统表。库名源码默认 `jeecg-boot` | **仅 Java** |
|
||
| **PostgreSQL** | 运行账:企微 inbox/outbox、Graph checkpoint、conversation session、suspend、clarification/卡片绑定、LLM/识别/报价任务 | **仅 Python** |
|
||
| **Redis** | 缓存、LLM 队列、限流。**不能当业务真相** | Python + Java |
|
||
| **MinIO / S3 兼容** | 报价文件、附件对象;元数据仍在 Java/任务账 | Python `object_storage` + Jeecg 上传配置 |
|
||
| 本地磁盘 | 企微 spool、release 目录、Nginx 静态、上传目录 | 运维/进程 |
|
||
|
||
现网 Redis 另有两样,**新系统都不要**:`wecom:worker:singleton`(全机只准一个 Worker 的锁);按销售 UserID 伪造 TMS 无价/异常。并发靠「一条任务认领 + 超时回收」和「服务只起一份」。
|
||
|
||
### 新系统库名(同机 `10.206.0.14`,空库待建,口令新开)
|
||
|
||
| | 现网(禁止新系统连接) | 新系统 |
|
||
|---|---|---|
|
||
| MySQL 主账 | `jeecg-boot` / 用户 `ytd_jeecg` | 库 `inquiry_robot` / 用户 `inquiry_robot` |
|
||
| PostgreSQL 运行账 | `ytd_runtime` / 用户 `ytd_runtime` | 库 `inquiry_robot_runtime` / 用户 `inquiry_robot_runtime` |
|
||
| Redis | db0 前缀 `ytd:prod:node01-07` | **db1**,前缀 `inquiry_robot:` |
|
||
| MinIO 桶 | `ytd-inquiry` | `inquiry_robot` |
|
||
|
||
仍用现网端口 3306 / 5432 / 6379 / 9000。账号口令不要抄现网,由甲方新建。变量名与正式/测试取值见 `13`。
|
||
|
||
## 外部系统(非本仓库)
|
||
|
||
| 系统 | 职责 |
|
||
|---|---|
|
||
| 企业微信 | 私聊、群聊、模板卡、应用消息、AIBOT |
|
||
| 微盛会话存档 `open.wshoto.com` | 群/会话 Archive、附件下载 |
|
||
| TMS(友商/自有 TMS V2) | 报价查询、详情、字典、空运锁舱/释放;外部报价与舱位事实 Owner |
|
||
| DeepSeek API | 意图路由(A)+ 字段语义(B) |
|
||
| 阿里云百炼/DashScope 千问 | 附件/图片、报价表映射等 |
|
||
| 现网 Git | 旧仓仅作对照;新项目用自己的远程 |
|
||
|
||
## 部署环境
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| 形态 | 甲方 Windows 服务器,不可变 release 目录 |
|
||
| 公网 IP | `129.211.181.80`(SSH 22) |
|
||
| 主机名 | `10_206_0_15` |
|
||
| 运行根 | `C:\yutongda` |
|
||
| 版本目录 | `C:\yutongda\releases\` |
|
||
| 运维指针 | `C:\yutongda\ops\`(active-release*.json) |
|
||
| SSH 账号 | `ytd_extdev_0903`,仅 Ed25519 公钥 |
|
||
| 允许出口 | `38.175.103.103`、`113.119.172.108`、`115.159.76.75` |
|
||
| 部署方式 | 固定脚本 `Deploy-YtdCumulativeRelease.ps1`,禁止手工覆盖活动目录 |
|
||
| OS 本机开发 | Windows 10/11 + PowerShell 7 |
|
||
|
||
新系统与现网 **同机并存**:不占用上表 `C:\yutongda` 活动指针;TMS、**域名 `ai.ytd-scm.com`、询价企微 `1000010`、AIBOT Bot 与正式相同**。库、Redis 前缀、监听端口另起。运维通知 `1000014` 也相同。并存期不要改 Nginx 回调、不要双连 AIBOT。
|
||
|
||
## 公开域名与路径
|
||
|
||
| 地址 | 用途 |
|
||
|---|---|
|
||
| `https://ai.ytd-scm.com` | 正式站点(Nginx `ai.conf`)。测试环境域名配置与此相同,切流前公网仍进现网 |
|
||
| `https://ai.ytd-scm.com/inquiry-form` | H5(测试 `.env` 也填这一条) |
|
||
| `https://ai.ytd-scm.com/inquiry-form/upload` | H5 询价附件上传 |
|
||
| `/jeecgboot`(生产前端 `VITE_GLOB_API_URL`) | 浏览器到 Java 的反代前缀 |
|
||
| Java context-path | `/jeecg-boot`(服务端口 8080) |
|
||
| 现网 Git | 旧仓地址见 `03`;新项目用新远程 |
|
||
| `https://work.weixin.qq.com/` | 企微卡片跳转占位 |
|
||
| `https://open.wshoto.com` | 微盛 Archive API 默认基址 |
|
||
| `https://api.deepseek.com` / `/beta` | DeepSeek |
|
||
| DashScope 兼容基址(环境变量 `QWEN_BASE_URL`) | 千问 |
|
||
|
||
源码里的 `minio.jeecg.com`、`fileview.jeecg.com`、`cas.test.com` 是 Jeecg 模板默认值,**不等于生产**。生产对象存储与域名以服务器环境文件为准。
|
||
|
||
## 监听端口
|
||
|
||
公网对外只需 **443**(Nginx)。下面多数是本机回环或数据机,不是都要映射到公网。
|
||
|
||
### 现网应用口(拆得过细)
|
||
|
||
| 端口 | 现网进程 | 新系统 |
|
||
|---|---|---|
|
||
| 8080 | Java JeecgBoot | **保留**(主账,本机,Nginx 反代) |
|
||
| 8810 | Python `agent_api` | **保留**,并承接原 8809/8811 |
|
||
| 8809 | Python `bridge_api` | **砍**,并进 8810 |
|
||
| 8811 | Python `wecom_callback` | **砍**,并进 8810 |
|
||
| 8812 | Python `wecom_robot` | **砍**,现网基本空配置 |
|
||
| 8813 | AIBOT Bridge | **保留**,仅 127.0.0.1 |
|
||
| 3100 | Vite 开发服 | **生产不要开** |
|
||
|
||
### 基础设施(不是询价业务端口)
|
||
|
||
数据在 `10.206.0.14`:MySQL `3306`、PostgreSQL `5432`、Redis `6379`。本机还有 MinIO `9000`。Worker **不占**对外端口。
|
||
|
||
新系统并存期应用口:**8180 + 8910 + 8913**,外加 Nginx 80/443。切流前不要占用现网 8080/8810/8813。
|
||
|
||
## 目标进程(不要复现现网拆法)
|
||
|
||
现网 Python 拆成多个 uvicorn + 五个 Worker,是发布/隔离习惯,**不是业务必需**。新系统交付形态:
|
||
|
||
| 进程 | 端口(可沿用) | 职责 |
|
||
|---|---|---|
|
||
| Nginx | 443 / 80 | TLS、静态后台、反代 |
|
||
| 主账 API | 并存时不要用 8080(示例 8180) | 工单、权限、TMS、后台 API |
|
||
| 智能体 HTTP | 并存时不要用 8810(示例 8910) | H5、企微 HTTP 回调、主账唤醒;**只入队、快回** |
|
||
| AIBOT 桥 | 并存时不要用 8813(示例 8913)仅回环 | 长连接转发,无业务状态 |
|
||
| 后台 Worker **一个进程** | 无对外端口 | LLM、识别、报价(LibreOffice)、存档;进程内分并发槽 |
|
||
|
||
Worker 并发约定(**不允许系统卡顿,尽量多线程**):
|
||
|
||
- **1 个槽专跑 LibreOffice**(避免本机两台 soffice 互抢)。不是整进程单线程。
|
||
- **2~3 个线程槽跑 HTTP 类**(模型、识别、存档下载、主账)。不同工单并行。
|
||
- inbox / outbox **独立线程**,禁止和转 PDF 串在一条阻塞线上。
|
||
- 回调 / H5 **只入队快回**;禁止在请求线程转 PDF、等完整 LLM、忙等 Redis 结果。
|
||
- 禁止全局大锁把所有询价排成单行。同一任务认领即可。
|
||
|
||
不要:群机器人独立 8812(现网空配置);五个 NSSM Worker;把慢活塞回回调请求。
|
||
|
||
## 业务六态(Java 唯一)
|
||
|
||
询价中、已报价、协商中、已成交、未成交、已关闭。
|
||
|
||
补字段、附件识别中、生成文件、异常、人工协同 **不是第七态**,属于 Graph/任务/异常正交状态。
|