基于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();
    }
}
设计要点
  1. 使用@IgnoreAuth注解标记无需认证的接口(登录、注册)
  2. 采用Token机制进行用户认证
  3. 使用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 预约信息管理模块

功能说明

预约信息模块处理老人对服务的预约请求,记录预约时间、预约备注等信息。

核心流程
  1. 用户选择服务 -> 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方法...
}

设计要点:

  1. 使用@TableName注解指定数据库表名
  2. 使用@TableId注解标记主键字段
  3. 使用@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 项目启动

  1. 导入数据库脚本springboot1n920l5i.sql
  2. 配置数据库连接信息
  3. 运行SpringBootApplication主类
  4. 访问http://localhost:8080/

7.3 默认账号

  • 管理员:admin / admin
  • 老人账号:老人账号1 / 123456
  • 家属账号:家属账号1 / 123456
  • 服务人员:员工工号1 / 123456

八、总结

本项目是一个功能完善的养老服务平台,采用主流的SpringBoot+MyBatis-Plus+Vue技术栈开发。系统实现了老人管理、服务预约、健康管理、活动管理、社交互动等核心功能,具有良好的扩展性和维护性。代码结构清晰,采用分层架构设计,便于后期功能扩展和优化。

更多推荐