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. 数据关联:套餐-检查组-检查项三级关联,灵活配置

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

相关推荐
XiaoLeisj4 小时前
Android 短视频项目首页开发实战:从广场页广告轮播与网格列表,到发现页分类、播单与话题广场的数据驱动实现
android·okhttp·mvvm·recyclerview·retrofit·databinding·xbanner 轮播
.豆鲨包3 天前
【Android】OkHttp的使用及封装
android·java·okhttp
华科易迅3 天前
Vue通过Ajax获取后台路由信息
vue.js·ajax·okhttp
studyForMokey4 天前
【Android面试】OkHttp & Retrofit 专题
android·okhttp·面试
fLDiSQV1W5 天前
springMVC-HTTP消息转换器与文件上传、下载、异常处理
网络协议·http·okhttp
Ttang239 天前
Java爬虫:Jsoup+OkHttp实战指南
java·爬虫·okhttp
李庆政3709 天前
OkHttp的基本使用 实现GET/POST请求 authenticator自动认证 Cookie管理 请求头设置
java·网络协议·http·okhttp·ssl
无名-CODING10 天前
Java 爬虫进阶:动态网页、多线程与 WebMagic 框架实战
java·爬虫·okhttp
小李云雾11 天前
零基础-从ESS6基础到前后端联通实战
前端·python·okhttp·中间件·eclipse·html·fastapi