Java 智慧养老陪护系统:数据库设计与后端接口源码详解
·
以下是一个基于SpringBoot框架的Java智慧养老陪护系统的数据库设计与后端接口源码详解,涵盖核心功能模块、数据库表设计、关键后端接口实现及技术选型分析。
一、系统核心功能模块
- 用户管理:支持老人、家属、护工、管理员多角色注册与权限控制。
- 健康监测:实时采集血压、心率、血糖等数据,异常时触发报警。
- 服务调度:根据老人需求与护工技能智能匹配,支持服务预约与状态跟踪。
- 紧急救援:老人按下SOS按钮后,系统自动定位并通知家属与护工。
- 药品管理:记录用药信息,定时提醒老人服药,并通知家属。
二、数据库设计
1. 用户信息表(user)
sql
CREATE TABLE user (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
role ENUM('elderly', 'family', 'nurse', 'admin') NOT NULL,
real_name VARCHAR(50),
phone VARCHAR(20),
id_card VARCHAR(18) UNIQUE,
address VARCHAR(255),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2. 健康数据表(health_data)
sql
CREATE TABLE health_data (
health_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
heart_rate INT,
blood_pressure VARCHAR(20),
blood_sugar FLOAT,
record_time DATETIME DEFAULT CURRENT_TIMESTAMP,
device_source VARCHAR(50),
FOREIGN KEY (user_id) REFERENCES user(user_id)
);
3. 服务订单表(service_order)
sql
CREATE TABLE service_order (
order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
elderly_id BIGINT NOT NULL,
nurse_id BIGINT,
service_type ENUM('cleaning', 'feeding', 'medical_care', 'other') NOT NULL,
start_time DATETIME,
end_time DATETIME,
status ENUM('pending', 'accepted', 'in_progress', 'completed', 'cancelled') DEFAULT 'pending',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (elderly_id) REFERENCES user(user_id),
FOREIGN KEY (nurse_id) REFERENCES user(user_id)
);
4. 紧急求助表(emergency_alert)
sql
CREATE TABLE emergency_alert (
alert_id BIGINT PRIMARY KEY AUTO_INCREMENT,
elderly_id BIGINT NOT NULL,
alert_time DATETIME DEFAULT CURRENT_TIMESTAMP,
location VARCHAR(255),
status ENUM('pending', 'processing', 'resolved') DEFAULT 'pending',
handle_by BIGINT,
FOREIGN KEY (elderly_id) REFERENCES user(user_id),
FOREIGN KEY (handle_by) REFERENCES user(user_id)
);
5. 药品记录表(medication_record)
sql
CREATE TABLE medication_record (
record_id BIGINT PRIMARY KEY AUTO_INCREMENT,
elderly_id BIGINT NOT NULL,
medicine_name VARCHAR(100) NOT NULL,
dosage VARCHAR(50),
frequency VARCHAR(50),
start_time DATETIME,
end_time DATETIME,
next_dose_time DATETIME,
status ENUM('active', 'completed', 'cancelled') DEFAULT 'active',
FOREIGN KEY (elderly_id) REFERENCES user(user_id)
);
三、后端接口源码详解
1. 用户注册接口
java
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public Result register(@RequestBody UserRegisterDTO registerDTO) {
// 校验参数
if (registerDTO.getUsername() == null || registerDTO.getPassword() == null) {
return Result.fail("用户名和密码不能为空");
}
// 调用服务层注册
boolean success = userService.register(registerDTO);
if (success) {
return Result.success("注册成功");
} else {
return Result.fail("注册失败,用户名已存在");
}
}
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public boolean register(UserRegisterDTO registerDTO) {
// 检查用户名是否已存在
User existingUser = userMapper.findByUsername(registerDTO.getUsername());
if (existingUser != null) {
return false;
}
// 创建新用户
User user = new User();
user.setUsername(registerDTO.getUsername());
user.setPassword(BCrypt.hashpw(registerDTO.getPassword(), BCrypt.gensalt()));
user.setRole(registerDTO.getRole());
userMapper.insert(user);
return true;
}
}
2. 健康数据上传接口
java
@RestController
@RequestMapping("/api/health")
public class HealthDataController {
@Autowired
private HealthDataService healthDataService;
@PostMapping("/upload")
public Result uploadHealthData(@RequestBody HealthDataDTO healthDataDTO) {
// 校验参数
if (healthDataDTO.getUserId() == null) {
return Result.fail("用户ID不能为空");
}
// 保存健康数据
healthDataService.saveHealthData(healthDataDTO);
return Result.success("数据上传成功");
}
}
@Service
public class HealthDataServiceImpl implements HealthDataService {
@Autowired
private HealthDataMapper healthDataMapper;
@Override
public void saveHealthData(HealthDataDTO healthDataDTO) {
HealthData healthData = new HealthData();
healthData.setUserId(healthDataDTO.getUserId());
healthData.setHeartRate(healthDataDTO.getHeartRate());
healthData.setBloodPressure(healthDataDTO.getBloodPressure());
healthData.setBloodSugar(healthDataDTO.getBloodSugar());
healthDataMapper.insert(healthData);
}
}
3. 服务订单创建接口
java
@RestController
@RequestMapping("/api/order")
public class ServiceOrderController {
@Autowired
private ServiceOrderService serviceOrderService;
@PostMapping("/create")
public Result createOrder(@RequestBody ServiceOrderDTO orderDTO) {
// 校验参数
if (orderDTO.getElderlyId() == null || orderDTO.getNurseId() == null) {
return Result.fail("老人ID和护工ID不能为空");
}
// 创建服务订单
boolean success = serviceOrderService.createOrder(orderDTO);
if (success) {
return Result.success("订单创建成功");
} else {
return Result.fail("订单创建失败");
}
}
}
@Service
public class ServiceOrderServiceImpl implements ServiceOrderService {
@Autowired
private ServiceOrderMapper serviceOrderMapper;
@Override
public boolean createOrder(ServiceOrderDTO orderDTO) {
ServiceOrder order = new ServiceOrder();
order.setElderlyId(orderDTO.getElderlyId());
order.setNurseId(orderDTO.getNurseId());
order.setServiceType(orderDTO.getServiceType());
order.setStartTime(orderDTO.getStartTime());
order.setEndTime(orderDTO.getEndTime());
order.setStatus("pending");
int rows = serviceOrderMapper.insert(order);
return rows > 0;
}
}
4. 紧急求助处理接口
java
@RestController
@RequestMapping("/api/emergency")
public class EmergencyAlertController {
@Autowired
private EmergencyAlertService emergencyAlertService;
@PostMapping("/trigger")
public Result triggerEmergency(@RequestBody EmergencyAlertDTO alertDTO) {
// 校验参数
if (alertDTO.getElderlyId() == null) {
return Result.fail("老人ID不能为空");
}
// 触发紧急求助
boolean success = emergencyAlertService.triggerAlert(alertDTO);
if (success) {
return Result.success("求助已触发");
} else {
return Result.fail("求助触发失败");
}
}
}
@Service
public class EmergencyAlertServiceImpl implements EmergencyAlertService {
@Autowired
private EmergencyAlertMapper emergencyAlertMapper;
@Override
public boolean triggerAlert(EmergencyAlertDTO alertDTO) {
EmergencyAlert alert = new EmergencyAlert();
alert.setElderlyId(alertDTO.getElderlyId());
alert.setLocation(alertDTO.getLocation());
alert.setStatus("pending");
int rows = emergencyAlertMapper.insert(alert);
return rows > 0;
}
}
5. 药品提醒接口
java
@RestController
@RequestMapping("/api/medication")
public class MedicationRecordController {
@Autowired
private MedicationRecordService medicationRecordService;
@GetMapping("/remind/{elderlyId}")
public Result remindMedication(@PathVariable Long elderlyId) {
// 获取老人未完成的药品记录
List<MedicationRecord> records = medicationRecordService.getPendingRecords(elderlyId);
if (records.isEmpty()) {
return Result.success("没有需要提醒的药品");
}
// 返回需要提醒的药品列表
return Result.success(records);
}
}
@Service
public class MedicationRecordServiceImpl implements MedicationRecordService {
@Autowired
private MedicationRecordMapper medicationRecordMapper;
@Override
public List<MedicationRecord> getPendingRecords(Long elderlyId) {
return medicationRecordMapper.selectByElderlyIdAndStatus(elderlyId, "active");
}
}
四、技术选型分析
- 后端框架:SpringBoot,提供快速开发、易于部署和扩展的微服务架构。
- 数据库:MySQL,支持高并发访问和数据持久化,适合存储结构化数据。
- 缓存:Redis,缓存热点数据(如用户登录状态、实时心率),提升系统响应速度。
- 消息队列:RocketMQ,异步处理订单状态变更等非实时任务。
- 实时通信:Netty + WebSocket,实现护工与用户位置共享和实时通知。
- 前端框架:Vue.js,结合Vue语法,提升前端开发效率,实现动态数据绑定和组件化开发。
- 跨平台开发:Uniapp,支持微信小程序、H5网页端、原生APP等多端发布,降低开发成本。
更多推荐



所有评论(0)