|
|
# 本次更新说明(2026-07-03)— 管理端增强 + 登录门控 + 客户管理
|
|
|
|
|
|
## 更新主题
|
|
|
|
|
|
| 项目 | 说明 |
|
|
|
|------|------|
|
|
|
| 打包时间 | 2026-07-03 |
|
|
|
| 适用场景 | **服务器已有旧版查价**,增量更新代码 |
|
|
|
| 是否改库 | **是**,需执行 Prisma 迁移(安装脚本自动执行) |
|
|
|
| 是否改 `.env` | **保留**已有 `.env`;可删除废弃的 `NEXT_PUBLIC_EMBED_DEMO_*` |
|
|
|
| 是否必须清 Redis | **建议**(避免旧报价缓存) |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 本次主要功能
|
|
|
|
|
|
1. **管理端登录**:不再预填/展示演示账号;默认密码改为 `kj123456`(已有库需手动改密)
|
|
|
2. **嵌入演示登录**:客户编号 + 密码 `123456`;按客户展示加价配置并查价(Cookie 会话,无需页面 Token)
|
|
|
3. **宿主 API 多租户**:按 Token 对应 `customer_id` 加价(如 `CUST_002`)
|
|
|
4. **预警中心增强**:中文根本原因、客户、地址、货物信息
|
|
|
5. **查价记录**(原「队列监控」):最近 1000 条询价流水
|
|
|
6. **客户管理**:管理端新增客户、签发 API Key
|
|
|
7. **加价精度**:支持 0.01% 加价比例
|
|
|
|
|
|
---
|
|
|
|
|
|
## 数据库迁移(必做)
|
|
|
|
|
|
安装脚本会自动执行 `prisma migrate deploy`。本次新增迁移:
|
|
|
|
|
|
| 迁移目录 | 内容 |
|
|
|
|----------|------|
|
|
|
| `20260703100000_markup_percent_two_decimals` | 加价字段支持两位小数 |
|
|
|
| `20260703120000_host_customer_api_keys` | 客户表 + API Key 表 |
|
|
|
| `20260703140000_quote_query_log` | 查价审计流水表(最多 1000 条) |
|
|
|
|
|
|
**注意:不要**重新导入 `数据库/chajia.sql`,否则会清空生产数据。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 零、开发机打包(Windows)
|
|
|
|
|
|
```powershell
|
|
|
cd X:\work\chajia
|
|
|
powershell -ExecutionPolicy Bypass -File deploy\pack-server-upload.ps1
|
|
|
```
|
|
|
|
|
|
生成目录:
|
|
|
|
|
|
```
|
|
|
上传到服务器/
|
|
|
├── README.md
|
|
|
├── RELEASE-NOTES.md ← 本文件(操作步骤)
|
|
|
├── 辅助脚本/
|
|
|
├── 代码/ ← 上传此目录全部内容
|
|
|
└── 数据库/ ← 本次更新不必导入
|
|
|
```
|
|
|
|
|
|
将整个 **`上传到服务器`** 打成 zip 上传到服务器。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 一、服务器更新步骤(场景 B:已有旧版)
|
|
|
|
|
|
### 1. 备份(强烈建议)
|
|
|
|
|
|
```bash
|
|
|
cd /home/project/chajia
|
|
|
cp .env .env.backup.$(date +%Y%m%d)
|
|
|
```
|
|
|
|
|
|
### 2. 上传代码
|
|
|
|
|
|
用 zip 解压后的 **`代码/`** 覆盖 `/home/project/chajia/`。
|
|
|
|
|
|
**不要上传或覆盖:**
|
|
|
|
|
|
- `.env`(服务器已有配置)
|
|
|
- `node_modules/`
|
|
|
- `.next/`
|
|
|
|
|
|
### 3. 检查 `.env`(通常无需修改)
|
|
|
|
|
|
确认以下项仍存在且正确即可:
|
|
|
|
|
|
```env
|
|
|
DATABASE_URL=mysql://chajia:密码@host.docker.internal:3306/chajia
|
|
|
JWT_SECRET=...
|
|
|
HOST_SERVICE_TOKENS=...
|
|
|
CUSTOMER_REGISTRY=...
|
|
|
RPA_MOCK_MODE=false
|
|
|
```
|
|
|
|
|
|
**不要**设置 `RPA_BROWSER_CHANNEL=chrome`(Docker Worker 无系统 Chrome)。
|
|
|
|
|
|
本次**无新增必填环境变量**。可删除(已不再使用):
|
|
|
|
|
|
```env
|
|
|
NEXT_PUBLIC_EMBED_DEMO_SERVICE_TOKEN=...
|
|
|
NEXT_PUBLIC_EMBED_DEMO_CUSTOMER_ID=...
|
|
|
```
|
|
|
|
|
|
可选:自定义嵌入演示密码(默认 `123456`)
|
|
|
|
|
|
```env
|
|
|
EMBED_DEMO_PASSWORD=123456
|
|
|
```
|
|
|
|
|
|
### 已有服务器:管理员改密
|
|
|
|
|
|
若 `admin_demo` 仍为旧密码 `Demo@123`,请在管理端改密,或在 MySQL 更新 `admin_user.password_hash`(新装 seed 默认为 `kj123456`)。
|
|
|
|
|
|
### 4. 执行安装(构建 + 迁移 + 重启)
|
|
|
|
|
|
```bash
|
|
|
cd /home/project/chajia
|
|
|
test -f .env && echo "OK: .env exists" || { echo "ERROR: 缺少 .env"; exit 1; }
|
|
|
|
|
|
chmod +x deploy/install-bt-host-mysql.sh
|
|
|
bash deploy/install-bt-host-mysql.sh
|
|
|
```
|
|
|
|
|
|
约 **5~15 分钟**。脚本会:
|
|
|
|
|
|
1. `docker compose build`(next-app + rpa-worker + scheduler)
|
|
|
2. 启动容器
|
|
|
3. **`npx prisma migrate deploy`**(执行上述 3 条迁移)
|
|
|
4. 健康检查
|
|
|
|
|
|
### 5. 确认服务状态
|
|
|
|
|
|
```bash
|
|
|
COMPOSE="docker compose --env-file .env -f deploy/docker-compose.bt-host-mysql.yml"
|
|
|
$COMPOSE ps
|
|
|
```
|
|
|
|
|
|
应看到 **next-app、rpa-worker、scheduler、redis** 均为 **Up**。
|
|
|
|
|
|
```bash
|
|
|
curl -I http://127.0.0.1:30325
|
|
|
```
|
|
|
|
|
|
### 5. 清空 Redis 缓存(建议)
|
|
|
|
|
|
```bash
|
|
|
COMPOSE="docker compose --env-file .env -f deploy/docker-compose.bt-host-mysql.yml"
|
|
|
$COMPOSE exec redis redis-cli FLUSHDB
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 二、部署后验收
|
|
|
|
|
|
### 管理端
|
|
|
|
|
|
| 检查项 | 地址 / 操作 |
|
|
|
|--------|-------------|
|
|
|
| 管理端登录 | `/login`,`admin_demo` / `kj123456`(已有库可能仍为旧密码) |
|
|
|
| 嵌入演示 | `/embed-demo`,`CUST_002` / `123456` — 应显示 CUST_002 加价配置 |
|
|
|
| 预警中心 | `/admin/alerts` — 中文根因、客户、地址、货物 |
|
|
|
| 查价记录 | `/admin/queues` — 提交询价后有新行 |
|
|
|
| 客户管理 | `/admin/customers` — 可新增客户、轮换 Key |
|
|
|
|
|
|
### 询价回归
|
|
|
|
|
|
```bash
|
|
|
export CHAJIA_BASE_URL="http://你的IP:端口"
|
|
|
export CHAJIA_SERVICE_TOKEN="你的token"
|
|
|
export CHAJIA_CUSTOMER_ID="CUST_001"
|
|
|
bash 辅助脚本/test-denver-boston.sh
|
|
|
```
|
|
|
|
|
|
或在浏览器打开 `/embed-demo`,用客户编号登录后完成一次询价。
|
|
|
|
|
|
### 迁移是否成功
|
|
|
|
|
|
```bash
|
|
|
COMPOSE="docker compose --env-file .env -f deploy/docker-compose.bt-host-mysql.yml"
|
|
|
$COMPOSE exec next-app npx prisma migrate status
|
|
|
```
|
|
|
|
|
|
应显示 **Database schema is up to date**。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 三、本次变更文件清单(供排查)
|
|
|
|
|
|
| 类别 | 主要路径 |
|
|
|
|------|----------|
|
|
|
| 数据库 | `prisma/schema.prisma`,迁移 `202607031*` |
|
|
|
| 查价审计 | `modules/quote/query-log.ts`,`app/api/admin/query-logs/` |
|
|
|
| 预警展示 | `modules/alert/alert-presentation.ts`,`app/admin/alerts/` |
|
|
|
| 查价记录页 | `app/admin/queues/page.tsx` |
|
|
|
| 导航 | `components/layout/admin-layout.tsx`,`app/dashboard/page.tsx` |
|
|
|
| 客户管理 | `app/admin/customers/`,`modules/customer/` |
|
|
|
| 全链路挂钩 | `orchestrator.ts`,`job-handler.ts`,`fallback-orchestrator.ts`,`timeout-sweeper.ts` |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 四、常见问题
|
|
|
|
|
|
| 现象 | 处理 |
|
|
|
|------|------|
|
|
|
| 构建报 `node:crypto` / `UnhandledSchemeError` | 已修复:middleware 改用 `service-token-env.ts`;请用**本包最新代码**重建 |
|
|
|
| 查价记录为空 | 迁移后**新提交的询价**才会写入;旧数据无回溯 |
|
|
|
| 预警详情仍像 JSON | 确认 next-app 已重建;有 `quote_id` 的预警会关联报价单补全 |
|
|
|
| `prisma migrate` 失败 | 查 MySQL 权限;勿手动改表后与迁移冲突 |
|
|
|
| 嵌入演示登录失败 | 确认客户编号存在于 DB 或 `CUSTOMER_REGISTRY`;密码默认 `123456` |
|
|
|
| 嵌入演示查价 401 | 确认已登录;middleware 使用 `embed_demo_session` Cookie |
|
|
|
| 构建 OOM | 服务器建议 4GB+ 内存;单独 build:`$COMPOSE build next-app` |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 五、回滚
|
|
|
|
|
|
```bash
|
|
|
# 还原代码备份后
|
|
|
bash deploy/install-bt-host-mysql.sh
|
|
|
```
|
|
|
|
|
|
数据库迁移**不建议**回滚;若必须,请在 DBA 协助下操作。
|