随着人口老龄化趋势加剧,社区养老服务需求快速增长,传统养老机构面临管理效率低下、信息孤岛严重、服务响应滞后等挑战。针对这一现状,基于SSM框架的社区养老院综合管理系统应运而生,通过信息化手段实现养老服务的标准化、精细化和智能化管理。
系统采用经典的三层架构设计,前端使用JSP+Servlet技术结合HTML、CSS和JavaScript构建用户界面,后端基于Spring+SpringMVC+MyBatis框架实现业务逻辑,数据库采用MySQL进行数据存储。Maven作为项目构建工具,确保依赖管理的规范性和可维护性。
数据库架构设计亮点
系统数据库包含16张核心表,设计上充分考虑了养老院业务的实际需求和数据关联性。老人信息表(elderly)作为核心业务表,采用纵向扩展设计模式,将基本信息、健康状况、紧急联系人等字段进行合理划分:
CREATE TABLE elderly (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender ENUM('男','女') NOT NULL,
age INT,
id_card VARCHAR(18) UNIQUE,
health_status TEXT,
bed_id INT,
admission_date DATE,
emergency_contact VARCHAR(20),
contact_phone VARCHAR(11),
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (bed_id) REFERENCES bed(id)
);
护理记录表(nursing_records)的设计体现了业务操作的完整追溯性,通过外键关联老人、护理员和护理项目,确保数据的一致性和可审计性:
CREATE TABLE nursing_records (
id INT PRIMARY KEY AUTO_INCREMENT,
elderly_id INT NOT NULL,
caregiver_id INT NOT NULL,
nursing_item_id INT NOT NULL,
start_time DATETIME,
end_time DATETIME,
details TEXT,
status ENUM('待执行','进行中','已完成','已取消'),
evaluation_score TINYINT,
evaluation_comment TEXT,
created_by INT,
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (elderly_id) REFERENCES elderly(id),
FOREIGN KEY (caregiver_id) REFERENCES caregiver(id),
FOREIGN KEY (nursing_item_id) REFERENCES nursing_items(id)
);
费用管理表(expense_records)采用灵活的配置化设计,支持多种费用类型的动态管理,通过账单周期字段实现月度费用的自动生成:
CREATE TABLE expense_records (
id INT PRIMARY KEY AUTO_INCREMENT,
elderly_id INT NOT NULL,
expense_type ENUM('床位费','护理费','餐饮费','医疗费','其他'),
amount DECIMAL(10,2) NOT NULL,
bill_cycle VARCHAR(7), -- 格式:YYYY-MM
payment_status ENUM('未支付','部分支付','已支付','已退款'),
due_date DATE,
actual_payment_date DATE,
remark TEXT,
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (elderly_id) REFERENCES elderly(id)
);
核心业务功能实现
老人信息全生命周期管理
系统实现了老人从入院登记到日常护理的全流程管理。老人管理模块采用分层架构设计,Entity层定义老人实体模型,包含完整的属性映射:
@Entity
@Table(name = "elderly")
public class Elderly {
private Integer id;
private String name;
private String gender;
private Integer age;
private String idCard;
private String healthStatus;
private Integer bedId;
private Date admissionDate;
private String emergencyContact;
private String contactPhone;
private Date createdTime;
private Date updatedTime;
// Getter和Setter方法
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
@Column(name = "name", nullable = false, length = 50)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// 其他属性的注解配置...
}
Service层封装复杂的业务逻辑,包括老人信息的增删改查、状态变更和关联数据处理:
@Service
@Transactional
public class ElderlyService {
@Autowired
private ElderlyMapper elderlyMapper;
@Autowired
private BedMapper bedMapper;
public void addElderly(Elderly elderly) {
// 验证身份证号唯一性
if (elderlyMapper.countByIdCard(elderly.getIdCard()) > 0) {
throw new BusinessException("身份证号已存在");
}
// 分配床位
Bed availableBed = bedMapper.findAvailableBed();
if (availableBed == null) {
throw new BusinessException("暂无可用床位");
}
elderly.setBedId(availableBed.getId());
elderly.setAdmissionDate(new Date());
elderlyMapper.insert(elderly);
// 更新床位状态
availableBed.setStatus("已占用");
bedMapper.update(availableBed);
}
public PageInfo<Elderly> getElderlyList(ElderlyQuery query, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Elderly> list = elderlyMapper.selectByQuery(query);
return new PageInfo<>(list);
}
}

智能化护理任务调度
护理管理模块采用任务驱动模式,系统根据老人护理等级和个性化需求自动生成护理计划。Controller层通过RESTful接口提供任务分配和状态更新服务:
@RestController
@RequestMapping("/api/nursing")
public class NursingController {
@Autowired
private NursingService nursingService;
@PostMapping("/assign")
public ResponseEntity<Result> assignNursingTask(@RequestBody NursingAssignment assignment) {
try {
nursingService.assignTasks(assignment);
return ResponseEntity.ok(Result.success("任务分配成功"));
} catch (BusinessException e) {
return ResponseEntity.badRequest().body(Result.error(e.getMessage()));
}
}
@GetMapping("/tasks")
public ResponseEntity<Result> getTodayTasks(
@RequestParam Integer caregiverId,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
List<NursingTaskVO> tasks = nursingService.getTasksByCaregiverAndDate(caregiverId, date);
return ResponseEntity.ok(Result.success(tasks));
}
@PutMapping("/tasks/{taskId}/status")
public ResponseEntity<Result> updateTaskStatus(
@PathVariable Integer taskId,
@RequestParam String status) {
nursingService.updateTaskStatus(taskId, status);
return ResponseEntity.ok(Result.success("状态更新成功"));
}
}
护理任务分配算法综合考虑护理员技能等级、工作负荷和老人特殊需求,实现优化调度:
@Component
public class NursingScheduler {
public List<NursingAssignment> generateAssignments(List<Elderly> elderlyList,
List<Caregiver> caregivers) {
List<NursingAssignment> assignments = new ArrayList<>();
// 按护理等级对老人进行分组
Map<String, List<Elderly>> elderlyByLevel = elderlyList.stream()
.collect(Collectors.groupingBy(Elderly::getNursingLevel));
// 按技能等级对护理员进行分组
Map<String, List<Caregiver>> caregiversBySkill = caregivers.stream()
.collect(Collectors.groupingBy(Caregiver::getSkillLevel));
// 分配算法实现
for (Map.Entry<String, List<Elderly>> entry : elderlyByLevel.entrySet()) {
String level = entry.getKey();
List<Caregiver> suitableCaregivers = caregiversBySkill.get(level);
if (suitableCaregivers != null) {
assignments.addAll(assignElderlyToCaregivers(entry.getValue(), suitableCaregivers));
}
}
return assignments;
}
private List<NursingAssignment> assignElderlyToCaregivers(List<Elderly> elderlyList,
List<Caregiver> caregivers) {
// 具体的分配逻辑实现
// 考虑每个护理员的工作负荷均衡
// 考虑老人与护理员的匹配度
// 生成最终的任务分配方案
}
}

精细化费用管理体系
费用管理模块实现自动计费、账单生成和支付跟踪功能。MyBatis的动态SQL功能支持复杂的费用查询和统计:
<!-- 费用查询的动态SQL配置 -->
<select id="selectExpenseByCondition" parameterType="ExpenseQuery" resultType="ExpenseRecord">
SELECT er.*, e.name as elderly_name
FROM expense_records er
LEFT JOIN elderly e ON er.elderly_id = e.id
<where>
<if test="elderlyName != null and elderlyName != ''">
AND e.name LIKE CONCAT('%', #{elderlyName}, '%')
</if>
<if test="expenseType != null">
AND er.expense_type = #{expenseType}
</if>
<if test="paymentStatus != null">
AND er.payment_status = #{paymentStatus}
</if>
<if test="startDate != null">
AND er.created_time >= #{startDate}
</if>
<if test="endDate != null">
AND er.created_time <= #{endDate}
</if>
<if test="billCycle != null">
AND er.bill_cycle = #{billCycle}
</if>
</where>
ORDER BY er.created_time DESC
</select>
费用自动生成服务采用模板方法模式,支持不同费用类型的个性化计算规则:
@Service
public class ExpenseGenerationService {
@Autowired
private ExpenseTemplateService templateService;
@Scheduled(cron = "0 0 1 1 * ?") // 每月1日凌晨1点执行
public void generateMonthlyExpenses() {
List<Elderly> activeElderly = elderlyService.getActiveElderly();
String billCycle = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM"));
for (Elderly elderly : activeElderly) {
generateElderlyExpenses(elderly, billCycle);
}
}
private void generateElderlyExpenses(Elderly elderly, String billCycle) {
// 获取费用模板
List<ExpenseTemplate> templates = templateService.getTemplatesByLevel(elderly.getNursingLevel());
for (ExpenseTemplate template : templates) {
ExpenseRecord record = new ExpenseRecord();
record.setElderlyId(elderly.getId());
record.setExpenseType(template.getExpenseType());
record.setAmount(calculateAmount(template, elderly));
record.setBillCycle(billCycle);
record.setDueDate(calculateDueDate());
record.setPaymentStatus("未支付");
expenseMapper.insert(record);
}
}
private BigDecimal calculateAmount(ExpenseTemplate template, Elderly elderly) {
// 根据模板规则和老人具体情况计算费用
// 支持固定金额、按天计算、分级计价等多种模式
}
}

物资库存智能化管理
仓库管理模块采用实时库存监控和预警机制,通过Spring的声明式事务管理确保库存操作的原子性:
@Service
@Transactional
public class InventoryService {
@Autowired
private InventoryMapper inventoryMapper;
@Autowired
private InventoryHistoryMapper historyMapper;
public void updateInventory(Integer itemId, Integer quantity, String operationType, String remark) {
Inventory inventory = inventoryMapper.selectByItemId(itemId);
if (inventory == null) {
throw new BusinessException("库存记录不存在");
}
// 更新库存数量
int newQuantity;
switch (operationType) {
case "入库":
newQuantity = inventory.getQuantity() + quantity;
break;
case "出库":
if (inventory.getQuantity() < quantity) {
throw new BusinessException("库存不足");
}
newQuantity = inventory.getQuantity() - quantity;
break;
default:
throw new BusinessException("不支持的操作类型");
}
inventory.setQuantity(newQuantity);
inventory.setUpdatedTime(new Date());
inventoryMapper.update(inventory);
// 记录库存变更历史
InventoryHistory history = new InventoryHistory();
history.setItemId(itemId);
history.setQuantityChange(quantity);
history.setOperationType(operationType);
history.setRemark(remark);
history.setCreatedTime(new Date());
historyMapper.insert(history);
// 检查库存预警
checkInventoryAlert(inventory);
}
private void checkInventoryAlert(Inventory inventory) {
if (inventory.getQuantity() <= inventory.getSafetyStock()) {
// 触发库存预警通知
alertService.sendInventoryAlert(inventory);
}
}
}

系统安全与权限控制
系统采用基于角色的访问控制(RBAC)模型,通过Spring拦截器实现细粒度的权限验证:
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// 检查登录状态
HttpSession session = request.getSession();
User user = (User) session.getAttribute("currentUser");
if (user == null) {
response.sendRedirect("/login");
return false;
}
// 检查接口权限
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
RequiredPermission permission = handlerMethod.getMethodAnnotation(RequiredPermission.class);
if (permission != null && !hasPermission(user, permission.value())) {
response.setStatus(HttpStatus.FORBIDDEN.value());
return false;
}
}
return true;
}
private boolean hasPermission(User user, String requiredPermission) {
// 检查用户是否拥有所需权限
return user.getPermissions().contains(requiredPermission);
}
}
技术架构优化与实践
性能优化策略
系统在数据访问层采用多级缓存策略,使用Redis作为分布式缓存,减少数据库访问压力:
@Service
public class ElderlyCacheService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private ElderlyMapper elderlyMapper;
private static final String CACHE_KEY_PREFIX = "elderly:";
private static final long CACHE_EXPIRE_TIME = 3600; // 1小时
@Cacheable(value = "elderly", key = "#id")
public Elderly getElderlyById(Integer id) {
String cacheKey = CACHE_KEY_PREFIX + id;
Elderly elderly = (Elderly) redisTemplate.opsForValue().get(cacheKey);
if (elderly == null) {
elderly = elderlyMapper.selectById(id);
if (elderly != null) {
redisTemplate.opsForValue().set(cacheKey, elderly, CACHE_EXPIRE_TIME, TimeUnit.SECONDS);
}
}
return elderly;
}
@CacheEvict(value = "elderly", key = "#elderly.id")
public void updateElderly(Elderly elderly) {
elderlyMapper.update(elderly);
// 清除相关缓存
String cacheKey = CACHE_KEY_PREFIX + elderly.getId();
redisTemplate.delete(cacheKey);
}
}
异常处理机制
系统实现统一的异常处理机制,通过@ControllerAdvice注解捕获和处理各类异常:
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(BusinessException.class)
@ResponseBody
public ResponseEntity<Result> handleBusinessException(BusinessException e) {
logger.warn("业务异常: {}", e.getMessage());
return ResponseEntity.badRequest().body(Result.error(e.getMessage()));
}
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<Result> handleException(Exception e) {
logger.error("系统异常: ", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(Result.error("系统繁忙,请稍后重试"));
}
@ExceptionHandler(AccessDeniedException.class)
@ResponseBody
public ResponseEntity<Result> handleAccessDeniedException(AccessDeniedException e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN)
.body(Result.error("权限不足"));
}
}
未来优化方向
移动端应用开发:开发配套的移动APP,支持护理人员现场记录护理情况、家属远程查看老人状态等功能。采用React Native或Flutter技术实现跨平台开发,通过RESTful API与现有系统对接。
物联网设备集成:集成智能床垫、手环等物联网设备,实时监测老人生命体征和活动轨迹。建立设备管理平台,通过MQTT协议接收设备数据,设置智能预警规则。
人工智能辅助决策:引入机器学习算法,基于历史护理数据预测老人健康风险,优化护理方案。使用Python开发预测模型,通过gRPC或REST API与Java系统集成。
微服务架构改造:将单体应用拆分为老人管理、护理服务、费用结算等微服务,提升系统可扩展性和维护性。采用Spring Cloud技术栈,实现服务注册发现、配置管理和链路追踪。
大数据分析平台:构建数据仓库,对养老院运营数据进行多维度分析,支持管理决策。使用Apache Spark进行数据处理,通过ECharts实现数据可视化展示。
系统通过完善的技术架构和业务功能设计,为社区养老院提供了全面的信息化解决方案,显著提升了养老服务的管理效率和服务质量。随着技术的不断发展和业务需求的深化,系统将持续优化演进,为养老事业的发展提供更有力的技术支撑。