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

5.8 KiB
Raw Blame History

旧版本系统 - 服务器与数据库配置说明

最后更新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

命令行连接方式

# 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
  • MD5E10ADC3949BA59ABBE56E057F20F883E

4. 批量导入用户操作指南

步骤1准备 CSV 文件

格式要求:

手机号,姓名,医院,部门
13800000001,张三,北京大学第三医院,骨科
13800000002,李四,医朵云,医学部

步骤2检查重复手机号

# 导出现有手机号
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 插入语句

单条插入模板:

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 避免重复报错):

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

# 上传 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验证导入结果

# 查询指定机构的用户数量
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. 常用查询命令

查看所有表

mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SHOW TABLES;"

查看表结构

mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "DESC u_user_info;"

根据手机号查询用户

mysql -u xzyx_rw -p'SKJfdwalkd' -h 127.0.0.1 xzyx_online -e "SELECT * FROM u_user_info WHERE phone = '18611348738'\G"

修改用户信息

# 修改手机号
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 = '手机号';"

删除用户

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:批量导入时使用此语法,遇到重复手机号自动跳过不报错