基于SpringBoot的社区养老服务管理系统的设计与实现
2026/9/9 11:32:10 网站建设 项目流程

一、 项目背景与意义

随着我国人口老龄化进程的加速,社区养老已成为应对“银发浪潮”的重要模式。传统的养老服务管理多依赖人工记录、电话沟通,存在信息不透明、服务响应慢、资源调配效率低、数据难以统计分析等问题。构建一个信息化、智能化的社区养老服务管理系统,对于提升养老服务质量、优化资源配置、保障老年人安全、减轻管理人员负担具有重要的现实意义。

本系统旨在利用现代Web技术,为社区养老服务中心打造一个集老人信息管理、服务需求对接、服务人员调度、健康数据监测、家属远程查看等功能于一体的综合管理平台,实现养老服务的标准化、流程化和数字化。

二、 技术栈选型

系统采用前后端分离的架构模式,保证系统的可维护性、可扩展性和高性能。

1. 后端技术栈

  • 核心框架: Spring Boot 2.7.x
  • 安全框架: Spring Security + JWT (JSON Web Token)
  • 数据持久层: MyBatis-Plus
  • 数据库: MySQL 8.0
  • API文档: Swagger2 / Knife4j
  • 缓存: Redis (用于会话管理、热点数据缓存)
  • 消息队列: RabbitMQ (用于异步处理服务订单、发送通知)
  • 文件存储: 本地存储或MinIO (对象存储,用于存储老人头像、健康报告等)

2. 前端技术栈

  • 框架: Vue 3 + Element Plus
  • 构建工具: Vite
  • 状态管理: Pinia
  • 路由: Vue Router
  • HTTP客户端: Axios

3. 开发与部署

  • 项目管理: Maven
  • 版本控制: Git
  • 容器化: Docker, Docker Compose
  • 持续集成/部署: Jenkins (可选)

三、 系统核心功能模块设计

系统主要分为后台管理端和家属/老人微信小程序端。

1. 后台管理端核心模块

  • 权限管理模块: 基于RBAC模型,实现用户、角色、菜单的动态配置。
  • 老人信息管理: 对社区内老人的基本信息、健康状况、紧急联系人等进行增删改查。
  • 服务项目管理: 定义各类养老服务(如送餐、保洁、陪同就医、健康监测等)及其标准、价格。
  • 服务订单管理: 处理老人或家属发起的服务预约、派单给服务人员、跟踪服务状态(待接单、进行中、已完成、已评价)。
  • 服务人员管理: 管理护工、医生、志愿者等信息,并关联其技能、排班与绩效。
  • 健康数据管理: 记录并图表化展示老人的血压、血糖、心率等健康指标。
  • 统计分析报表: 生成服务量、满意度、收入等各类统计报表。

2. 小程序端核心功能

  • 服务浏览与预约: 查看服务项目详情并在线预约。
  • 我的订单: 查看历史订单和当前订单状态。
  • 健康数据查看: 查看绑定老人的健康数据趋势图。
  • 消息通知: 接收服务提醒、系统公告等。
  • 紧急呼叫: 一键触发紧急联系人或社区中心。

四、 数据库核心表设计(部分)

-- 老人信息表 CREATE TABLE `elderly_info` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(50) NOT NULL COMMENT '姓名', `gender` tinyint DEFAULT NULL COMMENT '性别 (0:女, 1:男)', `id_card` varchar(20) DEFAULT NULL COMMENT '身份证号', `phone` varchar(20) DEFAULT NULL COMMENT '联系电话', `address` varchar(200) DEFAULT NULL COMMENT '居住地址', `health_status` varchar(500) DEFAULT NULL COMMENT '健康状况描述', `emergency_contact` varchar(50) DEFAULT NULL COMMENT '紧急联系人', `emergency_phone` varchar(20) DEFAULT NULL COMMENT '紧急联系电话', `avatar_url` varchar(500) DEFAULT NULL COMMENT '头像URL', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_id_card` (`id_card`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='老人信息表'; -- 服务项目表 CREATE TABLE `service_item` ( `id` bigint NOT NULL AUTO_INCREMENT, `service_name` varchar(100) NOT NULL COMMENT '服务名称', `description` text COMMENT '服务描述', `price` decimal(10,2) NOT NULL COMMENT '单价', `duration` int DEFAULT NULL COMMENT '预计时长(分钟)', `category_id` bigint DEFAULT NULL COMMENT '分类ID', `status` tinyint DEFAULT '1' COMMENT '状态 (0:下架, 1:上架)', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务项目表'; -- 服务订单表 (核心业务表) CREATE TABLE `service_order` ( `id` varchar(32) NOT NULL COMMENT '订单号', `elderly_id` bigint NOT NULL COMMENT '老人ID', `service_id` bigint NOT NULL COMMENT '服务项目ID', `order_time` datetime NOT NULL COMMENT '预约时间', `address` varchar(200) NOT NULL COMMENT '服务地址', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态 (0:待接单, 1:已派单, 2:服务中, 3:已完成, 4:已取消, 5:已评价)', `worker_id` bigint DEFAULT NULL COMMENT '接单/派单服务人员ID', `actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间', `actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间', `customer_rating` int DEFAULT NULL COMMENT '客户评分(1-5)', `customer_comment` varchar(500) DEFAULT NULL COMMENT '客户评价', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_elderly_id` (`elderly_id`), KEY `idx_worker_id` (`worker_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务订单表';

五、 核心代码示例 (Spring Boot + MyBatis-Plus)

1. 统一响应封装 (Result.java)

import lombok.Data; import java.io.Serializable; @Data public class Result<T> implements Serializable { private Integer code; private String msg; private T data; public static <T> Result<T> success(T data) { Result<T> result = new Result<>(); result.setCode(200); result.setMsg("success"); result.setData(data); return result; } public static <T> Result<T> success(String msg, T data) { Result<T> result = new Result<>(); result.setCode(200); result.setMsg(msg); result.setData(data); return result; } public static <T> Result<T> error(Integer code, String msg) { Result<T> result = new Result<>(); result.setCode(code); result.setMsg(msg); return result; } }

2. 服务订单状态枚举 (OrderStatusEnum.java)

import lombok.Getter; @Getter public enum OrderStatusEnum { PENDING(0, "待接单"), ASSIGNED(1, "已派单"), IN_PROGRESS(2, "服务中"), COMPLETED(3, "已完成"), CANCELLED(4, "已取消"), EVALUATED(5, "已评价"); private final Integer code; private final String desc; OrderStatusEnum(Integer code, String desc) { this.code = code; this.desc = desc; } public static OrderStatusEnum getByCode(Integer code) { for (OrderStatusEnum status : values()) { if (status.getCode().equals(code)) { return status; } } return null; } }

3. 服务订单Controller (ServiceOrderController.java)

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @RestController @RequestMapping("/api/order") @Api(tags = "服务订单管理") @RequiredArgsConstructor public class ServiceOrderController { private final ServiceOrderService orderService; @PostMapping("/create") @ApiOperation("创建服务订单") public Result<String> createOrder(@RequestBody @Valid OrderCreateDTO dto) { String orderId = orderService.createOrder(dto); return Result.success("订单创建成功", orderId); } @PostMapping("/assign/{orderId}") @ApiOperation("派单给服务人员") public Result<Void> assignOrder(@PathVariable String orderId, @RequestParam Long workerId) { orderService.assignOrder(orderId, workerId); return Result.success("派单成功"); } @PostMapping("/start/{orderId}") @ApiOperation("开始服务") public Result<Void> startOrder(@PathVariable String orderId) { orderService.updateOrderStatus(orderId, OrderStatusEnum.IN_PROGRESS); return Result.success("服务已开始"); } @PostMapping("/complete/{orderId}") @ApiOperation("完成服务") public Result<Void> completeOrder(@PathVariable String orderId) { orderService.completeOrder(orderId); return Result.success("服务已完成"); } @GetMapping("/page") @ApiOperation("分页查询订单") public Result<Page<ServiceOrderVO>> pageOrder(OrderQueryDTO queryDTO, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) { Page<ServiceOrderVO> page = orderService.pageOrder(queryDTO, pageNum, pageSize); return Result.success(page); } }

4. 服务订单Service核心逻辑 (ServiceOrderServiceImpl.java 片段)

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @Service @Slf4j @RequiredArgsConstructor public class ServiceOrderServiceImpl extends ServiceImpl<ServiceOrderMapper, ServiceOrder> implements ServiceOrderService { private final RabbitTemplate rabbitTemplate; @Override @Transactional(rollbackFor = Exception.class) public String createOrder(OrderCreateDTO dto) { // 1. 参数校验(如老人是否存在、服务项目是否上架等) // 2. 生成订单号 (例如:SO202508120001) String orderId = "SO" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + String.format("%04d", redisTemplate.opsForValue().increment("order:seq", 1)); // 3. 构建订单实体并保存 ServiceOrder order = new ServiceOrder(); order.setId(orderId); order.setElderlyId(dto.getElderlyId()); order.setServiceId(dto.getServiceId()); order.setOrderTime(dto.getOrderTime()); order.setAddress(dto.getAddress()); order.setRemark(dto.getRemark()); order.setStatus(OrderStatusEnum.PENDING.getCode()); this.save(order); // 4. 发送消息到MQ,通知有新的待接单订单(可用于推送通知给附近服务人员) rabbitTemplate.convertAndSend("order.exchange", "order.new", orderId); log.info("创建订单成功,订单号: {}", orderId); return orderId; } @Override @Transactional(rollbackFor = Exception.class) public void assignOrder(String orderId, Long workerId) { ServiceOrder order = this.getById(orderId); if (order == null) { throw new BusinessException("订单不存在"); } if (!OrderStatusEnum.PENDING.getCode().equals(order.getStatus())) { throw new BusinessException("当前订单状态不允许派单"); } // 更新订单状态和服务人员 order.setStatus(OrderStatusEnum.ASSIGNED.getCode()); order.setWorkerId(workerId); this.updateById(order); // 发送派单成功通知(给服务人员小程序) // ... 通知逻辑 } }

六、 总结与展望

本文介绍了基于SpringBoot的社区养老服务管理系统的技术选型、核心功能设计、数据库表结构以及部分关键代码实现。该系统通过信息化手段,能够有效整合社区养老资源,提升服务效率与管理水平。

未来可考虑引入物联网设备(如智能手环)自动采集健康数据,利用大数据分析进行健康风险预警,并集成AI语音助手方便老人操作,从而构建更加智慧、便捷、安全的社区养老环境。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询