一.设计目的
在线上医疗问诊的情境的增加以及对动物健康需求趋于壮大的环境下,搭建支持线上挂号实现需求的医疗平台作用显得尤为重要。常规的医疗在线平台年限久远以及设计模式的不合理亟需更新换代。(本项目为在学习中以及实际调研需求搭建起来的项目)
二.项目介绍
晓时宠物医院是基于Spring boot的B/S架构单体架构项目。用户操作全流程数字化,覆盖实际赴诊前的一系列操作,优化了以往的在线就诊预约平台的手续繁杂、理解困难等问题,此项目采用较前沿的技术栈和架构思想,并可以在后续扩展应用于更多种类的相关平台。此系统主要用于实现用户在网上在线选择服务并预约服务的功能,方便用户的操作,节约用户的时间。用户可以在登录后可以在用户中心对宠物信息进行完善,并可以查看已有的预约信息和历史订单等数据。在就诊界面上用户可以针对宠物的情况自由的选择一个套餐服务并可以选择任意的医师进行预约,系统会为用户展示医师的排班时间表。提交订单后系统会为用户生成一个订单为其安排就医时间,用户在规定时间可以到线下携宠物就诊。同样的用户可以在就诊前取消订单。系统同样提供了用户对任何服务的评论和点赞功能,以便使用者可以了解到真实的信息。在管理端系统则提供了管理用户信息、宠物信息、预约信息、库存信息等数据并加以管理。
三.项目架构
2.1 技术选型
类别 | 技术栈 |
---|---|
基础框架 | Spring Boot 2.6.x |
ORM框架 | MyBatis |
安全框架 | Spring Security + JWT |
数据库 | MySQL 8.0 |
缓存 | Redis |
消息队列 | RabbitMQ |
接口文档 | Swagger 3.0 |
构建工具 | Maven |
部署 | Docker |
云平台 | 阿里云OSS |
2.2 系统架构设计
考虑到为用户的需求又添加了“评论点赞模块”
在业务模块上我根据大致的需求将功能根据用户模式分为Admin端和User端:
User端:
用户中心(user):用户可以在此处查看自己的预约信息以及历史订单信息和病例
宠物管理(user):用户可以在此处对宠物信息进行修改
病例系统(user):这个模块可展示用户当前已拥有的填写的病例信息
评论点赞模块:用户可以对已经购买的套餐、服务等发表评论
预约系统:用于用户进行服务预约的提交
支付模块:用于支持在用户购买服务等操作后的交易功能
Admin端:
用户中心(admin):管理员可以在此处查看和管理平台用户的详细信息(订单信息、病例信息等)
宠物管理(admin):用于帮助管理员对平台上管理不同状态的宠物信息(待就诊、就诊中、已就诊)
病例系统(admin):此模块对所有用户病例信息进行统一管理。
医生模块:管理医生相关信息。
库存管理模块:查看并管理各类药品的库存情况。
套餐业务模块:在这个模块上对各个套餐和服务的启用和禁用等操作,以及展示其详细信息。
四.模块划分与详细功能设计
3.1 模块划分
3.1.1 用户中心模块
-
功能:
-
用户注册/登录(分普通用户、医生、管理员)
-
权限管理(RBAC模型)
-
用户信息管理
-
-
核心表:
-- 创建用户表
CREATE TABLE user (
id BIGINT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
password VARCHAR(100),
role ENUM('USER','ADMIN'),
phone VARCHAR(20),
email VARCHAR(50),
status TINYINT DEFAULT 1
);
//用户实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
//用户id
private Long Id;
//用户名
private String username;
//用户密码
private String password;
//用户类别
private Enum<UserTypes> userType ;
//手机号
private String phone;
//邮箱
private String email;
//用户状态
private String status;
}
@Getter
public enum UserTypes {
USER(1,"用户"),
ADMIN(2,"管理员");
private final int value;
private final String desc;
UserTypes(int value, String desc) {
this.value = value;
this.desc = desc;
}
}
3.1.2 宠物管理模块
-
功能:
-
宠物档案管理
-
疫苗接种记录
-
健康状态跟踪
-
-
核心表:
-- 创建宠物表 CREATE TABLE pet ( id BIGINT PRIMARY KEY, user_id BIGINT, name VARCHAR(50), species VARCHAR(50), birth_date DATE, medical_history TEXT );
//宠物表 @Data @AllArgsConstructor @NoArgsConstructor public class Pet { //宠物id private Long id; //主人id private Long userId; //宠物姓名 private String name; //种类 private String species; //生日 private LocalDate birthDay; //药物记录 private String medicalHistory; }
3.1.3 医生管理模块
-
功能:
-
医生信息管理
-
排班管理(Admin)
-
设置描述
-
-
核心表:
--创建医生表 CREATE TABLE doctor ( id BIGINT PRIMARY KEY, name VARCHAR(30) NOT NULL, department VARCHAR(50), description VARCHAR(50), phone CHAR(20), work_schedule JSON );
//医生表 @Data @AllArgsConstructor @NoArgsConstructor public class Doctor { //医生id private Long id; //医生姓名 private String name; //部门名称 private String department; //简介 private String description; //电话号码 private String phone; //排班 private String workSchedule; }
3.1.4 预约管理模块
-
功能:
-
在线预约挂号
-
预约状态管理
-
- 核心表:
--创建预约表 CREATE TABLE appointment ( id BIGINT PRIMARY KEY, pet_id BIGINT, doctor_id BIGINT, appointment_time DATETIME, status ENUM('PENDING','CONFIRMED','COMPLETED','CANCELLED'), symptoms TEXT );
//预约表 @Data @AllArgsConstructor @NoArgsConstructor public class Appointment { //预约号 private Long id; //宠物id private Long petId; //医生id private Long doctorId; //预约时间 private LocalDateTime appointmentTime; //预约状态 private Enum<AppointmentStatus> status; //症状描述 private String symptoms; }
@Getter public enum AppointmentStatus { PENDING(1,"待定"), CONFIRMED(2,"已确认"), COMPLETED(3,"已完成"), CANCELED(4,"已取消"); private final Integer values; private final String desc; AppointmentStatus(Integer values, String desc) { this.values = values; this.desc = desc; } }
3.1.5 病例管理模块
-
功能:
-
电子病历管理
-
诊断记录
-
处方管理
-
-
核心表:
-- 创建病例表 CREATE TABLE medical_record ( id BIGINT PRIMARY KEY, pet_id BIGINT, doctor_id BIGINT, diagnosis TEXT, prescription TEXT, record_date DATETIME );
//病例类 @Data @AllArgsConstructor @NoArgsConstructor public class MedicalRecord { //病例id private Long id; //宠物id private Long petId; //医生id private Long doctorId; //症状 private String diagnosis; //处方 private String prescription; //记录时间 private LocalDateTime date; }
3.1.6 库存管理模块
-
功能:
-
药品/耗材管理
-
库存预警
-
出入库记录
-
-
核心表:
-- 创建库存表 CREATE TABLE inventory ( id BIGINT PRIMARY KEY, item_name VARCHAR(100), stock INT, min_stock INT, unit VARCHAR(20), update_time DATETIME );
//库存类 @Data @AllArgsConstructor @NoArgsConstructor public class Inventory { //药品id private Long id; //药品名称 private String itemName; //库存 private Integer stock; //预警库存 private Integer minStock; //单位 private String unit; //修改时间 private LocalDateTime updateTime; }
3.1.7 支付模块
-
功能:
-
订单支付
-
展示订单明细
-
-
核心表:
-- 创建订单表 CREATE TABLE order ( id BIGINT PRIMARY KEY, user_id BIGINT, doctor_id BIGINT, description varchar(200), item_list JSON, sum DECIMAL(10, 2), create_time DATETIME );
//订单表 @Data @AllArgsConstructor @NoArgsConstructor public class Order { //订单id private Long id; //用户id private Long userId; //医生id private Long doctorId; //备注 private String description; //药品明细 private String itemList; //总价 private Decimal sum; //创建时间 private LocalDateTime createTime; }
3.1.8 评论点赞模块
-
功能:
-
对服务评论、点赞
-
-
核心表:
-- 创建评论表 CREATE TABLE comments ( id BIGINT PRIMARY KEY, package_id BIGINT, user_id BIGINT, content varchar(500), like_nums INT UNSIGNED, create_time DATETIME, address varchar(30) )
//评论类 @Data @AllArgsConstructor @NoArgsConstructor public class Comment { //评论id private Long id; //套餐id private Long package_id; //用户id private Long user_id; //评论内容 private String content; //点赞数 private Integer likeNums; //评论时间 private LocalDateTime create_time; //发表地址 private String address; }
服务表
-- 创建服务表 CREATE TABLE package ( id BIGINT PRIMARY KEY, image varchar(50), description varchar(500), status int, create_time DATETIME, update_time DATETIME )
服务类
//服务类 @Data @AllArgsConstructor @NoArgsConstructor public class Package { //服务id private Long id; //封面 private String image; //描述 private String description; //状态 private Integer status; //创建时间 private LocalDateTime createTime; //修改时间 private LocalDateTime updateTime; }
3.2 详细功能设计
3.2.1 项目结构
用户层示例
3.2.2 Common模块
common模块用于存放一些公共资源,比如工具类,全局异常类,Result统一返回格式类,常量字段等信息,以及一些基础公共依赖等信息。
3.2.3 服务模块
服务模块用来实现一些具体的业务功能。我将其按照功能的不同分成了五级。
因为Admin的结构与user相似,按user层来举例。我将具体的业务执行流程按照三层架构分为controller层、Service层、Mapper层(Dao层)。
Controller层用来接收请求以及返回响应结果;
Service层用来执行具体的业务逻辑;
Mapper层使用Mybatis框架进行数据持久化操作以及返回请求的数据。
Model包下用于存放一些实体类和接收类以及返回类
Appointment是User和Admin共用的一些系统功能包类,比如AOP功能的实现、拦截器功能的实现、还有定时任务的实现等等。
具体业务逻辑代码将在后续篇幅整理