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 容器内直接操作
-**验证方法**:导入后立即查询中文字段,确认显示正确