ICAN_PARENT

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. 插入新数据

📱 用户端功能

体检预约流程

  1. 选择套餐

    • 展示套餐列表(名称、备注、适用性别、年龄、图片)

    • 套餐详情展示(套餐 → 检查组 → 检查项)

  2. 提交预约

    • 发送验证码(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. 过滤器链依次处理:认证 → 授权 → 资源访问

🎯 技术亮点总结

  1. 模块化设计:清晰的工程结构,便于团队协作和维护

  2. Redis应用:验证码存储、图片去重、缓存优化

  3. Excel处理:批量导入预约设置,提高操作效率

  4. Quartz集成:定时清理垃圾图片,资源优化

  5. Security安全:完善的权限控制体系

  6. 前后端分离:移动端和后台管理端独立开发

  7. 数据关联:套餐-检查组-检查项三级关联,灵活配置

这套健康体检预约系统采用了现代化的技术栈,具备良好的可扩展性和可维护性,适合中大型体检中心的数字化管理需求。

相关推荐
前端百草阁1 天前
【吃透 Promise】从基础到面试高频(手写 + 输出题 + 原理)
okhttp·面试·职场和发展
ppandss12 天前
JavaWeb从0到1-DAY4-AJAX
前端·ajax·okhttp
4311媒体网6 天前
织梦CMS点击率统计实现方法
okhttp
帅次7 天前
链路到端上:HTTPS 之后安全题还在考什么
android·okhttp·glide·zygote·retrofit
djk88888 天前
layui zTree 控件 AJAX绑定 点击tree事件 获取tree值
ajax·okhttp·layui
明天就是Friday10 天前
Android实战项目④ OkHttp WebSocket开发即时通讯App 完整源码详解
android·websocket·okhttp
xiangxiongfly91510 天前
Android 使用WebSocket通信
android·websocket·网络协议·okhttp
研☆香12 天前
聊聊什么是AJAX
前端·ajax·okhttp
sunwenjian88613 天前
跨域问题解释及前后端解决方案(SpringBoot)
spring boot·后端·okhttp
XiaoLeisj15 天前
Android 短视频播放详情页实战:从播放器模块拆分、Media3 与 FlowHelper 接入,到 ViewPager 高度适配和详情数据联动
android·okhttp·音视频·架构设计·flowhelper