# 基于若依的养老院简易管理系统 **Repository Path**: a2131467/ceshi ## Basic Information - **Project Name**: 基于若依的养老院简易管理系统 - **Description**: 课程设计-基于若依实现ai接入与自动化测试 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-16 - **Last Updated**: 2026-05-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 养老院管理系统 基于若依(RuoYi v3.8.9)框架开发的养老院信息管理系统DEMO(就是个demo),提供老人管理、员工管理、房间管理、服务记录管理及AI智能助手等功能。 ## 技术栈 ### 后端 - Java 1.8 - Spring Boot 2.5.15 - Spring Security 5.7.12 - MyBatis + MyBatis-Plus - MySQL + Druid 连接池 - Redis 缓存 - JWT 令牌认证 - Swagger API 文档 ### 前端 - Vue 2.x - Element UI - Axios - Vue Router - Vuex ## 项目结构 ``` ├── ruoyi-admin # 启动模块(入口、配置、全局控制) ├── ruoyi-common # 公共模块(工具类、注解、常量、异常) ├── ruoyi-framework # 框架模块(安全配置、拦截器、AOP) ├── ruoyi-system # 业务模块(核心业务逻辑) │ └── com.ruoyi.ai # AI智能助手模块(Function Calling) │ ├── chat/ # AI对话控制器 │ └── tool/ # AI工具定义(老人/员工/房间/服务记录CRUD) ├── ruoyi-generator # 代码生成模块 ├── ruoyi-quartz # 定时任务模块 ├── ruoyi-ui # 前端 Vue 项目 ``` ## 核心业务模块 ### 老人管理(Elder) - 老人信息CRUD(姓名、年龄、性别、健康状况) - 老人与房间的关联(多对一) - 按房间查询老人列表 ### 员工管理(Employee) - 员工信息CRUD(姓名、职位、部门) - 员工与服务记录的多对多关联 - 员工详情查看(含关联服务记录) ### 房间管理(Room) - 房间信息CRUD(房间号、类型、容量) - 房间与老人的一对多关联 - 房间详情查看(含入住老人列表) - 添加老人到房间(含容量校验) ### 服务记录(ServiceRecord) - 服务记录CRUD(服务类型、时间、描述) - 服务记录与员工的多对多关联 - 创建服务记录时关联员工 ### AI智能助手 - 集成百度千帆大模型(ERNIE-3.5-8K) - **Function Calling(函数调用)**:支持通过自然语言自主执行系统操作 - 支持14种业务操作:老人/员工/房间/服务记录的增删改查 - 多轮对话式交互,AI自动识别用户意图并调用对应工具 #### 支持的AI工具列表 | 类别 | 工具名称 | 功能说明 | |------|---------|---------| | 老人管理 | `getElders` | 查询所有老人信息 | | 老人管理 | `addElder` | 添加新老人(姓名、年龄、性别、健康状况) | | 老人管理 | `updateElder` | 更新老人信息 | | 老人管理 | `deleteElder` | 删除老人 | | 员工管理 | `getEmployees` | 查询所有员工信息 | | 员工管理 | `addEmployee` | 添加新员工(姓名、职位、部门) | | 员工管理 | `updateEmployee` | 更新员工信息 | | 员工管理 | `deleteEmployee` | 删除员工 | | 房间管理 | `getRooms` | 查询所有房间信息 | | 房间管理 | `addRoom` | 添加新房间(房间号、类型、容量) | | 房间管理 | `updateRoom` | 更新房间信息 | | 房间管理 | `deleteRoom` | 删除房间 | | 服务记录 | `getServiceRecords` | 查询所有服务记录 | | 服务记录 | `addServiceRecord` | 创建服务记录(类型、时间、描述、参与员工) | #### 使用示例 用户输入:"添加一个叫张三的老人,75岁,男,健康状况良好" → AI自动调用 `addElder` 工具 → 数据库写入 → AI回复:"已成功添加老人张三!" 用户输入:"查询所有房间信息" → AI自动调用 `getRooms` 工具 → 查询数据库 → AI回复房间列表 #### 工作流程 ``` 用户输入自然语言 → AI模型(ERNIE-3.5) → 识别意图 → 调用工具(CRUD) → 执行操作 → 返回结果 → AI生成回复 ``` ### 操作审计 - 基于AOP的操作日志记录 - 审计日志查询 ## 数据库设计 | 表名 | 说明 | |------|------| | elder | 老人信息表 | | employee | 员工信息表 | | room | 房间信息表 | | service_record | 服务记录表 | | employee_service_record | 员工-服务记录关联表 | 所有业务表均支持逻辑删除(deleted字段)。 ## 快速开始 ### 环境要求 - JDK 1.8+ - MySQL 5.7+/8.0+ - Redis 3.0+ - Node.js 12+ - Maven 3.6+ ### 后端启动 1. 创建数据库并导入SQL脚本 2. 修改 `ruoyi-admin/src/main/resources/application-druid.yml` 中的数据库连接信息 3. 修改 `application.yml` 中的 Redis 连接信息 4. 如需使用AI助手,配置 `baidu.qianfan.apikey` 5. 运行 `RuoYiApplication.java` ### 前端启动 ```bash cd ruoyi-ui npm install npm run dev ``` 访问 http://localhost:80 ### 打包部署 后端: ```bash mvn clean package java -jar ruoyi-admin/target/ruoyi-admin.jar ``` 前端: ```bash cd ruoyi-ui npm run build:prod ``` ## Bug修复记录 本次代码审查共发现并修复12个Bug: | # | 严重程度 | 问题描述 | 修复方案 | |---|---------|---------|---------| | 1 | 高 | `RoomServiceImpl.addToRoom()` 未持久化老人数据 | 添加 `elder.setRoomId(id)` 和 `elderMapper.insert(elder)` | | 2 | 高 | `RoomMapper.xml` updateById列名错误 | `roomNumber` → `room_number`,`roomType` → `room_type` | | 3 | 高 | `ElderMapper.xml` deleteById方法名不匹配 | XML id `deleteByElderId` → `deleteById` | | 4 | 高 | `EmployeeServiceRecordMapper` 缺少deleteById映射 | 新增 `deleteById` SQL映射 | | 5 | 高 | `OperAuditAspect` Date强转ClassCastException | `(java.sql.Date) new Date()` → `new java.sql.Date(System.currentTimeMillis())` | | 6 | 高 | 缺少审计Controller | 新增 `SysOperAuditController` 及相关Service/Mapper方法 | | 7 | 中 | `RoomController` @Log注解标题和类型错误 | "用户管理" → "房间管理",INSERT → EXPORT/OTHER | | 8 | 中 | `BaiduQianfanController` 使用System.out | 替换为 `logger.info/debug/error` | | 9 | 高 | 所有Mapper XML的updateById使用et.前缀 | 移除 `et.` 前缀,直接使用属性名 | | 10 | 中 | 前端AI对话路由未包裹Layout | 改为Layout嵌套路由 | | 11 | 高 | 服务记录列表未加载employees数据 | 新增 `listWithEmployees()` 方法 | | 12 | 中 | 前端老人列表显示roomId而非房间号 | 改为显示 `room.roomNumber`,后端新增 `listWithRoom()` |