fix(backend): Resolve PgBoss infinite loop issue and cleanup unused files

Backend fixes:
- Fix PgBoss task infinite loop on SAE (root cause: missing queue table constraints)
- Add singletonKey to prevent duplicate job enqueueing
- Add idempotency check in reviewWorker (skip completed tasks)
- Add optimistic locking in reviewService (atomic status update)

Frontend fixes:
- Add isSubmitting state to prevent duplicate submissions in RVW Dashboard
- Fix API baseURL in knowledgeBaseApi (relative path)

Cleanup (removed):
- Old frontend/ directory (migrated to frontend-v2)
- python-microservice/ (unused, replaced by extraction_service)
- Root package.json and node_modules (accidentally created)
- redcap-docker-dev/ (external dependency)
- Various temporary files and outdated docs in root

New documentation:
- docs/07-运维文档/01-PgBoss队列监控与维护.md
- docs/07-运维文档/02-故障预防检查清单.md
- docs/07-运维文档/03-数据库迁移注意事项.md

Database fix applied to RDS:
- Added PRIMARY KEY to platform_schema.queue
- Added 3 missing foreign key constraints

Tested: Local build passed, RDS constraints verified
This commit is contained in:
2026-01-27 18:16:22 +08:00
parent 2481b786d8
commit bbf98c4d5c
214 changed files with 4318 additions and 44920 deletions

View File

@@ -1,7 +1,7 @@
# 🎯 2026年1月26日 部署状态真实记录
# 🎯 2026年1月26-27日 部署状态真实记录
> **文档类型**:部署状态实时记录
> **更新时间**2026-01-26 16:30
> **更新时间**2026-01-27 15:30(数据库中文编码问题修复)
> **部署人员**:开发团队
> **文档目的**:记录本次部署的真实状态,供后续参考
@@ -16,6 +16,7 @@
| 3 | Node.js后端更新 | ✅ 已完成 | 2026-01-27 07:55 | v1.3 → v1.7修复ES Module导入 |
| 4 | 前端Nginx更新 | ✅ 已完成 | 2026-01-27 08:00 | v1.2 → v1.3更新后端IP |
| 5 | IIT回调地址配置 | ⏳ 待配置 | - | 外部平台配置 |
| 6 | **数据库中文编码修复** | ✅ 已完成 | 2026-01-27 15:30 | PowerShell编码问题重新导入数据 |
---
@@ -373,6 +374,17 @@ sha256:42bff8a3d65c0b11eafc09aae5aed9ef0ff6f550d60a3426c7f5d15c7433a973
| 07:50 | 开始构建前端v1.3修复Dockerfile跳过TypeScript检查 |
| 08:00 | 前端v1.3部署成功新IP172.17.173.90 |
| 08:05 | 更新前端环境变量指向新后端IP |
| 14:00 | 🔴 **发现数据库中文乱码问题**:用户名、租户名显示为 `????` |
| 14:10 | 定位问题原因PowerShell 编码破坏了 UTF-8 数据 |
| 14:20 | 在 Docker 容器内重新导出本地数据库(正确的 UTF-8 |
| 14:25 | 验证导出文件中文正确(王医生、示范医院等) |
| 14:30 | 开启 RDS 外网访问,准备重新导入 |
| 14:40 | 强制删除 RDS 测试数据库(`DROP DATABASE ... WITH (FORCE)` |
| 14:45 | 重新创建数据库,安装 pg_bigm、pgvector 插件 |
| 14:50 | 在容器内直接导入数据(`psql -f /tmp/backup_utf8.sql` |
| 15:00 | ✅ 验证中文数据正确显示 |
| 15:10 | 关闭 RDS 外网访问 |
| 15:30 | 更新部署文档,记录问题和解决方案 |
---
@@ -405,20 +417,77 @@ sha256:42bff8a3d65c0b11eafc09aae5aed9ef0ff6f550d60a3426c7f5d15c7433a973
5.**前后端TypeScript错误** - 跳过类型检查,部署优先
6.**OSS环境配置** - 开发/生产Bucket分离
7.**大量空文件恢复** - 从本地备份恢复
8.**数据库中文乱码(????** - PowerShell编码问题在容器内直接导入修复
### 🎯 待完成任务
| 任务 | 优先级 | 说明 |
|------|--------|------|
| IIT回调地址配置 | 高 | 企业微信、微信服务号回调URL更新 |
| TypeScript类型修复 | 中 | 改善代码质量,不影响运行 |
| 功能全面测试 | | 验证所有模块功能 |
| 任务 | 优先级 | 状态 | 说明 |
|------|--------|------|------|
| 数据库中文编码修复 | 🔴 高 | **已完成** | PowerShell编码问题已重新导入 |
| IIT回调地址配置 | 🔴 高 | ⏳ 待完成 | 企业微信、微信服务号回调URL更新 |
| 功能全面测试 | 🔴 高 | ⏳ 待完成 | 验证所有模块功能 |
| TypeScript类型修复 | 🟡 中 | ⏳ 待完成 | 改善代码质量,不影响运行 |
---
> **🎉 部署状态**:核心服务全部完成!
> **⏱️ 总耗时**约17小时跨2天
> **🎉 部署状态**:核心服务全部完成 + 中文编码问题已修复
> **⏱️ 总耗时**约17小时跨2天+ 1.5小时(编码问题修复)
> **🔜 下一步**IIT回调地址配置 + 全面功能测试
> **📝 最后更新**2026-01-27 08:05
> **📝 最后更新**2026-01-27 15:30
---
## 🔴 2026-01-27 紧急修复:数据库中文编码问题
### 问题现象
部署完成后,前端显示用户名称、租户名称、联系人等信息全部为 `????``??`
### 根因分析
数据迁移脚本 `database-migration-script.ps1` 使用 PowerShell 执行数据库导入:
1. PowerShell 的 `>` 重定向默认使用 **UTF-16 LE** 编码
2. `Get-Content` 默认使用 **GBK/CP936** 编码
3. 虽然 `pg_dump` 指定了 `--encoding=UTF8`,但 PowerShell 管道破坏了编码
### 修复方案
**在 Docker 容器内直接操作,完全绕过 PowerShell**
```bash
# ❌ 错误做法PowerShell编码问题
docker exec ... pg_dump ... > backup.sql
Get-Content backup.sql | docker exec ... psql ...
# ✅ 正确做法(容器内直接操作)
docker exec ... pg_dump ... -f /tmp/backup_utf8.sql
docker exec ... psql ... -f /tmp/backup_utf8.sql
```
### 修复步骤
1. ✅ 在容器内重新导出数据库(`pg_dump -f /tmp/backup_utf8.sql`
2. ✅ 验证导出文件中文正确(`王医生``示范医院` 等)
3. ✅ 开启 RDS 外网访问
4. ✅ 强制删除 RDS 测试数据库(`DROP DATABASE ... WITH (FORCE)`
5. ✅ 重新创建数据库(`CREATE DATABASE ... ENCODING='UTF8'`
6. ✅ 安装插件pg_bigm、pgvector
7. ✅ 在容器内直接导入(`psql -f /tmp/backup_utf8.sql`
8. ✅ 验证中文数据正确显示
9. ✅ 关闭 RDS 外网访问
### 验证结果
```
用户名王医生、李医生、测试用户、超级管理员、Prompt工程师 ✅
租户名:示范医院、示范药企、壹证循科技、北京积水潭医院、武田制药 ✅
联系人:张主任、李经理、张院长 ✅
```
### 经验总结
- ⚠️ **Windows PowerShell 不适合处理 UTF-8 数据**:重定向和管道会破坏编码
-**推荐做法**:数据库迁移时,在 Docker 容器内直接操作
-**验证方法**:导入后立即查询中文字段,确认显示正确

View File

@@ -1,8 +1,9 @@
# 🎉 2026年1月26-27日部署完成总结
> **部署日期**2026-01-26 15:00 ~ 2026-01-27 08:05
> **总耗时**约17小时跨2天
> **部署状态**:✅ 核心服务全部完成
> **问题修复**2026-01-27数据库中文编码问题
> **总耗时**约17小时跨2天+ 1小时编码问题修复
> **部署状态**:✅ 核心服务全部完成 + ✅ 中文编码问题已修复
> **文档日期**2026-01-27
---
@@ -70,6 +71,7 @@
| 4 | **ES Module导入错误** | 🔴 严重 | 添加.js扩展名 |
| 5 | **TypeScript类型错误** | 🟡 中等 | 跳过类型检查,部署优先 |
| 6 | **网络构建失败** | 🟡 中等 | 重试构建,使用阿里云镜像源 |
| 7 | **数据库中文乱码(????** | 🔴 严重 | PowerShell编码问题容器内直接导入修复 |
---
@@ -116,6 +118,55 @@
| ✅ 部署优先策略 | 跳过类型检查,确保快速部署 |
| ✅ 文档详细记录 | 问题排查和知识沉淀 |
### 4. 数据库迁移编码问题 🔴
| 问题 | 教训 | 改进措施 |
|------|------|---------|
| **PowerShell编码破坏** | PowerShell的 `>` 重定向默认使用UTF-16 LE`Get-Content` 默认使用GBK导致UTF-8数据被破坏 | **✅ 解决方案在Docker容器内直接执行导入完全绕过PowerShell** |
| **中文显示为????** | 用户名称、租户名称、联系人等中文字段全部显示为乱码 | 使用 `docker exec ... psql -f` 直接在容器内导入避免通过PowerShell管道 |
**问题详情2026-01-27**
**现象**:部署完成后,前端显示用户名称、租户名称、联系人等信息全部为 `????``??`
**根因分析**
1. 数据迁移脚本 `database-migration-script.ps1` 使用 PowerShell 执行 `pg_dump``psql`
2. PowerShell 的 `>` 重定向操作符默认使用 **UTF-16 LE** 编码,不是 UTF-8
3. `Get-Content` 命令默认使用系统编码Windows 通常是 **GBK/CP936**
4. 虽然 `pg_dump` 指定了 `--encoding=UTF8`,但 PowerShell 的管道破坏了编码
**修复方案**
```bash
# ❌ 错误做法PowerShell编码问题
docker exec ... pg_dump ... > backup.sql
Get-Content backup.sql | docker exec ... psql ...
# ✅ 正确做法(容器内直接操作)
docker exec ... pg_dump ... -f /tmp/backup_utf8.sql
docker exec ... psql ... -f /tmp/backup_utf8.sql
```
**修复步骤2026-01-27**
1. ✅ 在容器内重新导出数据库(`pg_dump -f /tmp/backup_utf8.sql`
2. ✅ 验证导出文件中文正确(`王医生``示范医院` 等)
3. ✅ 强制删除 RDS 测试数据库(`DROP DATABASE ... WITH (FORCE)`
4. ✅ 重新创建数据库(`CREATE DATABASE ... ENCODING='UTF8'`
5. ✅ 安装插件pg_bigm、pgvector
6. ✅ 在容器内直接导入(`psql -f /tmp/backup_utf8.sql`
7. ✅ 验证中文数据正确显示
**验证结果**
```
用户名王医生、李医生、测试用户、超级管理员、Prompt工程师 ✅
租户名:示范医院、示范药企、壹证循科技、北京积水潭医院、武田制药 ✅
联系人:张主任、李经理、张院长 ✅
```
**经验总结**
- ⚠️ **Windows PowerShell 不适合处理 UTF-8 数据**:重定向和管道会破坏编码
-**推荐做法**:数据库迁移时,在 Docker 容器内直接操作,完全绕过 PowerShell
-**验证方法**:导入后立即查询中文字段,确认显示正确
---
## 📋 当前系统配置速查
@@ -154,13 +205,14 @@ OSS_ACCESS_KEY_ID=LTAI5tBHkL39GjdLfcr77Y3f
## 🔜 待完成任务
| 任务 | 优先级 | 预计时间 |
|------|--------|---------|
| **IIT回调地址配置** | 🔴 高 | 30分钟 |
| **功能全面测试** | 🔴 高 | 2小时 |
| **TypeScript类型修复** | 🟡 中 | 3小时 |
| **性能测试** | 🟢 低 | 1小时 |
| **监控告警配置** | 🟢 低 | 1小时 |
| 任务 | 优先级 | 预计时间 | 状态 |
|------|--------|---------|------|
| **IIT回调地址配置** | 🔴 高 | 30分钟 | ⏳ 待完成 |
| **功能全面测试** | 🔴 高 | 2小时 | ⏳ 待完成 |
| **数据库中文编码修复** | 🔴 高 | 已完成 | ✅ **2026-01-27 完成** |
| **TypeScript类型修复** | 🟡 中 | 3小时 | ⏳ 待完成 |
| **性能测试** | 🟢 低 | 1小时 | ⏳ 待完成 |
| **监控告警配置** | 🟢 低 | 1小时 | ⏳ 待完成 |
---
@@ -183,6 +235,7 @@ OSS_ACCESS_KEY_ID=LTAI5tBHkL39GjdLfcr77Y3f
2. ⚠️ **环境变量同步**:确保本地.env、SAE环境变量一致
3. ⚠️ **数据库备份**任何Schema变更前必须备份
4. ⚠️ **版本号管理**:按语义化版本递增
5. ⚠️ **数据库迁移编码****Windows PowerShell 会破坏 UTF-8 编码**,必须使用容器内直接操作(`docker exec ... psql -f`
---
@@ -192,7 +245,23 @@ OSS_ACCESS_KEY_ID=LTAI5tBHkL39GjdLfcr77Y3f
---
> **文档版本**v1.0
> **最后更新**2026-01-27 08:05
---
## 📝 后续问题修复记录
### 2026-01-27数据库中文编码问题修复 ✅
**问题**:用户名称、租户名称、联系人等中文字段显示为 `????`
**原因**PowerShell 编码问题导致数据迁移时 UTF-8 数据被破坏
**修复**:在 Docker 容器内直接执行导入,绕过 PowerShell 编码问题
**详情**:见"经验教训 - 数据库迁移编码问题"章节
---
> **文档版本**v1.1
> **最后更新**2026-01-27添加中文编码问题修复记录
> **维护人员**:开发团队