Files
AIclinicalresearch/docs/09-架构实施/旧版系统集成/02-服务器与数据库配置说明.md
HaHafeng c3f7d54fdf feat(platform): Implement legacy system integration with Wrapper Bridge architecture
Complete integration of the old clinical research platform (www.xunzhengyixue.com)
into the new AI platform via Token injection + iframe embedding:

Backend:
- Add legacy-bridge module (MySQL pool, auth service, routes)
- POST /api/v1/legacy/auth: JWT -> phone lookup -> Token injection into old MySQL
- Auto-create user in old system if not found (matched by phone number)

Frontend:
- LegacySystemPage: iframe container with Bridge URL construction
- ResearchManagement + StatisticalTools entry components
- Module registry updated from external links to iframe embed mode

ECS (token-bridge.html deployed to www.xunzhengyixue.com):
- Wrapper Bridge: sets cookies within same-origin context
- Storage Access API for cross-site dev environments
- CSS injection: hide old system nav/footer, remove padding gaps
- Inner iframe loads target page with full DOM access (same-origin)

Key technical decisions:
- Token injection (direct MySQL write) instead of calling login API
- Wrapper Bridge instead of parent-page cookie setting (cross-origin fix)
- Storage Access API + SameSite=None;Secure for third-party cookie handling
- User isolation guaranteed by phone number matching

Documentation:
- Integration plan v4.0 with full implementation record
- Implementation summary with 6 pitfalls documented
- System status guide updated (ST module now integrated)

Tested: Local E2E verified - auto login, research management, 126 statistical
tools, report generation, download, UI layout all working correctly

Made-with: Cursor
2026-02-27 21:54:38 +08:00

216 lines
5.8 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-02-15
---
## 1. 服务器信息
| 项目 | 值 |
|------|-----|
| 服务器地址 | `8.154.22.149` |
| 操作系统 | Linux (Ubuntu) |
| 数据库类型 | MariaDB |
| 数据库端口 | 3306 |
---
## 2. 数据库连接信息
| 项目 | 值 |
|------|-----|
| 连接地址 | `jdbc:mysql://127.0.0.1:3306/xzyx_online?characterEncoding=utf8` |
| 数据库名 | `xzyx_online` |
| 用户名 | `xzyx_rw` |
| 密码 | `SKJfdwalkd` |
### 命令行连接方式
```bash
# SSH 登录服务器
ssh root@8.154.22.149
# 连接数据库
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online
```
---
## 3. 用户表结构 (u_user_info)
### 核心字段
| 字段 | 类型 | 说明 | 后台显示名 |
|------|------|------|-----------|
| `id` | int(11) | 主键,自增 | - |
| `phone` | varchar(20) | 手机号(登录账号)**必填** | 账号 |
| `nickname` | varchar(40) | 昵称 | 昵称 |
| `real_name` | varchar(45) | 真实姓名 | - |
| `hospital` | varchar(255) | 固定值 "本地" | - |
| `company` | varchar(200) | **实际的机构/医院名称** | 医院 |
| `academy` | varchar(200) | **部门** | 部门 |
| `user_role` | varchar(20) | 用户角色,默认 "NORMAL" | 用户角色 |
| `user_status` | varchar(45) | 用户状态,默认 "NORMAL" | - |
| `password` | varchar(45) | 密码MD5加密 | - |
| `hosptial_id` | int(11) | 医院ID默认 0 | - |
| `email_validate_status` | tinyint(4) | 邮箱验证状态,默认 0 | - |
| `register_time` | int(11) | 注册时间Unix时间戳 | - |
### 字段对应关系
| 后台显示 | 数据库字段 |
|----------|-----------|
| 账号 | `phone` |
| 昵称 | `nickname` + `real_name` |
| 用户角色:普通 | `user_role = 'NORMAL'` |
| 医院 | `company`(注意:不是 hospital 字段) |
| 部门 | `academy` |
### 默认密码
- 明文:`123456`
- MD5`E10ADC3949BA59ABBE56E057F20F883E`
---
## 4. 批量导入用户操作指南
### 步骤1准备 CSV 文件
格式要求:
```csv
手机号,姓名,医院,部门
13800000001,张三,北京大学第三医院,骨科
13800000002,李四,医朵云,医学部
```
### 步骤2检查重复手机号
```bash
# 导出现有手机号
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -N -e "SELECT phone FROM u_user_info;" > /tmp/existing_phones.txt
# 查看现有用户数量
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SELECT COUNT(*) FROM u_user_info;"
```
### 步骤3生成 SQL 插入语句
单条插入模板:
```sql
INSERT INTO u_user_info (
phone,
nickname,
real_name,
hospital,
company,
academy,
user_role,
user_status,
password,
hosptial_id,
email_validate_status,
register_time
) VALUES (
'手机号',
'姓名',
'姓名',
'本地',
'机构名称',
'部门',
'NORMAL',
'NORMAL',
'E10ADC3949BA59ABBE56E057F20F883E',
0,
0,
UNIX_TIMESTAMP()
);
```
批量插入模板(使用 INSERT IGNORE 避免重复报错):
```sql
INSERT IGNORE INTO u_user_info (phone, nickname, real_name, hospital, company, academy, user_role, user_status, password, hosptial_id, email_validate_status, register_time) VALUES
('13800000001', '张三', '张三', '本地', '北京大学第三医院', '骨科', 'NORMAL', 'NORMAL', 'E10ADC3949BA59ABBE56E057F20F883E', 0, 0, UNIX_TIMESTAMP()),
('13800000002', '李四', '李四', '本地', '医朵云', '医学部', 'NORMAL', 'NORMAL', 'E10ADC3949BA59ABBE56E057F20F883E', 0, 0, UNIX_TIMESTAMP());
```
### 步骤4上传并执行 SQL
```bash
# 上传 SQL 文件到服务器(或使用 nano 创建)
nano /tmp/batch_insert_users.sql
# 执行 SQL 文件
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online < /tmp/batch_insert_users.sql
```
### 步骤5验证导入结果
```bash
# 查询指定机构的用户数量
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SELECT COUNT(*) as '用户数' FROM u_user_info WHERE company = '北京大学第三医院';"
# 抽查用户数据
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SELECT id, phone, nickname, company, academy FROM u_user_info WHERE company = '北京大学第三医院' LIMIT 10;"
```
---
## 5. 常用查询命令
### 查看所有表
```bash
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SHOW TABLES;"
```
### 查看表结构
```bash
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "DESC u_user_info;"
```
### 根据手机号查询用户
```bash
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SELECT * FROM u_user_info WHERE phone = '18611348738'\G"
```
### 修改用户信息
```bash
# 修改手机号
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "UPDATE u_user_info SET phone = '新手机号' WHERE phone = '旧手机号';"
# 重置密码为 123456
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "UPDATE u_user_info SET password = 'E10ADC3949BA59ABBE56E057F20F883E' WHERE phone = '手机号';"
```
### 删除用户
```bash
mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "DELETE FROM u_user_info WHERE phone = '手机号';"
```
---
## 6. 已导入批次记录
| 批次 | 日期 | 机构 | 数量 | SQL文件 |
|------|------|------|------|---------|
| 第1批 | 2026-02-15 | 北京大学第三医院 | 225 | `docs/06-测试文档/batch_insert_users.sql` |
| 第2批 | 2026-02-15 | 北京大学第三医院 | 35 | `docs/06-测试文档/batch_insert_users_2.sql` |
---
## 7. 注意事项
1. **手机号唯一性**:手机号是用户的唯一登录凭证,不能重复
2. **密码存储**:使用 MD5 加密,默认密码 123456 对应 `E10ADC3949BA59ABBE56E057F20F883E`
3. **hospital 字段**:固定填写 "本地",实际医院名称存储在 `company` 字段
4. **部门字段**:使用 `academy` 字段存储
5. **使用 INSERT IGNORE**:批量导入时使用此语法,遇到重复手机号自动跳过不报错