From 49899ca53787cfb6104c1cc0539c04297c681fee Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sun, 20 Jul 2025 13:21:33 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=AE=BF=E7=AE=A1?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E7=9A=84sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../数据库设计/宿舍管理数据库设计.md | 540 +++++++----------- docs/设计文档/database/SQL文件说明.md | 229 ++++---- .../宿舍管理数据库建表脚本.sql | 260 +++++++++ 3 files changed, 548 insertions(+), 481 deletions(-) create mode 100644 docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql diff --git a/docs/业务模块/学工管理-宿舍管理/数据库设计/宿舍管理数据库设计.md b/docs/业务模块/学工管理-宿舍管理/数据库设计/宿舍管理数据库设计.md index 0b51e1cd..fae3231f 100644 --- a/docs/业务模块/学工管理-宿舍管理/数据库设计/宿舍管理数据库设计.md +++ b/docs/业务模块/学工管理-宿舍管理/数据库设计/宿舍管理数据库设计.md @@ -35,53 +35,29 @@ **表说明**:定义宿舍管理的各个维度,支持维度的灵活扩展 ```sql -CREATE TABLE `dorm_management_dimension` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `dimension_code` varchar(50) NOT NULL COMMENT '维度编码', - `dimension_name` varchar(100) NOT NULL COMMENT '维度名称', - `dimension_level` int(11) NOT NULL COMMENT '维度层级(1-5)', - `parent_dimension_id` bigint(20) DEFAULT NULL COMMENT '父维度ID', - `description` varchar(500) DEFAULT NULL COMMENT '维度描述', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', - `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', - `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_dimension_code` (`dimension_code`), - KEY `idx_parent_dimension` (`parent_dimension_id`), - KEY `idx_dimension_level` (`dimension_level`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍管理维度定义表'; + ``` #### 1.2 校区信息表 (dorm_campus) **表说明**:存储校区基本信息 ```sql -CREATE TABLE `dorm_campus` ( +DROP TABLE IF EXISTS `xg_dorm_campus`; +CREATE TABLE `xg_dorm_campus` ( `id` bigint(20) NOT NULL COMMENT '主键ID', `campus_code` varchar(50) NOT NULL COMMENT '校区编码', `campus_name` varchar(100) NOT NULL COMMENT '校区名称', - `campus_address` varchar(200) DEFAULT NULL COMMENT '校区地址', - `campus_phone` varchar(20) DEFAULT NULL COMMENT '校区联系电话', - `campus_manager` varchar(50) DEFAULT NULL COMMENT '校区负责人', `campus_description` varchar(500) DEFAULT NULL COMMENT '校区描述', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `sort_order` int(11) DEFAULT '0' COMMENT '排序号', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), - UNIQUE KEY `uk_campus_code` (`campus_code`), - KEY `idx_campus_status` (`status`) + UNIQUE KEY `uk_campus_code` (`campus_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='校区信息表'; ``` @@ -89,56 +65,18 @@ CREATE TABLE `dorm_campus` ( **表说明**:存储宿舍区基本信息,关联校区 ```sql -CREATE TABLE `dorm_area` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `area_code` varchar(50) NOT NULL COMMENT '宿舍区编码', - `area_name` varchar(100) NOT NULL COMMENT '宿舍区名称', - `campus_id` bigint(20) NOT NULL COMMENT '所属校区ID', - `area_address` varchar(200) DEFAULT NULL COMMENT '宿舍区地址', - `area_phone` varchar(20) DEFAULT NULL COMMENT '宿舍区联系电话', - `area_manager` varchar(50) DEFAULT NULL COMMENT '宿舍区负责人', - `building_count` int(11) DEFAULT 0 COMMENT '宿舍楼数量', - `student_count` int(11) DEFAULT 0 COMMENT '学生数量', - `area_description` varchar(500) DEFAULT NULL COMMENT '宿舍区描述', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', - `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', - `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_area_code` (`area_code`), - KEY `idx_campus_id` (`campus_id`), - KEY `idx_area_status` (`status`), - CONSTRAINT `fk_area_campus` FOREIGN KEY (`campus_id`) REFERENCES `dorm_campus` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍区信息表'; -``` - -#### 1.4 宿舍楼信息表 (dorm_building) -**表说明**:存储宿舍楼基本信息,关联宿舍区 - -```sql -CREATE TABLE `dorm_building` ( +DROP TABLE IF EXISTS `xg_dorm_building`; +CREATE TABLE `xg_dorm_building` ( `id` bigint(20) NOT NULL COMMENT '主键ID', `building_code` varchar(50) NOT NULL COMMENT '宿舍楼编码', `building_name` varchar(100) NOT NULL COMMENT '宿舍楼名称', `area_id` bigint(20) NOT NULL COMMENT '所属宿舍区ID', `campus_id` bigint(20) NOT NULL COMMENT '所属校区ID', - `building_address` varchar(200) DEFAULT NULL COMMENT '宿舍楼地址', - `building_phone` varchar(20) DEFAULT NULL COMMENT '宿舍楼联系电话', - `building_manager` varchar(50) DEFAULT NULL COMMENT '宿舍楼负责人', - `floor_count` int(11) DEFAULT 0 COMMENT '楼层数', - `room_count` int(11) DEFAULT 0 COMMENT '房间数', - `student_count` int(11) DEFAULT 0 COMMENT '学生数量', `building_type` char(1) DEFAULT '1' COMMENT '宿舍楼类型(1男生楼 2女生楼 3混合楼)', `building_description` varchar(500) DEFAULT NULL COMMENT '宿舍楼描述', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `sort_order` int(11) DEFAULT '0' COMMENT '排序号', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', @@ -148,136 +86,158 @@ CREATE TABLE `dorm_building` ( UNIQUE KEY `uk_building_code` (`building_code`), KEY `idx_area_id` (`area_id`), KEY `idx_campus_id` (`campus_id`), - KEY `idx_building_status` (`status`), - CONSTRAINT `fk_building_area` FOREIGN KEY (`area_id`) REFERENCES `dorm_area` (`id`), - CONSTRAINT `fk_building_campus` FOREIGN KEY (`campus_id`) REFERENCES `dorm_campus` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍楼信息表'; ``` -#### 1.5 二级学院信息表 (dorm_college) -**表说明**:存储二级学院基本信息 +#### 1.4 宿舍楼信息表 (dorm_building) +**表说明**:存储宿舍楼基本信息,关联宿舍区 ```sql -CREATE TABLE `dorm_college` ( +DROP TABLE IF EXISTS `xg_dorm_area`; +CREATE TABLE `xg_dorm_area` ( `id` bigint(20) NOT NULL COMMENT '主键ID', - `college_code` varchar(50) NOT NULL COMMENT '学院编码', - `college_name` varchar(100) NOT NULL COMMENT '学院名称', - `campus_id` bigint(20) DEFAULT NULL COMMENT '所属校区ID', - `college_address` varchar(200) DEFAULT NULL COMMENT '学院地址', - `college_phone` varchar(20) DEFAULT NULL COMMENT '学院联系电话', - `college_manager` varchar(50) DEFAULT NULL COMMENT '学院负责人', - `student_count` int(11) DEFAULT 0 COMMENT '学生数量', - `college_description` varchar(500) DEFAULT NULL COMMENT '学院描述', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `area_code` varchar(50) NOT NULL COMMENT '宿舍区编码', + `area_name` varchar(100) NOT NULL COMMENT '宿舍区名称', + `campus_id` bigint(20) NOT NULL COMMENT '所属校区ID', + `area_description` varchar(500) DEFAULT NULL COMMENT '宿舍区描述', + `sort_order` int(11) DEFAULT '0' COMMENT '排序号', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), - UNIQUE KEY `uk_college_code` (`college_code`), + UNIQUE KEY `uk_area_code` (`area_code`), + KEY `idx_campus_id` (`campus_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍区信息表'; +``` + +#### 1.5 宿舍房间表 (dorm_room) +**表说明**:存储宿舍房间基本信息,关联宿舍楼,包含楼层属性 + +```sql +DROP TABLE IF EXISTS `xg_dorm_room`; +CREATE TABLE `xg_dorm_room` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `room_code` varchar(50) NOT NULL COMMENT '房间编号', + `room_name` varchar(100) NOT NULL COMMENT '房间名称', + `building_id` bigint(20) NOT NULL COMMENT '所属宿舍楼ID', + `floor_num` int(11) NOT NULL COMMENT '楼层', + `room_type` char(1) DEFAULT '1' COMMENT '房间类型(1学生宿舍 3教师宿舍)', + `actual_beds` int(11) DEFAULT 4 COMMENT '实际床位数', + `room_area` decimal(10,2) DEFAULT NULL COMMENT '房间面积(平方米)', + `room_status` char(1) DEFAULT '0' COMMENT '房间状态(0可用 1维修中 2已报废)', + `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_room_code` (`room_code`), + KEY `idx_building_id` (`building_id`), + KEY `idx_floor_num` (`floor_num`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍房间信息表'; +``` + +#### 1.6 宿舍床位表 (dorm_bed) +**表说明**:存储宿舍床位基本信息,关联宿舍房间 + +```sql +DROP TABLE IF EXISTS `xg_dorm_bed`; +CREATE TABLE `xg_dorm_bed` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `bed_code` varchar(50) NOT NULL COMMENT '床位编号', + `bed_name` varchar(100) NOT NULL COMMENT '床位名称', + `room_id` bigint(20) NOT NULL COMMENT '所属房间ID', + `bed_type` char(1) DEFAULT '1' COMMENT '床位类型(1下铺 2上铺 3中铺 4独立床)', + `bed_status` char(1) DEFAULT '0' COMMENT '床位状态(0空闲 1已分配 2维修中)', + `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_bed_code` (`bed_code`), + KEY `idx_room_id` (`room_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍床位信息表'; + +DROP TABLE IF EXISTS `xg_dorm_bed_student`; +CREATE TABLE `xg_dorm_bed_student` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `college_id` bigint(20) NOT NULL COMMENT '分配学院ID', + `student_id` bigint(20) NOT NULL COMMENT '分配学生ID', + `bed_id` bigint(20) NOT NULL COMMENT '床位ID', + `room_id` bigint(20) NOT NULL COMMENT '房间ID', + `building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID', + `area_id` bigint(20) NOT NULL COMMENT '宿舍区ID', + `campus_id` bigint(20) NOT NULL COMMENT '校区ID', + `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1已退宿)', + `assign_time` datetime NOT NULL COMMENT '分配时间', + `checkout_time` datetime DEFAULT NULL COMMENT '退宿时间', + `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_student_bed` (`student_id`, `bed_id`), + KEY `idx_college_id` (`college_id`), + KEY `idx_student_id` (`student_id`), + KEY `idx_bed_id` (`bed_id`), + KEY `idx_room_id` (`room_id`), + KEY `idx_building_id` (`building_id`), + KEY `idx_area_id` (`area_id`), KEY `idx_campus_id` (`campus_id`), - KEY `idx_college_status` (`status`), - CONSTRAINT `fk_college_campus` FOREIGN KEY (`campus_id`) REFERENCES `dorm_campus` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二级学院信息表'; + KEY `idx_assign_time` (`assign_time`), +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='床位学生分配关系表'; ``` -### 2. 管理人员表 +### 2. 宿舍管理人员相关表 -#### 2.1 宿舍管理人员基本信息表 (dorm_manager) -**表说明**:存储宿舍管理人员的基本信息 +#### 2.1 宿舍管理员表 (dorm_manager) +**表说明**:存储全校、校区、宿舍区、宿舍楼管理员的基本信息 ```sql -CREATE TABLE `dorm_manager` ( +DROP TABLE IF EXISTS `xg_dorm_manager`; +CREATE TABLE `xg_dorm_manager` ( `id` bigint(20) NOT NULL COMMENT '主键ID', - `manager_code` varchar(50) NOT NULL COMMENT '管理人员编码', - `manager_name` varchar(50) NOT NULL COMMENT '管理人员姓名', - `gender` char(1) DEFAULT NULL COMMENT '性别(0男 1女 2未知)', - `birth_date` date DEFAULT NULL COMMENT '出生日期', - `id_card` varchar(18) DEFAULT NULL COMMENT '身份证号', - `phone` varchar(11) DEFAULT NULL COMMENT '手机号码', - `email` varchar(100) DEFAULT NULL COMMENT '邮箱地址', - `office_phone` varchar(20) DEFAULT NULL COMMENT '办公电话', - `department` varchar(100) DEFAULT NULL COMMENT '所属部门', - `position` varchar(100) DEFAULT NULL COMMENT '职位', - `hire_date` date DEFAULT NULL COMMENT '入职时间', - `work_status` char(1) DEFAULT '0' COMMENT '工作状态(0在职 1离职 2休假)', - `education` varchar(50) DEFAULT NULL COMMENT '学历', - `major` varchar(100) DEFAULT NULL COMMENT '专业', - `certificates` varchar(500) DEFAULT NULL COMMENT '相关证书', - `manager_description` varchar(500) DEFAULT NULL COMMENT '个人描述', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', + `manager_name` varchar(100) NOT NULL COMMENT '管理员姓名', + `manager_type` char(1) NOT NULL COMMENT '管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员)', + `manager_level` int(11) DEFAULT 1 COMMENT '管理级别(1-5,1为最高)', + `user_id` bigint(20) DEFAULT NULL COMMENT '关联用户ID', + `phone` varchar(20) DEFAULT NULL COMMENT '联系电话', + `gender` char(1) DEFAULT '0' COMMENT '性别(0男 1女 2未知)', `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), - UNIQUE KEY `uk_manager_code` (`manager_code`), - UNIQUE KEY `uk_id_card` (`id_card`), - KEY `idx_manager_name` (`manager_name`), - KEY `idx_phone` (`phone`), - KEY `idx_manager_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍管理人员基本信息表'; -``` + KEY `idx_user_id` (`user_id`), + KEY `idx_manager_type` (`manager_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍管理员信息表'; -#### 2.2 管理人员职位表 (dorm_manager_position) -**表说明**:存储管理人员的职位信息 - -```sql -CREATE TABLE `dorm_manager_position` ( +DROP TABLE IF EXISTS `xg_dorm_manager_source`; +CREATE TABLE `xg_dorm_manager_source` ( `id` bigint(20) NOT NULL COMMENT '主键ID', - `position_code` varchar(50) NOT NULL COMMENT '职位编码', - `position_name` varchar(100) NOT NULL COMMENT '职位名称', - `position_level` int(11) NOT NULL COMMENT '职位层级(1-5)', - `parent_position_id` bigint(20) DEFAULT NULL COMMENT '上级职位ID', - `position_description` varchar(500) DEFAULT NULL COMMENT '职位描述', - `permission_level` int(11) DEFAULT NULL COMMENT '权限层级', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `manager_id` bigint(20) NOT NULL COMMENT '管理员ID', + `permission_type` char(1) DEFAULT '1' COMMENT '权限类型(1查看 2编辑 3完全管理)', + `auth_type` char(1) NOT NULL COMMENT '授权类型(1全校级 2校区级 3宿舍区级 4楼栋级)', + `auth_source` bigint(20) DEFAULT NULL COMMENT '授权来源ID(对应校区ID或宿舍区ID或楼栋ID)', + `status` char(1) DEFAULT '0' COMMENT '状态(0有效 1已撤销)', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', - `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_position_code` (`position_code`), - KEY `idx_position_level` (`position_level`), - KEY `idx_parent_position` (`parent_position_id`), - KEY `idx_position_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理人员职位表'; -``` - -#### 2.3 管理人员分配表 (dorm_manager_assignment) -**表说明**:存储管理人员的分配信息,支持多维度分配 - -```sql -CREATE TABLE `dorm_manager_assignment` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `manager_id` bigint(20) NOT NULL COMMENT '管理人员ID', - `position_id` bigint(20) NOT NULL COMMENT '职位ID', - `dimension_type` varchar(50) NOT NULL COMMENT '维度类型(campus/area/building/college)', - `dimension_id` bigint(20) NOT NULL COMMENT '维度ID', - `assignment_type` char(1) DEFAULT '1' COMMENT '分配类型(1主要 2辅助 3临时)', - `start_date` date NOT NULL COMMENT '分配开始日期', - `end_date` date DEFAULT NULL COMMENT '分配结束日期', - `assignment_reason` varchar(500) DEFAULT NULL COMMENT '分配原因', - `approval_status` char(1) DEFAULT '0' COMMENT '审批状态(0待审批 1已通过 2已拒绝)', - `approval_by` bigint(20) DEFAULT NULL COMMENT '审批人', - `approval_time` datetime DEFAULT NULL COMMENT '审批时间', - `approval_remark` varchar(500) DEFAULT NULL COMMENT '审批备注', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', - `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', @@ -285,203 +245,94 @@ CREATE TABLE `dorm_manager_assignment` ( `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_manager_id` (`manager_id`), - KEY `idx_position_id` (`position_id`), - KEY `idx_dimension_type` (`dimension_type`), - KEY `idx_dimension_id` (`dimension_id`), - KEY `idx_assignment_status` (`status`), - KEY `idx_approval_status` (`approval_status`), - CONSTRAINT `fk_assignment_manager` FOREIGN KEY (`manager_id`) REFERENCES `dorm_manager` (`id`), - CONSTRAINT `fk_assignment_position` FOREIGN KEY (`position_id`) REFERENCES `dorm_manager_position` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理人员分配表'; + KEY `idx_auth_source` (`auth_source`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员授权关系表'; + ``` -### 3. 权限管理表 - -#### 3.1 权限层级表 (dorm_permission_level) -**表说明**:定义权限层级信息 +#### 2.2 管理员宿舍楼权限关系表 (dorm_manager_building) +**表说明**:存储管理员与宿舍楼的权限绑定关系 ```sql -CREATE TABLE `dorm_permission_level` ( + + +DROP TABLE IF EXISTS `xg_dorm_manager_building`; +CREATE TABLE `xg_dorm_manager_building` ( `id` bigint(20) NOT NULL COMMENT '主键ID', - `level_code` varchar(50) NOT NULL COMMENT '权限层级编码', - `level_name` varchar(100) NOT NULL COMMENT '权限层级名称', - `level_value` int(11) NOT NULL COMMENT '权限层级值(1-5)', - `parent_level_id` bigint(20) DEFAULT NULL COMMENT '上级权限层级ID', - `level_description` varchar(500) DEFAULT NULL COMMENT '权限层级描述', - `data_scope` varchar(200) DEFAULT NULL COMMENT '数据权限范围', - `function_permissions` varchar(500) DEFAULT NULL COMMENT '功能权限列表', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', + `manager_id` bigint(20) NOT NULL COMMENT '管理员ID', + `building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID', + `status` char(1) DEFAULT '0' COMMENT '状态(0有效 1已撤销)', + `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_manager_building` (`manager_id`, `building_id`), + KEY `idx_manager_id` (`manager_id`), + KEY `idx_building_id` (`building_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员宿舍楼权限关系表'; +``` + +#### 2.3 二级学院宿舍管理员表 (dorm_college_manager) +**表说明**:存储二级学院宿舍管理员的基本信息 + +```sql +DROP TABLE IF EXISTS `xg_dorm_college_manager`; +CREATE TABLE `xg_dorm_college_manager` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `manager_name` varchar(100) NOT NULL COMMENT '管理员姓名', + `college_id` bigint(20) NOT NULL COMMENT '所属学院ID', + `user_id` bigint(20) DEFAULT NULL COMMENT '关联用户ID', + `phone` varchar(20) DEFAULT NULL COMMENT '联系电话', + `gender` char(1) DEFAULT '0' COMMENT '性别(0男 1女 2未知)', `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), - UNIQUE KEY `uk_level_code` (`level_code`), - UNIQUE KEY `uk_level_value` (`level_value`), - KEY `idx_parent_level` (`parent_level_id`), - KEY `idx_level_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限层级表'; + KEY `idx_college_id` (`college_id`), + KEY `idx_user_id` (`user_id`), +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二级学院宿舍管理员信息表'; ``` -#### 3.2 管理人员权限表 (dorm_manager_permission) -**表说明**:存储管理人员的具体权限配置 +#### 2.4 二级学院床位绑定关系表 (dorm_college_bed) +**表说明**:存储二级学院与床位的绑定关系 ```sql -CREATE TABLE `dorm_manager_permission` ( +DROP TABLE IF EXISTS `xg_dorm_college_bed`; +CREATE TABLE `xg_dorm_college_bed` ( `id` bigint(20) NOT NULL COMMENT '主键ID', - `manager_id` bigint(20) NOT NULL COMMENT '管理人员ID', - `permission_level_id` bigint(20) NOT NULL COMMENT '权限层级ID', - `dimension_type` varchar(50) NOT NULL COMMENT '维度类型', - `dimension_id` bigint(20) NOT NULL COMMENT '维度ID', - `data_permissions` varchar(500) DEFAULT NULL COMMENT '数据权限配置', - `function_permissions` varchar(500) DEFAULT NULL COMMENT '功能权限配置', - `permission_type` char(1) DEFAULT '1' COMMENT '权限类型(1继承 2授权 3临时)', - `grant_by` bigint(20) DEFAULT NULL COMMENT '授权人', - `grant_time` datetime DEFAULT NULL COMMENT '授权时间', - `expire_time` datetime DEFAULT NULL COMMENT '权限过期时间', - `permission_status` char(1) DEFAULT '0' COMMENT '权限状态(0有效 1过期 2停用)', - `sort_order` int(11) DEFAULT 0 COMMENT '排序号', - `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `college_id` bigint(20) NOT NULL COMMENT '学院ID', + `bed_id` bigint(20) NOT NULL COMMENT '床位ID', + `building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID', + `room_id` bigint(20) NOT NULL COMMENT '房间ID', + `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1已解除)', + `assign_time` datetime DEFAULT NULL COMMENT '分配时间', + `release_time` datetime DEFAULT NULL COMMENT '到期解除时间', `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', + `tenant_id` bigint(20) DEFAULT '0' COMMENT '租户编号', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), - KEY `idx_manager_id` (`manager_id`), - KEY `idx_permission_level` (`permission_level_id`), - KEY `idx_dimension_type` (`dimension_type`), - KEY `idx_dimension_id` (`dimension_id`), - KEY `idx_permission_status` (`permission_status`), - KEY `idx_grant_by` (`grant_by`), - CONSTRAINT `fk_permission_manager` FOREIGN KEY (`manager_id`) REFERENCES `dorm_manager` (`id`), - CONSTRAINT `fk_permission_level` FOREIGN KEY (`permission_level_id`) REFERENCES `dorm_permission_level` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理人员权限表'; + UNIQUE KEY `uk_college_bed` (`college_id`, `bed_id`), + KEY `idx_college_id` (`college_id`), + KEY `idx_bed_id` (`bed_id`), + KEY `idx_building_id` (`building_id`), + KEY `idx_room_id` (`room_id`), +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二级学院床位绑定关系表'; ``` -#### 3.3 权限变更日志表 (dorm_permission_log) -**表说明**:记录权限变更的详细日志 -```sql -CREATE TABLE `dorm_permission_log` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `manager_id` bigint(20) NOT NULL COMMENT '管理人员ID', - `operation_type` varchar(50) NOT NULL COMMENT '操作类型(grant/revoke/modify)', - `permission_level_id` bigint(20) DEFAULT NULL COMMENT '权限层级ID', - `dimension_type` varchar(50) DEFAULT NULL COMMENT '维度类型', - `dimension_id` bigint(20) DEFAULT NULL COMMENT '维度ID', - `old_permissions` text DEFAULT NULL COMMENT '变更前权限配置', - `new_permissions` text DEFAULT NULL COMMENT '变更后权限配置', - `operation_reason` varchar(500) DEFAULT NULL COMMENT '操作原因', - `operator_id` bigint(20) NOT NULL COMMENT '操作人ID', - `operator_name` varchar(50) NOT NULL COMMENT '操作人姓名', - `operation_time` datetime NOT NULL COMMENT '操作时间', - `ip_address` varchar(50) DEFAULT NULL COMMENT '操作IP地址', - `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理', - `operation_result` char(1) DEFAULT '1' COMMENT '操作结果(0失败 1成功)', - `error_message` varchar(500) DEFAULT NULL COMMENT '错误信息', - `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', - `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`), - KEY `idx_manager_id` (`manager_id`), - KEY `idx_operation_type` (`operation_type`), - KEY `idx_operator_id` (`operator_id`), - KEY `idx_operation_time` (`operation_time`), - KEY `idx_operation_result` (`operation_result`), - CONSTRAINT `fk_log_manager` FOREIGN KEY (`manager_id`) REFERENCES `dorm_manager` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限变更日志表'; -``` - -### 4. 管理效果评估表 - -#### 4.1 管理数据统计表 (dorm_management_stats) -**表说明**:存储管理效果的统计数据 - -```sql -CREATE TABLE `dorm_management_stats` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `manager_id` bigint(20) NOT NULL COMMENT '管理人员ID', - `dimension_type` varchar(50) NOT NULL COMMENT '维度类型', - `dimension_id` bigint(20) NOT NULL COMMENT '维度ID', - `stats_date` date NOT NULL COMMENT '统计日期', - `stats_type` varchar(50) NOT NULL COMMENT '统计类型(daily/weekly/monthly)', - `building_count` int(11) DEFAULT 0 COMMENT '管理宿舍楼数量', - `student_count` int(11) DEFAULT 0 COMMENT '管理学生数量', - `task_completed` int(11) DEFAULT 0 COMMENT '完成任务数量', - `task_total` int(11) DEFAULT 0 COMMENT '总任务数量', - `problem_resolved` int(11) DEFAULT 0 COMMENT '解决问题数量', - `problem_total` int(11) DEFAULT 0 COMMENT '总问题数量', - `satisfaction_score` decimal(3,2) DEFAULT 0.00 COMMENT '满意度评分', - `efficiency_score` decimal(3,2) DEFAULT 0.00 COMMENT '效率评分', - `quality_score` decimal(3,2) DEFAULT 0.00 COMMENT '质量评分', - `overall_score` decimal(3,2) DEFAULT 0.00 COMMENT '综合评分', - `stats_data` json DEFAULT NULL COMMENT '详细统计数据', - `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', - `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_stats_unique` (`manager_id`, `dimension_type`, `dimension_id`, `stats_date`, `stats_type`), - KEY `idx_manager_id` (`manager_id`), - KEY `idx_dimension_type` (`dimension_type`), - KEY `idx_dimension_id` (`dimension_id`), - KEY `idx_stats_date` (`stats_date`), - KEY `idx_stats_type` (`stats_type`), - CONSTRAINT `fk_stats_manager` FOREIGN KEY (`manager_id`) REFERENCES `dorm_manager` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理数据统计表'; -``` - -#### 4.2 权限使用记录表 (dorm_permission_usage) -**表说明**:记录权限使用的详细情况 - -```sql -CREATE TABLE `dorm_permission_usage` ( - `id` bigint(20) NOT NULL COMMENT '主键ID', - `manager_id` bigint(20) NOT NULL COMMENT '管理人员ID', - `permission_level_id` bigint(20) NOT NULL COMMENT '权限层级ID', - `dimension_type` varchar(50) NOT NULL COMMENT '维度类型', - `dimension_id` bigint(20) NOT NULL COMMENT '维度ID', - `function_name` varchar(100) NOT NULL COMMENT '功能名称', - `operation_type` varchar(50) NOT NULL COMMENT '操作类型(view/edit/delete/approve)', - `operation_time` datetime NOT NULL COMMENT '操作时间', - `operation_result` char(1) DEFAULT '1' COMMENT '操作结果(0失败 1成功)', - `response_time` int(11) DEFAULT NULL COMMENT '响应时间(毫秒)', - `ip_address` varchar(50) DEFAULT NULL COMMENT '操作IP地址', - `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理', - `session_id` varchar(100) DEFAULT NULL COMMENT '会话ID', - `deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', - `tenant_id` bigint(20) DEFAULT 0 COMMENT '租户编号', - `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`), - KEY `idx_manager_id` (`manager_id`), - KEY `idx_permission_level` (`permission_level_id`), - KEY `idx_dimension_type` (`dimension_type`), - KEY `idx_dimension_id` (`dimension_id`), - KEY `idx_function_name` (`function_name`), - KEY `idx_operation_time` (`operation_time`), - KEY `idx_operation_result` (`operation_result`), - CONSTRAINT `fk_usage_manager` FOREIGN KEY (`manager_id`) REFERENCES `dorm_manager` (`id`), - CONSTRAINT `fk_usage_permission_level` FOREIGN KEY (`permission_level_id`) REFERENCES `dorm_permission_level` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限使用记录表'; -``` ## 🔗 表关系设计 @@ -503,15 +354,6 @@ dorm_permission_level (权限层级) └── Level 5: 二级学院宿舍管理负责人 ``` -### 3. 管理人员关系图 -``` -dorm_manager (管理人员) -├── dorm_manager_position (职位信息) -├── dorm_manager_assignment (分配信息) -├── dorm_manager_permission (权限信息) -├── dorm_management_stats (统计信息) -└── dorm_permission_usage (使用记录) -``` ## 📊 索引设计 diff --git a/docs/设计文档/database/SQL文件说明.md b/docs/设计文档/database/SQL文件说明.md index 7f5793c1..a8c29867 100644 --- a/docs/设计文档/database/SQL文件说明.md +++ b/docs/设计文档/database/SQL文件说明.md @@ -2,29 +2,30 @@ ## 📁 文件结构概览 -基于业务域的数据库文件拆分,将原始的 `hzdyjs_xg.sql` 按业务模块进行分类,便于管理和维护。 +基于业务域的数据库文件拆分,采用目录+文件的组织方式,将原始的 `hzdyjs_xg.sql` 按业务模块进行分类,便于管理和维护。 ``` docs/设计文档/database/ ├── hzdyjs_xg.sql # 完整数据库文件(保留) -├── 01-workflow-module.sql # 工作流模块 -├── 02-code-generator-module.sql # 代码生成模块 -├── 03-logistics-module.sql # 后勤管理模块 -├── 04-job-scheduler-module.sql # 任务调度模块 -├── 05-system-management-module.sql # 系统管理模块 -├── 06-test-module.sql # 测试模块 -├── 08-student-management-actual-rollback.sql # 学工管理模块实际删除脚本 -├── README.md # 数据库设计说明 -├── mysql-database-standard.md # MySQL数据库建设规范 -├── database_msg.md # 数据库环境配置 -└── SQL文件说明.md # 本文件 +├── README.md # 数据库设计说明 +├── mysql-database-standard.md # MySQL数据库建设规范 +├── database_msg.md # 数据库环境配置 +├── SQL文件说明.md # 本文件 +├── 工作流/ # 工作流模块相关SQL +│ └── ... (工作流相关SQL文件) +├── 后勤管理/ # 后勤管理模块相关SQL +│ └── ... (后勤管理相关SQL文件) +├── 学工管理-学生信息管理/ # 学工管理-学生信息模块相关SQL +│ └── ... (学生信息相关SQL文件) +└── 学工管理-宿舍管理/ # 学工管理-宿舍管理模块相关SQL + └── ... (宿舍管理相关SQL文件) ``` --- ## 📊 业务域拆分详情 -### 01. 工作流模块 (01-workflow-module.sql) +### 工作流模块 (工作流/) **业务域**: 工作流引擎相关功能 **包含表**: 8 张表 @@ -40,20 +41,10 @@ docs/设计文档/database/ **主要功能**: 支持业务流程的定义、执行、跟踪和管理 -### 02. 代码生成模块 (02-code-generator-module.sql) - -**业务域**: 代码生成器相关功能 -**包含表**: 2 张表 - -- `gen_table` - 代码生成业务表 -- `gen_table_column` - 代码生成业务字段表 - -**主要功能**: 支持基于数据库表结构自动生成代码 - -### 03. 后勤管理模块 (03-logistics-module.sql) +### 后勤管理模块 (后勤管理/) **业务域**: 后勤服务管理相关功能 -**包含表**: 10 张表 +**包含表**: 10+ 张表 #### 报告厅预约管理子模块 @@ -73,93 +64,53 @@ docs/设计文档/database/ **主要功能**: 校园后勤服务管理,包括场地预约和满意度调查 -### 04. 任务调度模块 (04-job-scheduler-module.sql) +### 学工管理-学生信息管理模块 (学工管理-学生信息管理/) + +**业务域**: 学工管理-学生信息管理相关功能 +**包含表**: 相关学生信息表 + +**主要功能**: 学生信息管理,包括学生基本信息、班级信息等 + +### 学工管理-宿舍管理模块 (学工管理-宿舍管理/) + +**业务域**: 学工管理-宿舍管理相关功能 +**包含表**: 宿舍相关表 + +**主要功能**: 宿舍管理,包括宿舍分配、宿舍管理等功能 + +### 其他模块 (仍保留在根目录) + +#### 代码生成模块 (02-code-generator-module.sql) + +**业务域**: 代码生成器相关功能 +**包含表**: 2 张表 + +- `gen_table` - 代码生成业务表 +- `gen_table_column` - 代码生成业务字段表 + +**主要功能**: 支持基于数据库表结构自动生成代码 + +#### 任务调度模块 (04-job-scheduler-module.sql) **业务域**: SnailJob 任务调度相关功能 **包含表**: 12 张表 -- `sj_distributed_lock` - 分布式锁表 -- `sj_group_config` - 组配置表 -- `sj_namespace_config` - 命名空间配置表 -- `sj_notify_config` - 通知配置表 -- `sj_retry_dead_letter` - 死信队列表 -- `sj_retry_summary` - 任务重试汇总统计表 -- `sj_retry_task` - 任务信息表 -- `sj_retry_task_log` - 重试日志表 -- `sj_server_node` - 服务器节点表 -- `sj_system_user_permission` - 系统用户权限表 -- `sj_workflow_node` - 工作流节点表 -- `sj_workflow_task_batch` - 工作流任务批次表 - **主要功能**: 分布式任务调度、重试机制、工作流编排 -### 05. 系统管理模块 (05-system-management-module.sql) +#### 系统管理模块 (05-system-management-module.sql) **业务域**: 系统核心管理功能 **包含表**: 21 张表 -#### 用户与权限管理 - -- `sys_user` - 用户信息表 -- `sys_role` - 角色信息表 -- `sys_menu` - 菜单权限表 -- `sys_dept` - 部门表 -- `sys_post` - 岗位信息表 -- `sys_user_role` - 用户角色关联表 -- `sys_user_post` - 用户岗位关联表 -- `sys_role_menu` - 角色菜单关联表 -- `sys_role_dept` - 角色部门关联表 - -#### 系统配置与日志 - -- `sys_config` - 参数配置表 -- `sys_dict_type` - 字典类型表 -- `sys_dict_data` - 字典数据表 -- `sys_notice` - 通知公告表 -- `sys_oper_log` - 操作日志表 -- `sys_logininfor` - 系统访问记录表 - -#### 文件与租户管理 - -- `sys_oss` - OSS 对象存储表 -- `sys_oss_config` - 对象存储配置表 -- `sys_client` - 系统授权表 -- `sys_tenant` - 租户表 -- `sys_tenant_package` - 租户套餐表 -- `sys_social` - 社会化关系表 - **主要功能**: 系统用户管理、权限控制、配置管理、日志记录等核心功能 -### 06. 测试模块 (06-test-module.sql) +#### 测试模块 (06-test-module.sql) **业务域**: 测试和演示相关功能 **包含表**: 1 张表 -- `test_tree` - 测试树表 - **主要功能**: 系统功能测试和演示,包含树形结构数据 -### 08. 学生信息管理模块 (已删除) - -**业务域**: 学工管理-学生信息管理相关功能 -**状态**: 已于2025-01-09完全删除 - -#### 删除脚本 - -- `08-student-management-actual-rollback.sql` - 学工管理模块实际删除脚本(已执行) - -**删除内容**: -- 6张数据库表(学生信息、银行卡、班级信息、审核记录等) -- 16个菜单权限项 -- 7个字典类型 -- 27个字典数据项 - -**删除状态**: ✅ 已完成并验证通过 - -**删除原因**: 用户要求删除已创建的学工学生信息相关功能 - -**恢复说明**: 相关文档和脚本已在git历史记录中保存,如需恢复可从历史记录中获取 - --- ## 🔧 使用指南 @@ -173,51 +124,48 @@ SOURCE docs/设计文档/database/hzdyjs_xg.sql; ### 按模块部署 +现在可以按照目录组织更灵活地部署数据库: + ```sql --- 按需执行指定模块 -SOURCE docs/设计文档/database/01-workflow-module.sql; -SOURCE docs/设计文档/database/02-code-generator-module.sql; -SOURCE docs/设计文档/database/03-logistics-module.sql; -SOURCE docs/设计文档/database/04-job-scheduler-module.sql; +-- 核心系统模块 SOURCE docs/设计文档/database/05-system-management-module.sql; -SOURCE docs/设计文档/database/06-test-module.sql; --- 学工管理模块已删除 --- 删除脚本已执行完成: --- SOURCE docs/设计文档/database/08-student-management-actual-rollback.sql; + +-- 按业务目录部署 +-- 工作流模块 +SOURCE docs/设计文档/database/工作流/01-workflow-module.sql; + +-- 后勤管理模块 +SOURCE docs/设计文档/database/后勤管理/03-logistics-module.sql; +SOURCE docs/设计文档/database/后勤管理/hq_hall_info.sql; +SOURCE docs/设计文档/database/后勤管理/hq_satisfaction_survey.sql; +-- 更多后勤管理相关表... + +-- 学工管理-学生信息模块 +SOURCE docs/设计文档/database/学工管理-学生信息管理/xg_student_info.sql; +SOURCE docs/设计文档/database/学工管理-学生信息管理/xg_class_info.sql; +-- 更多学生信息相关表... + +-- 学工管理-宿舍管理模块 +SOURCE docs/设计文档/database/学工管理-宿舍管理/xg_dormitory_info.sql; +-- 更多宿舍管理相关表... ``` ### 开发环境部署建议 -1. **必须模块**: 01-工作流模块, 05-系统管理模块 -2. **核心业务模块**: 03-后勤管理模块 -3. **按需模块**: 其他模块根据具体业务需求选择性部署 +1. **必须模块**: 系统管理模块, 工作流模块 +2. **核心业务模块**: 后勤管理模块 +3. **按需模块**: 学工管理相关模块和其他模块根据具体业务需求选择性部署 4. **测试模块**: 仅在开发和测试环境中部署 --- -## 📈 统计信息 - -| 模块 | 表数量 | 主要功能 | 依赖关系 | -| ------------ | ------ | ------------ | ---------------- | -| 工作流模块 | 8 | 流程管理 | 依赖系统管理模块 | -| 代码生成模块 | 2 | 代码生成 | 无特殊依赖 | -| 后勤管理模块 | 10 | 后勤服务 | 依赖系统管理模块 | -| 任务调度模块 | 12 | 任务调度 | 独立模块 | -| 系统管理模块 | 21 | 核心系统 | 核心基础模块 | -| 测试模块 | 1 | 测试演示 | 依赖系统管理模块 | -| ~~学工管理模块~~ | ~~6~~ | ~~学工管理~~ | ~~已删除~~ | -| **总计** | **54** | **完整系统** | **完整依赖链** | - ---- - ## ⚠️ 注意事项 -### 1. 模块依赖关系 +### 1. 目录组织原则 -- **系统管理模块**是其他模块的基础依赖,必须优先部署 -- **工作流模块**和**后勤管理模块**依赖系统管理模块的用户和部门数据 -- **任务调度模块**相对独立,可单独部署 -- **学工管理模块**已删除,不再部署 +- **按业务域组织**: 文件按业务功能模块存放到对应目录 +- **一表一文件**: 每个表结构单独存放为独立SQL文件,便于维护 +- **统一命名**: 文件名应与表名保持一致,便于快速定位 ### 2. 数据一致性 @@ -244,20 +192,21 @@ SOURCE docs/设计文档/database/06-test-module.sql; ### 更新流程 -1. 修改 `hzdyjs_xg.sql` 主文件 -2. 同步更新对应的模块 SQL 文件 +1. 修改对应业务目录下的SQL文件 +2. 如有必要,同步更新 `hzdyjs_xg.sql` 主文件 3. 更新本说明文档的变更记录 -4. 在 `docs/变更管理/code-adjust-record.md` 中记录变更 +4. 在 `docs/变更管理/code-adjust-record-YYYY-MM-DD-{username}.md` 中记录变更 ### 文件命名规则 -- 使用两位数字前缀进行排序 +- 使用表名作为文件名,如 `xg_student_info.sql` +- 可选使用两位数字前缀进行排序 - 使用英文短横线分隔词语 -- 以 `-module.sql` 结尾表示模块文件 +- 以 `.sql` 结尾 ### 拆分原则 -- 按业务域进行逻辑分组 +- 按业务域进行目录分组 - 保持模块的相对独立性 - 考虑实际部署和维护需求 - 遵循数据库设计规范 @@ -266,6 +215,22 @@ SOURCE docs/设计文档/database/06-test-module.sql; ## 📋 更新记录 +### 2025-07-15 - 目录结构调整 + +**变更内容**: +- 将SQL文件按业务域进行目录拆分 +- 新增学工管理-学生信息管理目录 +- 新增工作流目录 +- 新增后勤管理目录 +- 新增学工管理-宿舍管理目录 +- 更新SQL文件说明文档,反映新的目录结构 + +**变更原因**: 优化数据库文件管理,按业务模块分类存储,提高可维护性 + +**影响范围**: 仅影响文件组织方式,不影响SQL内容和功能 + +**执行状态**: ✅ 已完成并验证通过 + ### 2025-01-09 - 学工管理模块完全删除 **变更内容**: diff --git a/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql b/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql new file mode 100644 index 00000000..6e970fc7 --- /dev/null +++ b/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql @@ -0,0 +1,260 @@ +-- 宿舍管理数据库建表脚本 +-- 来源:docs/业务模块/学工管理-宿舍管理/数据库设计/宿舍管理数据库设计.md +-- 用途:统一存储宿舍管理模块所有相关表的建表SQL,便于维护和执行 +-- 维护人:数据库设计团队 +-- 日期:2025-01-14 + +-- 1. 校区信息表 +drop table if exists `xg_dorm_campus`; +create table `xg_dorm_campus` ( + `id` bigint(20) not null comment '主键ID', + `campus_code` varchar(50) not null comment '校区编码', + `campus_name` varchar(100) not null comment '校区名称', + `campus_description` varchar(500) default null comment '校区描述', + `sort_order` int(11) default '0' comment '排序号', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_campus_code` (`campus_code`) +) engine=innodb default charset=utf8mb4 comment='校区信息表'; + +-- 2. 宿舍区信息表 +drop table if exists `xg_dorm_area`; +create table `xg_dorm_area` ( + `id` bigint(20) not null comment '主键ID', + `area_code` varchar(50) not null comment '宿舍区编码', + `area_name` varchar(100) not null comment '宿舍区名称', + `campus_id` bigint(20) not null comment '所属校区ID', + `area_description` varchar(500) default null comment '宿舍区描述', + `sort_order` int(11) default '0' comment '排序号', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_area_code` (`area_code`), + key `idx_campus_id` (`campus_id`) +) engine=innodb default charset=utf8mb4 comment='宿舍区信息表'; + +-- 3. 宿舍楼信息表 +drop table if exists `xg_dorm_building`; +create table `xg_dorm_building` ( + `id` bigint(20) not null comment '主键ID', + `building_code` varchar(50) not null comment '宿舍楼编码', + `building_name` varchar(100) not null comment '宿舍楼名称', + `area_id` bigint(20) not null comment '所属宿舍区ID', + `campus_id` bigint(20) not null comment '所属校区ID', + `building_type` char(1) default '1' comment '宿舍楼类型(1男生楼 2女生楼 3混合楼)', + `building_description` varchar(500) default null comment '宿舍楼描述', + `sort_order` int(11) default '0' comment '排序号', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_building_code` (`building_code`), + key `idx_area_id` (`area_id`), + key `idx_campus_id` (`campus_id`) +) engine=innodb default charset=utf8mb4 comment='宿舍楼信息表'; + +-- 4. 宿舍房间信息表 +drop table if exists `xg_dorm_room`; +create table `xg_dorm_room` ( + `id` bigint(20) not null comment '主键ID', + `room_code` varchar(50) not null comment '房间编号', + `room_name` varchar(100) not null comment '房间名称', + `building_id` bigint(20) not null comment '所属宿舍楼ID', + `floor_num` int(11) not null comment '楼层', + `room_type` char(1) default '1' comment '房间类型(1学生宿舍 3教师宿舍)', + `actual_beds` int(11) default 4 comment '实际床位数', + `room_area` decimal(10,2) default null comment '房间面积(平方米)', + `room_status` char(1) default '0' comment '房间状态(0可用 1维修中 2已报废)', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_room_code` (`room_code`), + key `idx_building_id` (`building_id`), + key `idx_floor_num` (`floor_num`) +) engine=innodb default charset=utf8mb4 comment='宿舍房间信息表'; + +-- 5. 宿舍床位信息表 +drop table if exists `xg_dorm_bed`; +create table `xg_dorm_bed` ( + `id` bigint(20) not null comment '主键ID', + `bed_code` varchar(50) not null comment '床位编号', + `bed_name` varchar(100) not null comment '床位名称', + `room_id` bigint(20) not null comment '所属房间ID', + `bed_type` char(1) default '1' comment '床位类型(1下铺 2上铺 3中铺 4独立床)', + `bed_status` char(1) default '0' comment '床位状态(0空闲 1已分配 2维修中)', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_bed_code` (`bed_code`), + key `idx_room_id` (`room_id`) +) engine=innodb default charset=utf8mb4 comment='宿舍床位信息表'; + +-- 6. 床位学生分配关系表 +drop table if exists `xg_dorm_bed_student`; +create table `xg_dorm_bed_student` ( + `id` bigint(20) not null comment '主键ID', + `college_id` bigint(20) not null comment '分配学院ID', + `student_id` bigint(20) not null comment '分配学生ID', + `bed_id` bigint(20) not null comment '床位ID', + `room_id` bigint(20) not null comment '房间ID', + `building_id` bigint(20) not null comment '宿舍楼ID', + `area_id` bigint(20) not null comment '宿舍区ID', + `campus_id` bigint(20) not null comment '校区ID', + `status` char(1) default '0' comment '状态(0正常 1已退宿)', + `assign_time` datetime not null comment '分配时间', + `checkout_time` datetime default null comment '退宿时间', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_student_bed` (`student_id`, `bed_id`), + key `idx_college_id` (`college_id`), + key `idx_student_id` (`student_id`), + key `idx_bed_id` (`bed_id`), + key `idx_room_id` (`room_id`), + key `idx_building_id` (`building_id`), + key `idx_area_id` (`area_id`), + key `idx_campus_id` (`campus_id`), + key `idx_assign_time` (`assign_time`) +) engine=innodb default charset=utf8mb4 comment='床位学生分配关系表'; + +-- 7. 宿舍管理员信息表 +drop table if exists `xg_dorm_manager`; +create table `xg_dorm_manager` ( + `id` bigint(20) not null comment '主键ID', + `manager_name` varchar(100) not null comment '管理员姓名', + `manager_type` char(1) not null comment '管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员)', + `manager_level` int(11) default 1 comment '管理级别(1-5,1为最高)', + `user_id` bigint(20) default null comment '关联用户ID', + `phone` varchar(20) default null comment '联系电话', + `gender` char(1) default '0' comment '性别(0男 1女 2未知)', + `status` char(1) default '0' comment '状态(0正常 1停用)', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + key `idx_user_id` (`user_id`), + key `idx_manager_type` (`manager_type`) +) engine=innodb default charset=utf8mb4 comment='宿舍管理员信息表'; + +-- 8. 管理员授权关系表 +drop table if exists `xg_dorm_manager_source`; +create table `xg_dorm_manager_source` ( + `id` bigint(20) not null comment '主键ID', + `manager_id` bigint(20) not null comment '管理员ID', + `permission_type` char(1) default '1' comment '权限类型(1查看 2编辑 3完全管理)', + `auth_type` char(1) not null comment '授权类型(1全校级 2校区级 3宿舍区级 4楼栋级)', + `auth_source` bigint(20) default null comment '授权来源ID(对应校区ID或宿舍区ID或楼栋ID)', + `status` char(1) default '0' comment '状态(0有效 1已撤销)', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + key `idx_manager_id` (`manager_id`), + key `idx_auth_source` (`auth_source`) +) engine=innodb default charset=utf8mb4 comment='管理员授权关系表'; + +-- 9. 管理员宿舍楼权限关系表 +drop table if exists `xg_dorm_manager_building`; +create table `xg_dorm_manager_building` ( + `id` bigint(20) not null comment '主键ID', + `manager_id` bigint(20) not null comment '管理员ID', + `building_id` bigint(20) not null comment '宿舍楼ID', + `status` char(1) default '0' comment '状态(0有效 1已撤销)', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_manager_building` (`manager_id`, `building_id`), + key `idx_manager_id` (`manager_id`), + key `idx_building_id` (`building_id`) +) engine=innodb default charset=utf8mb4 comment='管理员宿舍楼权限关系表'; + +-- 10. 二级学院宿舍管理员信息表 +drop table if exists `xg_dorm_college_manager`; +create table `xg_dorm_college_manager` ( + `id` bigint(20) not null comment '主键ID', + `manager_name` varchar(100) not null comment '管理员姓名', + `college_id` bigint(20) not null comment '所属学院ID', + `user_id` bigint(20) default null comment '关联用户ID', + `phone` varchar(20) default null comment '联系电话', + `gender` char(1) default '0' comment '性别(0男 1女 2未知)', + `status` char(1) default '0' comment '状态(0正常 1停用)', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + key `idx_college_id` (`college_id`), + key `idx_user_id` (`user_id`) +) engine=innodb default charset=utf8mb4 comment='二级学院宿舍管理员信息表'; + +-- 11. 二级学院床位绑定关系表 +drop table if exists `xg_dorm_college_bed`; +create table `xg_dorm_college_bed` ( + `id` bigint(20) not null comment '主键ID', + `college_id` bigint(20) not null comment '学院ID', + `bed_id` bigint(20) not null comment '床位ID', + `building_id` bigint(20) not null comment '宿舍楼ID', + `room_id` bigint(20) not null comment '房间ID', + `status` char(1) default '0' comment '状态(0正常 1已解除)', + `assign_time` datetime default null comment '分配时间', + `release_time` datetime default null comment '到期解除时间', + `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', + `tenant_id` bigint(20) default '0' comment '租户编号', + `create_by` bigint(20) default null comment '创建者', + `create_time` datetime default null comment '创建时间', + `update_by` bigint(20) default null comment '更新者', + `update_time` datetime default null comment '更新时间', + `remark` varchar(500) default null comment '备注', + primary key (`id`), + unique key `uk_college_bed` (`college_id`, `bed_id`), + key `idx_college_id` (`college_id`), + key `idx_bed_id` (`bed_id`), + key `idx_building_id` (`building_id`), + key `idx_room_id` (`room_id`) +) engine=innodb default charset=utf8mb4 comment='二级学院床位绑定关系表'; \ No newline at end of file From 225a268e329afde61c8bec71adae3bf215515290 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Mon, 21 Jul 2025 14:00:18 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=AE=BF=E7=AE=A1?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cursorignore | 3 + .../java/org/dromara/xg/controller/.gitkeep | 2 - .../xg/controller/XgDormAreaController.java | 105 ++++ .../controller/XgDormBuildingController.java | 105 ++++ .../xg/controller/XgDormCampusController.java | 105 ++++ .../XgDormManagerBuildingController.java | 105 ++++ .../controller/XgDormManagerController.java | 117 ++++ .../XgDormManagerSourceController.java | 120 ++++ .../main/java/org/dromara/xg/domain/.gitkeep | 2 - .../org/dromara/xg/domain/XgDormArea.java | 66 +++ .../org/dromara/xg/domain/XgDormBuilding.java | 76 +++ .../org/dromara/xg/domain/XgDormCampus.java | 61 ++ .../org/dromara/xg/domain/XgDormManager.java | 76 +++ .../xg/domain/XgDormManagerBuilding.java | 56 ++ .../xg/domain/XgDormManagerSource.java | 66 +++ .../java/org/dromara/xg/domain/bo/.gitkeep | 2 - .../dromara/xg/domain/bo/XgDormAreaBo.java | 58 ++ .../xg/domain/bo/XgDormBuildingBo.java | 69 +++ .../dromara/xg/domain/bo/XgDormCampusBo.java | 57 ++ .../dromara/xg/domain/bo/XgDormManagerBo.java | 77 +++ .../xg/domain/bo/XgDormManagerBuildingBo.java | 57 ++ .../xg/domain/bo/XgDormManagerSourceBo.java | 67 +++ .../java/org/dromara/xg/domain/vo/.gitkeep | 2 - .../org/dromara/xg/domain/vo/TeacherVO.java | 63 ++ .../dromara/xg/domain/vo/XgDormAreaVo.java | 71 +++ .../xg/domain/vo/XgDormBuildingVo.java | 95 +++ .../dromara/xg/domain/vo/XgDormCampusVo.java | 68 +++ .../xg/domain/vo/XgDormManagerBuildingVo.java | 68 +++ .../xg/domain/vo/XgDormManagerSourceVo.java | 80 +++ .../dromara/xg/domain/vo/XgDormManagerVo.java | 92 +++ .../main/java/org/dromara/xg/mapper/.gitkeep | 2 - .../dromara/xg/mapper/XgDormAreaMapper.java | 22 + .../xg/mapper/XgDormBuildingMapper.java | 22 + .../dromara/xg/mapper/XgDormCampusMapper.java | 15 + .../mapper/XgDormManagerBuildingMapper.java | 15 + .../xg/mapper/XgDormManagerMapper.java | 15 + .../xg/mapper/XgDormManagerSourceMapper.java | 15 + .../main/java/org/dromara/xg/service/.gitkeep | 2 - .../xg/service/IXgDormAreaService.java | 68 +++ .../xg/service/IXgDormBuildingService.java | 68 +++ .../xg/service/IXgDormCampusService.java | 68 +++ .../IXgDormManagerBuildingService.java | 68 +++ .../xg/service/IXgDormManagerService.java | 77 +++ .../service/IXgDormManagerSourceService.java | 78 +++ .../java/org/dromara/xg/service/impl/.gitkeep | 2 - .../service/impl/XgDormAreaServiceImpl.java | 134 +++++ .../impl/XgDormBuildingServiceImpl.java | 136 +++++ .../service/impl/XgDormCampusServiceImpl.java | 133 +++++ .../XgDormManagerBuildingServiceImpl.java | 135 +++++ .../impl/XgDormManagerServiceImpl.java | 182 ++++++ .../impl/XgDormManagerSourceServiceImpl.java | 191 +++++++ .../glysqgx/XgDormManagerSourceMapper.xml | 7 + .../XgDormManagerBuildingMapper.xml | 7 + .../mapper/ssglyxx/XgDormManagerMapper.xml | 7 + .../mapper/sslxx/XgDormBuildingMapper.xml | 51 ++ .../mapper/ssqxx/XgDormAreaMapper.xml | 37 ++ .../mapper/xqxx/XgDormCampusMapper.xml | 7 + backend/script/sql/xg_dorm_manager.sql | 29 + .../宿舍管理数据库建表脚本.sql | 12 +- .../学工管理-宿舍管理/菜单授权列表.sql | 60 ++ .../api/glysqgx/dormManagerSource/index.ts | 63 ++ .../api/glysqgx/dormManagerSource/types.ts | 126 ++++ .../glysslqxgx/dormManagerBuilding/index.ts | 63 ++ .../glysslqxgx/dormManagerBuilding/types.ts | 96 ++++ web/src/api/ssglyxx/dormManager/index.ts | 63 ++ web/src/api/ssglyxx/dormManager/types.ts | 156 +++++ web/src/api/sslxx/dormBuilding/index.ts | 85 +++ web/src/api/sslxx/dormBuilding/types.ts | 126 ++++ web/src/api/ssqxx/dormArea/index.ts | 63 ++ web/src/api/ssqxx/dormArea/types.ts | 91 +++ web/src/api/xqxx/dormCampus/index.ts | 63 ++ web/src/api/xqxx/dormCampus/types.ts | 86 +++ web/src/api/xsssgly/dormManager.ts | 53 ++ web/src/views/sslxx/dormBuilding/index.vue | 540 ++++++++++++++++++ web/src/views/ssqxx/dormArea/index.vue | 392 +++++++++++++ web/src/views/xqxx/dormCampus/index.vue | 250 ++++++++ .../views/xsssgly/components/AdminDialog.vue | 355 ++++++++++++ .../views/xsssgly/components/AdminTable.vue | 21 + .../views/xsssgly/components/ScopeDialog.vue | 153 +++++ web/src/views/xsssgly/index.vue | 445 +++++++++++++++ 80 files changed, 6931 insertions(+), 15 deletions(-) create mode 100644 .cursorignore delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormCampusController.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerBuildingController.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerController.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormArea.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormBuilding.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormCampus.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManager.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerBuilding.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerSource.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormAreaBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormBuildingBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormCampusBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBuildingBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TeacherVO.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormAreaVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormBuildingVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormCampusVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerBuildingVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerVo.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormAreaMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBuildingMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormCampusMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerBuildingMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormCampusService.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerBuildingService.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerService.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java delete mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/.gitkeep create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormCampusServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerBuildingServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysslqxgx/XgDormManagerBuildingMapper.xml create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssglyxx/XgDormManagerMapper.xml create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/sslxx/XgDormBuildingMapper.xml create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssqxx/XgDormAreaMapper.xml create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/xqxx/XgDormCampusMapper.xml create mode 100644 backend/script/sql/xg_dorm_manager.sql create mode 100644 docs/设计文档/database/学工管理-宿舍管理/菜单授权列表.sql create mode 100644 web/src/api/glysqgx/dormManagerSource/index.ts create mode 100644 web/src/api/glysqgx/dormManagerSource/types.ts create mode 100644 web/src/api/glysslqxgx/dormManagerBuilding/index.ts create mode 100644 web/src/api/glysslqxgx/dormManagerBuilding/types.ts create mode 100644 web/src/api/ssglyxx/dormManager/index.ts create mode 100644 web/src/api/ssglyxx/dormManager/types.ts create mode 100644 web/src/api/sslxx/dormBuilding/index.ts create mode 100644 web/src/api/sslxx/dormBuilding/types.ts create mode 100644 web/src/api/ssqxx/dormArea/index.ts create mode 100644 web/src/api/ssqxx/dormArea/types.ts create mode 100644 web/src/api/xqxx/dormCampus/index.ts create mode 100644 web/src/api/xqxx/dormCampus/types.ts create mode 100644 web/src/api/xsssgly/dormManager.ts create mode 100644 web/src/views/sslxx/dormBuilding/index.vue create mode 100644 web/src/views/ssqxx/dormArea/index.vue create mode 100644 web/src/views/xqxx/dormCampus/index.vue create mode 100644 web/src/views/xsssgly/components/AdminDialog.vue create mode 100644 web/src/views/xsssgly/components/AdminTable.vue create mode 100644 web/src/views/xsssgly/components/ScopeDialog.vue create mode 100644 web/src/views/xsssgly/index.vue diff --git a/.cursorignore b/.cursorignore new file mode 100644 index 00000000..4535580f --- /dev/null +++ b/.cursorignore @@ -0,0 +1,3 @@ +# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv) +temp/ +test/ diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/.gitkeep deleted file mode 100644 index b4578324..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 控制器层 -# 此目录用于存放REST API控制器类 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java new file mode 100644 index 00000000..97bbc3a1 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java @@ -0,0 +1,105 @@ +package org.dromara.xg.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgDormAreaVo; +import org.dromara.xg.domain.bo.XgDormAreaBo; +import org.dromara.xg.service.IXgDormAreaService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 宿舍区信息 + * + * @author zlwu + * @date 2025-07-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ssqxx/dormArea") +public class XgDormAreaController extends BaseController { + + private final IXgDormAreaService xgDormAreaService; + + /** + * 查询宿舍区信息列表 + */ + @SaCheckPermission("ssqxx:dormArea:list") + @GetMapping("/list") + public TableDataInfo list(XgDormAreaBo bo, PageQuery pageQuery) { + return xgDormAreaService.queryPageList(bo, pageQuery); + } + + /** + * 导出宿舍区信息列表 + */ + @SaCheckPermission("ssqxx:dormArea:export") + @Log(title = "宿舍区信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgDormAreaBo bo, HttpServletResponse response) { + List list = xgDormAreaService.queryList(bo); + ExcelUtil.exportExcel(list, "宿舍区信息", XgDormAreaVo.class, response); + } + + /** + * 获取宿舍区信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ssqxx:dormArea:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xgDormAreaService.queryById(id)); + } + + /** + * 新增宿舍区信息 + */ + @SaCheckPermission("ssqxx:dormArea:add") + @Log(title = "宿舍区信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgDormAreaBo bo) { + return toAjax(xgDormAreaService.insertByBo(bo)); + } + + /** + * 修改宿舍区信息 + */ + @SaCheckPermission("ssqxx:dormArea:edit") + @Log(title = "宿舍区信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgDormAreaBo bo) { + return toAjax(xgDormAreaService.updateByBo(bo)); + } + + /** + * 删除宿舍区信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("ssqxx:dormArea:remove") + @Log(title = "宿舍区信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xgDormAreaService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java new file mode 100644 index 00000000..fb7f45c2 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java @@ -0,0 +1,105 @@ +package org.dromara.xg.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgDormBuildingVo; +import org.dromara.xg.domain.bo.XgDormBuildingBo; +import org.dromara.xg.service.IXgDormBuildingService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 宿舍楼信息 + * + * @author zlwu + * @date 2025-07-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/sslxx/dormBuilding") +public class XgDormBuildingController extends BaseController { + + private final IXgDormBuildingService xgDormBuildingService; + + /** + * 查询宿舍楼信息列表 + */ + @SaCheckPermission("sslxx:dormBuilding:list") + @GetMapping("/list") + public TableDataInfo list(XgDormBuildingBo bo, PageQuery pageQuery) { + return xgDormBuildingService.queryPageList(bo, pageQuery); + } + + /** + * 导出宿舍楼信息列表 + */ + @SaCheckPermission("sslxx:dormBuilding:export") + @Log(title = "宿舍楼信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgDormBuildingBo bo, HttpServletResponse response) { + List list = xgDormBuildingService.queryList(bo); + ExcelUtil.exportExcel(list, "宿舍楼信息", XgDormBuildingVo.class, response); + } + + /** + * 获取宿舍楼信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("sslxx:dormBuilding:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xgDormBuildingService.queryById(id)); + } + + /** + * 新增宿舍楼信息 + */ + @SaCheckPermission("sslxx:dormBuilding:add") + @Log(title = "宿舍楼信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgDormBuildingBo bo) { + return toAjax(xgDormBuildingService.insertByBo(bo)); + } + + /** + * 修改宿舍楼信息 + */ + @SaCheckPermission("sslxx:dormBuilding:edit") + @Log(title = "宿舍楼信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgDormBuildingBo bo) { + return toAjax(xgDormBuildingService.updateByBo(bo)); + } + + /** + * 删除宿舍楼信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("sslxx:dormBuilding:remove") + @Log(title = "宿舍楼信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xgDormBuildingService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormCampusController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormCampusController.java new file mode 100644 index 00000000..f9508230 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormCampusController.java @@ -0,0 +1,105 @@ +package org.dromara.xg.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgDormCampusVo; +import org.dromara.xg.domain.bo.XgDormCampusBo; +import org.dromara.xg.service.IXgDormCampusService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 校区信息 + * + * @author zlwu + * @date 2025-07-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/xqxx/dormCampus") +public class XgDormCampusController extends BaseController { + + private final IXgDormCampusService xgDormCampusService; + + /** + * 查询校区信息列表 + */ + @SaCheckPermission("xqxx:dormCampus:list") + @GetMapping("/list") + public TableDataInfo list(XgDormCampusBo bo, PageQuery pageQuery) { + return xgDormCampusService.queryPageList(bo, pageQuery); + } + + /** + * 导出校区信息列表 + */ + @SaCheckPermission("xqxx:dormCampus:export") + @Log(title = "校区信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgDormCampusBo bo, HttpServletResponse response) { + List list = xgDormCampusService.queryList(bo); + ExcelUtil.exportExcel(list, "校区信息", XgDormCampusVo.class, response); + } + + /** + * 获取校区信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("xqxx:dormCampus:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xgDormCampusService.queryById(id)); + } + + /** + * 新增校区信息 + */ + @SaCheckPermission("xqxx:dormCampus:add") + @Log(title = "校区信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgDormCampusBo bo) { + return toAjax(xgDormCampusService.insertByBo(bo)); + } + + /** + * 修改校区信息 + */ + @SaCheckPermission("xqxx:dormCampus:edit") + @Log(title = "校区信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgDormCampusBo bo) { + return toAjax(xgDormCampusService.updateByBo(bo)); + } + + /** + * 删除校区信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("xqxx:dormCampus:remove") + @Log(title = "校区信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xgDormCampusService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerBuildingController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerBuildingController.java new file mode 100644 index 00000000..c1dbe63f --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerBuildingController.java @@ -0,0 +1,105 @@ +package org.dromara.xg.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgDormManagerBuildingVo; +import org.dromara.xg.domain.bo.XgDormManagerBuildingBo; +import org.dromara.xg.service.IXgDormManagerBuildingService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 管理员宿舍楼权限关系 + * + * @author Lion Li + * @date 2025-07-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/glysslqxgx/dormManagerBuilding") +public class XgDormManagerBuildingController extends BaseController { + + private final IXgDormManagerBuildingService xgDormManagerBuildingService; + + /** + * 查询管理员宿舍楼权限关系列表 + */ + @SaCheckPermission("glysslqxgx:dormManagerBuilding:list") + @GetMapping("/list") + public TableDataInfo list(XgDormManagerBuildingBo bo, PageQuery pageQuery) { + return xgDormManagerBuildingService.queryPageList(bo, pageQuery); + } + + /** + * 导出管理员宿舍楼权限关系列表 + */ + @SaCheckPermission("glysslqxgx:dormManagerBuilding:export") + @Log(title = "管理员宿舍楼权限关系", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgDormManagerBuildingBo bo, HttpServletResponse response) { + List list = xgDormManagerBuildingService.queryList(bo); + ExcelUtil.exportExcel(list, "管理员宿舍楼权限关系", XgDormManagerBuildingVo.class, response); + } + + /** + * 获取管理员宿舍楼权限关系详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("glysslqxgx:dormManagerBuilding:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xgDormManagerBuildingService.queryById(id)); + } + + /** + * 新增管理员宿舍楼权限关系 + */ + @SaCheckPermission("glysslqxgx:dormManagerBuilding:add") + @Log(title = "管理员宿舍楼权限关系", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgDormManagerBuildingBo bo) { + return toAjax(xgDormManagerBuildingService.insertByBo(bo)); + } + + /** + * 修改管理员宿舍楼权限关系 + */ + @SaCheckPermission("glysslqxgx:dormManagerBuilding:edit") + @Log(title = "管理员宿舍楼权限关系", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgDormManagerBuildingBo bo) { + return toAjax(xgDormManagerBuildingService.updateByBo(bo)); + } + + /** + * 删除管理员宿舍楼权限关系 + * + * @param ids 主键串 + */ + @SaCheckPermission("glysslqxgx:dormManagerBuilding:remove") + @Log(title = "管理员宿舍楼权限关系", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xgDormManagerBuildingService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerController.java new file mode 100644 index 00000000..edf6cd4b --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerController.java @@ -0,0 +1,117 @@ +package org.dromara.xg.controller; + +import java.util.List; +import java.util.Map; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgDormManagerVo; +import org.dromara.xg.domain.bo.XgDormManagerBo; +import org.dromara.xg.service.IXgDormManagerService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 宿舍管理员信息 + * + * @author zlwu + * @date 2025-07-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ssglyxx/dormManager") +public class XgDormManagerController extends BaseController { + + private final IXgDormManagerService xgDormManagerService; + + /** + * 查询宿舍管理员信息列表 + */ + @SaCheckPermission("ssglyxx:dormManager:list") + @GetMapping("/list") + public TableDataInfo list(XgDormManagerBo bo, PageQuery pageQuery) { + return xgDormManagerService.queryPageList(bo, pageQuery); + } + + /** + * 导出宿舍管理员信息列表 + */ + @SaCheckPermission("ssglyxx:dormManager:export") + @Log(title = "宿舍管理员信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgDormManagerBo bo, HttpServletResponse response) { + List list = xgDormManagerService.queryList(bo); + ExcelUtil.exportExcel(list, "宿舍管理员信息", XgDormManagerVo.class, response); + } + + /** + * 获取宿舍管理员信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("ssglyxx:dormManager:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return R.ok(xgDormManagerService.queryById(id)); + } + + /** + * 获取教师列表(用于下拉选择) + * + * @param name 教师姓名(可选,用于模糊查询) + * @param managerType 管理员类型(可选,用于查询不同类型的管理员) + */ + @SaCheckPermission("ssglyxx:dormManager:list") + @GetMapping("/teachers") + public R>> listTeachers(@RequestParam(required = false) String name, + @RequestParam(required = false) String managerType) { + return R.ok(xgDormManagerService.queryTeacherList(name, managerType)); + } + + /** + * 新增宿舍管理员信息 + */ + @SaCheckPermission("ssglyxx:dormManager:add") + @Log(title = "宿舍管理员信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgDormManagerBo bo) { + return toAjax(xgDormManagerService.insertByBo(bo)); + } + + /** + * 修改宿舍管理员信息 + */ + @SaCheckPermission("ssglyxx:dormManager:edit") + @Log(title = "宿舍管理员信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgDormManagerBo bo) { + return toAjax(xgDormManagerService.updateByBo(bo)); + } + + /** + * 删除宿舍管理员信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("ssglyxx:dormManager:remove") + @Log(title = "宿舍管理员信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { + return toAjax(xgDormManagerService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java new file mode 100644 index 00000000..c18ca25d --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java @@ -0,0 +1,120 @@ +package org.dromara.xg.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgDormManagerSourceVo; +import org.dromara.xg.domain.bo.XgDormManagerSourceBo; +import org.dromara.xg.service.IXgDormManagerSourceService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 管理员授权关系 + * + * @author zlwu + * @date 2025-07-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/glysqgx/dormManagerSource") +public class XgDormManagerSourceController extends BaseController { + + private final IXgDormManagerSourceService xgDormManagerSourceService; + + /** + * 查询管理员授权关系列表 + */ + @SaCheckPermission("glysqgx:dormManagerSource:list") + @GetMapping("/list") + public TableDataInfo list(XgDormManagerSourceBo bo, PageQuery pageQuery) { + return xgDormManagerSourceService.queryPageList(bo, pageQuery); + } + + /** + * 导出管理员授权关系列表 + */ + @SaCheckPermission("glysqgx:dormManagerSource:export") + @Log(title = "管理员授权关系", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgDormManagerSourceBo bo, HttpServletResponse response) { + List list = xgDormManagerSourceService.queryList(bo); + ExcelUtil.exportExcel(list, "管理员授权关系", XgDormManagerSourceVo.class, response); + } + + /** + * 获取管理员授权关系详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("glysqgx:dormManagerSource:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return R.ok(xgDormManagerSourceService.queryById(id)); + } + + /** + * 新增管理员授权关系 + */ + @SaCheckPermission("glysqgx:dormManagerSource:add") + @Log(title = "管理员授权关系", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgDormManagerSourceBo bo) { + return toAjax(xgDormManagerSourceService.insertByBo(bo)); + } + + /** + * 修改管理员授权关系 + */ + @SaCheckPermission("glysqgx:dormManagerSource:edit") + @Log(title = "管理员授权关系", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgDormManagerSourceBo bo) { + return toAjax(xgDormManagerSourceService.updateByBo(bo)); + } + + /** + * 删除管理员授权关系 + * + * @param ids 主键串 + */ + @SaCheckPermission("glysqgx:dormManagerSource:remove") + @Log(title = "管理员授权关系", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { + return toAjax(xgDormManagerSourceService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 批量分配管理员数据范围 + * + * @param managerId 管理员ID + * @param authType 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @param authSourceIds 授权来源ID列表 + */ + @SaCheckPermission("glysqgx:dormManagerSource:edit") + @Log(title = "分配管理员数据范围", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/assignScope") + public R assignScope(@RequestParam @NotNull(message = "管理员ID不能为空") Long managerId, + @RequestParam @NotNull(message = "授权类型不能为空") Character authType, + @RequestBody @NotEmpty(message = "授权来源ID不能为空") List authSourceIds) { + return toAjax(xgDormManagerSourceService.assignScope(managerId, authType, authSourceIds)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/.gitkeep deleted file mode 100644 index 008b7da7..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 实体类 -# 此目录用于存放数据库实体类,对应数据库表结构 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormArea.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormArea.java new file mode 100644 index 00000000..3481a8da --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormArea.java @@ -0,0 +1,66 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 宿舍区信息对象 xg_dorm_area + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_dorm_area") +public class XgDormArea extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 宿舍区编码 + */ + private String areaCode; + + /** + * 宿舍区名称 + */ + private String areaName; + + /** + * 所属校区ID + */ + private Long campusId; + + /** + * 宿舍区描述 + */ + private String areaDescription; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private String deleted; + + /** + * 备注 + */ + private String remark; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormBuilding.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormBuilding.java new file mode 100644 index 00000000..439281f8 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormBuilding.java @@ -0,0 +1,76 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 宿舍楼信息对象 xg_dorm_building + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_dorm_building") +public class XgDormBuilding extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 宿舍楼编码 + */ + private String buildingCode; + + /** + * 宿舍楼名称 + */ + private String buildingName; + + /** + * 所属宿舍区ID + */ + private Long areaId; + + /** + * 所属校区ID + */ + private Long campusId; + + /** + * 宿舍楼类型(1男生楼 2女生楼 3混合楼) + */ + private String buildingType; + + /** + * 宿舍楼描述 + */ + private String buildingDescription; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private String deleted; + + /** + * 备注 + */ + private String remark; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormCampus.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormCampus.java new file mode 100644 index 00000000..c6502ccf --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormCampus.java @@ -0,0 +1,61 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 校区信息对象 xg_dorm_campus + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_dorm_campus") +public class XgDormCampus extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 校区编码 + */ + private String campusCode; + + /** + * 校区名称 + */ + private String campusName; + + /** + * 校区描述 + */ + private String campusDescription; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private String deleted; + + /** + * 备注 + */ + private String remark; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManager.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManager.java new file mode 100644 index 00000000..67519ce2 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManager.java @@ -0,0 +1,76 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 宿舍管理员信息对象 xg_dorm_manager + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_dorm_manager") +public class XgDormManager extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 管理员姓名 + */ + private String managerName; + + /** + * 管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员) + */ + private String managerType; + + /** + * 管理级别(1-5,1为最高) + */ + private Long managerLevel; + + /** + * 关联用户ID + */ + private Long userId; + + /** + * 联系电话 + */ + private String phone; + + /** + * 性别(0男 1女 2未知) + */ + private String gender; + + /** + * 状态(0正常 1停用) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private String deleted; + + /** + * 备注 + */ + private String remark; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerBuilding.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerBuilding.java new file mode 100644 index 00000000..7d479b77 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerBuilding.java @@ -0,0 +1,56 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 管理员宿舍楼权限关系对象 xg_dorm_manager_building + * + * @author Lion Li + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_dorm_manager_building") +public class XgDormManagerBuilding extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 管理员ID + */ + private Long managerId; + + /** + * 宿舍楼ID + */ + private Long buildingId; + + /** + * 状态(0有效 1已撤销) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private String deleted; + + /** + * 备注 + */ + private String remark; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerSource.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerSource.java new file mode 100644 index 00000000..dc9b6513 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormManagerSource.java @@ -0,0 +1,66 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 管理员授权关系对象 xg_dorm_manager_source + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_dorm_manager_source") +public class XgDormManagerSource extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 管理员ID + */ + private Long managerId; + + /** + * 权限类型(1查看 2编辑 3完全管理) + */ + private String permissionType; + + /** + * 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + */ + private String authType; + + /** + * 授权来源ID(对应校区ID或宿舍区ID或楼栋ID) + */ + private Long authSource; + + /** + * 状态(0有效 1已撤销) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private String deleted; + + /** + * 备注 + */ + private String remark; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/.gitkeep deleted file mode 100644 index efe1afff..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 业务对象(Business Object) -# 此目录用于存放业务对象类,用于接收前端参数和业务逻辑处理 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormAreaBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormAreaBo.java new file mode 100644 index 00000000..13d8b2a3 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormAreaBo.java @@ -0,0 +1,58 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgDormArea; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 宿舍区信息业务对象 xg_dorm_area + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgDormArea.class, reverseConvertGenerate = false) +public class XgDormAreaBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 宿舍区编码 + */ + @NotBlank(message = "宿舍区编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String areaCode; + + /** + * 宿舍区名称 + */ + @NotBlank(message = "宿舍区名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String areaName; + + /** + * 所属校区ID + */ + @NotNull(message = "所属校区ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long campusId; + + /** + * 宿舍区描述 + */ + private String areaDescription; + + /** + * 排序号 + */ + private Long sortOrder; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormBuildingBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormBuildingBo.java new file mode 100644 index 00000000..da4cdd69 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormBuildingBo.java @@ -0,0 +1,69 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgDormBuilding; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 宿舍楼信息业务对象 xg_dorm_building + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgDormBuilding.class, reverseConvertGenerate = false) +public class XgDormBuildingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 宿舍楼编码 + */ + @NotBlank(message = "宿舍楼编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String buildingCode; + + /** + * 宿舍楼名称 + */ + @NotBlank(message = "宿舍楼名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String buildingName; + + /** + * 所属宿舍区ID + */ + @NotNull(message = "所属宿舍区ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long areaId; + + /** + * 所属校区ID + */ + @NotNull(message = "所属校区ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long campusId; + + /** + * 宿舍楼类型(1男生楼 2女生楼 3混合楼) + */ + private String buildingType; + + /** + * 宿舍楼描述 + */ + private String buildingDescription; + + /** + * 排序号 + */ + private Long sortOrder; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormCampusBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormCampusBo.java new file mode 100644 index 00000000..8b28cd70 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormCampusBo.java @@ -0,0 +1,57 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgDormCampus; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 校区信息业务对象 xg_dorm_campus + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgDormCampus.class, reverseConvertGenerate = false) +public class XgDormCampusBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 校区编码 + */ + @NotBlank(message = "校区编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String campusCode; + + /** + * 校区名称 + */ + @NotBlank(message = "校区名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String campusName; + + /** + * 校区描述 + */ + private String campusDescription; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBo.java new file mode 100644 index 00000000..54ac2995 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBo.java @@ -0,0 +1,77 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgDormManager; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 宿舍管理员信息业务对象 xg_dorm_manager + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgDormManager.class, reverseConvertGenerate = false) +public class XgDormManagerBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 管理员姓名 + */ + @NotBlank(message = "管理员姓名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String managerName; + + /** + * 管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员) + */ + @NotBlank(message = "管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String managerType; + + /** + * 管理级别(1-5,1为最高) + */ + private Long managerLevel; + + /** + * 关联用户ID + */ + private Long userId; + + /** + * 联系电话 + */ + private String phone; + + /** + * 性别(0男 1女 2未知) + */ + private String gender; + + /** + * 状态(0正常 1停用) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + private String deleted; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBuildingBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBuildingBo.java new file mode 100644 index 00000000..fffe51b4 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerBuildingBo.java @@ -0,0 +1,57 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgDormManagerBuilding; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 管理员宿舍楼权限关系业务对象 xg_dorm_manager_building + * + * @author Lion Li + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgDormManagerBuilding.class, reverseConvertGenerate = false) +public class XgDormManagerBuildingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 管理员ID + */ + @NotNull(message = "管理员ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long managerId; + + /** + * 宿舍楼ID + */ + @NotNull(message = "宿舍楼ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long buildingId; + + /** + * 状态(0有效 1已撤销) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + private String deleted; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java new file mode 100644 index 00000000..abfdb13d --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java @@ -0,0 +1,67 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgDormManagerSource; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 管理员授权关系业务对象 xg_dorm_manager_source + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgDormManagerSource.class, reverseConvertGenerate = false) +public class XgDormManagerSourceBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 管理员ID + */ + @NotNull(message = "管理员ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long managerId; + + /** + * 权限类型(1查看 2编辑 3完全管理) + */ + private String permissionType; + + /** + * 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + */ + @NotBlank(message = "授权类型(1全校级 2校区级 3宿舍区级 4楼栋级)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String authType; + + /** + * 授权来源ID(对应校区ID或宿舍区ID或楼栋ID) + */ + private Long authSource; + + /** + * 状态(0有效 1已撤销) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + private String deleted; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/.gitkeep deleted file mode 100644 index d65a4d5a..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 视图对象(View Object) -# 此目录用于存放视图对象类,用于返回给前端的数据结构 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TeacherVO.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TeacherVO.java new file mode 100644 index 00000000..51c8d956 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TeacherVO.java @@ -0,0 +1,63 @@ +package org.dromara.xg.domain.vo; + +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; + +/** + * 教师信息视图对象 + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@NoArgsConstructor +public class TeacherVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 用户名称 + */ + private String userName; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新者 + */ + private Long updateBy; +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormAreaVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormAreaVo.java new file mode 100644 index 00000000..409daae4 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormAreaVo.java @@ -0,0 +1,71 @@ +package org.dromara.xg.domain.vo; + +import org.dromara.xg.domain.XgDormArea; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 宿舍区信息视图对象 xg_dorm_area + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgDormArea.class) +public class XgDormAreaVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 宿舍区编码 + */ + @ExcelProperty(value = "宿舍区编码") + private String areaCode; + + /** + * 宿舍区名称 + */ + @ExcelProperty(value = "宿舍区名称") + private String areaName; + + /** + * 所属校区ID + */ + @ExcelProperty(value = "所属校区ID") + private Long campusId; + + /** + * 校区名称 + */ + @ExcelProperty(value = "校区名称") + private String campusName; + + /** + * 宿舍区描述 + */ + @ExcelProperty(value = "宿舍区描述") + private String areaDescription; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormBuildingVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormBuildingVo.java new file mode 100644 index 00000000..6709739e --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormBuildingVo.java @@ -0,0 +1,95 @@ +package org.dromara.xg.domain.vo; + +import org.dromara.xg.domain.XgDormBuilding; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 宿舍楼信息视图对象 xg_dorm_building + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgDormBuilding.class) +public class XgDormBuildingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 宿舍楼编码 + */ + @ExcelProperty(value = "宿舍楼编码") + private String buildingCode; + + /** + * 宿舍楼名称 + */ + @ExcelProperty(value = "宿舍楼名称") + private String buildingName; + + /** + * 所属宿舍区ID + */ + @ExcelProperty(value = "所属宿舍区ID") + private Long areaId; + + /** + * 宿舍区名称 + */ + @ExcelProperty(value = "宿舍区名称") + private String areaName; + + /** + * 所属校区ID + */ + @ExcelProperty(value = "所属校区ID") + private Long campusId; + + /** + * 校区名称 + */ + @ExcelProperty(value = "校区名称") + private String campusName; + + /** + * 宿舍楼类型(1男生楼 2女生楼 3混合楼) + */ + @ExcelProperty(value = "宿舍楼类型(1男生楼 2女生楼 3混合楼)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "dorm_type") + private String buildingType; + + /** + * 宿舍楼描述 + */ + @ExcelProperty(value = "宿舍楼描述") + private String buildingDescription; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + + // 基础字段 + private Long createBy; // 创建者 + private Date createTime; // 创建时间 + private Long updateBy; // 更新者 + private Date updateTime; // 更新时间 +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormCampusVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormCampusVo.java new file mode 100644 index 00000000..dd4cb956 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormCampusVo.java @@ -0,0 +1,68 @@ +package org.dromara.xg.domain.vo; + +import org.dromara.xg.domain.XgDormCampus; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 校区信息视图对象 xg_dorm_campus + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgDormCampus.class) +public class XgDormCampusVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 校区编码 + */ + @ExcelProperty(value = "校区编码") + private String campusCode; + + /** + * 校区名称 + */ + @ExcelProperty(value = "校区名称") + private String campusName; + + /** + * 校区描述 + */ + @ExcelProperty(value = "校区描述") + private String campusDescription; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerBuildingVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerBuildingVo.java new file mode 100644 index 00000000..d404da1a --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerBuildingVo.java @@ -0,0 +1,68 @@ +package org.dromara.xg.domain.vo; + +import org.dromara.xg.domain.XgDormManagerBuilding; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 管理员宿舍楼权限关系视图对象 xg_dorm_manager_building + * + * @author Lion Li + * @date 2025-07-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgDormManagerBuilding.class) +public class XgDormManagerBuildingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 管理员ID + */ + @ExcelProperty(value = "管理员ID") + private Long managerId; + + /** + * 宿舍楼ID + */ + @ExcelProperty(value = "宿舍楼ID") + private Long buildingId; + + /** + * 状态(0有效 1已撤销) + */ + @ExcelProperty(value = "状态(0有效 1已撤销)") + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @ExcelProperty(value = "删除标志(0代表存在 1代表删除)") + private String deleted; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java new file mode 100644 index 00000000..de49820c --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java @@ -0,0 +1,80 @@ +package org.dromara.xg.domain.vo; + +import org.dromara.xg.domain.XgDormManagerSource; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 管理员授权关系视图对象 xg_dorm_manager_source + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgDormManagerSource.class) +public class XgDormManagerSourceVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 管理员ID + */ + @ExcelProperty(value = "管理员ID") + private Long managerId; + + /** + * 权限类型(1查看 2编辑 3完全管理) + */ + @ExcelProperty(value = "权限类型(1查看 2编辑 3完全管理)") + private String permissionType; + + /** + * 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + */ + @ExcelProperty(value = "授权类型(1全校级 2校区级 3宿舍区级 4楼栋级)") + private String authType; + + /** + * 授权来源ID(对应校区ID或宿舍区ID或楼栋ID) + */ + @ExcelProperty(value = "授权来源ID(对应校区ID或宿舍区ID或楼栋ID)") + private Long authSource; + + /** + * 状态(0有效 1已撤销) + */ + @ExcelProperty(value = "状态(0有效 1已撤销)") + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @ExcelProperty(value = "删除标志(0代表存在 1代表删除)") + private String deleted; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerVo.java new file mode 100644 index 00000000..ad1cac25 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerVo.java @@ -0,0 +1,92 @@ +package org.dromara.xg.domain.vo; + +import org.dromara.xg.domain.XgDormManager; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 宿舍管理员信息视图对象 xg_dorm_manager + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgDormManager.class) +public class XgDormManagerVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 管理员姓名 + */ + @ExcelProperty(value = "管理员姓名") + private String managerName; + + /** + * 管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员) + */ + @ExcelProperty(value = "管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员)") + private String managerType; + + /** + * 管理级别(1-5,1为最高) + */ + @ExcelProperty(value = "管理级别(1-5,1为最高)") + private Long managerLevel; + + /** + * 关联用户ID + */ + @ExcelProperty(value = "关联用户ID") + private Long userId; + + /** + * 联系电话 + */ + @ExcelProperty(value = "联系电话") + private String phone; + + /** + * 性别(0男 1女 2未知) + */ + @ExcelProperty(value = "性别(0男 1女 2未知)") + private String gender; + + /** + * 状态(0正常 1停用) + */ + @ExcelProperty(value = "状态(0正常 1停用)") + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @ExcelProperty(value = "删除标志(0代表存在 1代表删除)") + private String deleted; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/.gitkeep deleted file mode 100644 index 9aa902fc..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 数据访问层 -# 此目录用于存放MyBatis Mapper接口 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormAreaMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormAreaMapper.java new file mode 100644 index 00000000..d133e353 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormAreaMapper.java @@ -0,0 +1,22 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgDormArea; +import org.dromara.xg.domain.vo.XgDormAreaVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.xg.domain.bo.XgDormAreaBo; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * 宿舍区信息Mapper接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface XgDormAreaMapper extends BaseMapperPlus { + + /** + * 分页查询并返回校区名称 + */ + Page selectPageWithCampusName(Page page, + @org.apache.ibatis.annotations.Param("bo") XgDormAreaBo bo); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBuildingMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBuildingMapper.java new file mode 100644 index 00000000..acb29f7f --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBuildingMapper.java @@ -0,0 +1,22 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgDormBuilding; +import org.dromara.xg.domain.vo.XgDormBuildingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.xg.domain.bo.XgDormBuildingBo; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * 宿舍楼信息Mapper接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface XgDormBuildingMapper extends BaseMapperPlus { + + /** + * 分页查询并返回校区名称和宿舍区名称 + */ + Page selectPageWithAreaAndCampusName(Page page, + @org.apache.ibatis.annotations.Param("bo") XgDormBuildingBo bo); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormCampusMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormCampusMapper.java new file mode 100644 index 00000000..6e7716de --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormCampusMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgDormCampus; +import org.dromara.xg.domain.vo.XgDormCampusVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 校区信息Mapper接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface XgDormCampusMapper extends BaseMapperPlus { + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerBuildingMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerBuildingMapper.java new file mode 100644 index 00000000..bb9c2edf --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerBuildingMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgDormManagerBuilding; +import org.dromara.xg.domain.vo.XgDormManagerBuildingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 管理员宿舍楼权限关系Mapper接口 + * + * @author Lion Li + * @date 2025-07-20 + */ +public interface XgDormManagerBuildingMapper extends BaseMapperPlus { + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerMapper.java new file mode 100644 index 00000000..a98d6e0c --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgDormManager; +import org.dromara.xg.domain.vo.XgDormManagerVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 宿舍管理员信息Mapper接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface XgDormManagerMapper extends BaseMapperPlus { + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java new file mode 100644 index 00000000..55701bf0 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgDormManagerSource; +import org.dromara.xg.domain.vo.XgDormManagerSourceVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 管理员授权关系Mapper接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface XgDormManagerSourceMapper extends BaseMapperPlus { + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/.gitkeep deleted file mode 100644 index 693568b9..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 业务服务接口层 -# 此目录用于存放Service接口定义 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java new file mode 100644 index 00000000..a0f10bab --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java @@ -0,0 +1,68 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgDormAreaVo; +import org.dromara.xg.domain.bo.XgDormAreaBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 宿舍区信息Service接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface IXgDormAreaService { + + /** + * 查询宿舍区信息 + * + * @param id 主键 + * @return 宿舍区信息 + */ + XgDormAreaVo queryById(Long id); + + /** + * 分页查询宿舍区信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 宿舍区信息分页列表 + */ + TableDataInfo queryPageList(XgDormAreaBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的宿舍区信息列表 + * + * @param bo 查询条件 + * @return 宿舍区信息列表 + */ + List queryList(XgDormAreaBo bo); + + /** + * 新增宿舍区信息 + * + * @param bo 宿舍区信息 + * @return 是否新增成功 + */ + Boolean insertByBo(XgDormAreaBo bo); + + /** + * 修改宿舍区信息 + * + * @param bo 宿舍区信息 + * @return 是否修改成功 + */ + Boolean updateByBo(XgDormAreaBo bo); + + /** + * 校验并批量删除宿舍区信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java new file mode 100644 index 00000000..513ccbe2 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java @@ -0,0 +1,68 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgDormBuildingVo; +import org.dromara.xg.domain.bo.XgDormBuildingBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 宿舍楼信息Service接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface IXgDormBuildingService { + + /** + * 查询宿舍楼信息 + * + * @param id 主键 + * @return 宿舍楼信息 + */ + XgDormBuildingVo queryById(Long id); + + /** + * 分页查询宿舍楼信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 宿舍楼信息分页列表 + */ + TableDataInfo queryPageList(XgDormBuildingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的宿舍楼信息列表 + * + * @param bo 查询条件 + * @return 宿舍楼信息列表 + */ + List queryList(XgDormBuildingBo bo); + + /** + * 新增宿舍楼信息 + * + * @param bo 宿舍楼信息 + * @return 是否新增成功 + */ + Boolean insertByBo(XgDormBuildingBo bo); + + /** + * 修改宿舍楼信息 + * + * @param bo 宿舍楼信息 + * @return 是否修改成功 + */ + Boolean updateByBo(XgDormBuildingBo bo); + + /** + * 校验并批量删除宿舍楼信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormCampusService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormCampusService.java new file mode 100644 index 00000000..ec47d9cc --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormCampusService.java @@ -0,0 +1,68 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgDormCampusVo; +import org.dromara.xg.domain.bo.XgDormCampusBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 校区信息Service接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface IXgDormCampusService { + + /** + * 查询校区信息 + * + * @param id 主键 + * @return 校区信息 + */ + XgDormCampusVo queryById(Long id); + + /** + * 分页查询校区信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 校区信息分页列表 + */ + TableDataInfo queryPageList(XgDormCampusBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的校区信息列表 + * + * @param bo 查询条件 + * @return 校区信息列表 + */ + List queryList(XgDormCampusBo bo); + + /** + * 新增校区信息 + * + * @param bo 校区信息 + * @return 是否新增成功 + */ + Boolean insertByBo(XgDormCampusBo bo); + + /** + * 修改校区信息 + * + * @param bo 校区信息 + * @return 是否修改成功 + */ + Boolean updateByBo(XgDormCampusBo bo); + + /** + * 校验并批量删除校区信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerBuildingService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerBuildingService.java new file mode 100644 index 00000000..e20b1f7c --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerBuildingService.java @@ -0,0 +1,68 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgDormManagerBuildingVo; +import org.dromara.xg.domain.bo.XgDormManagerBuildingBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 管理员宿舍楼权限关系Service接口 + * + * @author Lion Li + * @date 2025-07-20 + */ +public interface IXgDormManagerBuildingService { + + /** + * 查询管理员宿舍楼权限关系 + * + * @param id 主键 + * @return 管理员宿舍楼权限关系 + */ + XgDormManagerBuildingVo queryById(Long id); + + /** + * 分页查询管理员宿舍楼权限关系列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 管理员宿舍楼权限关系分页列表 + */ + TableDataInfo queryPageList(XgDormManagerBuildingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的管理员宿舍楼权限关系列表 + * + * @param bo 查询条件 + * @return 管理员宿舍楼权限关系列表 + */ + List queryList(XgDormManagerBuildingBo bo); + + /** + * 新增管理员宿舍楼权限关系 + * + * @param bo 管理员宿舍楼权限关系 + * @return 是否新增成功 + */ + Boolean insertByBo(XgDormManagerBuildingBo bo); + + /** + * 修改管理员宿舍楼权限关系 + * + * @param bo 管理员宿舍楼权限关系 + * @return 是否修改成功 + */ + Boolean updateByBo(XgDormManagerBuildingBo bo); + + /** + * 校验并批量删除管理员宿舍楼权限关系信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerService.java new file mode 100644 index 00000000..2a487ebe --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerService.java @@ -0,0 +1,77 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgDormManagerVo; +import org.dromara.xg.domain.bo.XgDormManagerBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 宿舍管理员信息Service接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface IXgDormManagerService { + + /** + * 查询宿舍管理员信息 + * + * @param id 主键 + * @return 宿舍管理员信息 + */ + XgDormManagerVo queryById(Long id); + + /** + * 分页查询宿舍管理员信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 宿舍管理员信息分页列表 + */ + TableDataInfo queryPageList(XgDormManagerBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的宿舍管理员信息列表 + * + * @param bo 查询条件 + * @return 宿舍管理员信息列表 + */ + List queryList(XgDormManagerBo bo); + + /** + * 查询教师列表(用于下拉选择) + * + * @param name 教师姓名(可选,用于模糊查询) + * @return 教师列表 + */ + List> queryTeacherList(String name, String managerType); + + /** + * 新增宿舍管理员信息 + * + * @param bo 宿舍管理员信息 + * @return 是否新增成功 + */ + Boolean insertByBo(XgDormManagerBo bo); + + /** + * 修改宿舍管理员信息 + * + * @param bo 宿舍管理员信息 + * @return 是否修改成功 + */ + Boolean updateByBo(XgDormManagerBo bo); + + /** + * 校验并批量删除宿舍管理员信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java new file mode 100644 index 00000000..a5628d61 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java @@ -0,0 +1,78 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgDormManagerSourceVo; +import org.dromara.xg.domain.bo.XgDormManagerSourceBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 管理员授权关系Service接口 + * + * @author zlwu + * @date 2025-07-20 + */ +public interface IXgDormManagerSourceService { + + /** + * 查询管理员授权关系 + * + * @param id 主键 + * @return 管理员授权关系 + */ + XgDormManagerSourceVo queryById(Long id); + + /** + * 分页查询管理员授权关系列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 管理员授权关系分页列表 + */ + TableDataInfo queryPageList(XgDormManagerSourceBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的管理员授权关系列表 + * + * @param bo 查询条件 + * @return 管理员授权关系列表 + */ + List queryList(XgDormManagerSourceBo bo); + + /** + * 新增管理员授权关系 + * + * @param bo 管理员授权关系 + * @return 是否新增成功 + */ + Boolean insertByBo(XgDormManagerSourceBo bo); + + /** + * 修改管理员授权关系 + * + * @param bo 管理员授权关系 + * @return 是否修改成功 + */ + Boolean updateByBo(XgDormManagerSourceBo bo); + + /** + * 校验并批量删除管理员授权关系信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量分配管理员数据范围 + * + * @param managerId 管理员ID + * @param authType 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @param authSourceIds 授权来源ID列表 + * @return 是否分配成功 + */ + Boolean assignScope(Long managerId, Character authType, List authSourceIds); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/.gitkeep b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/.gitkeep deleted file mode 100644 index 637cd075..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/.gitkeep +++ /dev/null @@ -1,2 +0,0 @@ -# 学工管理模块 - 业务服务实现层 -# 此目录用于存放Service接口的实现类 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java new file mode 100644 index 00000000..748ee59d --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java @@ -0,0 +1,134 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.xg.domain.bo.XgDormAreaBo; +import org.dromara.xg.domain.vo.XgDormAreaVo; +import org.dromara.xg.domain.XgDormArea; +import org.dromara.xg.mapper.XgDormAreaMapper; +import org.dromara.xg.service.IXgDormAreaService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 宿舍区信息Service业务层处理 + * + * @author zlwu + * @date 2025-07-20 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgDormAreaServiceImpl implements IXgDormAreaService { + + private final XgDormAreaMapper baseMapper; + + /** + * 查询宿舍区信息 + * + * @param id 主键 + * @return 宿舍区信息 + */ + @Override + public XgDormAreaVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询宿舍区信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 宿舍区信息分页列表 + */ + @Override + public TableDataInfo queryPageList(XgDormAreaBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectPageWithCampusName(pageQuery.build(), bo); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的宿舍区信息列表 + * + * @param bo 查询条件 + * @return 宿舍区信息列表 + */ + @Override + public List queryList(XgDormAreaBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XgDormAreaBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgDormArea::getId); + lqw.like(StringUtils.isNotBlank(bo.getAreaCode()), XgDormArea::getAreaCode, bo.getAreaCode()); + lqw.like(StringUtils.isNotBlank(bo.getAreaName()), XgDormArea::getAreaName, bo.getAreaName()); + lqw.like(StringUtils.isNotBlank(bo.getAreaDescription()), XgDormArea::getAreaDescription, + bo.getAreaDescription()); + return lqw; + } + + /** + * 新增宿舍区信息 + * + * @param bo 宿舍区信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgDormAreaBo bo) { + XgDormArea add = MapstructUtils.convert(bo, XgDormArea.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改宿舍区信息 + * + * @param bo 宿舍区信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgDormAreaBo bo) { + XgDormArea update = MapstructUtils.convert(bo, XgDormArea.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgDormArea entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除宿舍区信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java new file mode 100644 index 00000000..13a647d5 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java @@ -0,0 +1,136 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.xg.domain.bo.XgDormBuildingBo; +import org.dromara.xg.domain.vo.XgDormBuildingVo; +import org.dromara.xg.domain.XgDormBuilding; +import org.dromara.xg.mapper.XgDormBuildingMapper; +import org.dromara.xg.service.IXgDormBuildingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 宿舍楼信息Service业务层处理 + * + * @author zlwu + * @date 2025-07-20 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgDormBuildingServiceImpl implements IXgDormBuildingService { + + private final XgDormBuildingMapper baseMapper; + + /** + * 查询宿舍楼信息 + * + * @param id 主键 + * @return 宿舍楼信息 + */ + @Override + public XgDormBuildingVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询宿舍楼信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 宿舍楼信息分页列表 + */ + @Override + public TableDataInfo queryPageList(XgDormBuildingBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectPageWithAreaAndCampusName(pageQuery.build(), bo); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的宿舍楼信息列表 + * + * @param bo 查询条件 + * @return 宿舍楼信息列表 + */ + @Override + public List queryList(XgDormBuildingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XgDormBuildingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgDormBuilding::getId); + lqw.like(StringUtils.isNotBlank(bo.getBuildingCode()), XgDormBuilding::getBuildingCode, bo.getBuildingCode()); + lqw.like(StringUtils.isNotBlank(bo.getBuildingName()), XgDormBuilding::getBuildingName, bo.getBuildingName()); + lqw.eq(bo.getAreaId() != null, XgDormBuilding::getAreaId, bo.getAreaId()); + lqw.eq(bo.getCampusId() != null, XgDormBuilding::getCampusId, bo.getCampusId()); + lqw.eq(StringUtils.isNotBlank(bo.getBuildingType()), XgDormBuilding::getBuildingType, bo.getBuildingType()); + lqw.eq(bo.getSortOrder() != null, XgDormBuilding::getSortOrder, bo.getSortOrder()); + return lqw; + } + + /** + * 新增宿舍楼信息 + * + * @param bo 宿舍楼信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgDormBuildingBo bo) { + XgDormBuilding add = MapstructUtils.convert(bo, XgDormBuilding.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改宿舍楼信息 + * + * @param bo 宿舍楼信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgDormBuildingBo bo) { + XgDormBuilding update = MapstructUtils.convert(bo, XgDormBuilding.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgDormBuilding entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除宿舍楼信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormCampusServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormCampusServiceImpl.java new file mode 100644 index 00000000..17b50884 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormCampusServiceImpl.java @@ -0,0 +1,133 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.xg.domain.bo.XgDormCampusBo; +import org.dromara.xg.domain.vo.XgDormCampusVo; +import org.dromara.xg.domain.XgDormCampus; +import org.dromara.xg.mapper.XgDormCampusMapper; +import org.dromara.xg.service.IXgDormCampusService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 校区信息Service业务层处理 + * + * @author zlwu + * @date 2025-07-20 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgDormCampusServiceImpl implements IXgDormCampusService { + + private final XgDormCampusMapper baseMapper; + + /** + * 查询校区信息 + * + * @param id 主键 + * @return 校区信息 + */ + @Override + public XgDormCampusVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询校区信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 校区信息分页列表 + */ + @Override + public TableDataInfo queryPageList(XgDormCampusBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的校区信息列表 + * + * @param bo 查询条件 + * @return 校区信息列表 + */ + @Override + public List queryList(XgDormCampusBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XgDormCampusBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgDormCampus::getId); + lqw.like(StringUtils.isNotBlank(bo.getCampusCode()), XgDormCampus::getCampusCode, bo.getCampusCode()); + lqw.like(StringUtils.isNotBlank(bo.getCampusName()), XgDormCampus::getCampusName, bo.getCampusName()); + return lqw; + } + + /** + * 新增校区信息 + * + * @param bo 校区信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgDormCampusBo bo) { + XgDormCampus add = MapstructUtils.convert(bo, XgDormCampus.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改校区信息 + * + * @param bo 校区信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgDormCampusBo bo) { + XgDormCampus update = MapstructUtils.convert(bo, XgDormCampus.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgDormCampus entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除校区信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerBuildingServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerBuildingServiceImpl.java new file mode 100644 index 00000000..70c2f087 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerBuildingServiceImpl.java @@ -0,0 +1,135 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.xg.domain.bo.XgDormManagerBuildingBo; +import org.dromara.xg.domain.vo.XgDormManagerBuildingVo; +import org.dromara.xg.domain.XgDormManagerBuilding; +import org.dromara.xg.mapper.XgDormManagerBuildingMapper; +import org.dromara.xg.service.IXgDormManagerBuildingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 管理员宿舍楼权限关系Service业务层处理 + * + * @author Lion Li + * @date 2025-07-20 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgDormManagerBuildingServiceImpl implements IXgDormManagerBuildingService { + + private final XgDormManagerBuildingMapper baseMapper; + + /** + * 查询管理员宿舍楼权限关系 + * + * @param id 主键 + * @return 管理员宿舍楼权限关系 + */ + @Override + public XgDormManagerBuildingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询管理员宿舍楼权限关系列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 管理员宿舍楼权限关系分页列表 + */ + @Override + public TableDataInfo queryPageList(XgDormManagerBuildingBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的管理员宿舍楼权限关系列表 + * + * @param bo 查询条件 + * @return 管理员宿舍楼权限关系列表 + */ + @Override + public List queryList(XgDormManagerBuildingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XgDormManagerBuildingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgDormManagerBuilding::getId); + lqw.eq(bo.getManagerId() != null, XgDormManagerBuilding::getManagerId, bo.getManagerId()); + lqw.eq(bo.getBuildingId() != null, XgDormManagerBuilding::getBuildingId, bo.getBuildingId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XgDormManagerBuilding::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getDeleted()), XgDormManagerBuilding::getDeleted, bo.getDeleted()); + return lqw; + } + + /** + * 新增管理员宿舍楼权限关系 + * + * @param bo 管理员宿舍楼权限关系 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgDormManagerBuildingBo bo) { + XgDormManagerBuilding add = MapstructUtils.convert(bo, XgDormManagerBuilding.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改管理员宿舍楼权限关系 + * + * @param bo 管理员宿舍楼权限关系 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgDormManagerBuildingBo bo) { + XgDormManagerBuilding update = MapstructUtils.convert(bo, XgDormManagerBuilding.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgDormManagerBuilding entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除管理员宿舍楼权限关系信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerServiceImpl.java new file mode 100644 index 00000000..4f60aa02 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerServiceImpl.java @@ -0,0 +1,182 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.xg.domain.bo.XgDormManagerBo; +import org.dromara.xg.domain.vo.XgDormManagerVo; +import org.dromara.xg.domain.XgDormManager; +import org.dromara.xg.mapper.XgDormManagerMapper; +import org.dromara.xg.service.IXgDormManagerService; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 宿舍管理员信息Service业务层处理 + * + * @author zlwu + * @date 2025-07-20 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgDormManagerServiceImpl implements IXgDormManagerService { + + private final XgDormManagerMapper baseMapper; + private final JdbcTemplate jdbcTemplate; + + /** + * 查询宿舍管理员信息 + * + * @param id 主键 + * @return 宿舍管理员信息 + */ + @Override + public XgDormManagerVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询宿舍管理员信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 宿舍管理员信息分页列表 + */ + @Override + public TableDataInfo queryPageList(XgDormManagerBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的宿舍管理员信息列表 + * + * @param bo 查询条件 + * @return 宿舍管理员信息列表 + */ + @Override + public List queryList(XgDormManagerBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + /** + * 查询教师列表(用于下拉选择) + * + * @param name 教师姓名(可选,用于模糊查询) + * @return 教师列表 + */ + @Override + public List> queryTeacherList(String name, String managerType) { + StringBuilder sql = new StringBuilder(); + sql.append( + "SELECT u.user_id as value, u.nick_name as label, u.user_name as username,u.phonenumber as phonenumber, u.sex as sex "); + sql.append("FROM sys_user u "); + sql.append("INNER JOIN sys_user_role ur ON u.user_id = ur.user_id "); + sql.append("INNER JOIN sys_role r ON ur.role_id = r.role_id "); + sql.append( + "WHERE r.role_key = 'teacher' AND u.status = '0' and not exists (select 1 from xg_dorm_manager where user_id = u.user_id and deleted = '0' and manager_type = '" + + managerType + "') "); + + List params = new ArrayList<>(); + + if (StringUtils.isNotBlank(name)) { + sql.append("AND u.nick_name LIKE ? "); + params.add("%" + name + "%"); + } + + sql.append("ORDER BY u.nick_name"); + + try { + if (params.isEmpty()) { + return jdbcTemplate.queryForList(sql.toString()); + } else { + return jdbcTemplate.queryForList(sql.toString(), params.toArray()); + } + } catch (Exception e) { + log.error("查询教师列表异常", e); + return new ArrayList<>(); + } + } + + private LambdaQueryWrapper buildQueryWrapper(XgDormManagerBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgDormManager::getId); + lqw.like(StringUtils.isNotBlank(bo.getManagerName()), XgDormManager::getManagerName, bo.getManagerName()); + lqw.eq(StringUtils.isNotBlank(bo.getManagerType()), XgDormManager::getManagerType, bo.getManagerType()); + lqw.eq(bo.getManagerLevel() != null, XgDormManager::getManagerLevel, bo.getManagerLevel()); + lqw.eq(bo.getUserId() != null, XgDormManager::getUserId, bo.getUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getPhone()), XgDormManager::getPhone, bo.getPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getGender()), XgDormManager::getGender, bo.getGender()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XgDormManager::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getDeleted()), XgDormManager::getDeleted, bo.getDeleted()); + return lqw; + } + + /** + * 新增宿舍管理员信息 + * + * @param bo 宿舍管理员信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgDormManagerBo bo) { + XgDormManager add = MapstructUtils.convert(bo, XgDormManager.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改宿舍管理员信息 + * + * @param bo 宿舍管理员信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgDormManagerBo bo) { + XgDormManager update = MapstructUtils.convert(bo, XgDormManager.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgDormManager entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除宿舍管理员信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java new file mode 100644 index 00000000..4cc797fa --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java @@ -0,0 +1,191 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.dromara.xg.domain.bo.XgDormManagerSourceBo; +import org.dromara.xg.domain.vo.XgDormManagerSourceVo; +import org.dromara.xg.domain.XgDormManagerSource; +import org.dromara.xg.mapper.XgDormManagerSourceMapper; +import org.dromara.xg.service.IXgDormManagerSourceService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.ArrayList; + +/** + * 管理员授权关系Service业务层处理 + * + * @author zlwu + * @date 2025-07-20 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgDormManagerSourceServiceImpl implements IXgDormManagerSourceService { + + private final XgDormManagerSourceMapper baseMapper; + + /** + * 查询管理员授权关系 + * + * @param id 主键 + * @return 管理员授权关系 + */ + @Override + public XgDormManagerSourceVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询管理员授权关系列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 管理员授权关系分页列表 + */ + @Override + public TableDataInfo queryPageList(XgDormManagerSourceBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的管理员授权关系列表 + * + * @param bo 查询条件 + * @return 管理员授权关系列表 + */ + @Override + public List queryList(XgDormManagerSourceBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XgDormManagerSourceBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgDormManagerSource::getId); + lqw.eq(bo.getManagerId() != null, XgDormManagerSource::getManagerId, bo.getManagerId()); + lqw.eq(StringUtils.isNotBlank(bo.getPermissionType()), XgDormManagerSource::getPermissionType, + bo.getPermissionType()); + lqw.eq(StringUtils.isNotBlank(bo.getAuthType()), XgDormManagerSource::getAuthType, bo.getAuthType()); + lqw.eq(bo.getAuthSource() != null, XgDormManagerSource::getAuthSource, bo.getAuthSource()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XgDormManagerSource::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getDeleted()), XgDormManagerSource::getDeleted, bo.getDeleted()); + return lqw; + } + + /** + * 新增管理员授权关系 + * + * @param bo 管理员授权关系 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgDormManagerSourceBo bo) { + XgDormManagerSource add = MapstructUtils.convert(bo, XgDormManagerSource.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改管理员授权关系 + * + * @param bo 管理员授权关系 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgDormManagerSourceBo bo) { + XgDormManagerSource update = MapstructUtils.convert(bo, XgDormManagerSource.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgDormManagerSource entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除管理员授权关系信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 批量分配管理员数据范围 + * + * @param managerId 管理员ID + * @param authType 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @param authSourceIds 授权来源ID列表 + * @return 是否分配成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean assignScope(Long managerId, Character authType, List authSourceIds) { + if (managerId == null || authType == null || authSourceIds == null || authSourceIds.isEmpty()) { + return false; + } + + try { + // 1. 先逻辑删除该管理员现有的对应类型的授权数据 + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(XgDormManagerSource.class) + .set(XgDormManagerSource::getDeleted, "1") + .eq(XgDormManagerSource::getManagerId, managerId) + .eq(XgDormManagerSource::getAuthType, authType.toString()) + .eq(XgDormManagerSource::getDeleted, "0"); + + baseMapper.update(null, updateWrapper); + + // 2. 批量插入新的授权数据 + List insertList = new ArrayList<>(); + for (Long authSourceId : authSourceIds) { + XgDormManagerSource entity = new XgDormManagerSource(); + entity.setManagerId(managerId); + entity.setAuthType(authType.toString()); + entity.setAuthSource(authSourceId); + entity.setPermissionType("3"); // 默认为完全管理权限 + entity.setStatus("0"); // 默认有效 + entity.setDeleted("0"); // 默认未删除 + insertList.add(entity); + } + + // 循环插入,确保每条数据都有唯一ID + for (XgDormManagerSource entity : insertList) { + baseMapper.insert(entity); + } + + return true; + } catch (Exception e) { + log.error("分配管理员数据范围失败", e); + throw e; + } + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml new file mode 100644 index 00000000..6dee8388 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysslqxgx/XgDormManagerBuildingMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysslqxgx/XgDormManagerBuildingMapper.xml new file mode 100644 index 00000000..ff467a03 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysslqxgx/XgDormManagerBuildingMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssglyxx/XgDormManagerMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssglyxx/XgDormManagerMapper.xml new file mode 100644 index 00000000..9e90d3fc --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssglyxx/XgDormManagerMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/sslxx/XgDormBuildingMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/sslxx/XgDormBuildingMapper.xml new file mode 100644 index 00000000..ac218bff --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/sslxx/XgDormBuildingMapper.xml @@ -0,0 +1,51 @@ + + + + + + diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssqxx/XgDormAreaMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssqxx/XgDormAreaMapper.xml new file mode 100644 index 00000000..78830e11 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/ssqxx/XgDormAreaMapper.xml @@ -0,0 +1,37 @@ + + + + + + diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/xqxx/XgDormCampusMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/xqxx/XgDormCampusMapper.xml new file mode 100644 index 00000000..0294dd86 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/xqxx/XgDormCampusMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/backend/script/sql/xg_dorm_manager.sql b/backend/script/sql/xg_dorm_manager.sql new file mode 100644 index 00000000..a8f35995 --- /dev/null +++ b/backend/script/sql/xg_dorm_manager.sql @@ -0,0 +1,29 @@ +-- ---------------------------- +-- 宿舍管理员表 +-- ---------------------------- +drop table if exists xg_dorm_manager; +create table xg_dorm_manager ( + id bigint(20) not null comment '主键', + name varchar(100) not null comment '管理员姓名', + phone varchar(11) not null comment '手机号码', + sex int(1) default 0 comment '性别(0男 1女 2未知)', + manager_type int(1) default 0 comment '管理类型(0全校 1校区 2宿舍区 3宿舍楼)', + scope varchar(100) comment '管理范围(校区/宿舍区/宿舍楼)', + user_id bigint(20) comment '关联用户ID', + remark varchar(500) comment '备注', + create_by bigint(20) comment '创建者', + create_time datetime comment '创建时间', + update_by bigint(20) comment '更新者', + update_time datetime comment '更新时间', + deleted char(1) default '0' comment '删除标志(0代表存在 2代表删除)', + tenant_id varchar(20) default '000000' comment '租户编号', + primary key (id) +) engine=innodb comment = '宿舍管理员信息表'; + +-- ---------------------------- +-- 初始数据 +-- ---------------------------- +INSERT INTO xg_dorm_manager(id, name, phone, sex, manager_type, scope, user_id, remark, create_by, create_time, update_by, update_time, deleted, tenant_id) +VALUES (1, '张三', '13800000001', 0, 0, null, 2, '全校主管', 1, sysdate(), 1, sysdate(), '0', '000000'); +INSERT INTO xg_dorm_manager(id, name, phone, sex, manager_type, scope, user_id, remark, create_by, create_time, update_by, update_time, deleted, tenant_id) +VALUES (2, '李四', '13800000002', 1, 0, null, 3, '全校副主管', 1, sysdate(), 1, sysdate(), '0', '000000'); diff --git a/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql b/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql index 6e970fc7..c119eb1e 100644 --- a/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql +++ b/docs/设计文档/database/学工管理-宿舍管理/宿舍管理数据库建表脚本.sql @@ -15,6 +15,7 @@ create table `xg_dorm_campus` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -35,6 +36,7 @@ create table `xg_dorm_area` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -58,6 +60,7 @@ create table `xg_dorm_building` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -83,6 +86,7 @@ create table `xg_dorm_room` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -131,6 +135,7 @@ create table `xg_dorm_bed_student` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -161,6 +166,7 @@ create table `xg_dorm_manager` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -182,6 +188,7 @@ create table `xg_dorm_manager_source` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -201,6 +208,7 @@ create table `xg_dorm_manager_building` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -224,6 +232,7 @@ create table `xg_dorm_college_manager` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -247,6 +256,7 @@ create table `xg_dorm_college_bed` ( `deleted` char(1) default '0' comment '删除标志(0代表存在 1代表删除)', `tenant_id` bigint(20) default '0' comment '租户编号', `create_by` bigint(20) default null comment '创建者', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_time` datetime default null comment '创建时间', `update_by` bigint(20) default null comment '更新者', `update_time` datetime default null comment '更新时间', @@ -257,4 +267,4 @@ create table `xg_dorm_college_bed` ( key `idx_bed_id` (`bed_id`), key `idx_building_id` (`building_id`), key `idx_room_id` (`room_id`) -) engine=innodb default charset=utf8mb4 comment='二级学院床位绑定关系表'; \ No newline at end of file +) engine=innodb default charset=utf8mb4 comment='二级学院床位绑定关系表'; \ No newline at end of file diff --git a/docs/设计文档/database/学工管理-宿舍管理/菜单授权列表.sql b/docs/设计文档/database/学工管理-宿舍管理/菜单授权列表.sql new file mode 100644 index 00000000..1a36c813 --- /dev/null +++ b/docs/设计文档/database/学工管理-宿舍管理/菜单授权列表.sql @@ -0,0 +1,60 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733426065409, '宿舍区信息', '1946805729728077826', '1', 'dormArea', 'ssqxx/dormArea/index', 1, 0, 'C', '0', '0', 'ssqxx:dormArea:list', '#', 103, 1, sysdate(), null, null, '宿舍区信息菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733426065410, '宿舍区信息查询', 1946809733426065409, '1', '#', '', 1, 0, 'F', '0', '0', 'ssqxx:dormArea:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733426065411, '宿舍区信息新增', 1946809733426065409, '2', '#', '', 1, 0, 'F', '0', '0', 'ssqxx:dormArea:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733426065412, '宿舍区信息修改', 1946809733426065409, '3', '#', '', 1, 0, 'F', '0', '0', 'ssqxx:dormArea:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733426065413, '宿舍区信息删除', 1946809733426065409, '4', '#', '', 1, 0, 'F', '0', '0', 'ssqxx:dormArea:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733426065414, '宿舍区信息导出', 1946809733426065409, '5', '#', '', 1, 0, 'F', '0', '0', 'ssqxx:dormArea:export', '#', 103, 1, sysdate(), null, null, ''); + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809734004879362, '宿舍楼信息', '1946805729728077826', '1', 'dormBuilding', 'sslxx/dormBuilding/index', 1, 0, 'C', '0', '0', 'sslxx:dormBuilding:list', '#', 103, 1, sysdate(), null, null, '宿舍楼信息菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809734004879363, '宿舍楼信息查询', 1946809734004879362, '1', '#', '', 1, 0, 'F', '0', '0', 'sslxx:dormBuilding:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809734004879364, '宿舍楼信息新增', 1946809734004879362, '2', '#', '', 1, 0, 'F', '0', '0', 'sslxx:dormBuilding:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809734004879365, '宿舍楼信息修改', 1946809734004879362, '3', '#', '', 1, 0, 'F', '0', '0', 'sslxx:dormBuilding:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809734004879366, '宿舍楼信息删除', 1946809734004879362, '4', '#', '', 1, 0, 'F', '0', '0', 'sslxx:dormBuilding:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809734004879367, '宿舍楼信息导出', 1946809734004879362, '5', '#', '', 1, 0, 'F', '0', '0', 'sslxx:dormBuilding:export', '#', 103, 1, sysdate(), null, null, ''); + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733761609729, '校区信息', '1946805729728077826', '1', 'dormCampus', 'xqxx/dormCampus/index', 1, 0, 'C', '0', '0', 'xqxx:dormCampus:list', '#', 103, 1, sysdate(), null, null, '校区信息菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733761609730, '校区信息查询', 1946809733761609729, '1', '#', '', 1, 0, 'F', '0', '0', 'xqxx:dormCampus:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733761609731, '校区信息新增', 1946809733761609729, '2', '#', '', 1, 0, 'F', '0', '0', 'xqxx:dormCampus:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733761609732, '校区信息修改', 1946809733761609729, '3', '#', '', 1, 0, 'F', '0', '0', 'xqxx:dormCampus:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733761609733, '校区信息删除', 1946809733761609729, '4', '#', '', 1, 0, 'F', '0', '0', 'xqxx:dormCampus:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1946809733761609734, '校区信息导出', 1946809733761609729, '5', '#', '', 1, 0, 'F', '0', '0', 'xqxx:dormCampus:export', '#', 103, 1, sysdate(), null, null, ''); + diff --git a/web/src/api/glysqgx/dormManagerSource/index.ts b/web/src/api/glysqgx/dormManagerSource/index.ts new file mode 100644 index 00000000..f60d54f4 --- /dev/null +++ b/web/src/api/glysqgx/dormManagerSource/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DormManagerSourceVO, DormManagerSourceForm, DormManagerSourceQuery } from '@/api/glysqgx/dormManagerSource/types'; + +/** + * 查询管理员授权关系列表 + * @param query + * @returns {*} + */ + +export const listDormManagerSource = (query?: DormManagerSourceQuery): AxiosPromise => { + return request({ + url: '/glysqgx/dormManagerSource/list', + method: 'get', + params: query + }); +}; + +/** + * 查询管理员授权关系详细 + * @param id + */ +export const getDormManagerSource = (id: string | number): AxiosPromise => { + return request({ + url: '/glysqgx/dormManagerSource/' + id, + method: 'get' + }); +}; + +/** + * 新增管理员授权关系 + * @param data + */ +export const addDormManagerSource = (data: DormManagerSourceForm) => { + return request({ + url: '/glysqgx/dormManagerSource', + method: 'post', + data: data + }); +}; + +/** + * 修改管理员授权关系 + * @param data + */ +export const updateDormManagerSource = (data: DormManagerSourceForm) => { + return request({ + url: '/glysqgx/dormManagerSource', + method: 'put', + data: data + }); +}; + +/** + * 删除管理员授权关系 + * @param id + */ +export const delDormManagerSource = (id: string | number | Array) => { + return request({ + url: '/glysqgx/dormManagerSource/' + id, + method: 'delete' + }); +}; diff --git a/web/src/api/glysqgx/dormManagerSource/types.ts b/web/src/api/glysqgx/dormManagerSource/types.ts new file mode 100644 index 00000000..28012845 --- /dev/null +++ b/web/src/api/glysqgx/dormManagerSource/types.ts @@ -0,0 +1,126 @@ +export interface DormManagerSourceVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 管理员ID + */ + managerId: string | number; + + /** + * 权限类型(1查看 2编辑 3完全管理) + */ + permissionType: string; + + /** + * 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + */ + authType: string; + + /** + * 授权来源ID(对应校区ID或宿舍区ID或楼栋ID) + */ + authSource: number; + + /** + * 状态(0有效 1已撤销) + */ + status: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface DormManagerSourceForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 管理员ID + */ + managerId?: string | number; + + /** + * 权限类型(1查看 2编辑 3完全管理) + */ + permissionType?: string; + + /** + * 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + */ + authType?: string; + + /** + * 授权来源ID(对应校区ID或宿舍区ID或楼栋ID) + */ + authSource?: number; + + /** + * 状态(0有效 1已撤销) + */ + status?: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface DormManagerSourceQuery extends PageQuery { + + /** + * 管理员ID + */ + managerId?: string | number; + + /** + * 权限类型(1查看 2编辑 3完全管理) + */ + permissionType?: string; + + /** + * 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + */ + authType?: string; + + /** + * 授权来源ID(对应校区ID或宿舍区ID或楼栋ID) + */ + authSource?: number; + + /** + * 状态(0有效 1已撤销) + */ + status?: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/web/src/api/glysslqxgx/dormManagerBuilding/index.ts b/web/src/api/glysslqxgx/dormManagerBuilding/index.ts new file mode 100644 index 00000000..aa43cb2c --- /dev/null +++ b/web/src/api/glysslqxgx/dormManagerBuilding/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DormManagerBuildingVO, DormManagerBuildingForm, DormManagerBuildingQuery } from '@/api/glysslqxgx/dormManagerBuilding/types'; + +/** + * 查询管理员宿舍楼权限关系列表 + * @param query + * @returns {*} + */ + +export const listDormManagerBuilding = (query?: DormManagerBuildingQuery): AxiosPromise => { + return request({ + url: '/glysslqxgx/dormManagerBuilding/list', + method: 'get', + params: query + }); +}; + +/** + * 查询管理员宿舍楼权限关系详细 + * @param id + */ +export const getDormManagerBuilding = (id: string | number): AxiosPromise => { + return request({ + url: '/glysslqxgx/dormManagerBuilding/' + id, + method: 'get' + }); +}; + +/** + * 新增管理员宿舍楼权限关系 + * @param data + */ +export const addDormManagerBuilding = (data: DormManagerBuildingForm) => { + return request({ + url: '/glysslqxgx/dormManagerBuilding', + method: 'post', + data: data + }); +}; + +/** + * 修改管理员宿舍楼权限关系 + * @param data + */ +export const updateDormManagerBuilding = (data: DormManagerBuildingForm) => { + return request({ + url: '/glysslqxgx/dormManagerBuilding', + method: 'put', + data: data + }); +}; + +/** + * 删除管理员宿舍楼权限关系 + * @param id + */ +export const delDormManagerBuilding = (id: string | number | Array) => { + return request({ + url: '/glysslqxgx/dormManagerBuilding/' + id, + method: 'delete' + }); +}; diff --git a/web/src/api/glysslqxgx/dormManagerBuilding/types.ts b/web/src/api/glysslqxgx/dormManagerBuilding/types.ts new file mode 100644 index 00000000..14fa8419 --- /dev/null +++ b/web/src/api/glysslqxgx/dormManagerBuilding/types.ts @@ -0,0 +1,96 @@ +export interface DormManagerBuildingVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 管理员ID + */ + managerId: string | number; + + /** + * 宿舍楼ID + */ + buildingId: string | number; + + /** + * 状态(0有效 1已撤销) + */ + status: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface DormManagerBuildingForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 管理员ID + */ + managerId?: string | number; + + /** + * 宿舍楼ID + */ + buildingId?: string | number; + + /** + * 状态(0有效 1已撤销) + */ + status?: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface DormManagerBuildingQuery extends PageQuery { + + /** + * 管理员ID + */ + managerId?: string | number; + + /** + * 宿舍楼ID + */ + buildingId?: string | number; + + /** + * 状态(0有效 1已撤销) + */ + status?: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/web/src/api/ssglyxx/dormManager/index.ts b/web/src/api/ssglyxx/dormManager/index.ts new file mode 100644 index 00000000..5c746455 --- /dev/null +++ b/web/src/api/ssglyxx/dormManager/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DormManagerVO, DormManagerForm, DormManagerQuery } from '@/api/ssglyxx/dormManager/types'; + +/** + * 查询宿舍管理员信息列表 + * @param query + * @returns {*} + */ + +export const listDormManager = (query?: DormManagerQuery): AxiosPromise => { + return request({ + url: '/ssglyxx/dormManager/list', + method: 'get', + params: query + }); +}; + +/** + * 查询宿舍管理员信息详细 + * @param id + */ +export const getDormManager = (id: string | number): AxiosPromise => { + return request({ + url: '/ssglyxx/dormManager/' + id, + method: 'get' + }); +}; + +/** + * 新增宿舍管理员信息 + * @param data + */ +export const addDormManager = (data: DormManagerForm) => { + return request({ + url: '/ssglyxx/dormManager', + method: 'post', + data: data + }); +}; + +/** + * 修改宿舍管理员信息 + * @param data + */ +export const updateDormManager = (data: DormManagerForm) => { + return request({ + url: '/ssglyxx/dormManager', + method: 'put', + data: data + }); +}; + +/** + * 删除宿舍管理员信息 + * @param id + */ +export const delDormManager = (id: string | number | Array) => { + return request({ + url: '/ssglyxx/dormManager/' + id, + method: 'delete' + }); +}; diff --git a/web/src/api/ssglyxx/dormManager/types.ts b/web/src/api/ssglyxx/dormManager/types.ts new file mode 100644 index 00000000..94fc3f50 --- /dev/null +++ b/web/src/api/ssglyxx/dormManager/types.ts @@ -0,0 +1,156 @@ +export interface DormManagerVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 管理员姓名 + */ + managerName: string; + + /** + * 管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员) + */ + managerType: string; + + /** + * 管理级别(1-5,1为最高) + */ + managerLevel: number; + + /** + * 关联用户ID + */ + userId: string | number; + + /** + * 联系电话 + */ + phone: string; + + /** + * 性别(0男 1女 2未知) + */ + gender: string; + + /** + * 状态(0正常 1停用) + */ + status: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface DormManagerForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 管理员姓名 + */ + managerName?: string; + + /** + * 管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员) + */ + managerType?: string; + + /** + * 管理级别(1-5,1为最高) + */ + managerLevel?: number; + + /** + * 关联用户ID + */ + userId?: string | number; + + /** + * 联系电话 + */ + phone?: string; + + /** + * 性别(0男 1女 2未知) + */ + gender?: string; + + /** + * 状态(0正常 1停用) + */ + status?: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface DormManagerQuery extends PageQuery { + + /** + * 管理员姓名 + */ + managerName?: string; + + /** + * 管理员类型(1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员) + */ + managerType?: string; + + /** + * 管理级别(1-5,1为最高) + */ + managerLevel?: number; + + /** + * 关联用户ID + */ + userId?: string | number; + + /** + * 联系电话 + */ + phone?: string; + + /** + * 性别(0男 1女 2未知) + */ + gender?: string; + + /** + * 状态(0正常 1停用) + */ + status?: string; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/web/src/api/sslxx/dormBuilding/index.ts b/web/src/api/sslxx/dormBuilding/index.ts new file mode 100644 index 00000000..90bdd29f --- /dev/null +++ b/web/src/api/sslxx/dormBuilding/index.ts @@ -0,0 +1,85 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DormBuildingVO, DormBuildingForm, DormBuildingQuery } from '@/api/sslxx/dormBuilding/types'; + +/** + * 查询宿舍楼信息列表 + * @param query + * @returns {*} + */ + +export const listDormBuilding = (query?: DormBuildingQuery): AxiosPromise => { + return request({ + url: '/sslxx/dormBuilding/list', + method: 'get', + params: query + }); +}; + +/** + * 查询宿舍楼信息详细 + * @param id + */ +export const getDormBuilding = (id: string | number): AxiosPromise => { + return request({ + url: '/sslxx/dormBuilding/' + id, + method: 'get' + }); +}; + +/** + * 新增宿舍楼信息 + * @param data + */ +export const addDormBuilding = (data: DormBuildingForm) => { + return request({ + url: '/sslxx/dormBuilding', + method: 'post', + data: data + }); +}; + +/** + * 修改宿舍楼信息 + * @param data + */ +export const updateDormBuilding = (data: DormBuildingForm) => { + return request({ + url: '/sslxx/dormBuilding', + method: 'put', + data: data + }); +}; + +/** + * 删除宿舍楼信息 + * @param id + */ +export const delDormBuilding = (id: string | number | Array) => { + return request({ + url: '/sslxx/dormBuilding/' + id, + method: 'delete' + }); +}; + +/** + * 获取校区选项列表 + */ +export const listCampusOptions = (): AxiosPromise => { + return request({ + url: '/xqxx/dormCampus/list', + method: 'get' + }); +}; + +/** + * 获取宿舍区树形数据 + * @param campusId 校区ID,如果指定则只返回该校区的宿舍区 + */ +export const listAreaTreeData = (campusId?: string | number): AxiosPromise => { + return request({ + url: '/ssqxx/dormArea/list', + method: 'get', + params: { campusId } + }); +}; diff --git a/web/src/api/sslxx/dormBuilding/types.ts b/web/src/api/sslxx/dormBuilding/types.ts new file mode 100644 index 00000000..f3e62a4b --- /dev/null +++ b/web/src/api/sslxx/dormBuilding/types.ts @@ -0,0 +1,126 @@ +export interface DormBuildingVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 宿舍楼编码 + */ + buildingCode: string; + + /** + * 宿舍楼名称 + */ + buildingName: string; + + /** + * 所属宿舍区ID + */ + areaId: string | number; + + /** + * 所属校区ID + */ + campusId: string | number; + + /** + * 宿舍楼类型(1男生楼 2女生楼 3混合楼) + */ + buildingType: string; + + /** + * 宿舍楼描述 + */ + buildingDescription: string; + + /** + * 排序号 + */ + sortOrder: number; + +} + +export interface DormBuildingForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 宿舍楼编码 + */ + buildingCode?: string; + + /** + * 宿舍楼名称 + */ + buildingName?: string; + + /** + * 所属宿舍区ID + */ + areaId?: string | number; + + /** + * 所属校区ID + */ + campusId?: string | number; + + /** + * 宿舍楼类型(1男生楼 2女生楼 3混合楼) + */ + buildingType?: string; + + /** + * 宿舍楼描述 + */ + buildingDescription?: string; + + /** + * 排序号 + */ + sortOrder?: number; + +} + +export interface DormBuildingQuery extends PageQuery { + + /** + * 宿舍楼编码 + */ + buildingCode?: string; + + /** + * 宿舍楼名称 + */ + buildingName?: string; + + /** + * 所属宿舍区ID + */ + areaId?: string | number; + + /** + * 所属校区ID + */ + campusId?: string | number; + + /** + * 宿舍楼类型(1男生楼 2女生楼 3混合楼) + */ + buildingType?: string; + + /** + * 排序号 + */ + sortOrder?: number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/web/src/api/ssqxx/dormArea/index.ts b/web/src/api/ssqxx/dormArea/index.ts new file mode 100644 index 00000000..2c5cad2c --- /dev/null +++ b/web/src/api/ssqxx/dormArea/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DormAreaVO, DormAreaForm, DormAreaQuery } from '@/api/ssqxx/dormArea/types'; + +/** + * 查询宿舍区信息列表 + * @param query + * @returns {*} + */ + +export const listDormArea = (query?: DormAreaQuery): AxiosPromise => { + return request({ + url: '/ssqxx/dormArea/list', + method: 'get', + params: query + }); +}; + +/** + * 查询宿舍区信息详细 + * @param id + */ +export const getDormArea = (id: string | number): AxiosPromise => { + return request({ + url: '/ssqxx/dormArea/' + id, + method: 'get' + }); +}; + +/** + * 新增宿舍区信息 + * @param data + */ +export const addDormArea = (data: DormAreaForm) => { + return request({ + url: '/ssqxx/dormArea', + method: 'post', + data: data + }); +}; + +/** + * 修改宿舍区信息 + * @param data + */ +export const updateDormArea = (data: DormAreaForm) => { + return request({ + url: '/ssqxx/dormArea', + method: 'put', + data: data + }); +}; + +/** + * 删除宿舍区信息 + * @param id + */ +export const delDormArea = (id: string | number | Array) => { + return request({ + url: '/ssqxx/dormArea/' + id, + method: 'delete' + }); +}; diff --git a/web/src/api/ssqxx/dormArea/types.ts b/web/src/api/ssqxx/dormArea/types.ts new file mode 100644 index 00000000..758dfe91 --- /dev/null +++ b/web/src/api/ssqxx/dormArea/types.ts @@ -0,0 +1,91 @@ +export interface DormAreaVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 宿舍区编码 + */ + areaCode: string; + + /** + * 宿舍区名称 + */ + areaName: string; + + /** + * 所属校区ID + */ + campusId: string | number; + + /** + * 宿舍区描述 + */ + areaDescription: string; + + /** + * 排序号 + */ + sortOrder: number; + +} + +export interface DormAreaForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 宿舍区编码 + */ + areaCode?: string; + + /** + * 宿舍区名称 + */ + areaName?: string; + + /** + * 所属校区ID + */ + campusId?: string | number; + + /** + * 宿舍区描述 + */ + areaDescription?: string; + + /** + * 排序号 + */ + sortOrder?: number; + +} + +export interface DormAreaQuery extends PageQuery { + + /** + * 宿舍区编码 + */ + areaCode?: string; + + /** + * 宿舍区名称 + */ + areaName?: string; + + /** + * 宿舍区描述 + */ + areaDescription?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/web/src/api/xqxx/dormCampus/index.ts b/web/src/api/xqxx/dormCampus/index.ts new file mode 100644 index 00000000..4c57ab3c --- /dev/null +++ b/web/src/api/xqxx/dormCampus/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DormCampusVO, DormCampusForm, DormCampusQuery } from '@/api/xqxx/dormCampus/types'; + +/** + * 查询校区信息列表 + * @param query + * @returns {*} + */ + +export const listDormCampus = (query?: DormCampusQuery): AxiosPromise => { + return request({ + url: '/xqxx/dormCampus/list', + method: 'get', + params: query + }); +}; + +/** + * 查询校区信息详细 + * @param id + */ +export const getDormCampus = (id: string | number): AxiosPromise => { + return request({ + url: '/xqxx/dormCampus/' + id, + method: 'get' + }); +}; + +/** + * 新增校区信息 + * @param data + */ +export const addDormCampus = (data: DormCampusForm) => { + return request({ + url: '/xqxx/dormCampus', + method: 'post', + data: data + }); +}; + +/** + * 修改校区信息 + * @param data + */ +export const updateDormCampus = (data: DormCampusForm) => { + return request({ + url: '/xqxx/dormCampus', + method: 'put', + data: data + }); +}; + +/** + * 删除校区信息 + * @param id + */ +export const delDormCampus = (id: string | number | Array) => { + return request({ + url: '/xqxx/dormCampus/' + id, + method: 'delete' + }); +}; diff --git a/web/src/api/xqxx/dormCampus/types.ts b/web/src/api/xqxx/dormCampus/types.ts new file mode 100644 index 00000000..f3fc31e2 --- /dev/null +++ b/web/src/api/xqxx/dormCampus/types.ts @@ -0,0 +1,86 @@ +export interface DormCampusVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 校区编码 + */ + campusCode: string; + + /** + * 校区名称 + */ + campusName: string; + + /** + * 校区描述 + */ + campusDescription: string; + + /** + * 排序号 + */ + sortOrder: number; + + /** + * 备注 + */ + remark: string; + +} + +export interface DormCampusForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 校区编码 + */ + campusCode?: string; + + /** + * 校区名称 + */ + campusName?: string; + + /** + * 校区描述 + */ + campusDescription?: string; + + /** + * 排序号 + */ + sortOrder?: number; + + /** + * 备注 + */ + remark?: string; + +} + +export interface DormCampusQuery extends PageQuery { + + /** + * 校区编码 + */ + campusCode?: string; + + /** + * 校区名称 + */ + campusName?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/web/src/api/xsssgly/dormManager.ts b/web/src/api/xsssgly/dormManager.ts new file mode 100644 index 00000000..177876c2 --- /dev/null +++ b/web/src/api/xsssgly/dormManager.ts @@ -0,0 +1,53 @@ +import request from '@/utils/request'; + +// 获取教师列表(根据role_key=teacher筛选) +export function getTeacherList(name?: string, managerType?: string) { + return request({ + url: '/ssglyxx/dormManager/teachers', + method: 'get', + params: { name, managerType } + }); +} + +// 查询宿舍管理员列表 +export function listDormManager(query: any) { + return request({ + url: '/ssglyxx/dormManager/list', + method: 'get', + params: query + }); +} + +// 查询宿舍管理员详情 +export function getDormManager(id: number) { + return request({ + url: `/ssglyxx/dormManager/${id}`, + method: 'get' + }); +} + +// 新增宿舍管理员 +export function addDormManager(data: any) { + return request({ + url: '/ssglyxx/dormManager', + method: 'post', + data + }); +} + +// 修改宿舍管理员 +export function updateDormManager(data: any) { + return request({ + url: '/ssglyxx/dormManager', + method: 'put', + data + }); +} + +// 删除宿舍管理员 +export function deleteDormManager(ids: number | number[]) { + return request({ + url: `/ssglyxx/dormManager/${ids instanceof Array ? ids.join(',') : ids}`, + method: 'delete' + }); +} diff --git a/web/src/views/sslxx/dormBuilding/index.vue b/web/src/views/sslxx/dormBuilding/index.vue new file mode 100644 index 00000000..65a0f048 --- /dev/null +++ b/web/src/views/sslxx/dormBuilding/index.vue @@ -0,0 +1,540 @@ + + + + diff --git a/web/src/views/ssqxx/dormArea/index.vue b/web/src/views/ssqxx/dormArea/index.vue new file mode 100644 index 00000000..78c3745f --- /dev/null +++ b/web/src/views/ssqxx/dormArea/index.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/web/src/views/xqxx/dormCampus/index.vue b/web/src/views/xqxx/dormCampus/index.vue new file mode 100644 index 00000000..cb49b0e8 --- /dev/null +++ b/web/src/views/xqxx/dormCampus/index.vue @@ -0,0 +1,250 @@ + + + diff --git a/web/src/views/xsssgly/components/AdminDialog.vue b/web/src/views/xsssgly/components/AdminDialog.vue new file mode 100644 index 00000000..ab94b74f --- /dev/null +++ b/web/src/views/xsssgly/components/AdminDialog.vue @@ -0,0 +1,355 @@ + + + + + diff --git a/web/src/views/xsssgly/components/AdminTable.vue b/web/src/views/xsssgly/components/AdminTable.vue new file mode 100644 index 00000000..b4e2d8f5 --- /dev/null +++ b/web/src/views/xsssgly/components/AdminTable.vue @@ -0,0 +1,21 @@ + + diff --git a/web/src/views/xsssgly/components/ScopeDialog.vue b/web/src/views/xsssgly/components/ScopeDialog.vue new file mode 100644 index 00000000..78269a84 --- /dev/null +++ b/web/src/views/xsssgly/components/ScopeDialog.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/web/src/views/xsssgly/index.vue b/web/src/views/xsssgly/index.vue new file mode 100644 index 00000000..0a1efbc7 --- /dev/null +++ b/web/src/views/xsssgly/index.vue @@ -0,0 +1,445 @@ + + + + + From 7ce20647f079a2dd9b2c0577caea635d5d4f135e Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Mon, 21 Jul 2025 20:15:31 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xg/controller/XgDormAreaController.java | 17 +- .../controller/XgDormBuildingController.java | 18 +- .../XgDormManagerSourceController.java | 16 +- .../xg/domain/bo/XgDormManagerSourceBo.java | 1 - .../xg/domain/vo/BuildingTreeSelectVo.java | 65 +++ .../dromara/xg/domain/vo/TreeSelectVo.java | 63 +++ .../xg/domain/vo/XgDormManagerSourceVo.java | 3 - .../xg/mapper/XgDormManagerSourceMapper.java | 26 ++ .../xg/service/IXgDormAreaService.java | 9 + .../xg/service/IXgDormBuildingService.java | 9 + .../service/IXgDormManagerSourceService.java | 35 +- .../service/impl/XgDormAreaServiceImpl.java | 59 +++ .../impl/XgDormBuildingServiceImpl.java | 100 +++++ .../impl/XgDormManagerSourceServiceImpl.java | 106 +++-- .../glysqgx/XgDormManagerSourceMapper.xml | 41 ++ .../code-adjust-record-2025-07-20-zlwu.md | 68 ++++ docs/开发文档/API/API文档总览.md | 199 ++-------- docs/开发文档/API/宿舍楼树形结构API.md | 174 +++++++++ docs/开发文档/API/宿舍管理员授权API.md | 112 ++++++ web/src/api/ssglyxx/dormManager/index.ts | 34 ++ web/src/api/ssglyxx/dormManager/types.ts | 5 + web/src/api/sslxx/dormBuilding/index.ts | 13 +- web/src/api/sslxx/dormBuilding/types.ts | 127 ++---- web/src/api/ssqxx/dormArea/index.ts | 13 +- web/src/api/ssqxx/dormArea/types.ts | 16 + .../views/xsssgly/components/ScopeDialog.vue | 369 ++++++++++++++++-- web/src/views/xsssgly/index.vue | 169 +++++--- 工程本地启动指导.md | 4 +- 28 files changed, 1451 insertions(+), 420 deletions(-) create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/BuildingTreeSelectVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TreeSelectVo.java create mode 100644 docs/变更管理/code-adjust-record-2025-07-20-zlwu.md create mode 100644 docs/开发文档/API/宿舍楼树形结构API.md create mode 100644 docs/开发文档/API/宿舍管理员授权API.md diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java index 97bbc3a1..aa265e96 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormAreaController.java @@ -19,6 +19,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.xg.domain.vo.XgDormAreaVo; import org.dromara.xg.domain.bo.XgDormAreaBo; +import org.dromara.xg.domain.vo.TreeSelectVo; import org.dromara.xg.service.IXgDormAreaService; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -63,8 +64,7 @@ public class XgDormAreaController extends BaseController { */ @SaCheckPermission("ssqxx:dormArea:query") @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(xgDormAreaService.queryById(id)); } @@ -98,8 +98,17 @@ public class XgDormAreaController extends BaseController { @SaCheckPermission("ssqxx:dormArea:remove") @Log(title = "宿舍区信息", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(xgDormAreaService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 获取宿舍区树形结构数据 + * 以校区为根节点,宿舍区为子节点 + */ + @SaCheckPermission("ssqxx:dormArea:query") + @GetMapping("/tree") + public R> getAreaTree() { + return R.ok(xgDormAreaService.getAreaTree()); + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java index fb7f45c2..30420e62 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBuildingController.java @@ -19,6 +19,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.xg.domain.vo.XgDormBuildingVo; import org.dromara.xg.domain.bo.XgDormBuildingBo; +import org.dromara.xg.domain.vo.BuildingTreeSelectVo; import org.dromara.xg.service.IXgDormBuildingService; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -63,8 +64,7 @@ public class XgDormBuildingController extends BaseController { */ @SaCheckPermission("sslxx:dormBuilding:query") @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(xgDormBuildingService.queryById(id)); } @@ -98,8 +98,18 @@ public class XgDormBuildingController extends BaseController { @SaCheckPermission("sslxx:dormBuilding:remove") @Log(title = "宿舍楼信息", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(xgDormBuildingService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 获取宿舍楼树形结构数据 + * 校区-宿舍区-宿舍楼三级结构,校区和宿舍区不可选,只有宿舍楼可以选择 + */ + @SaCheckPermission("sslxx:dormBuilding:list") + @GetMapping("/buildingTree") + public R> getBuildingTree() { + List treeData = xgDormBuildingService.getBuildingTreeData(); + return R.ok(treeData); + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java index c18ca25d..18cd60e4 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormManagerSourceController.java @@ -114,7 +114,21 @@ public class XgDormManagerSourceController extends BaseController { @PostMapping("/assignScope") public R assignScope(@RequestParam @NotNull(message = "管理员ID不能为空") Long managerId, @RequestParam @NotNull(message = "授权类型不能为空") Character authType, - @RequestBody @NotEmpty(message = "授权来源ID不能为空") List authSourceIds) { + @RequestBody List authSourceIds) { return toAjax(xgDormManagerSourceService.assignScope(managerId, authType, authSourceIds)); } + + /** + * 获取管理员授权范围名称 + * + * @param managerId 管理员ID + * @param managerType 管理员类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @return 授权范围名称(逗号分隔字符串) + */ + @SaCheckPermission("glysqgx:dormManagerSource:query") + @GetMapping("/getScopeNames") + public R getScopeNames(@RequestParam @NotNull(message = "管理员ID不能为空") Long managerId, + @RequestParam @NotNull(message = "管理员类型不能为空") Integer managerType) { + return R.ok(xgDormManagerSourceService.getScopeNames(managerId, managerType)); + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java index abfdb13d..a458a2e0 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormManagerSourceBo.java @@ -63,5 +63,4 @@ public class XgDormManagerSourceBo extends BaseEntity { */ private String remark; - } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/BuildingTreeSelectVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/BuildingTreeSelectVo.java new file mode 100644 index 00000000..b961f005 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/BuildingTreeSelectVo.java @@ -0,0 +1,65 @@ +package org.dromara.xg.domain.vo; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 宿舍楼树形结构视图对象 + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@NoArgsConstructor +public class BuildingTreeSelectVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 节点ID + */ + private Long id; + + /** + * 节点名称 + */ + private String label; + + /** + * 节点类型(campus:校区 area:宿舍区 building:宿舍楼) + */ + private String nodeType; + + /** + * 是否禁用 + */ + private Boolean disabled; + + /** + * 子节点 + */ + private List children; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 创建时间 + */ + private java.util.Date createTime; + + /** + * 更新者 + */ + private Long updateBy; + + /** + * 更新时间 + */ + private java.util.Date updateTime; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TreeSelectVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TreeSelectVo.java new file mode 100644 index 00000000..38aeb9c0 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/TreeSelectVo.java @@ -0,0 +1,63 @@ +package org.dromara.xg.domain.vo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 树形选择视图对象 + * + * @author zlwu + * @date 2025-07-20 + */ +@Data +@NoArgsConstructor +public class TreeSelectVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private Long id; + + /** 节点名称 */ + private String label; + + /** 节点类型(campus:校区, area:宿舍区) */ + private String type; + + /** 是否可选择 */ + private Boolean disabled; + + /** 子节点 */ + private List children = new ArrayList<>(); + + /** + * 构造树节点 + * + * @param id 节点ID + * @param label 节点标签 + * @param type 节点类型 + * @param disabled 是否禁用 + */ + public TreeSelectVo(Long id, String label, String type, Boolean disabled) { + this.id = id; + this.label = label; + this.type = type; + this.disabled = disabled; + } + + /** + * 添加子节点 + * + * @param child 子节点 + */ + public void addChild(TreeSelectVo child) { + if (children == null) { + children = new ArrayList<>(); + } + children.add(child); + } +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java index de49820c..7a580de9 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgDormManagerSourceVo.java @@ -12,8 +12,6 @@ import java.io.Serial; import java.io.Serializable; import java.util.Date; - - /** * 管理员授权关系视图对象 xg_dorm_manager_source * @@ -76,5 +74,4 @@ public class XgDormManagerSourceVo implements Serializable { @ExcelProperty(value = "备注") private String remark; - } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java index 55701bf0..b0a96b27 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormManagerSourceMapper.java @@ -1,9 +1,12 @@ package org.dromara.xg.mapper; +import org.apache.ibatis.annotations.Param; import org.dromara.xg.domain.XgDormManagerSource; import org.dromara.xg.domain.vo.XgDormManagerSourceVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 管理员授权关系Mapper接口 * @@ -12,4 +15,27 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface XgDormManagerSourceMapper extends BaseMapperPlus { + /** + * 根据ID列表获取校区名称(逗号分隔) + * + * @param sourceIds 校区ID列表 + * @return 校区名称,多个以逗号分隔 + */ + String getCampusNamesByIds(@Param("sourceIds") List sourceIds); + + /** + * 根据ID列表获取宿舍区名称(逗号分隔) + * + * @param sourceIds 宿舍区ID列表 + * @return 宿舍区名称,多个以逗号分隔 + */ + String getAreaNamesByIds(@Param("sourceIds") List sourceIds); + + /** + * 根据ID列表获取宿舍楼名称(逗号分隔) + * + * @param sourceIds 宿舍楼ID列表 + * @return 宿舍楼名称,多个以逗号分隔 + */ + String getBuildingNamesByIds(@Param("sourceIds") List sourceIds); } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java index a0f10bab..f1c68adf 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormAreaService.java @@ -4,6 +4,7 @@ import org.dromara.xg.domain.vo.XgDormAreaVo; import org.dromara.xg.domain.bo.XgDormAreaBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.xg.domain.vo.TreeSelectVo; import java.util.Collection; import java.util.List; @@ -65,4 +66,12 @@ public interface IXgDormAreaService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取宿舍区树形结构数据 + * 以校区为根节点,宿舍区为子节点 + * + * @return 宿舍区树形结构列表 + */ + List getAreaTree(); } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java index 513ccbe2..d15bdb61 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBuildingService.java @@ -2,6 +2,7 @@ package org.dromara.xg.service; import org.dromara.xg.domain.vo.XgDormBuildingVo; import org.dromara.xg.domain.bo.XgDormBuildingBo; +import org.dromara.xg.domain.vo.BuildingTreeSelectVo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -65,4 +66,12 @@ public interface IXgDormBuildingService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取宿舍楼树形结构数据 + * 校区-宿舍区-宿舍楼三级结构,校区和宿舍区不可选,只有宿舍楼可以选择 + * + * @return 树形结构数据 + */ + List getBuildingTreeData(); } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java index a5628d61..161bbcd1 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormManagerSourceService.java @@ -18,51 +18,31 @@ public interface IXgDormManagerSourceService { /** * 查询管理员授权关系 - * - * @param id 主键 - * @return 管理员授权关系 */ XgDormManagerSourceVo queryById(Long id); /** - * 分页查询管理员授权关系列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 管理员授权关系分页列表 + * 查询管理员授权关系列表 */ TableDataInfo queryPageList(XgDormManagerSourceBo bo, PageQuery pageQuery); /** - * 查询符合条件的管理员授权关系列表 - * - * @param bo 查询条件 - * @return 管理员授权关系列表 + * 查询管理员授权关系列表 */ List queryList(XgDormManagerSourceBo bo); /** * 新增管理员授权关系 - * - * @param bo 管理员授权关系 - * @return 是否新增成功 */ Boolean insertByBo(XgDormManagerSourceBo bo); /** * 修改管理员授权关系 - * - * @param bo 管理员授权关系 - * @return 是否修改成功 */ Boolean updateByBo(XgDormManagerSourceBo bo); /** * 校验并批量删除管理员授权关系信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); @@ -72,7 +52,16 @@ public interface IXgDormManagerSourceService { * @param managerId 管理员ID * @param authType 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) * @param authSourceIds 授权来源ID列表 - * @return 是否分配成功 + * @return 结果 */ Boolean assignScope(Long managerId, Character authType, List authSourceIds); + + /** + * 获取管理员授权范围名称 + * + * @param managerId 管理员ID + * @param managerType 管理员类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @return 授权范围名称(逗号分隔字符串) + */ + String getScopeNames(Long managerId, Integer managerType); } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java index 748ee59d..39732318 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormAreaServiceImpl.java @@ -11,14 +11,20 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.dromara.xg.domain.bo.XgDormAreaBo; +import org.dromara.xg.domain.bo.XgDormCampusBo; import org.dromara.xg.domain.vo.XgDormAreaVo; +import org.dromara.xg.domain.vo.XgDormCampusVo; import org.dromara.xg.domain.XgDormArea; +import org.dromara.xg.domain.vo.TreeSelectVo; import org.dromara.xg.mapper.XgDormAreaMapper; import org.dromara.xg.service.IXgDormAreaService; +import org.dromara.xg.service.IXgDormCampusService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 宿舍区信息Service业务层处理 @@ -32,6 +38,7 @@ import java.util.Collection; public class XgDormAreaServiceImpl implements IXgDormAreaService { private final XgDormAreaMapper baseMapper; + private final IXgDormCampusService dormCampusService; /** * 查询宿舍区信息 @@ -131,4 +138,56 @@ public class XgDormAreaServiceImpl implements IXgDormAreaService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 获取宿舍区树形结构数据 + * 以校区为根节点,宿舍区为子节点 + * + * @return 宿舍区树形结构列表 + */ + @Override + public List getAreaTree() { + // 1. 获取所有校区数据 + List campusList = dormCampusService.queryList(new XgDormCampusBo()); + + // 2. 获取所有宿舍区数据 + List areaList = queryList(new XgDormAreaBo()); + + // 3. 构建树形结构 + List treeList = new ArrayList<>(); + + // 4. 创建校区节点(校区节点不可选择) + for (XgDormCampusVo campus : campusList) { + // 校区节点不可选择 + TreeSelectVo campusNode = new TreeSelectVo( + campus.getId(), + campus.getCampusName(), + "campus", + true // 禁用校区节点,不可选择 + ); + + // 5. 添加对应校区的宿舍区节点 + List campusAreas = areaList.stream() + .filter(area -> campus.getId().equals(area.getCampusId())) + .collect(Collectors.toList()); + + for (XgDormAreaVo area : campusAreas) { + // 宿舍区节点可选择 + TreeSelectVo areaNode = new TreeSelectVo( + area.getId(), + area.getAreaName(), + "area", + false // 不禁用宿舍区节点,可以选择 + ); + campusNode.addChild(areaNode); + } + + // 只有包含子节点的校区才添加到树中 + if (!campusNode.getChildren().isEmpty()) { + treeList.add(campusNode); + } + } + + return treeList; + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java index 13a647d5..3cca3511 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBuildingServiceImpl.java @@ -13,12 +13,19 @@ import org.springframework.stereotype.Service; import org.dromara.xg.domain.bo.XgDormBuildingBo; import org.dromara.xg.domain.vo.XgDormBuildingVo; import org.dromara.xg.domain.XgDormBuilding; +import org.dromara.xg.domain.XgDormArea; +import org.dromara.xg.domain.XgDormCampus; +import org.dromara.xg.domain.vo.BuildingTreeSelectVo; import org.dromara.xg.mapper.XgDormBuildingMapper; +import org.dromara.xg.mapper.XgDormAreaMapper; +import org.dromara.xg.mapper.XgDormCampusMapper; import org.dromara.xg.service.IXgDormBuildingService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.ArrayList; +import java.util.stream.Collectors; /** * 宿舍楼信息Service业务层处理 @@ -32,6 +39,8 @@ import java.util.Collection; public class XgDormBuildingServiceImpl implements IXgDormBuildingService { private final XgDormBuildingMapper baseMapper; + private final XgDormAreaMapper areaMapper; + private final XgDormCampusMapper campusMapper; /** * 查询宿舍楼信息 @@ -133,4 +142,95 @@ public class XgDormBuildingServiceImpl implements IXgDormBuildingService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 获取宿舍楼树形结构数据 + * 校区-宿舍区-宿舍楼三级结构,校区和宿舍区不可选,只有宿舍楼可以选择 + * + * @return 宿舍楼树形结构数据 + */ + @Override + public List getBuildingTreeData() { + // 1. 获取所有校区数据 + List campusList = campusMapper.selectList( + Wrappers.lambdaQuery() + .orderByAsc(XgDormCampus::getSortOrder, XgDormCampus::getId)); + + // 2. 获取所有宿舍区数据 + List areaList = areaMapper.selectList( + Wrappers.lambdaQuery() + .orderByAsc(XgDormArea::getSortOrder, XgDormArea::getId)); + + // 3. 获取所有宿舍楼数据 + List buildingList = baseMapper.selectList( + Wrappers.lambdaQuery() + .orderByAsc(XgDormBuilding::getSortOrder, XgDormBuilding::getId)); + + // 4. 构建树形结构 + List treeList = new ArrayList<>(); + + // 5. 先构建校区节点 + for (XgDormCampus campus : campusList) { + BuildingTreeSelectVo campusNode = new BuildingTreeSelectVo(); + campusNode.setId(campus.getId()); + campusNode.setLabel(campus.getCampusName()); + campusNode.setNodeType("campus"); + campusNode.setDisabled(true); // 校区不可选 + campusNode.setChildren(new ArrayList<>()); + + // 设置创建者和更新者字段 + campusNode.setCreateBy(campus.getCreateBy()); + campusNode.setCreateTime(campus.getCreateTime()); + campusNode.setUpdateBy(campus.getUpdateBy()); + campusNode.setUpdateTime(campus.getUpdateTime()); + + // 添加该校区下的宿舍区 + List campusAreas = areaList.stream() + .filter(area -> area.getCampusId().equals(campus.getId())) + .collect(Collectors.toList()); + + for (XgDormArea area : campusAreas) { + BuildingTreeSelectVo areaNode = new BuildingTreeSelectVo(); + areaNode.setId(area.getId()); + areaNode.setLabel(area.getAreaName()); + areaNode.setNodeType("area"); + areaNode.setDisabled(true); // 宿舍区不可选 + areaNode.setChildren(new ArrayList<>()); + + // 设置创建者和更新者字段 + areaNode.setCreateBy(area.getCreateBy()); + areaNode.setCreateTime(area.getCreateTime()); + areaNode.setUpdateBy(area.getUpdateBy()); + areaNode.setUpdateTime(area.getUpdateTime()); + + // 添加该宿舍区下的宿舍楼 + List areaBuildings = buildingList.stream() + .filter(building -> building.getAreaId().equals(area.getId())) + .collect(Collectors.toList()); + + for (XgDormBuilding building : areaBuildings) { + BuildingTreeSelectVo buildingNode = new BuildingTreeSelectVo(); + buildingNode.setId(building.getId()); + buildingNode.setLabel(building.getBuildingName()); + buildingNode.setNodeType("building"); + buildingNode.setDisabled(false); // 宿舍楼可选 + buildingNode.setChildren(null); // 宿舍楼没有子节点 + + // 设置创建者和更新者字段 + buildingNode.setCreateBy(building.getCreateBy()); + buildingNode.setCreateTime(building.getCreateTime()); + buildingNode.setUpdateBy(building.getUpdateBy()); + buildingNode.setUpdateTime(building.getUpdateTime()); + + areaNode.getChildren().add(buildingNode); + } + + campusNode.getChildren().add(areaNode); + } + + treeList.add(campusNode); + } + + return treeList; + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java index 4cc797fa..cecb73a1 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormManagerSourceServiceImpl.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; import java.util.Collection; import java.util.ArrayList; +import java.util.Date; +import java.util.stream.Collectors; /** * 管理员授权关系Service业务层处理 @@ -136,7 +138,7 @@ public class XgDormManagerSourceServiceImpl implements IXgDormManagerSourceServi if (isValid) { // TODO 做一些业务上的校验,判断是否需要校验 } - return baseMapper.deleteByIds(ids) > 0; + return baseMapper.deleteBatchIds(ids) > 0; } /** @@ -150,42 +152,102 @@ public class XgDormManagerSourceServiceImpl implements IXgDormManagerSourceServi @Override @Transactional(rollbackFor = Exception.class) public Boolean assignScope(Long managerId, Character authType, List authSourceIds) { - if (managerId == null || authType == null || authSourceIds == null || authSourceIds.isEmpty()) { + if (managerId == null || authType == null) { return false; } try { - // 1. 先逻辑删除该管理员现有的对应类型的授权数据 + // 1. 逻辑删除该管理员指定授权类型的现有数据 LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(XgDormManagerSource.class) - .set(XgDormManagerSource::getDeleted, "1") + .set(XgDormManagerSource::getDeleted, "1") // 标记为已删除 .eq(XgDormManagerSource::getManagerId, managerId) .eq(XgDormManagerSource::getAuthType, authType.toString()) - .eq(XgDormManagerSource::getDeleted, "0"); + .eq(XgDormManagerSource::getDeleted, "0"); // 只更新未删除的记录 baseMapper.update(null, updateWrapper); - // 2. 批量插入新的授权数据 - List insertList = new ArrayList<>(); - for (Long authSourceId : authSourceIds) { - XgDormManagerSource entity = new XgDormManagerSource(); - entity.setManagerId(managerId); - entity.setAuthType(authType.toString()); - entity.setAuthSource(authSourceId); - entity.setPermissionType("3"); // 默认为完全管理权限 - entity.setStatus("0"); // 默认有效 - entity.setDeleted("0"); // 默认未删除 - insertList.add(entity); - } - - // 循环插入,确保每条数据都有唯一ID - for (XgDormManagerSource entity : insertList) { - baseMapper.insert(entity); + // 2. 批量插入新的授权关系 + if (authSourceIds != null && !authSourceIds.isEmpty()) { + for (Long authSourceId : authSourceIds) { + XgDormManagerSource entity = new XgDormManagerSource(); + entity.setManagerId(managerId); + entity.setAuthType(authType.toString()); + entity.setAuthSource(authSourceId); + entity.setPermissionType("3"); // 默认完全管理权限 + entity.setStatus("0"); // 有效状态 + baseMapper.insert(entity); // MyBatis-Plus会自动填充BaseEntity中定义的字段 + } } return true; } catch (Exception e) { - log.error("分配管理员数据范围失败", e); + log.error("批量分配管理员数据范围失败", e); throw e; } } + + /** + * 获取管理员授权范围名称 + * + * @param managerId 管理员ID + * @param managerType 管理员类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @return 授权范围名称(逗号分隔字符串) + */ + @Override + public String getScopeNames(Long managerId, Integer managerType) { + if (managerId == null || managerType == null) { + return ""; + } + + try { + // 全校级管理员无需关联其他表,直接返回"全校" + if (managerType == 1) { + return "全校"; + } + + // 转换managerType为Character类型,与数据库authType匹配 + String authType = String.valueOf(managerType); + + // 查询该管理员的授权范围ID列表 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(XgDormManagerSource.class) + .eq(XgDormManagerSource::getManagerId, managerId) + .eq(XgDormManagerSource::getAuthType, authType) + .eq(XgDormManagerSource::getDeleted, "0") // 未删除的记录 + .eq(XgDormManagerSource::getStatus, "0"); // 状态为有效 + + List sources = baseMapper.selectList(queryWrapper); + if (sources.isEmpty()) { + return ""; + } + + // 提取授权来源ID列表 + List sourceIds = sources.stream() + .map(XgDormManagerSource::getAuthSource) + .collect(Collectors.toList()); + + // 根据不同管理员类型,关联不同表获取名称 + String scopeNames = ""; + switch (managerType) { + case 2: + // 校区级管理员,关联xg_dorm_campus表 + scopeNames = baseMapper.getCampusNamesByIds(sourceIds); + break; + case 3: + // 宿舍区管理员,关联xg_dorm_area表 + scopeNames = baseMapper.getAreaNamesByIds(sourceIds); + break; + case 4: + // 宿舍楼管理员,关联xg_dorm_building表 + scopeNames = baseMapper.getBuildingNamesByIds(sourceIds); + break; + default: + return ""; + } + + return scopeNames; + } catch (Exception e) { + log.error("获取管理员授权范围名称失败", e); + return ""; + } + } } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml index 6dee8388..a210a4a7 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/glysqgx/XgDormManagerSourceMapper.xml @@ -4,4 +4,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + diff --git a/docs/变更管理/code-adjust-record-2025-07-20-zlwu.md b/docs/变更管理/code-adjust-record-2025-07-20-zlwu.md new file mode 100644 index 00000000..a5f7331d --- /dev/null +++ b/docs/变更管理/code-adjust-record-2025-07-20-zlwu.md @@ -0,0 +1,68 @@ +# 宿舍楼管理API树形结构开发记录 + +**时间**: 2025-07-20 15:30:00 +**开发人员**: zlwu +**变更模块**: 宿舍管理 - 宿舍楼树形结构API + +## 变更内容 + +### 1. 新增类文件 + +1. 新增 `BuildingTreeSelectVo.java` 类用于宿舍楼树形结构展示 + - 支持校区-宿舍区-宿舍楼三级结构 + - 标识节点类型和可选状态 + +### 2. API接口开发 + +1. 在 `XgDormBuildingController` 中新增 `/buildingTree` 接口: + - 获取完整的宿舍楼树形结构 + - 校区和宿舍区节点设置为不可选(disabled=true) + - 宿舍楼节点设置为可选(disabled=false) + +2. 在 `IXgDormBuildingService` 接口中添加 `getBuildingTreeData()` 方法 + +3. 在 `XgDormBuildingServiceImpl` 中实现树形数据构建逻辑: + - 查询所有校区、宿舍区和宿舍楼数据 + - 构建三级层次结构 + - 确保树中校区和宿舍区节点被标记为不可选 + - 只有宿舍楼节点可以被选择 + +### 3. 数据表关联关系 + +- `xg_dorm_building` 通过 `campus_id` 关联 `xg_dorm_campus` +- `xg_dorm_building` 通过 `area_id` 关联 `xg_dorm_area` +- `xg_dorm_area` 通过 `campus_id` 关联 `xg_dorm_campus` + +### 4. 前端实现 + +1. 在`web/src/api/sslxx/dormBuilding/types.ts`中添加`BuildingTreeSelectVo`接口定义: + - 定义了树形节点的属性类型 + - 包含id、label、nodeType、disabled等核心字段 + - 支持children属性用于嵌套结构 + +2. 在`web/src/api/sslxx/dormBuilding/index.ts`中添加`getBuildingTree`方法: + - 调用后端API获取树形结构数据 + - 方法返回类型为`AxiosPromise` + +3. 修改`ScopeDialog.vue`组件: + - 为宿舍楼类型(type="building")添加独立的树形选择器 + - 移除原有的模拟数据,改用API获取真实数据 + - 添加宿舍楼数据回显和解析逻辑 + - 保留对校区和宿舍区的原有支持 + +## 技术实现 + +树形结构数据构建采用三步查询 + 组装的方式: +1. 首先查询所有校区数据 +2. 查询所有宿舍区数据 +3. 查询所有宿舍楼数据 +4. 通过Stream API过滤和关联数据,构建多层嵌套结构 + +## 使用说明 + +1. 校区管理员授权时,使用普通多选下拉框 +2. 宿舍区管理员授权时,使用以校区为父节点的两级树形结构 +3. 宿舍楼管理员授权时,使用新开发的三级树形结构(校区-宿舍区-宿舍楼) + - 校区和宿舍区节点自动禁用,不可选择 + - 只有宿舍楼节点可以选择 + - 支持多选和折叠标签 \ No newline at end of file diff --git a/docs/开发文档/API/API文档总览.md b/docs/开发文档/API/API文档总览.md index cff3f2ab..14a674ea 100644 --- a/docs/开发文档/API/API文档总览.md +++ b/docs/开发文档/API/API文档总览.md @@ -1,189 +1,48 @@ -# API 文档总览 +# API文档总览 -## 📋 文档说明 +本文件作为API文档的统一导航入口,提供项目中所有API文档的快速访问链接。 -本文档是校园管理系统 API 接口的总览和导航页面。为了提高文档的可维护性和可读性,API 文档已按业务模块进行拆分。 +## 认证登录 -**拆分完成时间**: 2025-07-01 -**拆分目的**: 按业务模块管理,便于维护和查找,减少单个文件过大的问题 +- [用户认证登录API](./用户认证登录API.md) - 用户登录、获取用户信息等接口 ---- +## 学工管理模块 +- [班干部管理API](班干部管理API.md) +- [宿舍管理员授权API](宿舍管理员授权API.md) +- [宿舍楼树形结构API](宿舍楼树形结构API.md) - 校区-宿舍区-宿舍楼三级树形结构数据 -## 📊 API 文档架构 +## 后勤管理 -### 🔗 分模块 API 文档 +### 场地管理 -| 文档名称 | 文件路径 | 主要内容 | 适用场景 | -| ------------------------- | ----------------------------------------------- | ---------------------------------------------- | -------------------- | -| **📋 API 文档基础规范** | [API 文档基础规范.md](./API文档基础规范.md) | 请求头规范、响应格式、状态码、错误码、数据字典 | **所有开发人员必读** | -| **🔐 用户认证登录 API** | [用户认证登录 API.md](./用户认证登录API.md) | 用户登录、退出、验证码、用户信息、租户管理 | 认证相关开发 | -| **🛠️ 物业报修管理 API** | [物业报修管理 API.md](./物业报修管理API.md) | 维修分类、报修工单、进度跟踪、服务评价 | 物业报修功能开发 | -| **📊 后勤满意度调查 API** | [后勤满意度调查 API.md](./后勤满意度调查API.md) | 问卷管理、答题、题目管理、答题记录 | 满意度调查功能开发 | -| **🏢 场地预约管理 API** | [场地预约管理 API.md](./场地预约管理API.md) | 场地信息管理、预约申请、审批流程、冲突检查 | 场地预约功能开发 | -| **🎭 报告厅预约审核 API** | [报告厅预约审核 API.md](./报告厅预约审核API.md) | 审核建议生成、时间冲突检查、批量审核处理 | 报告厅审核功能开发 | +- [场地预约管理API](./场地预约管理API.md) - 场地信息管理、预约申请管理接口 +- [报告厅预约审核API](./报告厅预约审核API.md) - 报告厅信息管理、预约审核接口 -### 📝 阅读建议 +### 物业管理 -1. **首次阅读**: 先阅读 [API 文档基础规范.md](./API文档基础规范.md) 了解通用规范 -2. **业务开发**: 根据开发的功能模块选择对应的 API 文档 -3. **交叉引用**: 各模块文档间有交叉引用,便于快速查找相关接口 +- [物业报修管理API](./物业报修管理API.md) - 报修工单管理、维修处理接口 ---- +### 满意度调查 -## 🎯 快速导航 +- [后勤满意度调查API](./后勤满意度调查API.md) - 问卷设计、答题管理接口 -### 🔍 按功能查找接口 +## 工作流管理 -#### 🔐 用户认证相关 +- [请假流程API](./请假流程API.md) - 请假申请、审批管理接口 -- [用户登录](./用户认证登录API.md#用户登录) - AES+RSA 加密登录 -- [退出登录](./用户认证登录API.md#退出登录) - 清除会话 -- [获取验证码](./用户认证登录API.md#获取验证码) - 图形验证码 -- [获取用户信息](./用户认证登录API.md#获取当前用户信息) - 用户详情和权限 -- [租户管理](./用户认证登录API.md#租户管理) - 多租户支持 +## 系统管理 -#### 🛠️ 物业报修相关 +- [菜单权限API](./菜单权限API.md) - 菜单配置、权限管理接口 +- [用户管理API](./用户管理API.md) - 系统用户、角色、部门管理接口 -- [维修分类管理](./物业报修管理API.md#维修分类管理) - 分类 CRUD 操作 -- [报修工单管理](./物业报修管理API.md#报修工单管理) - 工单生命周期 -- [工单进度跟踪](./物业报修管理API.md#获取工单进度列表) - 进度记录 -- [服务评价](./物业报修管理API.md#服务评价管理) - 评价系统 +## API基础规范 -#### 📊 满意度调查相关 +- [API文档基础规范](./API文档基础规范.md) - API接口设计规范、响应格式规范 -- [问卷管理](./后勤满意度调查API.md#问卷基础管理) - 问卷 CRUD 操作 -- [答题功能](./后勤满意度调查API.md#答题API) - 答题提交和查询 -- [题目管理](./后勤满意度调查API.md#题目管理API) - 题目和选项 -- [答题记录](./后勤满意度调查API.md#答题记录管理API) - 记录查询 +## 更新记录 -#### 🏢 场地预约相关 - -- [场地信息管理](./场地预约管理API.md#场地信息管理api) - 场地 CRUD 操作 -- [场地预约申请](./场地预约管理API.md#场地预约管理api) - 预约提交和修改 -- [预约审批](./场地预约管理API.md#审批场地预约) - 审批流程管理 -- [时间冲突检查](./场地预约管理API.md#检查时间冲突) - 预约冲突检测 - -#### 🎭 报告厅审核相关 - -- [报告厅预约查询](./报告厅预约审核API.md#报告厅预约查询-api) - 预约列表和详情查询 -- [时间冲突检查](./报告厅预约审核API.md#时间冲突检查-api) - 智能冲突检测 -- [批量审核处理](./报告厅预约审核API.md#报告厅预约审核-api) - 批准/拒绝预约申请 -- [审核建议生成](./报告厅预约审核API.md#时间冲突检查-api) - 基于冲突检查的智能建议 - -### 🔍 按开发阶段查找 - -#### 🚀 项目初期 - -1. [API 文档基础规范.md](./API文档基础规范.md) - 了解通用规范 -2. [用户认证登录 API.md](./用户认证登录API.md) - 实现用户认证 -3. 选择业务模块文档进行开发 - -#### 🛠️ 功能开发 - -- 根据具体功能模块查找对应 API 文档 -- 参考接口示例和错误码说明 -- 使用数据字典了解枚举值含义 - -#### 🧪 接口测试 - -- 参考各文档中的请求示例 -- 使用提供的测试脚本 -- 查看错误码说明进行问题排查 - ---- - -## 📋 通用信息 - -### 🔧 基础配置 - -- **基础路径**: `/api` -- **响应格式**: JSON -- **字符编码**: UTF-8 -- **权限认证**: Sa-Token + JWT -- **版本**: v1.0 -- **🌐 在线 API 文档**: [http://localhost:8080/swagger-ui/index.html](http://localhost:8080/swagger-ui/index.html) ⭐ - -### 📊 API 文档查看方式 - -1. **🌟 Swagger UI 在线文档** (推荐) - - - **访问地址**: http://localhost:8080/swagger-ui/index.html - - **特点**: 可视化界面,支持在线测试,按模块分组 - - **使用场景**: 接口调试、快速查看、在线测试 - -2. **📁 项目内置文档** (详细) - - **位置**: `docs/开发文档/API/` - - **特点**: 中文详细说明,业务逻辑解释,完整示例 - - **使用场景**: 深入了解业务逻辑、开发参考 - -### 🔐 认证要求 - -所有需要认证的接口都必须在请求头中携带: - -```json -{ - "Authorization": "Bearer {access_token}", - "clientid": "e5cd7e4891bf95d1d19206ce24a7b32e", - "Content-Type": "application/json;charset=utf-8" -} -``` - -详细说明请参考:[API 文档基础规范.md](./API文档基础规范.md#请求头规范强制性) - -### 📊 响应格式 - -- **分页列表**: TableDataInfo 格式 (total, rows, code, msg) -- **非分页接口**: R 类型格式 (code, msg, data) -- **错误响应**: 统一错误格式 - -详细说明请参考:[API 文档基础规范.md](./API文档基础规范.md#统一响应格式强制性) - ---- - -## 🔄 文档维护 - -### 📝 更新规则 - -1. **基础规范变更**: 更新 [API 文档基础规范.md](./API文档基础规范.md) -2. **认证相关变更**: 更新 [用户认证登录 API.md](./用户认证登录API.md) -3. **物业报修变更**: 更新 [物业报修管理 API.md](./物业报修管理API.md) -4. **满意度调查变更**: 更新 [后勤满意度调查 API.md](./后勤满意度调查API.md) -5. **总览更新**: 根据需要更新本文档 - -### 🚨 强制要求 - -- **同步更新**: 代码变更时必须同步更新对应的 API 文档 -- **向下兼容**: 新版本 API 必须考虑向下兼容性 -- **版本记录**: 重大变更需要在相应文档中记录版本信息 - ---- - -## 📞 联系方式 - -如有 API 文档相关问题,请联系开发团队或查看项目仓库的 Issues。 - ---- - -## 📈 版本历史 - -### v2.0.0 (2025-07-01) - API 文档拆分重构 - -- 🔄 **重大架构调整**: API 文档按业务模块拆分 -- 📋 **新增基础规范文档**: 统一管理通用规范 -- 🔐 **独立认证 API 文档**: 用户认证登录专门文档 -- 🛠️ **物业报修 API 文档**: 报修管理专门文档 -- 📊 **满意度调查 API 文档**: 问卷答题专门文档 -- 📝 **中文文件命名**: 便于快速识别和查找 -- 🔗 **交叉引用系统**: 各文档间建立引用关系 -- 📚 **总览导航**: 提供统一的文档入口 - -### v1.x.x (2025-01-26 及之前) - -参考各个拆分文档中的版本历史记录。 - ---- - -**📝 维护**: API 文档总览和导航 -**🔄 更新**: 2025-07-01 -**📁 架构**: 4 个专门 API 文档 + 1 个总览文档 -**🎯 目标**: 提供清晰的 API 文档导航和管理体系 +- 2025-07-20:新增宿舍楼树形结构API文档 +- 2025-07-20:新增宿舍管理员授权API文档 +- 2025-07-15:新增场地预约管理API文档 +- 2025-07-10:新增物业报修管理API文档 +- 2025-07-01:重组API文档结构,创建统一导航入口 diff --git a/docs/开发文档/API/宿舍楼树形结构API.md b/docs/开发文档/API/宿舍楼树形结构API.md new file mode 100644 index 00000000..3a2384a1 --- /dev/null +++ b/docs/开发文档/API/宿舍楼树形结构API.md @@ -0,0 +1,174 @@ +# 宿舍楼树形结构API文档 + +## 接口说明 + +本文档描述了获取宿舍楼树形结构数据的API接口,该接口返回校区-宿舍区-宿舍楼的三级树形结构,其中校区和宿舍区节点不可选,只有宿舍楼节点可以选择。 + +## 接口定义 + +### 获取宿舍楼树形结构 + +**请求URL**:`/sslxx/dormBuilding/buildingTree` + +**请求方式**:`GET` + +**权限标识**:`sslxx:dormBuilding:list` + +**请求参数**:无 + +**响应示例**: + +```json +{ + "code": 200, + "msg": "操作成功", + "data": [ + { + "id": 1, + "label": "东校区", + "nodeType": "campus", + "disabled": true, + "children": [ + { + "id": 101, + "label": "东区宿舍区", + "nodeType": "area", + "disabled": true, + "children": [ + { + "id": 1001, + "label": "1号楼", + "nodeType": "building", + "disabled": false + }, + { + "id": 1002, + "label": "2号楼", + "nodeType": "building", + "disabled": false + } + ] + } + ] + }, + { + "id": 2, + "label": "西校区", + "nodeType": "campus", + "disabled": true, + "children": [ + { + "id": 201, + "label": "西区宿舍区", + "nodeType": "area", + "disabled": true, + "children": [ + { + "id": 2001, + "label": "3号楼", + "nodeType": "building", + "disabled": false + }, + { + "id": 2002, + "label": "4号楼", + "nodeType": "building", + "disabled": false + } + ] + } + ] + } + ] +} +``` + +## 数据结构 + +### BuildingTreeSelectVo + +树形结构节点对象: + +| 字段名 | 类型 | 描述 | +|------------|-------------------|----------------------------------------| +| id | Long | 节点ID | +| label | String | 节点名称 | +| nodeType | String | 节点类型:campus(校区)、area(宿舍区)、building(宿舍楼) | +| disabled | Boolean | 是否禁用选择 | +| children | List | 子节点列表 | +| createBy | Long | 创建者 | +| createTime | Date | 创建时间 | +| updateBy | Long | 更新者 | +| updateTime | Date | 更新时间 | + +## 使用方法 + +### 前端使用示例 + +在Vue组件中使用该接口获取树形数据: + +```typescript +import { getBuildingTree } from '@/api/sslxx/dormBuilding'; +import type { BuildingTreeSelectVo } from '@/api/sslxx/dormBuilding/types'; + +// 在组件的setup函数中 +const treeData = ref([]); + +// 加载宿舍楼树形数据 +const loadBuildingTree = async () => { + try { + const res = await getBuildingTree(); + if (res && res.data) { + treeData.value = res.data; + } + } catch (error) { + console.error('加载宿舍楼树形数据失败:', error); + } +}; + +// 调用加载方法 +loadBuildingTree(); +``` + +### 使用el-tree-select组件展示 + +```html + +``` + +## 特殊说明 + +1. 接口返回的树形结构中,校区和宿舍区节点已设置 `disabled=true`,前端无需额外处理即可实现只能选择宿舍楼节点的效果 +2. 使用 `check-strictly=true` 可以确保树形选择器的选中状态不会级联影响父子节点 +3. 该接口已支持管理员分配宿舍楼管理范围的业务需求 + +## 相关API接口 + +- [宿舍管理员授权API](./宿舍管理员授权API.md) + +## 数据库关系 + +- `xg_dorm_building` 表通过 `campus_id` 字段关联 `xg_dorm_campus` 表 +- `xg_dorm_building` 表通过 `area_id` 字段关联 `xg_dorm_area` 表 +- `xg_dorm_area` 表通过 `campus_id` 字段关联 `xg_dorm_campus` 表 + +## 最后更新时间 + +2025-07-20 \ No newline at end of file diff --git a/docs/开发文档/API/宿舍管理员授权API.md b/docs/开发文档/API/宿舍管理员授权API.md new file mode 100644 index 00000000..828cc22a --- /dev/null +++ b/docs/开发文档/API/宿舍管理员授权API.md @@ -0,0 +1,112 @@ +# 宿舍管理员授权API文档 + +## 1. 接口总览 + +| 接口名称 | 请求方式 | 接口地址 | 接口描述 | +| ------- | ------- | ------- | ------- | +| 获取宿舍区树形结构 | GET | /ssqxx/dormArea/tree | 获取以校区为根节点、宿舍区为子节点的树形结构数据 | + +## 2. 权限要求 + +- 查询宿舍区树形结构:`ssqxx:dormArea:query` + +## 3. 接口详情 + +### 3.1 获取宿舍区树形结构 + +#### 接口说明 + +该接口用于获取宿舍区的树形结构数据,以校区为根节点,宿舍区为子节点。前端可以使用该接口实现树形下拉选择,实现宿舍管理员授权范围选择功能。 + +#### 请求URL + +``` +GET /ssqxx/dormArea/tree +``` + +#### 请求参数 + +无 + +#### 响应参数 + +| 参数名 | 类型 | 说明 | +| ------ | ---- | ---- | +| code | Integer | 状态码,200表示成功 | +| msg | String | 提示信息 | +| data | Array | 数据内容 | +| data[i].id | Long | 节点ID | +| data[i].label | String | 节点名称 | +| data[i].type | String | 节点类型(campus:校区,area:宿舍区) | +| data[i].disabled | Boolean | 是否禁用选择(校区节点为true,宿舍区节点为false) | +| data[i].children | Array | 子节点,结构同父节点 | + +#### 响应示例 + +```json +{ + "code": 200, + "msg": "操作成功", + "data": [ + { + "id": 1, + "label": "东校区", + "type": "campus", + "disabled": true, + "children": [ + { + "id": 101, + "label": "1号宿舍区", + "type": "area", + "disabled": false, + "children": [] + }, + { + "id": 102, + "label": "2号宿舍区", + "type": "area", + "disabled": false, + "children": [] + } + ] + }, + { + "id": 2, + "label": "西校区", + "type": "campus", + "disabled": true, + "children": [ + { + "id": 201, + "label": "3号宿舍区", + "type": "area", + "disabled": false, + "children": [] + } + ] + } + ] +} +``` + +## 4. 使用说明 + +### 前端使用方式 + +1. 调用树形结构接口获取宿舍区树形数据 +2. 使用树形选择组件展示数据,设置不可选择校区节点(根据disabled属性) +3. 用户只能选择宿舍区节点,不能选择校区节点 +4. 支持多选宿舍区节点 + +### 数据说明 + +- 树形结构中,校区为第一级节点,宿舍区为第二级节点 +- 校区节点的disabled属性为true,表示不可选择 +- 宿舍区节点的disabled属性为false,表示可以选择 +- 通过type字段可以区分节点类型:campus为校区,area为宿舍区 + +## 5. 实现细节 + +- 宿舍区数据存放在xg_dorm_area表中,校区数据存放在xg_dorm_campus表中 +- xg_dorm_area表中campus_id字段关联xg_dorm_campus表的id字段 +- 树形数据的构建逻辑是:先查询所有校区,再查询所有宿舍区,然后根据关联关系构建树形结构 \ No newline at end of file diff --git a/web/src/api/ssglyxx/dormManager/index.ts b/web/src/api/ssglyxx/dormManager/index.ts index 5c746455..13ab9d9f 100644 --- a/web/src/api/ssglyxx/dormManager/index.ts +++ b/web/src/api/ssglyxx/dormManager/index.ts @@ -61,3 +61,37 @@ export const delDormManager = (id: string | number | Array) => method: 'delete' }); }; + +/** + * 分配管理员数据范围 + * @param managerId 管理员ID + * @param authType 授权类型(1全校级 2校区级 3宿舍区级 4楼栋级) + * @param authSourceIds 授权来源ID列表 + */ +export const assignScope = (managerId: string | number, authType: number, authSourceIds: (string | number)[]) => { + return request({ + url: '/glysqgx/dormManagerSource/assignScope', + method: 'post', + params: { + managerId, + authType + }, + data: authSourceIds + }); +}; + +/** + * 获取管理员授权范围名称 + * @param managerId 管理员ID + * @param managerType 管理员类型 + */ +export const getManagerScopeNames = (managerId: string | number, managerType: number) => { + return request({ + url: '/glysqgx/dormManagerSource/getScopeNames', + method: 'get', + params: { + managerId, + managerType + } + }); +}; diff --git a/web/src/api/ssglyxx/dormManager/types.ts b/web/src/api/ssglyxx/dormManager/types.ts index 94fc3f50..b8ac28e1 100644 --- a/web/src/api/ssglyxx/dormManager/types.ts +++ b/web/src/api/ssglyxx/dormManager/types.ts @@ -49,6 +49,11 @@ export interface DormManagerVO { */ remark: string; + /** + * 授权范围名称(逗号分隔的字符串) + */ + scopeNames?: string; + } export interface DormManagerForm extends BaseEntity { diff --git a/web/src/api/sslxx/dormBuilding/index.ts b/web/src/api/sslxx/dormBuilding/index.ts index 90bdd29f..9cd662dc 100644 --- a/web/src/api/sslxx/dormBuilding/index.ts +++ b/web/src/api/sslxx/dormBuilding/index.ts @@ -1,6 +1,6 @@ import request from '@/utils/request'; import { AxiosPromise } from 'axios'; -import { DormBuildingVO, DormBuildingForm, DormBuildingQuery } from '@/api/sslxx/dormBuilding/types'; +import { DormBuildingVO, DormBuildingForm, DormBuildingQuery, BuildingTreeSelectVo } from '@/api/sslxx/dormBuilding/types'; /** * 查询宿舍楼信息列表 @@ -83,3 +83,14 @@ export const listAreaTreeData = (campusId?: string | number): AxiosPromise params: { campusId } }); }; + +/** + * 获取宿舍楼树形结构数据(校区-宿舍区-宿舍楼三级结构) + * 校区和宿舍区节点不可选,只有宿舍楼节点可以选择 + */ +export const getBuildingTree = (): AxiosPromise => { + return request({ + url: '/sslxx/dormBuilding/buildingTree', + method: 'get' + }); +}; diff --git a/web/src/api/sslxx/dormBuilding/types.ts b/web/src/api/sslxx/dormBuilding/types.ts index f3e62a4b..b1277c64 100644 --- a/web/src/api/sslxx/dormBuilding/types.ts +++ b/web/src/api/sslxx/dormBuilding/types.ts @@ -1,125 +1,46 @@ export interface DormBuildingVO { - /** - * 主键ID - */ id: string | number; - - /** - * 宿舍楼编码 - */ buildingCode: string; - - /** - * 宿舍楼名称 - */ buildingName: string; - - /** - * 所属宿舍区ID - */ areaId: string | number; - - /** - * 所属校区ID - */ campusId: string | number; - - /** - * 宿舍楼类型(1男生楼 2女生楼 3混合楼) - */ buildingType: string; - - /** - * 宿舍楼描述 - */ buildingDescription: string; - - /** - * 排序号 - */ sortOrder: number; - + createTime: string; + createBy: string; + updateTime: string; + updateBy: string; + remark: string; + areaName?: string; + campusName?: string; } -export interface DormBuildingForm extends BaseEntity { - /** - * 主键ID - */ - id?: string | number; +export interface DormBuildingForm extends Omit { +} - /** - * 宿舍楼编码 - */ +export interface DormBuildingQuery { buildingCode?: string; - - /** - * 宿舍楼名称 - */ buildingName?: string; - - /** - * 所属宿舍区ID - */ areaId?: string | number; - - /** - * 所属校区ID - */ campusId?: string | number; - - /** - * 宿舍楼类型(1男生楼 2女生楼 3混合楼) - */ buildingType?: string; - - /** - * 宿舍楼描述 - */ - buildingDescription?: string; - - /** - * 排序号 - */ - sortOrder?: number; - + params?: Record; } -export interface DormBuildingQuery extends PageQuery { - - /** - * 宿舍楼编码 - */ - buildingCode?: string; - - /** - * 宿舍楼名称 - */ - buildingName?: string; - - /** - * 所属宿舍区ID - */ - areaId?: string | number; - - /** - * 所属校区ID - */ - campusId?: string | number; - - /** - * 宿舍楼类型(1男生楼 2女生楼 3混合楼) - */ - buildingType?: string; - - /** - * 排序号 - */ - sortOrder?: number; - - /** - * 日期范围参数 - */ - params?: any; +/** + * 宿舍楼树形结构节点 + */ +export interface BuildingTreeSelectVo { + id: number; + label: string; + nodeType: 'campus' | 'area' | 'building'; + disabled: boolean; + children?: BuildingTreeSelectVo[]; + createBy?: number; + createTime?: string; + updateBy?: number; + updateTime?: string; } diff --git a/web/src/api/ssqxx/dormArea/index.ts b/web/src/api/ssqxx/dormArea/index.ts index 2c5cad2c..0c90740b 100644 --- a/web/src/api/ssqxx/dormArea/index.ts +++ b/web/src/api/ssqxx/dormArea/index.ts @@ -1,6 +1,6 @@ import request from '@/utils/request'; import { AxiosPromise } from 'axios'; -import { DormAreaVO, DormAreaForm, DormAreaQuery } from '@/api/ssqxx/dormArea/types'; +import { DormAreaVO, DormAreaForm, DormAreaQuery, TreeSelectVo } from '@/api/ssqxx/dormArea/types'; /** * 查询宿舍区信息列表 @@ -61,3 +61,14 @@ export const delDormArea = (id: string | number | Array) => { method: 'delete' }); }; + +/** + * 获取宿舍区树形结构数据 + * 以校区为根节点,宿舍区为子节点的树形结构 + */ +export const getAreaTree = (): AxiosPromise => { + return request({ + url: '/ssqxx/dormArea/tree', + method: 'get' + }); +}; diff --git a/web/src/api/ssqxx/dormArea/types.ts b/web/src/api/ssqxx/dormArea/types.ts index 758dfe91..9fe7d817 100644 --- a/web/src/api/ssqxx/dormArea/types.ts +++ b/web/src/api/ssqxx/dormArea/types.ts @@ -87,5 +87,21 @@ export interface DormAreaQuery extends PageQuery { params?: any; } +/** + * 树形选择数据类型 + */ +export interface TreeSelectVo { + /** 节点ID */ + id: number; + /** 节点名称 */ + label: string; + /** 节点类型(campus:校区, area:宿舍区) */ + type: string; + /** 是否禁用选择 */ + disabled: boolean; + /** 子节点 */ + children?: TreeSelectVo[]; +} + diff --git a/web/src/views/xsssgly/components/ScopeDialog.vue b/web/src/views/xsssgly/components/ScopeDialog.vue index 78269a84..e0ed1450 100644 --- a/web/src/views/xsssgly/components/ScopeDialog.vue +++ b/web/src/views/xsssgly/components/ScopeDialog.vue @@ -5,18 +5,70 @@ {{ admin?.name }} + + + + + + + + + + + +