1. 检查项管理
检查项:体检的基本单位(身高、体重、血压、红细胞、白细胞等)
数据库表:
t_checkitem (
id INT PRIMARY KEY,
name VARCHAR(50), -- 检查项名称
age INT, -- 适用年龄
price DECIMAL -- 价格
)
关键对象:
// Ajax统一响应对象
public class Result {
private boolean flag; // 操作结果
private String message; // 提示信息
private Object data; // 响应数据
}
// 分页查询参数
public class QueryPageBean {
private Integer currentPage; // 当前页码
private Integer pageSize; // 每页记录数
private String queryString; // 查询条件
}
// 分页结果
public class PageResult {
private Long total; // 总记录数
private List<Object> rows; // 当前页数据
}
2. 检查组管理
检查组:多个相关检查项的组合(如肝功:体重、身高、红细胞)
数据库设计:
t_checkgroup (检查组表)
├── id
├── name -- 检查组名称
└── remark -- 备注
t_checkgroup_checkitem (检查组-检查项关联表)
├── checkgroup_id
└── checkitem_id
3. 套餐管理
套餐:多个检查组的组合(如婚检套餐、入职体检套餐)
数据库设计:
t_setmeal (套餐表)
├── id
├── name -- 套餐名称
└── price -- 套餐价格
t_setmeal_checkgroup (套餐-检查组关联表)
├── setmeal_id
└── checkgroup_id
图片清理方案(基于Redis):
// 上传图片时
redis.sadd("SETMEAL_PIC_RESOURCE", "1", "2", "3");
// 添加到数据库时
redis.sadd("SETMEAL_PIC_DB_RESOURCE", "1", "2");
// 定时任务清理流程
1. 计算差集:redis.sdiff("SETMEAL_PIC_RESOURCE", "SETMEAL_PIC_DB_RESOURCE") → "3"
2. 删除七牛云图片:QiNiuUtil.deletePic("3");
3. 移除记录:redis.srem("SETMEAL_PIC_RESOURCE", "3");
4. 预约设置
功能:设置每日可预约人数
数据库表:
t_ordersetting (
orderDate DATE, -- 预约日期
number INT, -- 可预约人数
reservations INT -- 已预约人数
)
Excel处理流程:
// 读取Excel数据
Workbook workbook = new HSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0);
// 去重逻辑
1. 检查日期是否已设置
2. 如已设置则删除旧数据
3. 插入新数据
📱 用户端功能
体检预约流程
-
选择套餐
-
展示套餐列表(名称、备注、适用性别、年龄、图片)
-
套餐详情展示(套餐 → 检查组 → 检查项)
-
-
提交预约
-
发送验证码(Redis存储,设置过期时间)
-
预约验证流程:
1. 校验验证码 2. 检查日期是否设置预约 3. 检查是否约满 4. 检查是否重复预约 5. 检查会员状态(非会员自动注册) 6. 更新已预约人数
-
⏰ 定时任务组件 - Quartz
核心概念
-
Job:定义要执行的任务
-
Trigger:定义执行时间
-
Scheduler:调度器,协调Job和Trigger
SpringBoot整合配置
@Configuration
public class QuartzConfig {
// 1. 定义Job
@Bean
public MethodInvokingJobDetailFactoryBean jobDetail(JobDemo jobDemo) {
MethodInvokingJobDetailFactoryBean factory = new MethodInvokingJobDetailFactoryBean();
factory.setTargetObject(jobDemo);
factory.setTargetMethod("printTime");
return factory;
}
// 2. 定义Trigger
@Bean
public CronTriggerFactoryBean trigger(JobDetail jobDetail) {
CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
factory.setCronExpression("0 0 0 */1 * ?"); // 每天0点执行
factory.setJobDetail(jobDetail);
return factory;
}
// 3. 定义Scheduler
@Bean
public SchedulerFactoryBean scheduler(Trigger trigger) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setTriggers(trigger);
return factory;
}
}
Cron表达式语法
秒 分 时 日 月 周
* * * * * ?
特殊符号:
-
*:任意值 -
-:范围(3-5:3到5点) -
,:枚举(3,5:3点和5点) -
/:增量(3/5:从第3秒开始每5秒) -
?:忽略(用于日和周的冲突解决)
🔐 权限控制框架 - Spring Security
核心概念
-
认证(Authentication):验证用户身份(账号密码登录)
-
授权(Authorization):控制用户可访问的资源
权限表设计(5/7张表)
5张表基础模型:
用户表(t_user) → 用户角色关联表(t_user_role) → 角色表(t_role)
↓
角色权限关联表(t_role_permission) → 权限表(t_permission)
7张表扩展模型(添加菜单控制):
在5张表基础上增加:
菜单表(t_menu) → 角色菜单关联表(t_role_menu)
授权方式对比
// 基于角色的授权
if(user.getRole().getKeyword().equals("ROLE_ADMIN")) {
// 管理员权限
}
// 基于权限的授权
if(user.getPermissions().contains("CHECKITEM_DELETE")) {
// 删除检查项权限
}
Spring Security原理
1. SpringBoot启动时,Security创建FilterChainProxy
2. FilterChainProxy包含多个过滤器链
3. 请求到达时,FilterChainProxy将请求分发给相应的过滤器
4. 过滤器链依次处理:认证 → 授权 → 资源访问
🎯 技术亮点总结
-
模块化设计:清晰的工程结构,便于团队协作和维护
-
Redis应用:验证码存储、图片去重、缓存优化
-
Excel处理:批量导入预约设置,提高操作效率
-
Quartz集成:定时清理垃圾图片,资源优化
-
Security安全:完善的权限控制体系
-
前后端分离:移动端和后台管理端独立开发
-
数据关联:套餐-检查组-检查项三级关联,灵活配置
这套健康体检预约系统采用了现代化的技术栈,具备良好的可扩展性和可维护性,适合中大型体检中心的数字化管理需求。