|
|
hai 2 días | |
|---|---|---|
| backup | hai 1 semana | |
| doc | hai 2 días | |
| lib | hai 1 semana | |
| src | hai 2 días | |
| .gitignore | hai 2 días | |
| README.md | hai 1 semana | |
| pom.xml | hai 1 semana |
这是一个基于Spring Boot + Vue 3的医学影像智能质控系统,支持数据质控、影像质控和报告质控。
技术栈:
✅ 数据库设计:14张表的完整建表SQL ✅ 初始数据:菜单数据、质控因子数据 ✅ 代码生成器:MyBatis-Plus代码生成工具 ✅ 配置文件:application.yml完整配置 ✅ 基础框架:Spring Security + JWT认证
必需环境:
# 1. 登录MySQL
mysql -u root -p
# 2. 执行建表脚本
source /Users/geng/Documents/IdeaProjects/QConline/doc/sql/init.sql
# 3. 导入初始数据
source /Users/geng/Documents/IdeaProjects/QConline/doc/sql/menu_data.sql
source /Users/geng/Documents/IdeaProjects/QConline/doc/sql/qc_factor_data.sql
# 4. 验证
USE qconline;
SHOW TABLES; # 应该看到14张表
SELECT * FROM sys_user; # 应该有admin用户
默认管理员账号:
adminadmin123编辑 src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/qconline?...
username: root
password: your_password # 修改为实际密码
redis:
host: localhost
port: 6379
password: # 如有密码请填写
# 1. 修改密码
# 编辑 src/main/java/com/zskk/qconline/generator/CodeGenerator.java
# 修改第21行:String password = "your_password";
# 2. 在IDE中右键运行 CodeGenerator.main()
# 或使用命令行:
mvn exec:java -Dexec.mainClass="com.zskk.qconline.generator.CodeGenerator"
# 3. 生成的代码在 src/main/java/com/zskk/qconline/modules/ 下
生成的文件结构:
modules/
├── controller/ # 控制器(15个)
├── entity/ # 实体类(15个)
├── mapper/ # Mapper接口(15个)
└── service/ # 服务类(15个)
└── impl/ # 服务实现(15个)
# 方式1:IDE中运行
# 运行 com.zskk.qconline.QconlineApplication
# 方式2:命令行
mvn spring-boot:run
# 方式3:打包后运行
mvn clean package
java -jar target/QConline-1.0.0-SNAPSHOT.jar
启动成功后:
# 1. 进入项目父目录
cd /Users/geng/Documents/IdeaProjects
# 2. 创建Vue 3项目
npm create vue@latest qconline-web
# 选择以下选项:
# ✔ Add TypeScript? Yes
# ✔ Add JSX Support? No
# ✔ Add Vue Router? Yes
# ✔ Add Pinia? Yes
# ✔ Add Vitest? No
# ✔ Add ESLint? Yes
# 3. 安装依赖
cd qconline-web
npm install
# 4. 安装Element Plus
npm install element-plus
npm install @element-plus/icons-vue
# 5. 安装axios
npm install axios
# 6. 运行开发服务器
npm run dev
前端访问地址:http://localhost:5173
QConline/
├── doc/
│ ├── sql/ # SQL脚本
│ ├── 开发大纲.md # 详细开发大纲
│ └── README.md
├── src/main/java/com/zskk/qconline/
│ ├── modules/ # 业务模块(代码生成器生成)
│ │ ├── controller/
│ │ ├── entity/
│ │ ├── mapper/
│ │ └── service/
│ ├── security/ # 安全认证
│ │ ├── JwtAuthenticationFilter.java
│ │ ├── LoginUser.java
│ │ ├── MD5WithSaltPasswordEncoder.java
│ │ └── UserDetailsServiceImpl.java
│ ├── config/ # 配置类
│ │ ├── SecurityConfig.java
│ │ ├── RedisConfig.java
│ │ └── ScheduleConfig.java
│ ├── component/ # 通用组件
│ │ ├── response/
│ │ └── aop/
│ ├── utils/ # 工具类
│ │ ├── JwtUtil.java
│ │ └── AesEcbUtil.java
│ ├── generator/ # 代码生成器
│ │ └── CodeGenerator.java
│ └── QconlineApplication.java
└── src/main/resources/
├── mapper/ # MyBatis XML
├── application.yml
└── logback-spring.xml
qconline-web/
├── src/
│ ├── api/ # API接口
│ ├── assets/ # 静态资源
│ ├── components/ # 全局组件
│ │ └── ViewerDialog/ # 阅片器组件
│ ├── layout/ # 布局组件
│ ├── router/ # 路由配置
│ ├── stores/ # Pinia状态管理
│ ├── utils/ # 工具类
│ ├── views/ # 页面组件
│ │ ├── login/
│ │ ├── dashboard/
│ │ ├── system/
│ │ ├── patient/
│ │ └── qc/
│ ├── App.vue
│ └── main.ts
├── .env.development # 开发环境配置
├── .env.production # 生产环境配置
└── package.json
现有的Spring Security + JWT框架已配置完成,需要完善:
后端:
JwtAuthenticationFilter - JWT过滤器UserDetailsServiceImpl - 用户详情服务SecurityConfig - Security配置/api/auth/login前端:
/views/login/index.vue用户管理:
SysUserController(已生成)机构管理:
InstitutionController(已生成)权限管理:
质控因子:
QcFactorController质控标准:
QcStandardController质控任务:
QcTaskController质控结果:
QcResultController需要实现:
使用MyBatis-Plus拦截器:
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加数据权限拦截器
interceptor.addInnerInterceptor(new DataPermissionInterceptor());
return interceptor;
}
规则格式(JSON):
{
"operator": ">=",
"value": 10,
"dataType": "number"
}
@Async("qcTaskExecutor")
public void executeTask(String taskId) {
// 质控任务执行逻辑
}
URL模板:
https://ppacsview.pacsonline.cn/#/pc
?studyurl=https%3A%2F%2Fquery.pacsonline.cn%2Fquery%2F%3Faddress%3D
&study_id={study_id}
&node_type=1
&version=V1.2.0.0
前端使用iframe嵌入。
由于系统功能复杂,建议按以下顺序实现:
第1批(核心功能):
第2批(业务基础):
第3批(质控配置):
第4批(质控执行):
第5批(演示功能):
患者数据:
INSERT INTO patient_info VALUES
('P001', 'PAT001', '张三', '男', '1980-01-01', 45, 'INST001', NOW(), NOW());
检查数据:
INSERT INTO study_info VALUES
('S001', 'STUDY001', 'UID001', 'PAT001', '2025-12-25', '10:00:00',
'CT', 'CT胸部平扫', 'ACC001', 'INST001', NULL, 1, 15, '胸部', '仰卧位', NOW(), NOW());
报告数据:
INSERT INTO report_info VALUES
('R001', 'REP001', 'STUDY001', 'PAT001', 'INST001',
'双肺纹理清晰,未见明显异常密度影...', '双肺未见明显异常。',
'DOC001', '李医生', NOW(), NULL, NULL, NULL, 1, NOW(), NOW());
A: 检查 CodeGenerator.java 中的数据库密码是否正确。
A: 确保Redis服务已启动,或临时禁用Redis(注释相关配置)。
A: 在后端添加CORS配置,或前端配置代理。
A: 在 application.yml 中修改 jwt.expiration 配置。
立即执行:
application.yml 数据库密码需要帮助时:
doc/开发大纲.md 查看详细设计security/ 包下的认证代码如有问题或需要进一步的代码实现,请随时提出具体需求!
重要提示:
项目状态:✅ 框架搭建完成,等待功能实现
祝开发顺利!🚀