基于Java的养老服务平台代码讲解文档
·
基于Java的养老服务平台的设计与实现 - 代码讲解文档

一、项目概述
本项目是一个基于Java SpringBoot框架开发的养老服务平台系统,旨在为老年人及其家属提供便捷的服务管理和信息交流平台。系统采用前后端分离架构,后端基于SpringBoot框架,前端采用Vue技术栈,数据库使用MySQL。
项目定位
- 为老年人提供健康管理、服务预约、活动参与等功能
- 为家属提供老人信息查看、服务监督等功能
- 为服务人员提供日程管理、服务反馈等功能
- 为管理员提供系统管理、数据分析等功能
技术选型
| 技术层 | 技术选型 |
|---|---|
| 后端框架 | SpringBoot 2.x |
| ORM框架 | MyBatis-Plus |
| 数据库 | MySQL 5.7 |
| 前端框架 | Vue.js |
| 认证 | Token机制 |
二、技术架构
2.1 系统架构图
┌─────────────────────────────────────────────────────────────┐
│ 前端展示层 (Vue.js) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 老人端 │ │ 家属端 │ │ 服务端 │ │ 管理端 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 后端业务层 (SpringBoot) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Controller层 │ │
│ │ LaorenController / JiashuController / Fuwuxinxi... │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Service层 │ │
│ │ LaorenService / JiashuService / FuwuxinxiService... │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Dao/Mapper层 │ │
│ │ LaorenDao / JiashuDao / FuwuxinxiDao... │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 数据持久层 (MySQL) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ laoren │ │ jiashu │ │ fuwuxinxi│ │ yuyue... │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
2.2 项目目录结构
springboot1n920l5i/
├── src/main/java/com/
│ ├── controller/ # 控制器层
│ │ ├── LaorenController.java # 老人管理
│ │ ├── JiashuController.java # 家属管理
│ │ ├── FuwuxinxiController.java # 服务信息管理
│ │ ├── FuwurenyuanController.java # 服务人员管理
│ │ ├── HuodongxinxiController.java# 活动信息管理
│ │ ├── YuyuexinxiController.java # 预约信息管理
│ │ ├── JiankangjiluController.java# 健康记录管理
│ │ └── ...
│ ├── service/ # 服务层
│ │ ├── impl/ # 服务实现
│ │ ├── LaorenService.java
│ │ └── ...
│ ├── dao/ # 数据访问层
│ │ ├── LaorenDao.java
│ │ └── ...
│ ├── entity/ # 实体类
│ │ ├── LaorenEntity.java
│ │ ├── model/ # Model类
│ │ ├── vo/ # VO类
│ │ └── view/ # View类
│ ├── config/ # 配置类
│ ├── interceptor/ # 拦截器
│ ├── annotation/ # 自定义注解
│ └── utils/ # 工具类
├── db/
│ └── springboot1n920l5i.sql # 数据库脚本
三、核心功能模块讲解
3.1 老人管理模块
功能说明
老人管理模块是系统的核心模块,负责老人用户的注册、登录、信息管理等功能。
核心代码分析 - LaorenController.java
@RestController
@RequestMapping("/laoren")
public class LaorenController {
@Autowired
private LaorenService laorenService;
@Autowired
private TokenService tokenService;
/**
* 登录功能
* 使用账号密码验证,成功后生成Token返回
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
// 根据登录查询用户信息
LaorenEntity u = laorenService.selectOne(
new EntityWrapper<LaorenEntity>().eq("laorenzhanghao", username));
// 当用户不存在或验证密码不通过时
if(u==null || !u.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
// 获取登录token
String token = tokenService.generateToken(u.getId(), username,"laoren", "老人");
return R.ok().put("token", token);
}
/**
* 注册功能
* 验证账号唯一性后插入用户数据
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody LaorenEntity laoren){
// 检查账号是否已存在
LaorenEntity u = laorenService.selectOne(
new EntityWrapper<LaorenEntity>().eq("laorenzhanghao", laoren.getLaorenzhanghao()));
if(u!=null) {
return R.error("注册用户已存在");
}
laoren.setId(new Date().getTime());
laorenService.insert(laoren);
return R.ok();
}
}
设计要点
- 使用
@IgnoreAuth注解标记无需认证的接口(登录、注册) - 采用Token机制进行用户认证
- 使用MyBatis-Plus的EntityWrapper进行条件查询
3.2 服务信息管理模块
功能说明
服务信息模块管理养老院提供的各类服务,包括服务类型、服务价格、服务内容等信息。
核心代码分析 - FuwuxinxiController.java
@RestController
@RequestMapping("/fuwuxinxi")
public class FuwuxinxiController {
@Autowired
private FuwuxinxiService fuwuxinxiService;
/**
* 分页查询服务信息列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, FuwuxinxiEntity fuwuxinxi,
HttpServletRequest request){
EntityWrapper<FuwuxinxiEntity> ew = new EntityWrapper<FuwuxinxiEntity>();
// 分页查询结果
PageUtils page = fuwuxinxiService.queryPage(params,
MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwuxinxi), params), params));
// 数据脱敏处理
Map<String, String> deSens = new HashMap<>();
DeSensUtil.desensitize(page, deSens);
return R.ok().put("data", page);
}
/**
* 保存服务信息
*/
@RequestMapping("/save")
public R save(@RequestBody FuwuxinxiEntity fuwuxinxi, HttpServletRequest request){
fuwuxinxiService.insert(fuwuxinxi);
return R.ok().put("data", fuwuxinxi.getId());
}
}
3.3 预约信息管理模块
功能说明
预约信息模块处理老人对服务的预约请求,记录预约时间、预约备注等信息。
核心流程
- 用户选择服务 -> 2. 提交预约信息 -> 3. 系统记录预约 -> 4. 分配服务人员 -> 5. 服务完成反馈
3.4 健康记录管理模块
功能说明
健康记录模块记录老人的健康数据,包括体温、心率、血压、血糖、血脂等指标。
数据字段设计
- 体温(tiwen)
- 心率(xinlv)
- 血压(xueya)
- 体重(tizhong)
- 血糖(xuetang)
- 血脂(xuezhi)
- 视力(shili)
- 听力(tingli)
- 登记日期(dengjiriqi)
3.5 活动信息管理模块
功能说明
活动信息模块管理养老院组织的各类活动,老人可以报名参与活动。
关联实体
- HuodongxinxiEntity: 活动信息(活动名称、类型、时间、地点、内容)
- BaomingxinxiEntity: 报名信息(老人报名活动的记录)
- HuodongleixingEntity: 活动类型分类
3.6 社交互动模块
功能说明
社交互动模块提供论坛功能,老人和家属可以发布帖子、评论互动。
核心实体
- ForumEntity: 帖子信息
- ForumtypeEntity: 帖子分类
- ForumreportEntity: 帖子举报
- FriendEntity: 好友关系
- ChatmessageEntity: 聊天消息
四、数据库设计分析
4.1 数据库表概览
| 表名 | 说明 | 主要字段 |
|---|---|---|
| laoren | 老人信息表 | laorenzhanghao, mima, laorenxingming, jiashuzhanghao |
| jiashu | 家属信息表 | jiashuzhanghao, mima, jiashuxingming |
| fuwurenyuan | 服务人员表 | yuangonggonghao, mima, yuangongxingming |
| fuwuxinxi | 服务信息表 | fuwumingcheng, fuwuleixing, fuwujiage |
| fuwuleixing | 服务类型表 | fuwuleixing |
| yuyuexinxi | 预约信息表 | fuwumingcheng, yuyueshijian, laorenzhanghao |
| jiankangjilu | 健康记录表 | tiwen, xinlv, xueya, xuetang |
| huodongxinxi | 活动信息表 | huodongmingcheng, kaishishijian, huodongdidian |
| baomingxinxi | 报名信息表 | huodongmingcheng, laorenzhanghao |
| forum | 社交互动表 | title, content, userid |
| news | 公告信息表 | title, content, typename |
| users | 管理员表 | username, password |
4.2 核心表结构详解
laoren(老人信息表)
CREATE TABLE `laoren` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`laorenzhanghao` varchar(200) NOT NULL COMMENT '老人账号',
`mima` varchar(200) NOT NULL COMMENT '密码',
`laorenxingming` varchar(200) NOT NULL COMMENT '老人姓名',
`xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
`nianling` varchar(200) DEFAULT NULL COMMENT '年龄',
`jiashuzhanghao` varchar(200) DEFAULT NULL COMMENT '家属账号',
`jiashuxingming` varchar(200) DEFAULT NULL COMMENT '家属姓名',
`shoujihao` varchar(200) DEFAULT NULL COMMENT '手机号',
`shenfenzheng` varchar(200) DEFAULT NULL COMMENT '身份证',
`jiatingzhuzhi` varchar(200) DEFAULT NULL COMMENT '家庭住址',
`touxiang` longtext COMMENT '头像',
PRIMARY KEY (`id`),
UNIQUE KEY `laorenzhanghao` (`laorenzhanghao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='老人';
fuwuxinxi(服务信息表)
CREATE TABLE `fuwuxinxi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`fuwumingcheng` varchar(200) NOT NULL COMMENT '服务名称',
`fuwuleixing` varchar(200) NOT NULL COMMENT '服务类型',
`fuwutupian` longtext COMMENT '服务图片',
`fuwujiage` double NOT NULL COMMENT '服务价格',
`fuwuneirong` longtext COMMENT '服务内容',
`fuwujieshao` longtext COMMENT '服务介绍',
`discussnum` int(11) DEFAULT '0' COMMENT '评论数',
`storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
PRIMARY KEY (`id`),
KEY `fuwuleixing` (`fuwuleixing`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务信息';
4.3 数据库关系设计
┌─────────────┐ ┌─────────────┐
│ jiashu │────▶│ laoren │
│(家属账号) │ │(家属账号关联)│
└─────────────┘ └─────────────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ fuwuleixing │────▶│ fuwuxinxi │
│ (服务类型) │ │ (服务类型关联)│
└─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ yuyuexinxi │
│ (预约信息) │
└─────────────┘
五、关键代码解析
5.1 实体类设计 - LaorenEntity.java
@TableName("laoren")
public class LaorenEntity<T> implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
private Long id; // 主键id
private String laorenzhanghao; // 老人账号
private String mima; // 密码
private String laorenxingming; // 老人姓名
private String xingbie; // 性别
private String nianling; // 年龄
private String jiashuzhanghao; // 家属账号
private String jiashuxingming; // 家属姓名
private String shoujihao; // 手机号
private String shenfenzheng; // 身份证
private String jiatingzhuzhi; // 家庭住址
private String touxiang; // 头像
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date addtime; // 创建时间
// getter/setter方法...
}
设计要点:
- 使用
@TableName注解指定数据库表名 - 使用
@TableId注解标记主键字段 - 使用
@JsonFormat注解处理日期格式化
5.2 工具类设计 - R.java(响应封装)
public class R extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public R() {
put("code", 0);
put("msg", "success");
}
public static R error() {
return error(500, "未知异常,请联系管理员");
}
public static R error(String msg) {
return error(500, msg);
}
public static R error(int code, String msg) {
R r = new R();
r.put("code", code);
r.put("msg", msg);
return r;
}
public static R ok(String msg) {
R r = new R();
r.put("msg", msg);
return r;
}
public static R ok(Map<String, Object> map) {
R r = new R();
r.putAll(map);
return r;
}
public static R ok() {
return new R();
}
public R put(String key, Object value) {
super.put(key, value);
return this;
}
}
5.3 认证拦截器 - AuthorizationInterceptor.java
public class AuthorizationInterceptor implements HandlerInterceptor {
@Autowired
private TokenService tokenService;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// 支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
// 检查是否有IgnoreAuth注解
IgnoreAuth annotation = method.getAnnotation(IgnoreAuth.class);
if (annotation != null) {
return true;
}
// 从header中获取token
String token = request.getHeader("token");
if (token == null) {
token = request.getParameter("token");
}
// 验证token
TokenEntity tokenEntity = tokenService.selectOne(
new EntityWrapper<TokenEntity>().eq("token", token));
if (tokenEntity == null) {
response.getWriter().print("{\"code\":401,\"msg\":\"请先登录\"}");
return false;
}
// 设置用户信息到session
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
return true;
}
}
5.4 分页工具 - PageUtils.java
public class PageUtils implements Serializable {
private static final long serialVersionUID = 1L;
private int currPage; // 当前页码
private int totalPage; // 总页数
private int total; // 总记录数
private int pageSize; // 每页记录数
private List<?> list; // 数据列表
public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
this.list = list;
this.total = totalCount;
this.pageSize = pageSize;
this.currPage = currPage;
this.totalPage = (int) Math.ceil((double) totalCount / pageSize);
}
}
六、系统特色功能
6.1 数据脱敏
系统对敏感数据(如身份证、手机号)进行脱敏处理,保护用户隐私:
Map<String, String> deSens = new HashMap<>();
DeSensUtil.desensitize(page, deSens);
6.2 评论收藏功能
系统支持对服务信息、活动信息进行评论和收藏:
- discussnum: 评论数统计
- storeupnum: 收藏数统计
- thumbsupnum/crazilynum: 点赞/踩数统计
6.3 社交互动
提供论坛功能,支持:
- 帖子发布与回复
- 帖子举报管理
- 好友添加与聊天
- 消息已读/未读状态
6.4 健康档案
完整的老人健康数据管理,包含:
- 体温、心率、血压等基础数据
- 血糖、血脂等生化指标
- 视力、听力等感官指标
七、运行与部署
7.1 数据库配置
在application.yml中配置数据库连接:
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot1n920l5i
username: root
password: root
7.2 项目启动
- 导入数据库脚本
springboot1n920l5i.sql - 配置数据库连接信息
- 运行SpringBootApplication主类
- 访问
http://localhost:8080/
7.3 默认账号
- 管理员:admin / admin
- 老人账号:老人账号1 / 123456
- 家属账号:家属账号1 / 123456
- 服务人员:员工工号1 / 123456
八、总结
本项目是一个功能完善的养老服务平台,采用主流的SpringBoot+MyBatis-Plus+Vue技术栈开发。系统实现了老人管理、服务预约、健康管理、活动管理、社交互动等核心功能,具有良好的扩展性和维护性。代码结构清晰,采用分层架构设计,便于后期功能扩展和优化。
更多推荐

所有评论(0)