Files
AIclinicalresearch/docs/05-部署文档/0228部署/01-部署完成总结.md
HaHafeng 0b29fe88b5 feat(iit): QC deep fix + V3.1 architecture plan + project member management
QC System Deep Fix:
- HardRuleEngine: add null tolerance + field availability pre-check (skipped status)
- SkillRunner: baseline data merge for follow-up events + field availability check
- QcReportService: record-level pass rate calculation + accurate LLM XML report
- iitBatchController: legacy log cleanup (eventId=null) + upsert RecordSummary
- seed-iit-qc-rules: null/empty string tolerance + applicableEvents config

V3.1 Architecture Design (docs only, no code changes):
- QC engine V3.1 plan: 5-level data structure (CDISC ODM) + D1-D7 dimensions
- Three-batch implementation strategy (A: foundation, B: bubbling, C: new engines)
- Architecture team review: 4 whitepapers reviewed + feedback doc + 4 critical suggestions
- CRA Agent strategy roadmap + CRA 4-tool explanation doc for clinical experts

Project Member Management:
- Cross-tenant member search and assignment (remove tenant restriction)
- IIT project detail page enhancement with tabbed layout (KB + members)
- IitProjectContext for business-side project selection
- System-KB route access control adjustment for project operators

Frontend:
- AdminLayout sidebar menu restructure
- IitLayout with project context provider
- IitMemberManagePage new component
- Business-side pages adapt to project context

Prisma:
- 2 new migrations (user-project RBAC + is_demo flag)
- Schema updates for project member management

Made-with: Cursor
2026-03-01 15:27:05 +08:00

167 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026年2月28日部署完成总结
> **部署日期**2026-02-28
> **部署范围**Node.js后端 + 前端Nginx 更新(旧系统集成上线)
> **部署状态**:✅ 全部完成
> **文档日期**2026-02-28
---
## 部署成果一览
### 服务版本对比
| 服务 | 部署前 | 部署后 | 变更类型 |
|------|--------|--------|---------|
| Node.js后端 | v2.2 | **v2.3** | 新增旧系统集成模块 |
| 前端Nginx | v1.8 | **v1.9** | 新增旧系统嵌入前端 |
### 内网地址变更
| 服务 | 部署前地址 | 部署后地址 | 状态 |
|------|-----------|-----------|------|
| Node.js后端 | `172.17.197.28:3001` | `172.17.197.30:3001` | ✅ 已变更 |
| 前端Nginx | `172.17.197.29:80` | `172.17.197.31:80` | ✅ 已变更 |
---
## 一、Node.js后端更新v2.2 → v2.3
### 1.1 主要变更
| 类别 | 变更内容 |
|------|---------|
| 新增模块 | Legacy Bridge旧系统集成认证服务 |
| 新增依赖 | `mysql2`(连接旧系统 ECS MySQL |
| 新增 API | `POST /api/v1/legacy/auth`旧系统Token注入 |
| 新增服务 | `legacy-auth.service.ts`MySQL用户查找/创建 + MD5 Token生成 |
### 1.2 Legacy Bridge 工作原理
1. 新系统前端调用 `POST /api/v1/legacy/auth`
2. 后端从 JWT 中提取用户手机号
3. 后端连接旧系统 MySQL`xzyx_online`),通过手机号查找/创建用户
4. 后端为该用户生成 MD5 Token注入到 `u_user_token`
5. 返回 Token + 用户信息给前端
6. 前端构建 `token-bridge.html` URL 并在 iframe 中加载
### 1.3 镜像信息
| 项目 | 值 |
|------|---|
| ACR 仓库 | `backend-service` |
| 镜像版本 | v2.2 → **v2.3** |
| 镜像地址 | `crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v2.3` |
| Digest | `sha256:6e25d13cc7e1b228638a30eda35bd4aa70e0f7d52283cf66a2ffb21bee4ea288` |
| 构建方式 | `tsc --noCheck` + Docker 多阶段构建 |
### 1.4 新增环境变量
| 环境变量 | 值 | 说明 |
|---------|---|------|
| `LEGACY_MYSQL_HOST` | `8.154.22.149` | 旧系统 ECS 服务器公网IP |
| `LEGACY_MYSQL_PORT` | `3306` | MySQL 端口 |
| `LEGACY_MYSQL_USER` | `root` | MySQL 用户名 |
| `LEGACY_MYSQL_DATABASE` | `xzyx_online` | 旧系统数据库名 |
### 1.5 SAE 应用配置
| 配置项 | 0227 部署 | 0228 部署 |
|-------|----------|----------|
| 应用名称 | `nodejs-backend-test` | `nodejs-backend-test` |
| 实例规格 | 2核4GB | 2核4GB |
| 容器端口 | 3001 | 3001 |
| 内网地址 | `172.17.197.28` | **`172.17.197.30`** |
| 镜像版本 | v2.2 | **v2.3** |
---
## 二、前端Nginx更新v1.8 → v1.9
### 2.1 主要变更
| 类别 | 变更内容 |
|------|---------|
| 新增模块 | Legacy System iframe 嵌入(研究管理 + 统计工具) |
| 新增组件 | `LegacySystemPage.tsx``ResearchManagement.tsx``StatisticalTools.tsx` |
| 路由更新 | `App.tsx` 注册 `/legacy/*` 路由 |
| 模块注册 | `moduleRegistry.ts` 更新研究管理/统计分析为 iframe embed 模式 |
### 2.2 旧系统嵌入架构
```
新系统前端 (React)
└─ <iframe src="token-bridge.html?token=xxx&redirect=/index.html">
└─ token-bridge.html (ECS 上,同源于 xunzhengyixue.com)
├─ 设置认证 Cookie (SameSite=None; Secure)
├─ 注入 CSS 隐藏导航栏/页脚
└─ <iframe src="/index.html"> (旧系统真实页面)
```
### 2.3 镜像信息
| 项目 | 值 |
|------|---|
| ACR 仓库 | `ai-clinical_frontend-nginx` |
| 镜像版本 | v1.8 → **v1.9** |
| 镜像地址 | `crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.9` |
| Digest | `sha256:ff3c19152f5f5944d4be187d7bc5af986fd00b69501effbd0d53a6f8b064228a` |
### 2.4 SAE 应用配置
| 配置项 | 0227 部署 | 0228 部署 |
|-------|----------|----------|
| 应用名称 | `frontend-nginx-service` | `frontend-nginx-service` |
| 实例规格 | 0.5核1GB | 0.5核1GB |
| 容器端口 | 80 | 80 |
| 内网地址 | `172.17.197.29` | **`172.17.197.31`** |
| 镜像版本 | v1.8 | **v1.9** |
| BACKEND_SERVICE_HOST | `172.17.197.28` | **`172.17.197.30`** |
---
## 三、环境变量联动更新
由于后端 IP 变更,前端环境变量需同步更新:
| 服务 | 环境变量 | 旧值 | 新值 |
|------|---------|------|------|
| frontend-nginx-service | `BACKEND_SERVICE_HOST` | `172.17.197.28` | `172.17.197.30` |
> **注意**CLB 负载均衡器由阿里云自动更新,无需手动操作。
---
## 四、当前系统配置速查
### 服务内网地址
```
R统计引擎: http://172.17.173.101:8080 (不变)
Python: http://172.17.173.102:8000 (不变)
后端: http://172.17.197.30:3001 (更新)
前端: http://172.17.197.31:80 (更新)
```
### ACR 镜像版本
| 仓库 | 版本 |
|------|-----|
| `ssa-r-statistics` | v1.0.1 |
| `python-extraction` | v1.2 |
| `backend-service` | **v2.3** |
| `ai-clinical_frontend-nginx` | **v1.9** |
### 公网访问
```
CLB: http://8.140.53.236/
域名: https://iit.xunzhengyixue.com/
```
---
> **文档版本**v1.0
> **最后更新**2026-02-28
> **维护人员**:开发团队