以下是一个基于SpringBoot框架的Java智慧养老陪护系统的数据库设计与后端接口源码详解,涵盖核心功能模块、数据库表设计、关键后端接口实现及技术选型分析。

一、系统核心功能模块

  1. 用户管理:支持老人、家属、护工、管理员多角色注册与权限控制。
  2. 健康监测:实时采集血压、心率、血糖等数据,异常时触发报警。
  3. 服务调度:根据老人需求与护工技能智能匹配,支持服务预约与状态跟踪。
  4. 紧急救援:老人按下SOS按钮后,系统自动定位并通知家属与护工。
  5. 药品管理:记录用药信息,定时提醒老人服药,并通知家属。

二、数据库设计

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");
    }
}

四、技术选型分析

  1. 后端框架:SpringBoot,提供快速开发、易于部署和扩展的微服务架构。
  2. 数据库:MySQL,支持高并发访问和数据持久化,适合存储结构化数据。
  3. 缓存:Redis,缓存热点数据(如用户登录状态、实时心率),提升系统响应速度。
  4. 消息队列:RocketMQ,异步处理订单状态变更等非实时任务。
  5. 实时通信:Netty + WebSocket,实现护工与用户位置共享和实时通知。
  6. 前端框架:Vue.js,结合Vue语法,提升前端开发效率,实现动态数据绑定和组件化开发。
  7. 跨平台开发:Uniapp,支持微信小程序、H5网页端、原生APP等多端发布,降低开发成本。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐