删除sql和md文件,减轻干扰
This commit is contained in:
1 parent
c9f3687c70
commit
adfbb74699
266 files changed
+1155
-48917
No files matched your search
@@ -1,130 +0,0 @@
|
||||
# 学生数据导入脚本更改日志
|
||||
|
||||
## 📋 版本历史
|
||||
|
||||
### V1.1.0 - 2025-01-14 16:15:00
|
||||
|
||||
#### 🚀 新增功能
|
||||
- **自动配置获取**: 从项目配置文件自动读取数据库连接信息
|
||||
- **简化用户交互**: 移除繁琐的数据库参数输入流程
|
||||
- **安全密码显示**: 密码部分隐藏显示(hn0***KLD格式)
|
||||
|
||||
#### 🔧 改进优化
|
||||
- **减少操作步骤**: 从原来的6个输入步骤简化为1个确认步骤
|
||||
- **降低出错概率**: 避免手动输入导致的连接参数错误
|
||||
- **提升使用体验**: 一键确认即可完成数据导入
|
||||
|
||||
#### 📊 技术变更
|
||||
- **配置来源**: `application-dev.yml` → 脚本硬编码配置
|
||||
- **连接参数**: 自动设置为项目开发环境配置
|
||||
- **执行方式**: 简化MySQL命令执行逻辑
|
||||
|
||||
#### 🗂️ 文件变更
|
||||
```
|
||||
backend/script/sql/
|
||||
├── import-student-data.sh (修改 - 主要脚本逻辑)
|
||||
├── README-学生数据生成.md (修改 - 使用说明更新)
|
||||
├── test-import.sh (新增 - 测试演示脚本)
|
||||
└── CHANGELOG-学生数据导入脚本.md (新增 - 本文件)
|
||||
```
|
||||
|
||||
#### 🔗 数据库连接配置
|
||||
```bash
|
||||
DB_HOST="47.99.164.66"
|
||||
DB_PORT="3306"
|
||||
DB_NAME="hzdyjs_xg"
|
||||
DB_USER="root"
|
||||
DB_PASSWORD="hn02le.34lkdLKD"
|
||||
```
|
||||
|
||||
#### 💡 使用方式对比
|
||||
|
||||
**V1.0.0 (旧版本)**:
|
||||
```bash
|
||||
./import-student-data.sh
|
||||
# 数据库主机 (默认: localhost): 47.99.164.66
|
||||
# 数据库端口 (默认: 3306): 3306
|
||||
# 数据库名称 (默认: hzdyjs_xg): hzdyjs_xg
|
||||
# 数据库用户名 (默认: root): root
|
||||
# 数据库密码: hn02le.34lkdLKD
|
||||
# 确认导入数据?(y/N): y
|
||||
```
|
||||
|
||||
**V1.1.0 (新版本)**:
|
||||
```bash
|
||||
./import-student-data.sh
|
||||
# 确认导入数据?(y/N): y
|
||||
```
|
||||
|
||||
#### ✅ 测试验证
|
||||
- 文件完整性检查通过
|
||||
- 权限设置正确 (-rwxr-xr-x)
|
||||
- 功能演示脚本运行正常
|
||||
- 用户体验显著提升
|
||||
|
||||
---
|
||||
|
||||
### V1.0.0 - 2025-01-14 15:30:00
|
||||
|
||||
#### 🎯 初始功能
|
||||
- **数据导入**: 支持150条学生信息和3个班级的完整导入
|
||||
- **交互式配置**: 用户手动输入数据库连接参数
|
||||
- **错误处理**: 完整的错误检查和友好提示
|
||||
- **结果验证**: 详细的导入结果展示
|
||||
|
||||
#### 📊 初始特性
|
||||
- 支持MySQL数据库连接
|
||||
- 彩色输出界面
|
||||
- 完整的错误处理机制
|
||||
- 详细的成功结果展示
|
||||
|
||||
#### 🗂️ 初始文件
|
||||
```
|
||||
backend/script/sql/
|
||||
├── generate_student_data.py (数据生成脚本)
|
||||
├── complete-student-data.sql (完整数据SQL文件)
|
||||
├── import-student-data.sh (数据导入脚本)
|
||||
└── README-学生数据生成.md (使用说明文档)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 未来规划
|
||||
|
||||
### V1.2.0 (计划中)
|
||||
- [ ] 支持多环境配置切换(dev/test/prod)
|
||||
- [ ] 添加数据备份功能
|
||||
- [ ] 支持增量数据导入
|
||||
- [ ] 添加导入进度显示
|
||||
|
||||
### V1.3.0 (计划中)
|
||||
- [ ] 支持配置文件自动解析
|
||||
- [ ] 添加数据验证功能
|
||||
- [ ] 支持回滚操作
|
||||
- [ ] 添加日志记录功能
|
||||
|
||||
---
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
### 使用问题
|
||||
- 确保MySQL客户端已安装
|
||||
- 确保网络连接到数据库服务器
|
||||
- 确保数据库用户权限正确
|
||||
|
||||
### 错误排查
|
||||
1. **连接失败**: 检查网络和数据库服务状态
|
||||
2. **权限不足**: 确认用户具有数据库写入权限
|
||||
3. **表不存在**: 确保数据库表结构已创建
|
||||
4. **数据冲突**: 检查主键和唯一约束冲突
|
||||
|
||||
### 联系方式
|
||||
- 项目文档: `docs/开发文档/API/`
|
||||
- 变更记录: `docs/变更管理/`
|
||||
- 测试文档: `docs/测试文档/`
|
||||
|
||||
---
|
||||
|
||||
**维护团队**: Cursor AI 辅助开发
|
||||
**最后更新**: 2025-01-14
|
||||
**文档版本**: 1.0
|
||||
@@ -1,48 +0,0 @@
|
||||
-- 添加班主任角色
|
||||
INSERT INTO sys_role (role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, update_by, update_time, remark, tenant_id)
|
||||
VALUES (1947639680473493505, '班主任', 'head_teacher', 3, '1', 1, 1, '0', '0', 1, NOW(), 1, NOW(), '班主任角色', '000000');
|
||||
|
||||
-- 为班主任角色添加菜单权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
|
||||
SELECT 1947639680473493505, menu_id, '000000' FROM sys_menu WHERE perms LIKE 'xg:%' AND status = '0' AND del_flag = '0';
|
||||
|
||||
-- 为智控学院张三用户分配班主任角色
|
||||
INSERT INTO sys_user_role (user_id, role_id, tenant_id)
|
||||
VALUES (2001, 1947639680473493505, '000000');
|
||||
|
||||
-- 为信息学院李四用户分配班主任角色
|
||||
INSERT INTO sys_user_role (user_id, role_id, tenant_id)
|
||||
VALUES (2002, 1947639680473493505, '000000');
|
||||
|
||||
-- 为机电学院王五用户分配班主任角色
|
||||
INSERT INTO sys_user_role (user_id, role_id, tenant_id)
|
||||
VALUES (2003, 1947639680473493505, '000000');
|
||||
|
||||
-- 为经管学院赵六用户分配班主任角色
|
||||
INSERT INTO sys_user_role (user_id, role_id, tenant_id)
|
||||
VALUES (2004, 1947639680473493505, '000000');
|
||||
|
||||
-- 添加班主任角色相关的权限
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark, tenant_id)
|
||||
VALUES (1947639680473493506, '班主任管理', 2000, 5, 'headteacher', 'xg-xx/headteacher/index', NULL, 1, 0, 'C', '0', '0', 'xg:headteacher:list', 'user', 1, NOW(), NULL, NULL, '班主任管理菜单', '000000');
|
||||
|
||||
-- 添加班主任管理按钮权限
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark, tenant_id)
|
||||
VALUES (1947639680473493507, '班主任查询', 1947639680473493506, 1, '', '', NULL, 1, 0, 'F', '0', '0', 'xg:headteacher:query', '#', 1, NOW(), NULL, NULL, '', '000000');
|
||||
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark, tenant_id)
|
||||
VALUES (1947639680473493508, '班主任新增', 1947639680473493506, 2, '', '', NULL, 1, 0, 'F', '0', '0', 'xg:headteacher:add', '#', 1, NOW(), NULL, NULL, '', '000000');
|
||||
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark, tenant_id)
|
||||
VALUES (1947639680473493509, '班主任修改', 1947639680473493506, 3, '', '', NULL, 1, 0, 'F', '0', '0', 'xg:headteacher:edit', '#', 1, NOW(), NULL, NULL, '', '000000');
|
||||
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark, tenant_id)
|
||||
VALUES (1947639680473493510, '班主任删除', 1947639680473493506, 4, '', '', NULL, 1, 0, 'F', '0', '0', 'xg:headteacher:remove', '#', 1, NOW(), NULL, NULL, '', '000000');
|
||||
|
||||
-- 为班主任角色添加班主任管理权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
|
||||
VALUES (1947639680473493505, 1947639680473493506, '000000'),
|
||||
(1947639680473493505, 1947639680473493507, '000000'),
|
||||
(1947639680473493505, 1947639680473493508, '000000'),
|
||||
(1947639680473493505, 1947639680473493509, '000000'),
|
||||
(1947639680473493505, 1947639680473493510, '000000');
|
||||
@@ -1,115 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 班级信息管理基础数据脚本
|
||||
-- 版本:V1.0.0
|
||||
-- 功能:创建3个班级基础数据
|
||||
-- 作者:Cursor AI 辅助
|
||||
-- 时间:2025-01-21
|
||||
-- 说明:班级信息管理功能的基础数据准备
|
||||
-- ==========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ==============================================
|
||||
-- 1. 创建3个新班级
|
||||
-- ==============================================
|
||||
|
||||
-- 计算机科学与技术2024级1班
|
||||
INSERT INTO `xg_class_info` (
|
||||
`id`, `tenant_id`, `class_code`, `class_name`, `class_type`, `grade`, `enrollment_year`, `graduation_year`,
|
||||
`college_code`, `college_name`, `major_name`, `major_code`, `training_type`, `degree_type`,
|
||||
`counselor_id`, `counselor_name`, `class_teacher_id`, `class_teacher_name`,
|
||||
`planned_capacity`, `current_student_count`, `male_count`, `female_count`, `active_count`,
|
||||
`contact_phone`, `qq_group`, `email`, `class_status`, `is_graduation`,
|
||||
`create_by`, `create_time`, `update_by`, `update_time`
|
||||
) VALUES (
|
||||
1100001, '000000', 'CS2024001', '计算机科学与技术2024级1班', 'regular', '2024', 2024, 2028,
|
||||
'CS001', '计算机科学与技术学院', '计算机科学与技术', 'CS001', '全日制', '本科',
|
||||
10001, '李明华', 10002, '王建国',
|
||||
50, 0, 0, 0, 0,
|
||||
'0571-88000001', '888888001', 'cs2024001@hzdyjs.edu.cn', '1', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
) ON DUPLICATE KEY UPDATE
|
||||
class_name = VALUES(class_name),
|
||||
college_name = VALUES(college_name),
|
||||
major_name = VALUES(major_name),
|
||||
update_time = NOW();
|
||||
|
||||
-- 电子信息工程2024级1班
|
||||
INSERT INTO `xg_class_info` (
|
||||
`id`, `tenant_id`, `class_code`, `class_name`, `class_type`, `grade`, `enrollment_year`, `graduation_year`,
|
||||
`college_code`, `college_name`, `major_name`, `major_code`, `training_type`, `degree_type`,
|
||||
`counselor_id`, `counselor_name`, `class_teacher_id`, `class_teacher_name`,
|
||||
`planned_capacity`, `current_student_count`, `male_count`, `female_count`, `active_count`,
|
||||
`contact_phone`, `qq_group`, `email`, `class_status`, `is_graduation`,
|
||||
`create_by`, `create_time`, `update_by`, `update_time`
|
||||
) VALUES (
|
||||
1100002, '000000', 'EE2024001', '电子信息工程2024级1班', 'regular', '2024', 2024, 2028,
|
||||
'EE001', '电子信息工程学院', '电子信息工程', 'EE001', '全日制', '本科',
|
||||
10003, '张丽萍', 10004, '刘德华',
|
||||
50, 0, 0, 0, 0,
|
||||
'0571-88000002', '888888002', 'ee2024001@hzdyjs.edu.cn', '1', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
) ON DUPLICATE KEY UPDATE
|
||||
class_name = VALUES(class_name),
|
||||
college_name = VALUES(college_name),
|
||||
major_name = VALUES(major_name),
|
||||
update_time = NOW();
|
||||
|
||||
-- 工商管理2024级1班
|
||||
INSERT INTO `xg_class_info` (
|
||||
`id`, `tenant_id`, `class_code`, `class_name`, `class_type`, `grade`, `enrollment_year`, `graduation_year`,
|
||||
`college_code`, `college_name`, `major_name`, `major_code`, `training_type`, `degree_type`,
|
||||
`counselor_id`, `counselor_name`, `class_teacher_id`, `class_teacher_name`,
|
||||
`planned_capacity`, `current_student_count`, `male_count`, `female_count`, `active_count`,
|
||||
`contact_phone`, `qq_group`, `email`, `class_status`, `is_graduation`,
|
||||
`create_by`, `create_time`, `update_by`, `update_time`
|
||||
) VALUES (
|
||||
1100003, '000000', 'BM2024001', '工商管理2024级1班', 'regular', '2024', 2024, 2028,
|
||||
'BM001', '经济管理学院', '工商管理', 'BM001', '全日制', '本科',
|
||||
10005, '陈建华', 10006, '赵文强',
|
||||
50, 0, 0, 0, 0,
|
||||
'0571-88000003', '888888003', 'bm2024001@hzdyjs.edu.cn', '1', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
) ON DUPLICATE KEY UPDATE
|
||||
class_name = VALUES(class_name),
|
||||
college_name = VALUES(college_name),
|
||||
major_name = VALUES(major_name),
|
||||
update_time = NOW();
|
||||
|
||||
-- ==============================================
|
||||
-- 2. 验证数据创建结果
|
||||
-- ==============================================
|
||||
|
||||
-- 验证班级信息
|
||||
SELECT '=== 班级信息验证 ===' as info;
|
||||
SELECT
|
||||
id,
|
||||
class_code,
|
||||
class_name,
|
||||
college_name,
|
||||
major_name,
|
||||
current_student_count,
|
||||
male_count,
|
||||
female_count,
|
||||
class_status
|
||||
FROM xg_class_info
|
||||
WHERE id IN (1100001, 1100002, 1100003);
|
||||
|
||||
-- 验证数据字典
|
||||
SELECT '=== 数据字典验证 ===' as info;
|
||||
SELECT dict_type, dict_label, dict_value
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type IN ('xg_class_type', 'xg_class_status')
|
||||
ORDER BY dict_type, dict_sort;
|
||||
|
||||
-- 恢复外键检查
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
SELECT '🎉 班级信息管理数据库准备完成!' as result;
|
||||
SELECT '📊 总计:3个班级信息' as summary;
|
||||
SELECT '✅ 数据字典:班级类型、班级状态字典已配置' as dict_status;
|
||||
SELECT '✅ 数据表:xg_class_info、xg_class_student表结构完整' as table_status;
|
||||
@@ -1,150 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 创建信息采集批次缺失的关联表
|
||||
-- 版本:V1.0.0
|
||||
-- 创建时间:2025-01-17
|
||||
-- ==========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 创建批次学生关联表
|
||||
CREATE TABLE IF NOT EXISTS xg_collection_batch_student (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
batch_id BIGINT NOT NULL COMMENT '批次ID',
|
||||
student_id BIGINT NOT NULL COMMENT '学生ID',
|
||||
student_code VARCHAR(50) NOT NULL COMMENT '学号',
|
||||
student_name VARCHAR(100) NOT NULL COMMENT '学生姓名',
|
||||
college_id BIGINT COMMENT '学院ID',
|
||||
college_name VARCHAR(100) COMMENT '学院名称',
|
||||
major_id BIGINT COMMENT '专业ID',
|
||||
major_name VARCHAR(100) COMMENT '专业名称',
|
||||
class_id BIGINT COMMENT '班级ID',
|
||||
class_name VARCHAR(100) COMMENT '班级名称',
|
||||
grade VARCHAR(50) COMMENT '届别',
|
||||
can_edit TINYINT DEFAULT 1 COMMENT '是否可编辑',
|
||||
has_submitted TINYINT DEFAULT 0 COMMENT '是否已提交',
|
||||
submit_time DATETIME COMMENT '提交时间',
|
||||
last_edit_time DATETIME COMMENT '最后编辑时间',
|
||||
edit_count INT DEFAULT 0 COMMENT '编辑次数',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_by BIGINT COMMENT '创建者',
|
||||
update_by BIGINT COMMENT '更新者',
|
||||
deleted TINYINT DEFAULT 0 COMMENT '删除标志',
|
||||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
INDEX idx_batch_id (batch_id),
|
||||
INDEX idx_student_id (student_id),
|
||||
INDEX idx_batch_student (batch_id, student_id),
|
||||
INDEX idx_college_id (college_id),
|
||||
INDEX idx_grade (grade),
|
||||
INDEX idx_create_time (create_time),
|
||||
INDEX idx_has_submitted (has_submitted),
|
||||
INDEX idx_tenant_id (tenant_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='信息采集批次学生关联表';
|
||||
|
||||
-- 2. 创建批次操作日志表
|
||||
CREATE TABLE IF NOT EXISTS xg_collection_batch_log (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
batch_id BIGINT NOT NULL COMMENT '批次ID',
|
||||
student_id BIGINT COMMENT '学生ID',
|
||||
operation_type VARCHAR(50) NOT NULL COMMENT '操作类型(CREATE,UPDATE,SUBMIT,ADMIN_MODIFY,BATCH_PUBLISH,BATCH_CLOSE)',
|
||||
operation_desc TEXT COMMENT '操作描述',
|
||||
old_data TEXT COMMENT '修改前数据(JSON格式)',
|
||||
new_data TEXT COMMENT '修改后数据(JSON格式)',
|
||||
operator_id BIGINT COMMENT '操作人ID',
|
||||
operator_name VARCHAR(100) COMMENT '操作人姓名',
|
||||
operator_type VARCHAR(50) COMMENT '操作人类型(STUDENT,ADMIN,SYSTEM)',
|
||||
ip_address VARCHAR(50) COMMENT 'IP地址',
|
||||
user_agent TEXT COMMENT '用户代理',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
INDEX idx_batch_id (batch_id),
|
||||
INDEX idx_student_id (student_id),
|
||||
INDEX idx_operation_type (operation_type),
|
||||
INDEX idx_create_time (create_time),
|
||||
INDEX idx_operator_id (operator_id),
|
||||
INDEX idx_tenant_id (tenant_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='信息采集批次操作日志表';
|
||||
|
||||
-- 3. 创建批次权限配置表
|
||||
CREATE TABLE IF NOT EXISTS xg_collection_batch_permission (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
batch_id BIGINT NOT NULL COMMENT '批次ID',
|
||||
permission_type VARCHAR(50) NOT NULL COMMENT '权限类型(EDIT,VIEW,SUBMIT,ADMIN)',
|
||||
role_id BIGINT COMMENT '角色ID',
|
||||
user_id BIGINT COMMENT '用户ID',
|
||||
college_id BIGINT COMMENT '学院ID',
|
||||
is_granted TINYINT DEFAULT 1 COMMENT '是否授权',
|
||||
grant_time DATETIME COMMENT '授权时间',
|
||||
expire_time DATETIME COMMENT '过期时间',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_by BIGINT COMMENT '创建者',
|
||||
update_by BIGINT COMMENT '更新者',
|
||||
deleted TINYINT DEFAULT 0 COMMENT '删除标志',
|
||||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
INDEX idx_batch_id (batch_id),
|
||||
INDEX idx_permission_type (permission_type),
|
||||
INDEX idx_role_id (role_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_college_id (college_id),
|
||||
INDEX idx_tenant_id (tenant_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='信息采集批次权限配置表';
|
||||
|
||||
-- 4. 创建批次统计表
|
||||
CREATE TABLE IF NOT EXISTS xg_collection_batch_statistics (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
batch_id BIGINT NOT NULL COMMENT '批次ID',
|
||||
total_students INT DEFAULT 0 COMMENT '总学生数',
|
||||
submitted_students INT DEFAULT 0 COMMENT '已提交学生数',
|
||||
pending_students INT DEFAULT 0 COMMENT '待提交学生数',
|
||||
completion_rate DECIMAL(5,2) DEFAULT 0.00 COMMENT '完成率',
|
||||
college_id BIGINT COMMENT '学院ID(按学院统计时使用)',
|
||||
college_name VARCHAR(100) COMMENT '学院名称',
|
||||
major_id BIGINT COMMENT '专业ID(按专业统计时使用)',
|
||||
major_name VARCHAR(100) COMMENT '专业名称',
|
||||
class_id BIGINT COMMENT '班级ID(按班级统计时使用)',
|
||||
class_name VARCHAR(100) COMMENT '班级名称',
|
||||
grade VARCHAR(50) COMMENT '届别',
|
||||
statistics_type VARCHAR(50) DEFAULT 'TOTAL' COMMENT '统计类型(TOTAL,COLLEGE,MAJOR,CLASS,GRADE)',
|
||||
last_updated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
INDEX idx_batch_id (batch_id),
|
||||
INDEX idx_college_id (college_id),
|
||||
INDEX idx_major_id (major_id),
|
||||
INDEX idx_class_id (class_id),
|
||||
INDEX idx_grade (grade),
|
||||
INDEX idx_statistics_type (statistics_type),
|
||||
INDEX idx_tenant_id (tenant_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='信息采集批次统计表';
|
||||
|
||||
-- 5. 创建批次定时任务表
|
||||
CREATE TABLE IF NOT EXISTS xg_batch_scheduled_task (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
batch_id BIGINT NOT NULL COMMENT '批次ID',
|
||||
task_type VARCHAR(50) NOT NULL COMMENT '任务类型(REMIND_START,REMIND_END,AUTO_CLOSE)',
|
||||
task_time DATETIME NOT NULL COMMENT '执行时间',
|
||||
task_status VARCHAR(20) DEFAULT 'PENDING' COMMENT '任务状态(PENDING,EXECUTED,FAILED)',
|
||||
execute_time DATETIME COMMENT '实际执行时间',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
INDEX idx_batch_id (batch_id),
|
||||
INDEX idx_task_type (task_type),
|
||||
INDEX idx_task_time (task_time),
|
||||
INDEX idx_task_status (task_status),
|
||||
INDEX idx_tenant_id (tenant_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='信息采集批次定时任务表';
|
||||
|
||||
-- 6. 插入一些测试数据
|
||||
INSERT INTO xg_collection_batch (id, tenant_id, batch_code, batch_name, batch_type, academic_year, semester, batch_status, start_time, end_time, description, create_by, create_time, update_by, update_time, deleted) VALUES
|
||||
(1745001000000000001, '000000', 'BATCH_2024_1', '2024-2025学年第一学期信息采集', 'annual', '2024-2025', '1', '2', '2024-09-01 00:00:00', '2024-09-30 23:59:59', '2024-2025学年第一学期学生信息采集工作', 1, NOW(), 1, NOW(), 0),
|
||||
(1745001000000000002, '000000', 'BATCH_2024_2', '2024-2025学年第二学期信息采集', 'annual', '2024-2025', '2', '1', '2025-02-15 00:00:00', '2025-03-15 23:59:59', '2024-2025学年第二学期学生信息采集工作', 1, NOW(), 1, NOW(), 0)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
batch_name = VALUES(batch_name),
|
||||
description = VALUES(description),
|
||||
update_time = NOW();
|
||||
|
||||
SELECT 'Database tables created successfully!' as message;
|
||||
@@ -1,77 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 财务项目预算审批系统 - 菜单配置脚本(修复路径版)
|
||||
-- 版本: 1.1
|
||||
-- 创建时间: 2025-08-01
|
||||
-- 修复内容: 删除budgetApproval中间路径,使用简化的路径结构
|
||||
-- 模块前缀: cw_ (财务模块)
|
||||
-- 菜单ID范围: 5000-5999
|
||||
-- ==========================================
|
||||
|
||||
-- 1. 一级菜单:财务管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5000, '财务管理', 0, 10, 'finance', NULL, '', 1, 0, 'M', '0', '0', '', 'money', 103, 1, now(), NULL, NULL, '财务管理根菜单', '000000');
|
||||
|
||||
-- 2. 二级菜单:项目预算审批
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5100, '项目预算审批', 5000, 1, 'budget-approval', NULL, '', 1, 0, 'M', '0', '0', '', 'file-text', 103, 1, now(), NULL, NULL, '项目预算审批管理', '000000');
|
||||
|
||||
-- 3. 三级菜单:预算申报管理(修复路径)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5110, '预算申报管理', 5100, 1, 'application', 'cw/application/index', '', 1, 0, 'C', '0', '0', 'cw:application:list', 'form', 103, 1, now(), NULL, NULL, '预算申报管理页面', '000000');
|
||||
|
||||
-- 预算申报管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5111, '预算申报查询', 5110, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:query', '#', 103, 1, now(), NULL, NULL, '预算申报查询权限', '000000'),
|
||||
(5112, '预算申报详情', 5110, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:detail', '#', 103, 1, now(), NULL, NULL, '预算申报详情权限', '000000'),
|
||||
(5113, '预算申报新增', 5110, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:add', '#', 103, 1, now(), NULL, NULL, '预算申报新增权限', '000000'),
|
||||
(5114, '预算申报修改', 5110, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:edit', '#', 103, 1, now(), NULL, NULL, '预算申报修改权限', '000000'),
|
||||
(5115, '预算申报删除', 5110, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:remove', '#', 103, 1, now(), NULL, NULL, '预算申报删除权限', '000000'),
|
||||
(5116, '预算申报导出', 5110, 6, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:export', '#', 103, 1, now(), NULL, NULL, '预算申报导出权限', '000000'),
|
||||
(5117, '预算申报提交', 5110, 7, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:submit', '#', 103, 1, now(), NULL, NULL, '预算申报提交审批权限', '000000');
|
||||
|
||||
-- 4. 三级菜单:审批人配置(修复路径)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5120, '审批人配置', 5100, 2, 'approver-config', 'cw/approverConfig/index', '', 1, 0, 'C', '0', '0', 'cw:approverConfig:list', 'peoples', 103, 1, now(), NULL, NULL, '审批人配置页面', '000000');
|
||||
|
||||
-- 审批人配置 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5121, '审批人查询', 5120, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:query', '#', 103, 1, now(), NULL, NULL, '审批人配置查询权限', '000000'),
|
||||
(5122, '审批人详情', 5120, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:detail', '#', 103, 1, now(), NULL, NULL, '审批人配置详情权限', '000000'),
|
||||
(5123, '审批人新增', 5120, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:add', '#', 103, 1, now(), NULL, NULL, '审批人配置新增权限', '000000'),
|
||||
(5124, '审批人修改', 5120, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:edit', '#', 103, 1, now(), NULL, NULL, '审批人配置修改权限', '000000'),
|
||||
(5125, '审批人删除', 5120, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:remove', '#', 103, 1, now(), NULL, NULL, '审批人配置删除权限', '000000');
|
||||
|
||||
-- 5. 三级菜单:审批记录查询(修复路径)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5130, '审批记录查询', 5100, 3, 'approval-record', 'cw/approvalRecord/index', '', 1, 0, 'C', '0', '0', 'cw:approvalRecord:list', 'documentation', 103, 1, now(), NULL, NULL, '审批记录查询页面', '000000');
|
||||
|
||||
-- 审批记录查询 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5131, '审批记录查询', 5130, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:query', '#', 103, 1, now(), NULL, NULL, '审批记录查询权限', '000000'),
|
||||
(5132, '审批记录详情', 5130, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:detail', '#', 103, 1, now(), NULL, NULL, '审批记录详情权限', '000000');
|
||||
|
||||
-- 6. 三级菜单:支出明细管理(修复路径)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5140, '支出明细管理', 5100, 4, 'expenditure-detail', 'cw/expenditureDetail/index', '', 1, 0, 'C', '0', '0', 'cw:expenditureDetail:list', 'money', 103, 1, now(), NULL, NULL, '支出明细管理页面', '000000');
|
||||
|
||||
-- 支出明细管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5141, '支出明细查询', 5140, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:query', '#', 103, 1, now(), NULL, NULL, '支出明细查询权限', '000000'),
|
||||
(5142, '支出明细详情', 5140, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:detail', '#', 103, 1, now(), NULL, NULL, '支出明细详情权限', '000000'),
|
||||
(5143, '支出明细新增', 5140, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:add', '#', 103, 1, now(), NULL, NULL, '支出明细新增权限', '000000'),
|
||||
(5144, '支出明细修改', 5140, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:edit', '#', 103, 1, now(), NULL, NULL, '支出明细修改权限', '000000'),
|
||||
(5145, '支出明细删除', 5140, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:remove', '#', 103, 1, now(), NULL, NULL, '支出明细删除权限', '000000');
|
||||
|
||||
-- 7. 三级菜单:绩效指标管理(修复路径)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5150, '绩效指标管理', 5100, 5, 'performance-indicator', 'cw/performanceIndicator/index', '', 1, 0, 'C', '0', '0', 'cw:performanceIndicator:list', 'chart', 103, 1, now(), NULL, NULL, '绩效指标管理页面', '000000');
|
||||
|
||||
-- 绩效指标管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5151, '绩效指标查询', 5150, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:query', '#', 103, 1, now(), NULL, NULL, '绩效指标查询权限', '000000'),
|
||||
(5152, '绩效指标详情', 5150, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:detail', '#', 103, 1, now(), NULL, NULL, '绩效指标详情权限', '000000'),
|
||||
(5153, '绩效指标新增', 5150, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:add', '#', 103, 1, now(), NULL, NULL, '绩效指标新增权限', '000000'),
|
||||
(5154, '绩效指标修改', 5150, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:edit', '#', 103, 1, now(), NULL, NULL, '绩效指标修改权限', '000000'),
|
||||
(5155, '绩效指标删除', 5150, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:remove', '#', 103, 1, now(), NULL, NULL, '绩效指标删除权限', '000000');
|
||||
|
||||
SELECT '财务项目预算审批系统菜单配置完成(修复路径版)!' AS result;
|
||||
@@ -1,99 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 财务项目预算审批系统 - 菜单配置脚本(修正版)
|
||||
-- 版本: 1.1
|
||||
-- 创建时间: 2025-01-26
|
||||
-- 模块前缀: cw_ (财务模块)
|
||||
-- 菜单ID范围: 5000-5999
|
||||
-- ==========================================
|
||||
|
||||
-- 1. 一级菜单:财务管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5000, '财务管理', 0, 10, 'finance', NULL, '', 1, 0, 'M', '0', '0', '', 'money', 103, 1, now(), NULL, NULL, '财务管理根菜单');
|
||||
|
||||
-- 2. 二级菜单:项目预算审批
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5100, '项目预算审批', 5000, 1, 'budget-approval', NULL, '', 1, 0, 'M', '0', '0', '', 'file-text', 103, 1, now(), NULL, NULL, '项目预算审批管理');
|
||||
|
||||
-- 3. 三级菜单:预算申报管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5110, '预算申报管理', 5100, 1, 'application', 'cw/budgetApproval/application/index', '', 1, 0, 'C', '0', '0', 'cw:application:list', 'form', 103, 1, now(), NULL, NULL, '预算申报管理页面');
|
||||
|
||||
-- 预算申报管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5111, '预算申报查询', 5110, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:query', '#', 103, 1, now(), NULL, NULL, '预算申报查询权限'),
|
||||
(5112, '预算申报详情', 5110, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:detail', '#', 103, 1, now(), NULL, NULL, '预算申报详情权限'),
|
||||
(5113, '预算申报新增', 5110, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:add', '#', 103, 1, now(), NULL, NULL, '预算申报新增权限'),
|
||||
(5114, '预算申报修改', 5110, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:edit', '#', 103, 1, now(), NULL, NULL, '预算申报修改权限'),
|
||||
(5115, '预算申报删除', 5110, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:remove', '#', 103, 1, now(), NULL, NULL, '预算申报删除权限'),
|
||||
(5116, '预算申报导出', 5110, 6, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:export', '#', 103, 1, now(), NULL, NULL, '预算申报导出权限'),
|
||||
(5117, '预算申报提交', 5110, 7, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:submit', '#', 103, 1, now(), NULL, NULL, '预算申报提交审批权限');
|
||||
|
||||
-- 4. 三级菜单:审批人配置
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5120, '审批人配置', 5100, 2, 'approver-config', 'cw/budgetApproval/approverConfig/index', '', 1, 0, 'C', '0', '0', 'cw:approverConfig:list', 'peoples', 103, 1, now(), NULL, NULL, '审批人配置页面');
|
||||
|
||||
-- 审批人配置 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5121, '审批人查询', 5120, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:query', '#', 103, 1, now(), NULL, NULL, '审批人配置查询权限'),
|
||||
(5122, '审批人详情', 5120, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:detail', '#', 103, 1, now(), NULL, NULL, '审批人配置详情权限'),
|
||||
(5123, '审批人新增', 5120, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:add', '#', 103, 1, now(), NULL, NULL, '审批人配置新增权限'),
|
||||
(5124, '审批人修改', 5120, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:edit', '#', 103, 1, now(), NULL, NULL, '审批人配置修改权限'),
|
||||
(5125, '审批人删除', 5120, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:remove', '#', 103, 1, now(), NULL, NULL, '审批人配置删除权限');
|
||||
|
||||
-- 5. 三级菜单:审批记录查询
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5130, '审批记录查询', 5100, 3, 'approval-record', 'cw/budgetApproval/approvalRecord/index', '', 1, 0, 'C', '0', '0', 'cw:approvalRecord:list', 'documentation', 103, 1, now(), NULL, NULL, '审批记录查询页面');
|
||||
|
||||
-- 审批记录查询 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5131, '审批记录查询', 5130, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:query', '#', 103, 1, now(), NULL, NULL, '审批记录查询权限'),
|
||||
(5132, '审批记录详情', 5130, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:detail', '#', 103, 1, now(), NULL, NULL, '审批记录详情权限'),
|
||||
(5133, '审批操作', 5130, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:approve', '#', 103, 1, now(), NULL, NULL, '审批操作权限'),
|
||||
(5134, '退回操作', 5130, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:return', '#', 103, 1, now(), NULL, NULL, '退回操作权限'),
|
||||
(5135, '审批记录导出', 5130, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:export', '#', 103, 1, now(), NULL, NULL, '审批记录导出权限');
|
||||
|
||||
-- 6. 三级菜单:支出明细管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5140, '支出明细管理', 5100, 4, 'expenditure-detail', 'cw/budgetApproval/expenditureDetail/index', '', 1, 0, 'C', '0', '0', 'cw:expenditureDetail:list', 'money', 103, 1, now(), NULL, NULL, '支出明细管理页面');
|
||||
|
||||
-- 支出明细管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5141, '支出明细查询', 5140, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:query', '#', 103, 1, now(), NULL, NULL, '支出明细查询权限'),
|
||||
(5142, '支出明细详情', 5140, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:detail', '#', 103, 1, now(), NULL, NULL, '支出明细详情权限'),
|
||||
(5143, '支出明细新增', 5140, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:add', '#', 103, 1, now(), NULL, NULL, '支出明细新增权限'),
|
||||
(5144, '支出明细修改', 5140, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:edit', '#', 103, 1, now(), NULL, NULL, '支出明细修改权限'),
|
||||
(5145, '支出明细删除', 5140, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:remove', '#', 103, 1, now(), NULL, NULL, '支出明细删除权限');
|
||||
|
||||
-- 7. 三级菜单:绩效指标管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5150, '绩效指标管理', 5100, 5, 'performance-indicator', 'cw/budgetApproval/performanceIndicator/index', '', 1, 0, 'C', '0', '0', 'cw:performanceIndicator:list', 'chart', 103, 1, now(), NULL, NULL, '绩效指标管理页面');
|
||||
|
||||
-- 绩效指标管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5151, '绩效指标查询', 5150, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:query', '#', 103, 1, now(), NULL, NULL, '绩效指标查询权限'),
|
||||
(5152, '绩效指标详情', 5150, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:detail', '#', 103, 1, now(), NULL, NULL, '绩效指标详情权限'),
|
||||
(5153, '绩效指标新增', 5150, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:add', '#', 103, 1, now(), NULL, NULL, '绩效指标新增权限'),
|
||||
(5154, '绩效指标修改', 5150, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:edit', '#', 103, 1, now(), NULL, NULL, '绩效指标修改权限'),
|
||||
(5155, '绩效指标删除', 5150, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:remove', '#', 103, 1, now(), NULL, NULL, '绩效指标删除权限');
|
||||
|
||||
-- 8. 三级菜单:附件管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5160, '附件管理', 5100, 6, 'attachment', 'cw/budgetApproval/attachment/index', '', 1, 0, 'C', '0', '0', 'cw:attachment:list', 'upload', 103, 1, now(), NULL, NULL, '附件管理页面');
|
||||
|
||||
-- 附件管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
(5161, '附件查询', 5160, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:query', '#', 103, 1, now(), NULL, NULL, '附件查询权限'),
|
||||
(5162, '附件详情', 5160, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:detail', '#', 103, 1, now(), NULL, NULL, '附件详情权限'),
|
||||
(5163, '附件上传', 5160, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:upload', '#', 103, 1, now(), NULL, NULL, '附件上传权限'),
|
||||
(5164, '附件下载', 5160, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:download', '#', 103, 1, now(), NULL, NULL, '附件下载权限'),
|
||||
(5165, '附件删除', 5160, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:remove', '#', 103, 1, now(), NULL, NULL, '附件删除权限');
|
||||
|
||||
-- 菜单创建完成,显示创建结果
|
||||
SELECT '财务项目预算审批系统菜单配置完成!' AS result;
|
||||
|
||||
-- 验证菜单创建情况
|
||||
SELECT '=== 菜单创建验证 ===' as verification;
|
||||
SELECT menu_id, menu_name, menu_type, parent_id, order_num, perms
|
||||
FROM sys_menu
|
||||
WHERE menu_id BETWEEN 5000 AND 5999
|
||||
ORDER BY menu_id;
|
||||
@@ -1,92 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 财务项目预算审批系统 - 菜单配置脚本
|
||||
-- 版本: 1.0
|
||||
-- 创建时间: 2025-01-26
|
||||
-- 模块前缀: cw_ (财务模块)
|
||||
-- 菜单ID范围: 5000-5999
|
||||
-- ==========================================
|
||||
|
||||
-- 1. 一级菜单:财务管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5000, '财务管理', 0, 10, 'finance', NULL, '', 1, 0, 'M', '0', '0', '', 'money', 103, 1, now(), NULL, NULL, '财务管理根菜单', '000000');
|
||||
|
||||
-- 2. 二级菜单:项目预算审批
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5100, '项目预算审批', 5000, 1, 'budget-approval', NULL, '', 1, 0, 'M', '0', '0', '', 'file-text', 103, 1, now(), NULL, NULL, '项目预算审批管理', '000000');
|
||||
|
||||
-- 3. 三级菜单:预算申报管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5110, '预算申报管理', 5100, 1, 'application', 'cw/budgetApproval/application/index', '', 1, 0, 'C', '0', '0', 'cw:application:list', 'form', 103, 1, now(), NULL, NULL, '预算申报管理页面', '000000');
|
||||
|
||||
-- 预算申报管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5111, '预算申报查询', 5110, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:query', '#', 103, 1, now(), NULL, NULL, '预算申报查询权限', '000000'),
|
||||
(5112, '预算申报详情', 5110, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:detail', '#', 103, 1, now(), NULL, NULL, '预算申报详情权限', '000000'),
|
||||
(5113, '预算申报新增', 5110, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:add', '#', 103, 1, now(), NULL, NULL, '预算申报新增权限', '000000'),
|
||||
(5114, '预算申报修改', 5110, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:edit', '#', 103, 1, now(), NULL, NULL, '预算申报修改权限', '000000'),
|
||||
(5115, '预算申报删除', 5110, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:remove', '#', 103, 1, now(), NULL, NULL, '预算申报删除权限', '000000'),
|
||||
(5116, '预算申报导出', 5110, 6, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:export', '#', 103, 1, now(), NULL, NULL, '预算申报导出权限', '000000'),
|
||||
(5117, '预算申报提交', 5110, 7, '', '', '', 1, 0, 'F', '0', '0', 'cw:application:submit', '#', 103, 1, now(), NULL, NULL, '预算申报提交审批权限', '000000');
|
||||
|
||||
-- 4. 三级菜单:审批人配置
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5120, '审批人配置', 5100, 2, 'approver-config', 'cw/budgetApproval/approverConfig/index', '', 1, 0, 'C', '0', '0', 'cw:approverConfig:list', 'peoples', 103, 1, now(), NULL, NULL, '审批人配置页面', '000000');
|
||||
|
||||
-- 审批人配置 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5121, '审批人查询', 5120, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:query', '#', 103, 1, now(), NULL, NULL, '审批人配置查询权限', '000000'),
|
||||
(5122, '审批人详情', 5120, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:detail', '#', 103, 1, now(), NULL, NULL, '审批人配置详情权限', '000000'),
|
||||
(5123, '审批人新增', 5120, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:add', '#', 103, 1, now(), NULL, NULL, '审批人配置新增权限', '000000'),
|
||||
(5124, '审批人修改', 5120, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:edit', '#', 103, 1, now(), NULL, NULL, '审批人配置修改权限', '000000'),
|
||||
(5125, '审批人删除', 5120, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:approverConfig:remove', '#', 103, 1, now(), NULL, NULL, '审批人配置删除权限', '000000');
|
||||
|
||||
-- 5. 三级菜单:审批记录查询
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5130, '审批记录查询', 5100, 3, 'approval-record', 'cw/budgetApproval/approvalRecord/index', '', 1, 0, 'C', '0', '0', 'cw:approvalRecord:list', 'documentation', 103, 1, now(), NULL, NULL, '审批记录查询页面', '000000');
|
||||
|
||||
-- 审批记录查询 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5131, '审批记录查询', 5130, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:query', '#', 103, 1, now(), NULL, NULL, '审批记录查询权限', '000000'),
|
||||
(5132, '审批记录详情', 5130, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:detail', '#', 103, 1, now(), NULL, NULL, '审批记录详情权限', '000000'),
|
||||
(5133, '审批操作', 5130, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:approve', '#', 103, 1, now(), NULL, NULL, '审批操作权限', '000000'),
|
||||
(5134, '退回操作', 5130, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:return', '#', 103, 1, now(), NULL, NULL, '退回操作权限', '000000'),
|
||||
(5135, '审批记录导出', 5130, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:approvalRecord:export', '#', 103, 1, now(), NULL, NULL, '审批记录导出权限', '000000');
|
||||
|
||||
-- 6. 三级菜单:支出明细管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5140, '支出明细管理', 5100, 4, 'expenditure-detail', 'cw/budgetApproval/expenditureDetail/index', '', 1, 0, 'C', '0', '0', 'cw:expenditureDetail:list', 'money', 103, 1, now(), NULL, NULL, '支出明细管理页面', '000000');
|
||||
|
||||
-- 支出明细管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5141, '支出明细查询', 5140, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:query', '#', 103, 1, now(), NULL, NULL, '支出明细查询权限', '000000'),
|
||||
(5142, '支出明细详情', 5140, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:detail', '#', 103, 1, now(), NULL, NULL, '支出明细详情权限', '000000'),
|
||||
(5143, '支出明细新增', 5140, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:add', '#', 103, 1, now(), NULL, NULL, '支出明细新增权限', '000000'),
|
||||
(5144, '支出明细修改', 5140, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:edit', '#', 103, 1, now(), NULL, NULL, '支出明细修改权限', '000000'),
|
||||
(5145, '支出明细删除', 5140, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:expenditureDetail:remove', '#', 103, 1, now(), NULL, NULL, '支出明细删除权限', '000000');
|
||||
|
||||
-- 7. 三级菜单:绩效指标管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5150, '绩效指标管理', 5100, 5, 'performance-indicator', 'cw/budgetApproval/performanceIndicator/index', '', 1, 0, 'C', '0', '0', 'cw:performanceIndicator:list', 'chart', 103, 1, now(), NULL, NULL, '绩效指标管理页面', '000000');
|
||||
|
||||
-- 绩效指标管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5151, '绩效指标查询', 5150, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:query', '#', 103, 1, now(), NULL, NULL, '绩效指标查询权限', '000000'),
|
||||
(5152, '绩效指标详情', 5150, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:detail', '#', 103, 1, now(), NULL, NULL, '绩效指标详情权限', '000000'),
|
||||
(5153, '绩效指标新增', 5150, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:add', '#', 103, 1, now(), NULL, NULL, '绩效指标新增权限', '000000'),
|
||||
(5154, '绩效指标修改', 5150, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:edit', '#', 103, 1, now(), NULL, NULL, '绩效指标修改权限', '000000'),
|
||||
(5155, '绩效指标删除', 5150, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:performanceIndicator:remove', '#', 103, 1, now(), NULL, NULL, '绩效指标删除权限', '000000');
|
||||
|
||||
-- 8. 三级菜单:附件管理
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5160, '附件管理', 5100, 6, 'attachment', 'cw/budgetApproval/attachment/index', '', 1, 0, 'C', '0', '0', 'cw:attachment:list', 'upload', 103, 1, now(), NULL, NULL, '附件管理页面', '000000');
|
||||
|
||||
-- 附件管理 - 功能按钮
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark, tenant_id) VALUES
|
||||
(5161, '附件查询', 5160, 1, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:query', '#', 103, 1, now(), NULL, NULL, '附件查询权限', '000000'),
|
||||
(5162, '附件详情', 5160, 2, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:detail', '#', 103, 1, now(), NULL, NULL, '附件详情权限', '000000'),
|
||||
(5163, '附件上传', 5160, 3, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:upload', '#', 103, 1, now(), NULL, NULL, '附件上传权限', '000000'),
|
||||
(5164, '附件下载', 5160, 4, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:download', '#', 103, 1, now(), NULL, NULL, '附件下载权限', '000000'),
|
||||
(5165, '附件删除', 5160, 5, '', '', '', 1, 0, 'F', '0', '0', 'cw:attachment:remove', '#', 103, 1, now(), NULL, NULL, '附件删除权限', '000000');
|
||||
|
||||
-- 菜单创建完成,显示创建结果
|
||||
SELECT '财务项目预算审批系统菜单配置完成!' AS result;
|
||||
@@ -1,100 +0,0 @@
|
||||
-- 修复学院字段拼写问题
|
||||
-- 版本: 1.0.0
|
||||
-- 创建日期: 2025-07-13
|
||||
-- 描述: 检查并修复学院字段的拼写问题(college vs collage)
|
||||
|
||||
-- 第一步:检查字段情况
|
||||
SELECT
|
||||
COUNT(*) as college_name_count,
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'collage_name'
|
||||
AND TABLE_SCHEMA = DATABASE()) as collage_name_count,
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_id'
|
||||
AND TABLE_SCHEMA = DATABASE()) as college_id_count,
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'collage_id'
|
||||
AND TABLE_SCHEMA = DATABASE()) as collage_id_count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_name'
|
||||
AND TABLE_SCHEMA = DATABASE();
|
||||
|
||||
-- 第二步:如果存在collage_name而不存在college_name,则重命名字段
|
||||
SET @rename_collage_name_sql = (
|
||||
SELECT IF(
|
||||
EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'collage_name'
|
||||
AND TABLE_SCHEMA = DATABASE())
|
||||
AND
|
||||
NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_name'
|
||||
AND TABLE_SCHEMA = DATABASE()),
|
||||
'ALTER TABLE zsjy_enrollment_info CHANGE COLUMN collage_name college_name varchar(100) COMMENT \'学院名称\'',
|
||||
'SELECT \'无需修改collage_name字段\' AS message'
|
||||
)
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @rename_collage_name_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 第三步:如果存在collage_id而不存在college_id,则重命名字段
|
||||
SET @rename_collage_id_sql = (
|
||||
SELECT IF(
|
||||
EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'collage_id'
|
||||
AND TABLE_SCHEMA = DATABASE())
|
||||
AND
|
||||
NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_id'
|
||||
AND TABLE_SCHEMA = DATABASE()),
|
||||
'ALTER TABLE zsjy_enrollment_info CHANGE COLUMN collage_id college_id varchar(20) COMMENT \'学院代码\'',
|
||||
'SELECT \'无需修改collage_id字段\' AS message'
|
||||
)
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @rename_collage_id_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 第四步:如果不存在college_name,则添加该字段
|
||||
SET @add_college_name_sql = (
|
||||
SELECT IF(
|
||||
NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_name'
|
||||
AND TABLE_SCHEMA = DATABASE()),
|
||||
'ALTER TABLE zsjy_enrollment_info ADD COLUMN college_name varchar(100) COMMENT \'学院名称\'',
|
||||
'SELECT \'college_name字段已存在\' AS message'
|
||||
)
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @add_college_name_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 第五步:如果不存在college_id,则添加该字段
|
||||
SET @add_college_id_sql = (
|
||||
SELECT IF(
|
||||
NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_id'
|
||||
AND TABLE_SCHEMA = DATABASE()),
|
||||
'ALTER TABLE zsjy_enrollment_info ADD COLUMN college_id varchar(20) COMMENT \'学院代码\'',
|
||||
'SELECT \'college_id字段已存在\' AS message'
|
||||
)
|
||||
);
|
||||
|
||||
PREPARE stmt FROM @add_college_id_sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '学院字段拼写修复完成!' AS result;
|
||||
@@ -1,78 +0,0 @@
|
||||
-- 修复招生报名信息表中的学院相关字段
|
||||
-- 版本: 1.0.0
|
||||
-- 创建日期: 2025-07-25
|
||||
-- 描述: 检查并添加学院名称和学院代码字段
|
||||
|
||||
-- 检查college_name字段是否存在,如果不存在则添加
|
||||
SET @check_college_name = (
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_name'
|
||||
AND TABLE_SCHEMA = DATABASE()
|
||||
);
|
||||
|
||||
SET @alter_college_name = IF(@check_college_name = 0,
|
||||
'ALTER TABLE zsjy_enrollment_info ADD COLUMN college_name varchar(100) COMMENT \'学院名称\'',
|
||||
'SELECT \'college_name字段已存在,无需添加\' AS message');
|
||||
|
||||
PREPARE stmt FROM @alter_college_name;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查college_id字段是否存在,如果不存在则添加
|
||||
SET @check_college_id = (
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'zsjy_enrollment_info'
|
||||
AND COLUMN_NAME = 'college_id'
|
||||
AND TABLE_SCHEMA = DATABASE()
|
||||
);
|
||||
|
||||
SET @alter_college_id = IF(@check_college_id = 0,
|
||||
'ALTER TABLE zsjy_enrollment_info ADD COLUMN college_id varchar(20) COMMENT \'学院代码\'',
|
||||
'SELECT \'college_id字段已存在,无需添加\' AS message');
|
||||
|
||||
PREPARE stmt FROM @alter_college_id;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查数据字典是否存在
|
||||
SET @dict_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM sys_dict_type
|
||||
WHERE dict_type = 'zsjy_college'
|
||||
);
|
||||
|
||||
-- 如果不存在则添加字典类型
|
||||
SET @insert_dict_type = IF(@dict_exists = 0,
|
||||
'INSERT INTO sys_dict_type(dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES (\'学院列表\', \'zsjy_college\', \'0\', \'1\', NOW(), \'1\', NOW(), \'招生系统学院列表\')',
|
||||
'SELECT \'zsjy_college字典类型已存在,无需添加\' AS message');
|
||||
|
||||
PREPARE stmt FROM @insert_dict_type;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查字典数据是否存在
|
||||
SET @dict_data_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'zsjy_college'
|
||||
);
|
||||
|
||||
-- 如果不存在则添加示例字典数据
|
||||
SET @insert_dict_data = IF(@dict_data_exists = 0,
|
||||
'INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES
|
||||
(1, \'机电工程学院\', \'JDGC\', \'zsjy_college\', null, \'default\', \'Y\', \'0\', \'1\', NOW(), \'1\', NOW(), null),
|
||||
(2, \'信息工程学院\', \'XXGC\', \'zsjy_college\', null, \'default\', \'N\', \'0\', \'1\', NOW(), \'1\', NOW(), null),
|
||||
(3, \'艺术设计学院\', \'YSSJ\', \'zsjy_college\', null, \'default\', \'N\', \'0\', \'1\', NOW(), \'1\', NOW(), null),
|
||||
(4, \'经济管理学院\', \'JJGL\', \'zsjy_college\', null, \'default\', \'N\', \'0\', \'1\', NOW(), \'1\', NOW(), null),
|
||||
(5, \'医药健康学院\', \'YYJK\', \'zsjy_college\', null, \'default\', \'N\', \'0\', \'1\', NOW(), \'1\', NOW(), null)',
|
||||
'SELECT \'zsjy_college字典数据已存在,无需添加\' AS message');
|
||||
|
||||
PREPARE stmt FROM @insert_dict_data;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '招生报名信息表字段修复完成!' AS result;
|
||||
@@ -1,56 +0,0 @@
|
||||
-- ========================================
|
||||
-- 修复招生就业模块字典数据脚本
|
||||
-- 文件:fix-enrollment-dict-data.sql
|
||||
-- 创建时间:2025-07-03
|
||||
-- 说明:修复性别显示和校服尺码问题
|
||||
-- ========================================
|
||||
|
||||
-- ----------------------------
|
||||
-- 1、更新字典标签值
|
||||
-- ----------------------------
|
||||
|
||||
-- 修复性别字典数据
|
||||
UPDATE sys_dict_data
|
||||
SET dict_label = '男', remark = '男性'
|
||||
WHERE dict_type = 'zsjy_gender' AND dict_value = 'M';
|
||||
|
||||
UPDATE sys_dict_data
|
||||
SET dict_label = '女', remark = '女性'
|
||||
WHERE dict_type = 'zsjy_gender' AND dict_value = 'F';
|
||||
|
||||
-- 确保校服尺码字典数据存在并可用
|
||||
-- 如果不存在则插入
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 480, '000000', 1, 'XS', 'XS', 'zsjy_uniform_size', '', 'default', 'N', '0', 1, NOW(), '加小号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'XS');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 481, '000000', 2, 'S', 'S', 'zsjy_uniform_size', '', 'default', 'N', '0', 1, NOW(), '小号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'S');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 482, '000000', 3, 'M', 'M', 'zsjy_uniform_size', '', 'default', 'Y', '0', 1, NOW(), '中号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'M');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 483, '000000', 4, 'L', 'L', 'zsjy_uniform_size', '', 'default', 'N', '0', 1, NOW(), '大号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'L');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 484, '000000', 5, 'XL', 'XL', 'zsjy_uniform_size', '', 'default', 'N', '0', 1, NOW(), '加大号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'XL');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 485, '000000', 6, 'XXL', 'XXL', 'zsjy_uniform_size', '', 'default', 'N', '0', 1, NOW(), '加加大号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'XXL');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
SELECT 486, '000000', 7, 'XXXL', 'XXXL', 'zsjy_uniform_size', '', 'default', 'N', '0', 1, NOW(), '加加加大号'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'zsjy_uniform_size' AND dict_value = 'XXXL');
|
||||
@@ -1,12 +0,0 @@
|
||||
-- 修复毕业生信息表缺失的create_dept字段
|
||||
-- 执行时间: 2025-01-26 24:25:00
|
||||
-- 问题: MyBatis-Plus插入数据时报错 Unknown column 'create_dept' in 'field list'
|
||||
-- 原因: 数据库表缺少BaseEntity中的create_dept字段
|
||||
|
||||
-- 添加create_dept字段
|
||||
ALTER TABLE zsjy_graduate_info
|
||||
ADD COLUMN create_dept bigint(20) DEFAULT NULL COMMENT '创建部门'
|
||||
AFTER remark;
|
||||
|
||||
-- 验证字段添加成功
|
||||
-- DESCRIBE zsjy_graduate_info;
|
||||
@@ -1,85 +0,0 @@
|
||||
-- ==================================================
|
||||
-- 修复所有毕业生相关字典数据 - 解决下拉框为空问题
|
||||
-- 创建日期: 2025-01-26
|
||||
-- 说明: 修复所有使用过大dict_code值的毕业生相关字典数据
|
||||
-- ==================================================
|
||||
|
||||
-- 1. 查看所有需要修复的字典类型
|
||||
SELECT '=== 需要修复的字典类型统计 ===' as info;
|
||||
SELECT dict_type, COUNT(*) as count, MIN(dict_code) as min_code, MAX(dict_code) as max_code
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type IN (
|
||||
'zsjy_graduate_employment_status',
|
||||
'zsjy_graduate_company_type',
|
||||
'zsjy_graduate_salary_range',
|
||||
'zsjy_graduate_audit_status'
|
||||
)
|
||||
GROUP BY dict_type;
|
||||
|
||||
-- 2. 修复毕业生就业状态字典
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_employment_status';
|
||||
INSERT INTO sys_dict_data (
|
||||
dict_code, tenant_id, dict_sort, dict_label, dict_value,
|
||||
dict_type, css_class, list_class, is_default,
|
||||
create_dept, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES
|
||||
(220, '000000', 1, '待就业', '1', 'zsjy_graduate_employment_status', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '未确定就业状态'),
|
||||
(221, '000000', 2, '已签约', '2', 'zsjy_graduate_employment_status', NULL, 'success', 'N', NULL, 103, NOW(), 103, NOW(), '已签署就业协议'),
|
||||
(222, '000000', 3, '升学', '3', 'zsjy_graduate_employment_status', NULL, 'primary', 'N', NULL, 103, NOW(), 103, NOW(), '继续深造学习'),
|
||||
(223, '000000', 4, '出国', '4', 'zsjy_graduate_employment_status', NULL, 'warning', 'N', NULL, 103, NOW(), 103, NOW(), '出国留学或工作'),
|
||||
(224, '000000', 5, '自主创业', '5', 'zsjy_graduate_employment_status', NULL, 'danger', 'N', NULL, 103, NOW(), 103, NOW(), '自主创业'),
|
||||
(225, '000000', 6, '灵活就业', '6', 'zsjy_graduate_employment_status', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '灵活就业'),
|
||||
(226, '000000', 7, '暂不就业', '7', 'zsjy_graduate_employment_status', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '暂不就业'),
|
||||
(227, '000000', 8, '其他', '8', 'zsjy_graduate_employment_status', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '其他情况');
|
||||
|
||||
-- 3. 修复就业单位性质字典
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_company_type';
|
||||
INSERT INTO sys_dict_data (
|
||||
dict_code, tenant_id, dict_sort, dict_label, dict_value,
|
||||
dict_type, css_class, list_class, is_default,
|
||||
create_dept, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES
|
||||
(230, '000000', 1, '国有企业', '1', 'zsjy_graduate_company_type', NULL, 'primary', 'N', NULL, 103, NOW(), 103, NOW(), '国有企业'),
|
||||
(231, '000000', 2, '私营企业', '2', 'zsjy_graduate_company_type', NULL, 'success', 'N', NULL, 103, NOW(), 103, NOW(), '私营企业'),
|
||||
(232, '000000', 3, '外资企业', '3', 'zsjy_graduate_company_type', NULL, 'warning', 'N', NULL, 103, NOW(), 103, NOW(), '外资企业'),
|
||||
(233, '000000', 4, '事业单位', '4', 'zsjy_graduate_company_type', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '事业单位'),
|
||||
(234, '000000', 5, '政府机关', '5', 'zsjy_graduate_company_type', NULL, 'danger', 'N', NULL, 103, NOW(), 103, NOW(), '政府机关');
|
||||
|
||||
-- 4. 修复月薪范围字典
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_salary_range';
|
||||
INSERT INTO sys_dict_data (
|
||||
dict_code, tenant_id, dict_sort, dict_label, dict_value,
|
||||
dict_type, css_class, list_class, is_default,
|
||||
create_dept, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES
|
||||
(240, '000000', 1, '3000以下', '1', 'zsjy_graduate_salary_range', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '月薪3000元以下'),
|
||||
(241, '000000', 2, '3000-5000', '2', 'zsjy_graduate_salary_range', NULL, 'primary', 'N', NULL, 103, NOW(), 103, NOW(), '月薪3000-5000元'),
|
||||
(242, '000000', 3, '5000-8000', '3', 'zsjy_graduate_salary_range', NULL, 'success', 'N', NULL, 103, NOW(), 103, NOW(), '月薪5000-8000元'),
|
||||
(243, '000000', 4, '8000-12000', '4', 'zsjy_graduate_salary_range', NULL, 'warning', 'N', NULL, 103, NOW(), 103, NOW(), '月薪8000-12000元'),
|
||||
(244, '000000', 5, '12000以上', '5', 'zsjy_graduate_salary_range', NULL, 'danger', 'N', NULL, 103, NOW(), 103, NOW(), '月薪12000元以上');
|
||||
|
||||
-- 5. 修复毕业生信息审核状态字典
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_audit_status';
|
||||
INSERT INTO sys_dict_data (
|
||||
dict_code, tenant_id, dict_sort, dict_label, dict_value,
|
||||
dict_type, css_class, list_class, is_default,
|
||||
create_dept, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES
|
||||
(250, '000000', 1, '待审核', '0', 'zsjy_graduate_audit_status', NULL, 'info', 'Y', NULL, 103, NOW(), 103, NOW(), '待审核状态'),
|
||||
(251, '000000', 2, '审核通过', '1', 'zsjy_graduate_audit_status', NULL, 'success', 'N', NULL, 103, NOW(), 103, NOW(), '审核通过'),
|
||||
(252, '000000', 3, '审核拒绝', '2', 'zsjy_graduate_audit_status', NULL, 'danger', 'N', NULL, 103, NOW(), 103, NOW(), '审核拒绝');
|
||||
|
||||
-- 6. 验证修复后的数据
|
||||
SELECT '=== 修复后的字典数据验证 ===' as info;
|
||||
|
||||
SELECT '--- 毕业生就业状态 ---' as info;
|
||||
SELECT dict_code, dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_employment_status' ORDER BY dict_sort;
|
||||
|
||||
SELECT '--- 就业单位性质 ---' as info;
|
||||
SELECT dict_code, dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_company_type' ORDER BY dict_sort;
|
||||
|
||||
SELECT '--- 月薪范围 ---' as info;
|
||||
SELECT dict_code, dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_salary_range' ORDER BY dict_sort;
|
||||
|
||||
SELECT '--- 审核状态 ---' as info;
|
||||
SELECT dict_code, dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'zsjy_graduate_audit_status' ORDER BY dict_sort;
|
||||
@@ -1,39 +0,0 @@
|
||||
-- ==================================================
|
||||
-- 修复学历层次字典数据 - 下拉框为空问题解决
|
||||
-- 创建日期: 2025-01-26
|
||||
-- 说明: 重新创建学历层次字典数据,使用正常范围的dict_code值
|
||||
-- ==================================================
|
||||
|
||||
-- 1. 查看修复前的数据
|
||||
SELECT '=== 修复前的学历层次字典 ===' as info;
|
||||
SELECT dict_code, dict_label, dict_value, dict_sort
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'zsjy_education_level'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
-- 2. 删除现有的有问题的字典数据
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'zsjy_education_level';
|
||||
|
||||
-- 3. 重新插入学历层次字典数据,使用正常的dict_code值
|
||||
INSERT INTO sys_dict_data (
|
||||
dict_code, tenant_id, dict_sort, dict_label, dict_value,
|
||||
dict_type, css_class, list_class, is_default,
|
||||
create_dept, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES
|
||||
(214, '000000', 1, '专科', '1', 'zsjy_education_level', NULL, 'primary', 'N', NULL, 103, NOW(), 103, NOW(), '专科学历'),
|
||||
(215, '000000', 2, '本科', '2', 'zsjy_education_level', NULL, 'success', 'N', NULL, 103, NOW(), 103, NOW(), '本科学历'),
|
||||
(216, '000000', 3, '硕士', '3', 'zsjy_education_level', NULL, 'info', 'N', NULL, 103, NOW(), 103, NOW(), '硕士研究生学历'),
|
||||
(217, '000000', 4, '博士', '4', 'zsjy_education_level', NULL, 'warning', 'N', NULL, 103, NOW(), 103, NOW(), '博士研究生学历');
|
||||
|
||||
-- 4. 验证修复后的数据
|
||||
SELECT '=== 修复后的学历层次字典 ===' as info;
|
||||
SELECT dict_code, dict_label, dict_value, dict_sort
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'zsjy_education_level'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
-- 5. 验证字典类型是否存在
|
||||
SELECT '=== 验证字典类型配置 ===' as info;
|
||||
SELECT dict_type, dict_name
|
||||
FROM sys_dict_type
|
||||
WHERE dict_type = 'zsjy_education_level';
|
||||
@@ -1,84 +0,0 @@
|
||||
-- ==================================================
|
||||
-- 修复毕业生菜单结构 - 404错误解决方案
|
||||
-- 创建日期: 2025-01-26
|
||||
-- 说明: 将错误的C类型嵌套改为正确的M类型目录+C类型页面结构
|
||||
-- ==================================================
|
||||
|
||||
-- 1. 查看修复前的结构
|
||||
SELECT '=== 修复前的菜单结构 ===' as info;
|
||||
SELECT menu_id, parent_id, menu_name, path, component, menu_type, visible
|
||||
FROM sys_menu
|
||||
WHERE menu_id BETWEEN 8800 AND 8804
|
||||
ORDER BY menu_id;
|
||||
|
||||
-- 2. 删除现有的错误权限关联
|
||||
DELETE FROM sys_role_menu WHERE menu_id BETWEEN 8801 AND 8816;
|
||||
|
||||
-- 3. 重新创建毕业生管理目录菜单(M类型)
|
||||
INSERT INTO sys_menu (
|
||||
menu_id, menu_name, parent_id, order_num, path, component,
|
||||
query_param, is_frame, is_cache, menu_type, visible, status,
|
||||
perms, icon, create_by, create_time, update_by, update_time, remark
|
||||
) VALUES (
|
||||
8800, '毕业生管理', 8000, 3, 'graduate', NULL,
|
||||
NULL, 1, 0, 'M', '0', '0',
|
||||
NULL, 'education', 103, NOW(), 103, NOW(), '毕业生信息管理目录'
|
||||
);
|
||||
|
||||
-- 4. 修改现有菜单的parent_id和path,改为正确的目录结构
|
||||
UPDATE sys_menu SET
|
||||
parent_id = 8800,
|
||||
path = 'info',
|
||||
order_num = 1
|
||||
WHERE menu_id = 8801;
|
||||
|
||||
UPDATE sys_menu SET
|
||||
parent_id = 8800,
|
||||
path = 'info/add',
|
||||
order_num = 2,
|
||||
visible = '1'
|
||||
WHERE menu_id = 8802;
|
||||
|
||||
UPDATE sys_menu SET
|
||||
parent_id = 8800,
|
||||
path = 'info/edit/:id(\\d+)',
|
||||
order_num = 3,
|
||||
visible = '1'
|
||||
WHERE menu_id = 8803;
|
||||
|
||||
UPDATE sys_menu SET
|
||||
parent_id = 8800,
|
||||
path = 'statistics',
|
||||
order_num = 4
|
||||
WHERE menu_id = 8804;
|
||||
|
||||
-- 5. 重新分配权限给超级管理员
|
||||
INSERT INTO sys_role_menu (role_id, menu_id) VALUES
|
||||
(1, 8800), -- 毕业生管理目录菜单
|
||||
(1, 8801), -- 毕业生信息子菜单
|
||||
(1, 8802), -- 毕业生信息新增页面
|
||||
(1, 8803), -- 毕业生信息编辑页面
|
||||
(1, 8804), -- 毕业生统计分析页面
|
||||
(1, 8810), -- 毕业生信息查询权限
|
||||
(1, 8811), -- 毕业生信息新增权限
|
||||
(1, 8812), -- 毕业生信息修改权限
|
||||
(1, 8813), -- 毕业生信息删除权限
|
||||
(1, 8814), -- 毕业生信息导出权限
|
||||
(1, 8815), -- 毕业生信息审核权限
|
||||
(1, 8816); -- 毕业生统计分析权限
|
||||
|
||||
-- 6. 验证修复后的结构
|
||||
SELECT '=== 修复后的菜单结构 ===' as info;
|
||||
SELECT menu_id, parent_id, menu_name, path, component, menu_type, visible
|
||||
FROM sys_menu
|
||||
WHERE menu_id BETWEEN 8800 AND 8804
|
||||
ORDER BY menu_id;
|
||||
|
||||
-- 7. 验证权限分配结果
|
||||
SELECT '=== 超级管理员权限分配验证 ===' as info;
|
||||
SELECT rm.role_id, r.role_name, rm.menu_id, m.menu_name, m.path
|
||||
FROM sys_role_menu rm
|
||||
JOIN sys_role r ON rm.role_id = r.role_id
|
||||
JOIN sys_menu m ON rm.menu_id = m.menu_id
|
||||
WHERE rm.role_id = 1 AND rm.menu_id BETWEEN 8800 AND 8816
|
||||
ORDER BY rm.menu_id;
|
||||
@@ -1,96 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================
|
||||
# 学生数据导入脚本
|
||||
# 版本:V1.1.0
|
||||
# 功能:快速导入150条学生信息数据
|
||||
# 数据库:从项目配置文件自动获取连接信息
|
||||
# 作者:Cursor AI 辅助
|
||||
# 时间:2025-01-14 (V1.1.0 更新)
|
||||
# ==========================================
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 脚本信息
|
||||
echo -e "${BLUE}===========================================${NC}"
|
||||
echo -e "${BLUE}🎓 学生信息数据导入脚本${NC}"
|
||||
echo -e "${BLUE}===========================================${NC}"
|
||||
|
||||
# 检查SQL文件是否存在
|
||||
if [ ! -f "complete-student-data.sql" ]; then
|
||||
echo -e "${RED}❌ 错误:找不到 complete-student-data.sql 文件${NC}"
|
||||
echo -e "${YELLOW}💡 请确保文件存在于当前目录${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ 找到数据文件:complete-student-data.sql${NC}"
|
||||
|
||||
# 从项目配置文件获取数据库连接参数
|
||||
echo -e "${BLUE}📋 从项目配置获取数据库连接信息...${NC}"
|
||||
|
||||
# 数据库连接参数(从 application-dev.yml 配置文件获取)
|
||||
DB_HOST="47.99.164.66"
|
||||
DB_PORT="3306"
|
||||
DB_NAME="hzdyjs_xg"
|
||||
DB_USER="root"
|
||||
DB_PASSWORD="hn02le.34lkdLKD"
|
||||
|
||||
# 显示连接信息
|
||||
echo -e "${BLUE}===========================================${NC}"
|
||||
echo -e "${YELLOW}📊 数据库连接信息:${NC}"
|
||||
echo -e "主机: ${DB_HOST}"
|
||||
echo -e "端口: ${DB_PORT}"
|
||||
echo -e "数据库: ${DB_NAME}"
|
||||
echo -e "用户: ${DB_USER}"
|
||||
echo -e "密码: ${DB_PASSWORD:0:3}***${DB_PASSWORD: -3}"
|
||||
echo -e "${BLUE}===========================================${NC}"
|
||||
|
||||
# 简化确认流程
|
||||
read -p "确认导入数据?(y/N): " CONFIRM
|
||||
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
|
||||
echo -e "${YELLOW}❌ 操作已取消${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}🚀 开始导入数据...${NC}"
|
||||
|
||||
# 执行SQL文件
|
||||
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" < complete-student-data.sql
|
||||
|
||||
# 检查执行结果
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}===========================================${NC}"
|
||||
echo -e "${GREEN}🎉 数据导入成功!${NC}"
|
||||
echo -e "${GREEN}===========================================${NC}"
|
||||
echo -e "${GREEN}📊 导入内容:${NC}"
|
||||
echo -e " - 3个班级信息"
|
||||
echo -e " - 150条学生信息"
|
||||
echo -e " - 150条班级学生关联关系"
|
||||
echo -e "${GREEN}===========================================${NC}"
|
||||
echo -e "${YELLOW}👥 班级分布:${NC}"
|
||||
echo -e " - 计算机科学与技术2024级1班:50人(男28,女22)"
|
||||
echo -e " - 电子信息工程2024级1班:50人(男32,女18)"
|
||||
echo -e " - 工商管理2024级1班:50人(男20,女30)"
|
||||
echo -e "${GREEN}===========================================${NC}"
|
||||
else
|
||||
echo -e "${RED}===========================================${NC}"
|
||||
echo -e "${RED}❌ 数据导入失败!${NC}"
|
||||
echo -e "${RED}===========================================${NC}"
|
||||
echo -e "${YELLOW}💡 可能的原因:${NC}"
|
||||
echo -e " - 数据库连接失败"
|
||||
echo -e " - 数据表不存在"
|
||||
echo -e " - 权限不足"
|
||||
echo -e " - 数据冲突"
|
||||
echo -e "${YELLOW}🔧 建议检查:${NC}"
|
||||
echo -e " - 确认数据库连接信息"
|
||||
echo -e " - 确认数据表已创建"
|
||||
echo -e " - 确认用户权限"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}🎓 学生信息数据导入完成!${NC}"
|
||||
@@ -1,27 +0,0 @@
|
||||
-- 插入专业字典数据
|
||||
INSERT INTO sys_dict_data VALUES (400, '000000', 1, '电气自动化设备安装与维修', 'DQZDHSB', 'zsjy_major', '', 'primary', 'N', 103, 1, sysdate(), NULL, NULL, '电气自动化设备安装与维修专业');
|
||||
INSERT INTO sys_dict_data VALUES (401, '000000', 2, '工业机器人应用与维护', 'GYJQR', 'zsjy_major', '', 'success', 'N', 103, 1, sysdate(), NULL, NULL, '工业机器人应用与维护专业');
|
||||
INSERT INTO sys_dict_data VALUES (402, '000000', 3, '无人机应用技术', 'WRJYY', 'zsjy_major', '', 'warning', 'N', 103, 1, sysdate(), NULL, NULL, '无人机应用技术专业');
|
||||
INSERT INTO sys_dict_data VALUES (403, '000000', 4, '工业互联网与大数据应用', 'GYHLW', 'zsjy_major', '', 'info', 'N', 103, 1, sysdate(), NULL, NULL, '工业互联网与大数据应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (404, '000000', 5, '数字化设计与制造', 'SZHSJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '数字化设计与制造专业');
|
||||
INSERT INTO sys_dict_data VALUES (405, '000000', 6, '智能制作技术应用', 'ZNZZ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '智能制作技术应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (406, '000000', 7, '汽车维修', 'QCWX', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '汽车维修专业');
|
||||
INSERT INTO sys_dict_data VALUES (407, '000000', 8, '产品检测与质量控制', 'CPJC', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '产品检测与质量控制专业');
|
||||
INSERT INTO sys_dict_data VALUES (408, '000000', 9, '中药', 'ZY', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '中药专业');
|
||||
INSERT INTO sys_dict_data VALUES (409, '000000', 10, '药物制剂(预备技师)', 'YWZJ_YB', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '药物制剂(预备技师)专业');
|
||||
INSERT INTO sys_dict_data VALUES (410, '000000', 11, '药物制剂(高级工)', 'YWZJ_GJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '药物制剂(高级工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (411, '000000', 12, '药品营销', 'YPYX', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '药品营销专业');
|
||||
INSERT INTO sys_dict_data VALUES (412, '000000', 13, '健康服务与管理', 'JKFW', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '健康服务与管理专业');
|
||||
INSERT INTO sys_dict_data VALUES (413, '000000', 14, '园林技术(预备技师)', 'YLJS_YB', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '园林技术(预备技师)专业');
|
||||
INSERT INTO sys_dict_data VALUES (414, '000000', 15, '园林技术(高级工)', 'YLJS_GJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '园林技术(高级工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (415, '000000', 16, '园林技术(园林景观与工程施工)', 'YLJS_JG', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '园林技术(园林景观与工程施工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (416, '000000', 17, '环境艺术设计', 'HJYS', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '环境艺术设计专业');
|
||||
INSERT INTO sys_dict_data VALUES (417, '000000', 18, '酒店管理(预备技师)', 'JDGL_YB', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '酒店管理(预备技师)专业');
|
||||
INSERT INTO sys_dict_data VALUES (418, '000000', 19, '酒店管理(高级工)', 'JDGL_GJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '酒店管理(高级工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (419, '000000', 20, '烹饪(中式烹调)', 'PR_ZS', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '烹饪(中式烹调)专业');
|
||||
INSERT INTO sys_dict_data VALUES (420, '000000', 21, '烹饪(中西式面点)', 'PR_MD', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '烹饪(中西式面点)专业');
|
||||
INSERT INTO sys_dict_data VALUES (421, '000000', 22, '电子商务', 'DZSW', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '电子商务专业');
|
||||
INSERT INTO sys_dict_data VALUES (422, '000000', 23, '数字媒体技术应用', 'SZMT', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '数字媒体技术应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (423, '000000', 24, '人工智能技术应用', 'RGZN', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '人工智能技术应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (424, '000000', 25, '网络与信息安全', 'WLXX', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '网络与信息安全专业');
|
||||
INSERT INTO sys_dict_data VALUES (425, '000000', 26, '美术设计与制作', 'MSSJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '美术设计与制作专业');
|
||||
@@ -1,75 +0,0 @@
|
||||
-- 奖学金审核管理菜单和权限配置
|
||||
-- 专注于审核功能,不包含申请提交功能
|
||||
-- Date: 2025-01-27
|
||||
-- Author: system
|
||||
|
||||
-- 使用正确的数据库
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置会话字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET CHARACTER_SET_CLIENT = utf8mb4;
|
||||
SET CHARACTER_SET_CONNECTION = utf8mb4;
|
||||
SET CHARACTER_SET_RESULTS = utf8mb4;
|
||||
|
||||
-- 删除可能存在的旧菜单(从子级开始删除)
|
||||
DELETE FROM sys_menu WHERE menu_id >= 2100 AND menu_id <= 2120;
|
||||
|
||||
-- 1. 奖学金审核管理目录
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2100, '奖学金审核管理', 1, 5, 'scholarshipReview', NULL, 1, 0, 'M', '0', '0', NULL, 'form', 1, NOW(), 1, NOW(), '奖学金审核管理目录');
|
||||
|
||||
-- 2. 我的审核任务菜单
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2101, '我的审核任务', 2100, 1, 'myTasks', 'jcbt/scholarship/review/myTasks', 1, 0, 'C', '0', '0', 'jcbt:review:list', 'form', 1, NOW(), 1, NOW(), '我的审核任务菜单');
|
||||
|
||||
-- 3. 审核历史菜单
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2102, '审核历史', 2100, 2, 'history', 'jcbt/scholarship/review/history', 1, 0, 'C', '0', '0', 'jcbt:review:history', 'time', 1, NOW(), 1, NOW(), '审核历史记录菜单');
|
||||
|
||||
-- 4. 审核记录查询权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2103, '审核记录查询', 2101, 1, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:query', '#', 1, NOW(), 1, NOW(), '审核记录查询权限');
|
||||
|
||||
-- 5. 审核操作权限(通过/拒绝/退回)
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2104, '审核操作', 2101, 2, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:approve', '#', 1, NOW(), 1, NOW(), '审核通过/拒绝/退回操作权限');
|
||||
|
||||
-- 6. 批量审核权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2105, '批量审核', 2101, 3, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:batchApprove', '#', 1, NOW(), 1, NOW(), '批量审核操作权限');
|
||||
|
||||
-- 7. 审核转移权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2106, '审核转移', 2101, 4, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:transfer', '#', 1, NOW(), 1, NOW(), '审核任务转移权限');
|
||||
|
||||
-- 8. 审核撤回权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2107, '审核撤回', 2101, 5, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:revoke', '#', 1, NOW(), 1, NOW(), '审核结果撤回权限');
|
||||
|
||||
-- 9. 待审核列表权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2108, '待审核列表', 2101, 6, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:pending', '#', 1, NOW(), 1, NOW(), '查看待审核列表权限');
|
||||
|
||||
-- 10. 审核详情权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2109, '审核详情', 2101, 7, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:detail', '#', 1, NOW(), 1, NOW(), '查看审核详情权限');
|
||||
|
||||
-- 11. 审核统计权限
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2110, '审核统计', 2101, 8, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:statistics', '#', 1, NOW(), 1, NOW(), '审核数据统计权限');
|
||||
|
||||
-- 12. 导出权限(审核记录导出)
|
||||
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_by, create_time, update_by, update_time, remark) VALUES
|
||||
(2111, '审核记录导出', 2101, 9, '', '', 1, 0, 'F', '0', '0', 'jcbt:review:export', '#', 1, NOW(), 1, NOW(), '审核记录导出权限');
|
||||
|
||||
-- 验证插入结果
|
||||
SELECT COUNT(*) as '插入菜单数量' FROM sys_menu WHERE menu_id >= 2100 AND menu_id <= 2111;
|
||||
|
||||
-- 显示插入的菜单
|
||||
SELECT menu_id, menu_name, parent_id, menu_type, perms, remark
|
||||
FROM sys_menu
|
||||
WHERE menu_id >= 2100 AND menu_id <= 2111
|
||||
ORDER BY menu_id;
|
||||
|
||||
COMMIT;
|
||||
@@ -1,79 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================
|
||||
# 学生数据导入测试脚本
|
||||
# 版本:V1.0.0
|
||||
# 功能:演示自动化导入流程
|
||||
# 作者:Cursor AI 辅助
|
||||
# 时间:2025-01-14
|
||||
# ==========================================
|
||||
|
||||
echo "🧪 学生数据导入脚本测试演示"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
echo "📋 测试流程:"
|
||||
echo "1. 检查文件是否存在"
|
||||
echo "2. 显示数据库连接信息"
|
||||
echo "3. 模拟导入确认"
|
||||
echo "4. 显示预期结果"
|
||||
echo ""
|
||||
|
||||
# 检查文件
|
||||
echo "🔍 检查必要文件..."
|
||||
if [ -f "complete-student-data.sql" ]; then
|
||||
echo "✅ complete-student-data.sql 文件存在"
|
||||
FILE_SIZE=$(wc -l < complete-student-data.sql)
|
||||
echo " 文件大小: ${FILE_SIZE} 行"
|
||||
else
|
||||
echo "❌ complete-student-data.sql 文件不存在"
|
||||
echo "💡 请先运行: python3 generate_student_data.py"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "import-student-data.sh" ]; then
|
||||
echo "✅ import-student-data.sh 脚本存在"
|
||||
echo " 权限: $(ls -l import-student-data.sh | cut -d' ' -f1)"
|
||||
else
|
||||
echo "❌ import-student-data.sh 脚本不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 显示连接信息
|
||||
echo "🔗 数据库连接信息(从配置文件获取):"
|
||||
echo " 主机: 47.99.164.66:3306"
|
||||
echo " 数据库: hzdyjs_xg"
|
||||
echo " 用户: root"
|
||||
echo " 密码: hn0***KLD (已隐藏)"
|
||||
echo ""
|
||||
|
||||
# 显示导入内容
|
||||
echo "📊 将要导入的数据:"
|
||||
echo " - 3个班级信息"
|
||||
echo " - 150条学生信息"
|
||||
echo " - 150条班级学生关联关系"
|
||||
echo ""
|
||||
|
||||
echo "👥 班级分布:"
|
||||
echo " - 计算机科学与技术2024级1班:50人(男28,女22)"
|
||||
echo " - 电子信息工程2024级1班:50人(男32,女18)"
|
||||
echo " - 工商管理2024级1班:50人(男20,女30)"
|
||||
echo ""
|
||||
|
||||
echo "🚀 使用方法:"
|
||||
echo " cd backend/script/sql"
|
||||
echo " ./import-student-data.sh"
|
||||
echo " # 输入 y 确认导入"
|
||||
echo ""
|
||||
|
||||
echo "✨ 改进效果:"
|
||||
echo " - 无需手动输入5个数据库参数"
|
||||
echo " - 自动从配置文件获取连接信息"
|
||||
echo " - 一键确认即可完成导入"
|
||||
echo " - 减少操作错误和时间成本"
|
||||
echo ""
|
||||
|
||||
echo "🎉 测试演示完成!"
|
||||
echo "=========================================="
|
||||
@@ -1,35 +0,0 @@
|
||||
-- ========================================
|
||||
-- 学工模块字典数据初始化脚本
|
||||
-- 文件:xg-dict-data.sql
|
||||
-- 创建时间:2025-01-14
|
||||
-- 说明:添加班级信息管理所需的字典数据
|
||||
-- ========================================
|
||||
|
||||
-- ----------------------------
|
||||
-- 1、添加字典类型
|
||||
-- ----------------------------
|
||||
|
||||
-- 班级类型字典
|
||||
INSERT INTO sys_dict_type VALUES (100, '000000', '班级类型', 'xg_class_type', 103, 1, sysdate(), NULL, NULL, '班级类型列表');
|
||||
|
||||
-- 班级状态字典
|
||||
INSERT INTO sys_dict_type VALUES (101, '000000', '班级状态', 'xg_class_status', 103, 1, sysdate(), NULL, NULL, '班级状态列表');
|
||||
|
||||
-- ----------------------------
|
||||
-- 2、添加字典数据
|
||||
-- ----------------------------
|
||||
|
||||
-- 班级类型字典数据
|
||||
INSERT INTO sys_dict_data VALUES (200, '000000', 1, '普通班级', 'regular', 'xg_class_type', '', 'default', 'Y', 103, 1, sysdate(), NULL, NULL, '普通班级');
|
||||
INSERT INTO sys_dict_data VALUES (201, '000000', 2, '荣誉班级', 'honor', 'xg_class_type', '', 'warning', 'N', 103, 1, sysdate(), NULL, NULL, '荣誉班级');
|
||||
INSERT INTO sys_dict_data VALUES (202, '000000', 3, '实验班级', 'experimental', 'xg_class_type', '', 'primary', 'N', 103, 1, sysdate(), NULL, NULL, '实验班级');
|
||||
INSERT INTO sys_dict_data VALUES (203, '000000', 4, '特殊班级', 'special', 'xg_class_type', '', 'danger', 'N', 103, 1, sysdate(), NULL, NULL, '特殊班级');
|
||||
|
||||
-- 班级状态字典数据
|
||||
INSERT INTO sys_dict_data VALUES (210, '000000', 1, '正常', '1', 'xg_class_status', '', 'success', 'Y', 103, 1, sysdate(), NULL, NULL, '正常状态');
|
||||
INSERT INTO sys_dict_data VALUES (211, '000000', 2, '暂停', '2', 'xg_class_status', '', 'warning', 'N', 103, 1, sysdate(), NULL, NULL, '暂停招生');
|
||||
INSERT INTO sys_dict_data VALUES (212, '000000', 3, '毕业', '3', 'xg_class_status', '', 'info', 'N', 103, 1, sysdate(), NULL, NULL, '已毕业');
|
||||
INSERT INTO sys_dict_data VALUES (213, '000000', 4, '解散', '4', 'xg_class_status', '', 'danger', 'N', 103, 1, sysdate(), NULL, NULL, '已解散');
|
||||
|
||||
-- 提交
|
||||
COMMIT;
|
||||
@@ -1,29 +0,0 @@
|
||||
-- ----------------------------
|
||||
-- 宿舍管理员表
|
||||
-- ----------------------------
|
||||
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');
|
||||
@@ -1,75 +0,0 @@
|
||||
-- ========================================
|
||||
-- 招生就业模块字典数据初始化脚本
|
||||
-- 文件:zsjy-enrollment-dict-data.sql
|
||||
-- 创建时间:2025-01-20
|
||||
-- 说明:添加招生报名管理所需的字典数据
|
||||
-- ========================================
|
||||
|
||||
-- ----------------------------
|
||||
-- 1、添加字典类型
|
||||
-- ----------------------------
|
||||
|
||||
-- 招生性别字典(使用M/F格式,与数据库字段一致)
|
||||
INSERT INTO sys_dict_type VALUES (299, '000000', '招生性别', 'zsjy_gender', 103, 1, sysdate(), NULL, NULL, '招生性别列表');
|
||||
|
||||
-- 招生专业字典
|
||||
INSERT INTO sys_dict_type VALUES (300, '000000', '招生专业', 'zsjy_major', 103, 1, sysdate(), NULL, NULL, '招生专业列表');
|
||||
|
||||
-- 报名状态字典
|
||||
INSERT INTO sys_dict_type VALUES (301, '000000', '报名状态', 'zsjy_enrollment_status', 103, 1, sysdate(), NULL, NULL, '报名状态列表');
|
||||
|
||||
-- 校服尺码字典
|
||||
INSERT INTO sys_dict_type VALUES (302, '000000', '校服尺码', 'zsjy_uniform_size', 103, 1, sysdate(), NULL, NULL, '校服尺码列表');
|
||||
|
||||
-- ----------------------------
|
||||
-- 2、添加字典数据
|
||||
-- ----------------------------
|
||||
|
||||
-- 招生性别字典数据(使用M/F格式)
|
||||
INSERT INTO sys_dict_data VALUES (390, '000000', 1, '男', 'M', 'zsjy_gender', '', 'primary', 'Y', 103, 1, sysdate(), NULL, NULL, '男性');
|
||||
INSERT INTO sys_dict_data VALUES (391, '000000', 2, '女', 'F', 'zsjy_gender', '', 'danger', 'N', 103, 1, sysdate(), NULL, NULL, '女性');
|
||||
|
||||
-- 招生专业字典数据(基于真实专业名称)
|
||||
INSERT INTO sys_dict_data VALUES (400, '000000', 1, '电气自动化设备安装与维修', 'DQZDHSB', 'zsjy_major', '', 'primary', 'N', 103, 1, sysdate(), NULL, NULL, '电气自动化设备安装与维修专业');
|
||||
INSERT INTO sys_dict_data VALUES (401, '000000', 2, '工业机器人应用与维护', 'GYJQR', 'zsjy_major', '', 'success', 'N', 103, 1, sysdate(), NULL, NULL, '工业机器人应用与维护专业');
|
||||
INSERT INTO sys_dict_data VALUES (402, '000000', 3, '无人机应用技术', 'WRJYY', 'zsjy_major', '', 'warning', 'N', 103, 1, sysdate(), NULL, NULL, '无人机应用技术专业');
|
||||
INSERT INTO sys_dict_data VALUES (403, '000000', 4, '工业互联网与大数据应用', 'GYHLW', 'zsjy_major', '', 'info', 'N', 103, 1, sysdate(), NULL, NULL, '工业互联网与大数据应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (404, '000000', 5, '数字化设计与制造', 'SZHSJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '数字化设计与制造专业');
|
||||
INSERT INTO sys_dict_data VALUES (405, '000000', 6, '智能制作技术应用', 'ZNZZ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '智能制作技术应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (406, '000000', 7, '汽车维修', 'QCWX', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '汽车维修专业');
|
||||
INSERT INTO sys_dict_data VALUES (407, '000000', 8, '产品检测与质量控制', 'CPJC', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '产品检测与质量控制专业');
|
||||
INSERT INTO sys_dict_data VALUES (408, '000000', 9, '中药', 'ZY', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '中药专业');
|
||||
INSERT INTO sys_dict_data VALUES (409, '000000', 10, '药物制剂(预备技师)', 'YWZJ_YB', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '药物制剂(预备技师)专业');
|
||||
INSERT INTO sys_dict_data VALUES (410, '000000', 11, '药物制剂(高级工)', 'YWZJ_GJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '药物制剂(高级工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (411, '000000', 12, '药品营销', 'YPYX', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '药品营销专业');
|
||||
INSERT INTO sys_dict_data VALUES (412, '000000', 13, '健康服务与管理', 'JKFW', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '健康服务与管理专业');
|
||||
INSERT INTO sys_dict_data VALUES (413, '000000', 14, '园林技术(预备技师)', 'YLJS_YB', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '园林技术(预备技师)专业');
|
||||
INSERT INTO sys_dict_data VALUES (414, '000000', 15, '园林技术(高级工)', 'YLJS_GJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '园林技术(高级工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (415, '000000', 16, '园林技术(园林景观与工程施工)', 'YLJS_JG', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '园林技术(园林景观与工程施工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (416, '000000', 17, '环境艺术设计', 'HJYS', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '环境艺术设计专业');
|
||||
INSERT INTO sys_dict_data VALUES (417, '000000', 18, '酒店管理(预备技师)', 'JDGL_YB', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '酒店管理(预备技师)专业');
|
||||
INSERT INTO sys_dict_data VALUES (418, '000000', 19, '酒店管理(高级工)', 'JDGL_GJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '酒店管理(高级工)专业');
|
||||
INSERT INTO sys_dict_data VALUES (419, '000000', 20, '烹饪(中式烹调)', 'PR_ZS', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '烹饪(中式烹调)专业');
|
||||
INSERT INTO sys_dict_data VALUES (420, '000000', 21, '烹饪(中西式面点)', 'PR_MD', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '烹饪(中西式面点)专业');
|
||||
INSERT INTO sys_dict_data VALUES (421, '000000', 22, '电子商务', 'DZSW', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '电子商务专业');
|
||||
INSERT INTO sys_dict_data VALUES (422, '000000', 23, '数字媒体技术应用', 'SZMT', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '数字媒体技术应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (423, '000000', 24, '人工智能技术应用', 'RGZN', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '人工智能技术应用专业');
|
||||
INSERT INTO sys_dict_data VALUES (424, '000000', 25, '网络与信息安全', 'WLXX', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '网络与信息安全专业');
|
||||
INSERT INTO sys_dict_data VALUES (425, '000000', 26, '美术设计与制作', 'MSSJ', 'zsjy_major', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '美术设计与制作专业');
|
||||
|
||||
-- 报名状态字典数据
|
||||
INSERT INTO sys_dict_data VALUES (450, '000000', 1, '待审核', '0', 'zsjy_enrollment_status', '', 'info', 'Y', 103, 1, sysdate(), NULL, NULL, '报名信息待审核');
|
||||
INSERT INTO sys_dict_data VALUES (451, '000000', 2, '审核中', '1', 'zsjy_enrollment_status', '', 'warning', 'N', 103, 1, sysdate(), NULL, NULL, '报名信息审核中');
|
||||
INSERT INTO sys_dict_data VALUES (452, '000000', 3, '审核通过', '2', 'zsjy_enrollment_status', '', 'success', 'N', 103, 1, sysdate(), NULL, NULL, '报名信息审核通过');
|
||||
INSERT INTO sys_dict_data VALUES (453, '000000', 4, '待确认', '3', 'zsjy_enrollment_status', '', 'primary', 'N', 103, 1, sysdate(), NULL, NULL, '录取待确认');
|
||||
INSERT INTO sys_dict_data VALUES (454, '000000', 5, '录取完成', '4', 'zsjy_enrollment_status', '', 'success', 'N', 103, 1, sysdate(), NULL, NULL, '录取完成');
|
||||
INSERT INTO sys_dict_data VALUES (459, '000000', 9, '审核未通过', '9', 'zsjy_enrollment_status', '', 'danger', 'N', 103, 1, sysdate(), NULL, NULL, '报名信息审核未通过');
|
||||
|
||||
-- 校服尺码字典数据
|
||||
INSERT INTO sys_dict_data VALUES (480, '000000', 1, 'XS', 'XS', 'zsjy_uniform_size', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '加小号');
|
||||
INSERT INTO sys_dict_data VALUES (481, '000000', 2, 'S', 'S', 'zsjy_uniform_size', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '小号');
|
||||
INSERT INTO sys_dict_data VALUES (482, '000000', 3, 'M', 'M', 'zsjy_uniform_size', '', 'default', 'Y', 103, 1, sysdate(), NULL, NULL, '中号');
|
||||
INSERT INTO sys_dict_data VALUES (483, '000000', 4, 'L', 'L', 'zsjy_uniform_size', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '大号');
|
||||
INSERT INTO sys_dict_data VALUES (484, '000000', 5, 'XL', 'XL', 'zsjy_uniform_size', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '加大号');
|
||||
INSERT INTO sys_dict_data VALUES (485, '000000', 6, 'XXL', 'XXL', 'zsjy_uniform_size', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '加加大号');
|
||||
INSERT INTO sys_dict_data VALUES (486, '000000', 7, 'XXXL', 'XXXL', 'zsjy_uniform_size', '', 'default', 'N', 103, 1, sysdate(), NULL, NULL, '加加加大号');
|
||||
@@ -1,61 +0,0 @@
|
||||
-- 毕业生信息管理字典数据插入脚本
|
||||
|
||||
-- 1. 创建学历层次字典类型
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_by, create_time, remark)
|
||||
VALUES (2000001, '000000', '学历层次', 'zsjy_education_level', 1, NOW(), '学历层次列表');
|
||||
|
||||
-- 2. 创建就业状态字典类型
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_by, create_time, remark)
|
||||
VALUES (2000002, '000000', '毕业生就业状态', 'zsjy_graduate_employment_status', 1, NOW(), '毕业生就业状态');
|
||||
|
||||
-- 3. 创建单位性质字典类型
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_by, create_time, remark)
|
||||
VALUES (2000003, '000000', '就业单位性质', 'zsjy_graduate_company_type', 1, NOW(), '就业单位性质');
|
||||
|
||||
-- 4. 创建月薪范围字典类型
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_by, create_time, remark)
|
||||
VALUES (2000004, '000000', '月薪范围', 'zsjy_graduate_salary_range', 1, NOW(), '月薪范围');
|
||||
|
||||
-- 5. 创建审核状态字典类型
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_by, create_time, remark)
|
||||
VALUES (2000005, '000000', '毕业生信息审核状态', 'zsjy_graduate_audit_status', 1, NOW(), '审核状态');
|
||||
|
||||
-- 插入学历层次字典数据
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, remark) VALUES
|
||||
(2000001, '000000', 1, '专科', '1', 'zsjy_education_level', '', '', 'N', 1, NOW(), '专科'),
|
||||
(2000002, '000000', 2, '本科', '2', 'zsjy_education_level', '', '', 'Y', 1, NOW(), '本科'),
|
||||
(2000003, '000000', 3, '硕士', '3', 'zsjy_education_level', '', '', 'N', 1, NOW(), '硕士'),
|
||||
(2000004, '000000', 4, '博士', '4', 'zsjy_education_level', '', '', 'N', 1, NOW(), '博士');
|
||||
|
||||
-- 插入就业状态字典数据
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, remark) VALUES
|
||||
(2000011, '000000', 1, '已就业(劳动合同)', '1', 'zsjy_graduate_employment_status', '', 'success', 'N', 1, NOW(), '签订劳动合同'),
|
||||
(2000012, '000000', 2, '已就业(就业协议)', '2', 'zsjy_graduate_employment_status', '', 'success', 'N', 1, NOW(), '签订就业协议'),
|
||||
(2000013, '000000', 3, '自主创业', '3', 'zsjy_graduate_employment_status', '', 'warning', 'N', 1, NOW(), '自主创业'),
|
||||
(2000014, '000000', 4, '升学(国内)', '4', 'zsjy_graduate_employment_status', '', 'info', 'N', 1, NOW(), '国内升学'),
|
||||
(2000015, '000000', 5, '升学(国外)', '5', 'zsjy_graduate_employment_status', '', 'info', 'N', 1, NOW(), '国外升学'),
|
||||
(2000016, '000000', 6, '应征入伍', '6', 'zsjy_graduate_employment_status', '', 'primary', 'N', 1, NOW(), '应征入伍'),
|
||||
(2000017, '000000', 7, '待就业', '7', 'zsjy_graduate_employment_status', '', 'danger', 'Y', 1, NOW(), '待就业'),
|
||||
(2000018, '000000', 8, '暂不就业', '8', 'zsjy_graduate_employment_status', '', 'default', 'N', 1, NOW(), '暂不就业');
|
||||
|
||||
-- 插入单位性质字典数据
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, remark) VALUES
|
||||
(2000021, '000000', 1, '国有企业', '1', 'zsjy_graduate_company_type', '', '', 'N', 1, NOW(), '国有企业'),
|
||||
(2000022, '000000', 2, '私营企业', '2', 'zsjy_graduate_company_type', '', '', 'Y', 1, NOW(), '私营企业'),
|
||||
(2000023, '000000', 3, '外资企业', '3', 'zsjy_graduate_company_type', '', '', 'N', 1, NOW(), '外资企业'),
|
||||
(2000024, '000000', 4, '机关事业单位', '4', 'zsjy_graduate_company_type', '', '', 'N', 1, NOW(), '机关事业单位'),
|
||||
(2000025, '000000', 5, '其他', '5', 'zsjy_graduate_company_type', '', '', 'N', 1, NOW(), '其他');
|
||||
|
||||
-- 插入月薪范围字典数据
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, remark) VALUES
|
||||
(2000031, '000000', 1, '3000以下', '1', 'zsjy_graduate_salary_range', '', '', 'N', 1, NOW(), '3000以下'),
|
||||
(2000032, '000000', 2, '3000-5000', '2', 'zsjy_graduate_salary_range', '', '', 'Y', 1, NOW(), '3000-5000'),
|
||||
(2000033, '000000', 3, '5000-8000', '3', 'zsjy_graduate_salary_range', '', '', 'N', 1, NOW(), '5000-8000'),
|
||||
(2000034, '000000', 4, '8000-12000', '4', 'zsjy_graduate_salary_range', '', '', 'N', 1, NOW(), '8000-12000'),
|
||||
(2000035, '000000', 5, '12000以上', '5', 'zsjy_graduate_salary_range', '', '', 'N', 1, NOW(), '12000以上');
|
||||
|
||||
-- 插入审核状态字典数据
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, remark) VALUES
|
||||
(2000041, '000000', 1, '待审核', '0', 'zsjy_graduate_audit_status', '', 'warning', 'Y', 1, NOW(), '待审核'),
|
||||
(2000042, '000000', 2, '已审核', '1', 'zsjy_graduate_audit_status', '', 'success', 'N', 1, NOW(), '已审核'),
|
||||
(2000043, '000000', 3, '审核拒绝', '2', 'zsjy_graduate_audit_status', '', 'danger', 'N', 1, NOW(), '审核拒绝');
|
||||
@@ -1,129 +0,0 @@
|
||||
-- 毕业生信息管理表
|
||||
DROP TABLE IF EXISTS `zsjy_graduate_info`;
|
||||
CREATE TABLE `zsjy_graduate_info`
|
||||
(
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`student_no` varchar(50) NOT NULL COMMENT '学号',
|
||||
`name` varchar(30) NOT NULL COMMENT '姓名',
|
||||
`gender` char(1) NOT NULL DEFAULT '0' COMMENT '性别 (0男 1女)',
|
||||
`id_card` varchar(18) NOT NULL COMMENT '身份证号',
|
||||
`nation` varchar(50) DEFAULT NULL COMMENT '民族',
|
||||
`political_status` varchar(50) DEFAULT NULL COMMENT '政治面貌',
|
||||
`birth_date` date DEFAULT NULL COMMENT '出生日期',
|
||||
`enrollment_year` int(4) NOT NULL COMMENT '入学年份',
|
||||
`graduation_year` int(4) NOT NULL COMMENT '毕业年份',
|
||||
`college_id` bigint(20) DEFAULT NULL COMMENT '学院ID',
|
||||
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||
`major_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
|
||||
`major_name` varchar(100) DEFAULT NULL COMMENT '专业名称',
|
||||
`class_id` bigint(20) DEFAULT NULL COMMENT '班级ID',
|
||||
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称',
|
||||
`education_level` char(1) NOT NULL DEFAULT '2' COMMENT '学历层次 (1专科 2本科 3硕士 4博士)',
|
||||
`training_mode` varchar(50) DEFAULT NULL COMMENT '培养方式',
|
||||
`phone_number` varchar(11) NOT NULL COMMENT '手机号码',
|
||||
`email` varchar(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
`qq_number` varchar(20) DEFAULT NULL COMMENT 'QQ号码',
|
||||
`wechat_number` varchar(50) DEFAULT NULL COMMENT '微信号码',
|
||||
`province` varchar(50) DEFAULT NULL COMMENT '省份',
|
||||
`city` varchar(50) DEFAULT NULL COMMENT '城市',
|
||||
`district` varchar(50) DEFAULT NULL COMMENT '区县',
|
||||
`detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址',
|
||||
`postal_code` varchar(6) DEFAULT NULL COMMENT '邮政编码',
|
||||
`employment_status` char(1) NOT NULL DEFAULT '7' COMMENT '就业状态 (1已就业-劳动合同 2已就业-就业协议 3自主创业 4升学-国内 5升学-国外 6应征入伍 7待就业 8暂不就业)',
|
||||
`employment_company` varchar(200) DEFAULT NULL COMMENT '就业单位名称',
|
||||
`company_type` char(1) DEFAULT NULL COMMENT '单位性质 (1国有企业 2私营企业 3外资企业 4机关事业单位 5其他)',
|
||||
`job_position` varchar(100) DEFAULT NULL COMMENT '工作职位',
|
||||
`work_province` varchar(50) DEFAULT NULL COMMENT '工作省份',
|
||||
`work_city` varchar(50) DEFAULT NULL COMMENT '工作城市',
|
||||
`salary_range` char(1) DEFAULT NULL COMMENT '月薪范围 (1-3000以下 2-3000-5000 3-5000-8000 4-8000-12000 5-12000以上)',
|
||||
`further_school` varchar(200) DEFAULT NULL COMMENT '升学院校',
|
||||
`further_major` varchar(100) DEFAULT NULL COMMENT '升学专业',
|
||||
`skills` text DEFAULT NULL COMMENT '特长技能',
|
||||
`awards` text DEFAULT NULL COMMENT '获奖情况',
|
||||
`job_intention` text DEFAULT NULL COMMENT '工作意向',
|
||||
`audit_status` char(1) NOT NULL DEFAULT '0' COMMENT '审核状态 (0待审核 1已审核 2审核拒绝)',
|
||||
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`audit_by` bigint(20) DEFAULT NULL COMMENT '审核人',
|
||||
`audit_remark` varchar(500) DEFAULT NULL COMMENT '审核意见',
|
||||
`status` char(1) NOT NULL DEFAULT '0' COMMENT '状态 (0正常 1停用)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
`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 '更新时间',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_student_no` (`student_no`) COMMENT '学号唯一',
|
||||
UNIQUE KEY `uk_id_card` (`id_card`) COMMENT '身份证号唯一',
|
||||
KEY `idx_name` (`name`) COMMENT '姓名索引',
|
||||
KEY `idx_college_major` (`college_id`, `major_id`) COMMENT '学院专业索引',
|
||||
KEY `idx_graduation_year` (`graduation_year`) COMMENT '毕业年份索引',
|
||||
KEY `idx_employment_status` (`employment_status`) COMMENT '就业状态索引',
|
||||
KEY `idx_audit_status` (`audit_status`) COMMENT '审核状态索引'
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT = '毕业生信息表';
|
||||
|
||||
-- 插入字典数据
|
||||
-- 性别
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1001, '000000', '性别', 'sys_user_sex', 1, NOW(), '性别列表');
|
||||
|
||||
INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1001, '000000', 1, '男', '0', 'sys_user_sex', '', '', 'Y', 1, NOW(), '男性'),
|
||||
(1002, '000000', 2, '女', '1', 'sys_user_sex', '', '', 'N', 1, NOW(), '女性');
|
||||
|
||||
-- 学历层次
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1002, '000000', '学历层次', 'zsjy_education_level', 1, NOW(), '学历层次列表');
|
||||
|
||||
INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1003, '000000', 1, '专科', '1', 'zsjy_education_level', '', '', 'N', 1, NOW(), '专科'),
|
||||
(1004, '000000', 2, '本科', '2', 'zsjy_education_level', '', '', 'Y', 1, NOW(), '本科'),
|
||||
(1005, '000000', 3, '硕士', '3', 'zsjy_education_level', '', '', 'N', 1, NOW(), '硕士'),
|
||||
(1006, '000000', 4, '博士', '4', 'zsjy_education_level', '', '', 'N', 1, NOW(), '博士');
|
||||
|
||||
-- 就业状态
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1003, '000000', '就业状态', 'zsjy_employment_status', 1, NOW(), '毕业生就业状态');
|
||||
|
||||
INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1007, '000000', 1, '已就业(劳动合同)', '1', 'zsjy_employment_status', '', 'success', 'N', 1, NOW(), '签订劳动合同'),
|
||||
(1008, '000000', 2, '已就业(就业协议)', '2', 'zsjy_employment_status', '', 'success', 'N', 1, NOW(), '签订就业协议'),
|
||||
(1009, '000000', 3, '自主创业', '3', 'zsjy_employment_status', '', 'warning', 'N', 1, NOW(), '自主创业'),
|
||||
(1010, '000000', 4, '升学(国内)', '4', 'zsjy_employment_status', '', 'info', 'N', 1, NOW(), '国内升学'),
|
||||
(1011, '000000', 5, '升学(国外)', '5', 'zsjy_employment_status', '', 'info', 'N', 1, NOW(), '国外升学'),
|
||||
(1012, '000000', 6, '应征入伍', '6', 'zsjy_employment_status', '', 'primary', 'N', 1, NOW(), '应征入伍'),
|
||||
(1013, '000000', 7, '待就业', '7', 'zsjy_employment_status', '', 'danger', 'Y', 1, NOW(), '待就业'),
|
||||
(1014, '000000', 8, '暂不就业', '8', 'zsjy_employment_status', '', 'default', 'N', 1, NOW(), '暂不就业');
|
||||
|
||||
-- 单位性质
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1004, '000000', '单位性质', 'zsjy_company_type', 1, NOW(), '就业单位性质');
|
||||
|
||||
INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1015, '000000', 1, '国有企业', '1', 'zsjy_company_type', '', '', 'N', 1, NOW(), '国有企业'),
|
||||
(1016, '000000', 2, '私营企业', '2', 'zsjy_company_type', '', '', 'Y', 1, NOW(), '私营企业'),
|
||||
(1017, '000000', 3, '外资企业', '3', 'zsjy_company_type', '', '', 'N', 1, NOW(), '外资企业'),
|
||||
(1018, '000000', 4, '机关事业单位', '4', 'zsjy_company_type', '', '', 'N', 1, NOW(), '机关事业单位'),
|
||||
(1019, '000000', 5, '其他', '5', 'zsjy_company_type', '', '', 'N', 1, NOW(), '其他');
|
||||
|
||||
-- 月薪范围
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1005, '000000', '月薪范围', 'zsjy_salary_range', 1, NOW(), '月薪范围');
|
||||
|
||||
INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1020, '000000', 1, '3000以下', '1', 'zsjy_salary_range', '', '', 'N', 1, NOW(), '3000以下'),
|
||||
(1021, '000000', 2, '3000-5000', '2', 'zsjy_salary_range', '', '', 'Y', 1, NOW(), '3000-5000'),
|
||||
(1022, '000000', 3, '5000-8000', '3', 'zsjy_salary_range', '', '', 'N', 1, NOW(), '5000-8000'),
|
||||
(1023, '000000', 4, '8000-12000', '4', 'zsjy_salary_range', '', '', 'N', 1, NOW(), '8000-12000'),
|
||||
(1024, '000000', 5, '12000以上', '5', 'zsjy_salary_range', '', '', 'N', 1, NOW(), '12000以上');
|
||||
|
||||
-- 审核状态
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1006, '000000', '审核状态', 'zsjy_audit_status', 1, NOW(), '审核状态');
|
||||
|
||||
INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1025, '000000', 1, '待审核', '0', 'zsjy_audit_status', '', 'warning', 'Y', 1, NOW(), '待审核'),
|
||||
(1026, '000000', 2, '已审核', '1', 'zsjy_audit_status', '', 'success', 'N', 1, NOW(), '已审核'),
|
||||
(1027, '000000', 3, '审核拒绝', '2', 'zsjy_audit_status', '', 'danger', 'N', 1, NOW(), '审核拒绝');
|
||||
@@ -1,60 +0,0 @@
|
||||
-- ==================================================
|
||||
-- 招生就业模块 - 毕业生信息管理菜单配置
|
||||
-- 创建日期: 2025-01-26
|
||||
-- 说明: 毕业生信息管理相关菜单和权限配置
|
||||
-- ==================================================
|
||||
|
||||
-- 1. 毕业生管理父菜单
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8800, '毕业生管理', 8000, 5, 'graduate', null, null, 1, 0, 'M', '0', '0', '', 'user', 103, 1, NOW(), null, null, '毕业生管理菜单');
|
||||
|
||||
-- 2. 毕业生信息子菜单
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8801, '毕业生信息', 8800, 1, 'graduateInfo', 'zsjy/graduateInfo/index', null, 1, 0, 'C', '0', '0', 'zsjy:graduate:list', 'peoples', 103, 1, NOW(), null, null, '毕业生信息管理菜单');
|
||||
|
||||
-- 3. 毕业生信息新增页面菜单(隐藏菜单)
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8802, '毕业生信息新增', 8801, 1, 'graduateInfo/add', 'zsjy/graduateInfo/form', null, 1, 1, 'C', '1', '0', 'zsjy:graduate:add', '#', 103, 1, NOW(), null, null, '毕业生信息新增页面');
|
||||
|
||||
-- 4. 毕业生信息编辑页面菜单(隐藏菜单)
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8803, '毕业生信息编辑', 8801, 2, 'graduateInfo/edit/:id(\\d+)', 'zsjy/graduateInfo/form', null, 1, 1, 'C', '1', '0', 'zsjy:graduate:edit', '#', 103, 1, NOW(), null, null, '毕业生信息编辑页面');
|
||||
|
||||
-- 5. 毕业生统计分析页面菜单(隐藏菜单)
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8804, '毕业生统计分析', 8801, 3, 'graduateInfo/statistics', 'zsjy/graduateInfo/statistics', null, 1, 1, 'C', '1', '0', 'zsjy:graduate:statistics', '#', 103, 1, NOW(), null, null, '毕业生统计分析页面');
|
||||
|
||||
-- 6. 毕业生信息按钮权限
|
||||
-- 6.1 查询权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8810, '毕业生信息查询', 8801, 1, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:query', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 6.2 新增权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8811, '毕业生信息新增', 8801, 2, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:add', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 6.3 修改权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8812, '毕业生信息修改', 8801, 3, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:edit', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 6.4 删除权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8813, '毕业生信息删除', 8801, 4, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:remove', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 6.5 导出权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8814, '毕业生信息导出', 8801, 5, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:export', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 6.6 审核权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8815, '毕业生信息审核', 8801, 6, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:audit', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 6.7 统计分析权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (8816, '毕业生统计分析', 8801, 7, '', '', null, 1, 0, 'F', '0', '0', 'zsjy:graduate:statistics', '#', 103, 1, NOW(), null, null, '');
|
||||
|
||||
-- 查询验证菜单创建结果
|
||||
SELECT menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, perms, icon
|
||||
FROM sys_menu
|
||||
WHERE menu_id >= 8800 AND menu_id <= 8820
|
||||
ORDER BY menu_id;
|
||||
@@ -1 +0,0 @@
|
||||
ALTER TABLE jcbt_scholarship_type ADD COLUMN create_dept BIGINT(20) COMMENT '创建部门' AFTER is_system;
|
||||
@@ -1,6 +0,0 @@
|
||||
-- 为 jcbt_scholarship_application 表添加 create_dept 字段
|
||||
-- 解决 MyBatis-Plus 插入数据时的字段缺失问题
|
||||
|
||||
ALTER TABLE jcbt_scholarship_application
|
||||
ADD COLUMN create_dept bigint(20) DEFAULT NULL COMMENT '创建部门'
|
||||
AFTER submit_time;
|
||||
@@ -1,41 +0,0 @@
|
||||
-- ============================================================================
|
||||
-- 贫困生认定申请表 - 添加缺失的family_economy_summary字段
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 描述: 修复 jcbt_poverty_application 表缺失的 family_economy_summary 字段
|
||||
-- ============================================================================
|
||||
|
||||
-- 检查并添加 family_economy_summary 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'family_economy_summary');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN family_economy_summary text COMMENT ''家庭经济情况摘要'' AFTER assistance_type_names',
|
||||
'SELECT ''family_economy_summary字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT
|
||||
CASE
|
||||
WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'family_economy_summary') > 0
|
||||
THEN 'SUCCESS: family_economy_summary字段已成功添加到数据库表中'
|
||||
ELSE 'ERROR: family_economy_summary字段添加失败'
|
||||
END as verification_result;
|
||||
|
||||
-- 显示表结构确认
|
||||
DESCRIBE jcbt_poverty_application;
|
||||
|
||||
-- ============================================================================
|
||||
-- 使用说明:
|
||||
-- 1. 连接到对应的数据库
|
||||
-- 2. 执行本脚本: source /path/to/add_family_economy_summary_field.sql
|
||||
-- 3. 检查输出结果,确认字段已正确添加
|
||||
-- 4. 重新启动后端服务
|
||||
-- ============================================================================
|
||||
@@ -1,28 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金类型表 - 添加缺失字段
|
||||
-- 创建时间: 2025-08-04
|
||||
-- 说明: 添加申请条件、评定标准、备注三个字段
|
||||
-- =====================================================
|
||||
|
||||
-- 添加申请条件字段
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS application_conditions TEXT COMMENT '申请条件'
|
||||
AFTER application_guide;
|
||||
|
||||
-- 添加评定标准字段
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS evaluation_criteria TEXT COMMENT '评定标准'
|
||||
AFTER application_conditions;
|
||||
|
||||
-- 添加备注字段
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS remark VARCHAR(500) COMMENT '备注'
|
||||
AFTER evaluation_criteria;
|
||||
|
||||
-- 验证字段添加
|
||||
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_scholarship_type'
|
||||
AND COLUMN_NAME IN ('application_conditions', 'evaluation_criteria', 'remark')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -1,21 +0,0 @@
|
||||
-- 修复 jcbt_poverty_application 表中 assistance_types 字段的问题
|
||||
-- 问题: Field 'assistance_types' doesn't have a default value
|
||||
-- 解决方案: 设置字段允许NULL或者添加默认值
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 修改 assistance_types 字段,允许NULL值
|
||||
ALTER TABLE jcbt_poverty_application
|
||||
MODIFY COLUMN assistance_types varchar(200) COMMENT '申请资助类型' DEFAULT NULL;
|
||||
|
||||
-- 检查修改结果
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
IS_NULLABLE as '允许NULL',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'assistance_types';
|
||||
@@ -1,189 +0,0 @@
|
||||
-- ============================================================================
|
||||
-- 贫困生认定申请表字段修复脚本
|
||||
-- 创建时间: 2025-01-03
|
||||
-- 描述: 修复 jcbt_poverty_application 表缺失的字段
|
||||
-- ============================================================================
|
||||
|
||||
-- 检查并添加缺失的字段到 jcbt_poverty_application 表
|
||||
|
||||
-- 1. 检查表是否存在,如不存在则创建完整表
|
||||
CREATE TABLE IF NOT EXISTS `jcbt_poverty_application` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`application_no` varchar(50) DEFAULT NULL COMMENT '申请编号',
|
||||
`academic_year` varchar(20) DEFAULT NULL COMMENT '学年',
|
||||
`term` int(11) DEFAULT NULL COMMENT '学期',
|
||||
`student_id` bigint(20) DEFAULT NULL COMMENT '学生ID',
|
||||
`student_no` varchar(50) DEFAULT NULL COMMENT '学号',
|
||||
`student_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
|
||||
`gender` varchar(10) DEFAULT NULL COMMENT '性别',
|
||||
`college_id` bigint(20) DEFAULT NULL COMMENT '学院ID',
|
||||
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||
`major_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
|
||||
`major_name` varchar(100) DEFAULT NULL COMMENT '专业名称',
|
||||
`class_id` bigint(20) DEFAULT NULL COMMENT '班级ID',
|
||||
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称',
|
||||
`recognition_group` varchar(50) DEFAULT NULL COMMENT '认定群体(特殊群体/其他群体)',
|
||||
`recognition_type_id` bigint(20) DEFAULT NULL COMMENT '认定类型ID',
|
||||
`recognition_type_code` varchar(50) DEFAULT NULL COMMENT '认定类型编码',
|
||||
`recognition_type_name` varchar(100) DEFAULT NULL COMMENT '认定类型名称',
|
||||
`assistance_type_ids` varchar(500) DEFAULT NULL COMMENT '申请自助类型ID数组(多选)',
|
||||
`assistance_type_names` varchar(500) DEFAULT NULL COMMENT '申请自助类型名称(多个用逗号分隔)',
|
||||
`family_economy_summary` text COMMENT '家庭经济情况摘要',
|
||||
`attach_application_form_url` varchar(500) DEFAULT NULL COMMENT '申请表附件URL',
|
||||
`attach_application_form_id` bigint(20) DEFAULT NULL COMMENT '申请表附件ID',
|
||||
`attach_survey_form_url` varchar(500) DEFAULT NULL COMMENT '调查表附件URL',
|
||||
`attach_survey_form_id` bigint(20) DEFAULT NULL COMMENT '调查表附件ID',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '申请状态(DRAFT-草稿,SUBMITTED-已提交,REVIEWING-审核中,APPROVED-已通过,REJECTED-已拒绝,WITHDRAWN-已撤回)',
|
||||
`submitter_id` bigint(20) DEFAULT NULL COMMENT '提交人ID',
|
||||
`submitter_name` varchar(100) DEFAULT NULL COMMENT '提交人姓名',
|
||||
`submit_time` datetime DEFAULT NULL COMMENT '提交时间',
|
||||
`auditor_id` bigint(20) DEFAULT NULL COMMENT '审核人ID',
|
||||
`auditor_name` varchar(100) DEFAULT NULL COMMENT '审核人姓名',
|
||||
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`audit_opinion` text COMMENT '审核意见',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` bigint(20) DEFAULT '0' COMMENT '逻辑删除标记(0-正常,非0-已删除)',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' 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 '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_student_no` (`student_no`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_academic_year` (`academic_year`),
|
||||
KEY `idx_college_id` (`college_id`),
|
||||
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贫困生认定申请表';
|
||||
|
||||
-- 2. 如果表已存在但缺少字段,则添加缺失字段
|
||||
-- 添加 term 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'term');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN term int(11) DEFAULT NULL COMMENT ''学期'' AFTER academic_year',
|
||||
'SELECT ''term字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 attach_application_form_id 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'attach_application_form_id');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN attach_application_form_id bigint(20) DEFAULT NULL COMMENT ''申请表附件ID'' AFTER attach_application_form_url',
|
||||
'SELECT ''attach_application_form_id字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 submit_time 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'submit_time');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN submit_time datetime DEFAULT NULL COMMENT ''提交时间'' AFTER submitter_name',
|
||||
'SELECT ''submit_time字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 auditor_id 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'auditor_id');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN auditor_id bigint(20) DEFAULT NULL COMMENT ''审核人ID'' AFTER submit_time',
|
||||
'SELECT ''auditor_id字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 auditor_name 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'auditor_name');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN auditor_name varchar(100) DEFAULT NULL COMMENT ''审核人姓名'' AFTER auditor_id',
|
||||
'SELECT ''auditor_name字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 audit_time 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'audit_time');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN audit_time datetime DEFAULT NULL COMMENT ''审核时间'' AFTER auditor_name',
|
||||
'SELECT ''audit_time字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 audit_opinion 字段(如果不存在)
|
||||
SET @sql = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'audit_opinion');
|
||||
|
||||
SET @sql = IF(@sql = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN audit_opinion text COMMENT ''审核意见'' AFTER audit_time',
|
||||
'SELECT ''audit_opinion字段已存在'' as result');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3. 验证表结构
|
||||
SELECT 'Table structure verification:' as message;
|
||||
DESCRIBE jcbt_poverty_application;
|
||||
|
||||
-- 4. 检查缺失的字段
|
||||
SELECT
|
||||
'Missing fields check:' as message,
|
||||
CASE
|
||||
WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'term') = 0
|
||||
THEN 'term字段缺失'
|
||||
ELSE 'term字段存在'
|
||||
END as term_status,
|
||||
CASE
|
||||
WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'attach_application_form_id') = 0
|
||||
THEN 'attach_application_form_id字段缺失'
|
||||
ELSE 'attach_application_form_id字段存在'
|
||||
END as attach_application_form_id_status;
|
||||
|
||||
-- ============================================================================
|
||||
-- 使用说明:
|
||||
-- 1. 连接到对应的数据库
|
||||
-- 2. 执行本脚本
|
||||
-- 3. 检查输出结果,确认所有字段都已正确添加
|
||||
-- 4. 重新启动后端服务
|
||||
-- ============================================================================
|
||||
@@ -1,98 +0,0 @@
|
||||
-- ================================================================
|
||||
-- 贫困生认定申请表完整修复脚本
|
||||
-- 文件: database_fix_jcbt_poverty_application_complete.sql
|
||||
-- 功能: 修复 teacher_id 字段默认值问题,添加 family_economy_summary 字段
|
||||
-- ================================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 检查并修复 teacher_id 字段
|
||||
SELECT '开始检查 teacher_id 字段...' AS message;
|
||||
|
||||
-- 检查字段是否存在以及是否允许NULL
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
IS_NULLABLE,
|
||||
COLUMN_DEFAULT,
|
||||
DATA_TYPE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_id';
|
||||
|
||||
-- 修改 teacher_id 字段为允许NULL(如果字段存在且不允许NULL)
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_id'
|
||||
AND IS_NULLABLE = 'NO';
|
||||
|
||||
SELECT IF(@count > 0,
|
||||
CONCAT('ALTER TABLE jcbt_poverty_application MODIFY COLUMN teacher_id bigint(20) NULL COMMENT ''班主任教师ID'';'),
|
||||
'SELECT ''teacher_id 字段已允许NULL或不存在'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '✅ teacher_id 字段修复完成' AS message;
|
||||
|
||||
-- 2. 检查并添加 family_economy_summary 字段
|
||||
SELECT '开始检查 family_economy_summary 字段...' AS message;
|
||||
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'family_economy_summary';
|
||||
|
||||
SELECT IF(@count = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN family_economy_summary text COMMENT ''家庭经济情况摘要'' AFTER assistance_type_names;',
|
||||
'SELECT ''family_economy_summary 字段已存在'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '✅ family_economy_summary 字段检查完成' AS message;
|
||||
|
||||
-- 3. 验证修复结果
|
||||
SELECT '=== 修复结果验证 ===' AS message;
|
||||
|
||||
-- 显示相关字段信息
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN ('teacher_id', 'family_economy_summary')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 4. 显示完整表结构(关键字段)
|
||||
SELECT '=== 表结构确认 ===' AS message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN (
|
||||
'id', 'student_id', 'class_id', 'teacher_id',
|
||||
'family_economy_summary', 'status', 'create_by', 'create_time'
|
||||
)
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
SELECT '🎉 所有修复操作完成!' AS message;
|
||||
SELECT '📝 请重启后端服务以生效!' AS note;
|
||||
@@ -1,131 +0,0 @@
|
||||
-- ================================================================
|
||||
-- 贫困生认定申请表 teacher_name 字段修复脚本
|
||||
-- 文件: database_fix_teacher_name.sql
|
||||
-- 功能: 添加缺失的 teacher_name 字段,并确保允许NULL
|
||||
-- ================================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 检查 teacher_name 字段是否存在
|
||||
SELECT '开始检查 teacher_name 字段...' AS message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
IS_NULLABLE,
|
||||
COLUMN_DEFAULT,
|
||||
DATA_TYPE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_name';
|
||||
|
||||
-- 2. 添加 teacher_name 字段(如果不存在)
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_name';
|
||||
|
||||
SELECT IF(@count = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN teacher_name varchar(100) DEFAULT NULL COMMENT ''班主任教师姓名'' AFTER teacher_id;',
|
||||
'SELECT ''teacher_name 字段已存在,检查是否需要修改属性'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3. 修改 teacher_name 字段为允许 NULL(如果字段存在且不允许NULL)
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_name'
|
||||
AND IS_NULLABLE = 'NO';
|
||||
|
||||
SELECT IF(@count > 0,
|
||||
'ALTER TABLE jcbt_poverty_application MODIFY COLUMN teacher_name varchar(100) DEFAULT NULL COMMENT ''班主任教师姓名'';',
|
||||
'SELECT ''teacher_name 字段已允许NULL'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '✅ teacher_name 字段修复完成' AS message;
|
||||
|
||||
-- 4. 添加 teacher_id 字段(如果不存在)
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_id';
|
||||
|
||||
SELECT IF(@count = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN teacher_id bigint(20) DEFAULT NULL COMMENT ''班主任教师ID'' AFTER class_name;',
|
||||
'SELECT ''teacher_id 字段已存在'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5. 确保 teacher_id 字段允许 NULL
|
||||
SELECT '检查 teacher_id 字段...' AS message;
|
||||
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_id'
|
||||
AND IS_NULLABLE = 'NO';
|
||||
|
||||
SELECT IF(@count > 0,
|
||||
'ALTER TABLE jcbt_poverty_application MODIFY COLUMN teacher_id bigint(20) DEFAULT NULL COMMENT ''班主任教师ID'';',
|
||||
'SELECT ''teacher_id 字段已允许NULL或不存在'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '✅ teacher_id 字段修复完成' AS message;
|
||||
|
||||
-- 6. 验证修复结果
|
||||
SELECT '=== 修复结果验证 ===' AS message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN ('teacher_id', 'teacher_name')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 7. 显示完整的字段结构确认
|
||||
SELECT '=== 相关字段结构确认 ===' AS message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN (
|
||||
'class_id', 'class_name', 'teacher_id', 'teacher_name', 'recognition_group'
|
||||
)
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
SELECT '🎉 teacher_name 和 teacher_id 字段修复完成!' AS message;
|
||||
SELECT '📝 请重启后端服务以生效!' AS note;
|
||||
@@ -1,75 +0,0 @@
|
||||
-- ================================================================
|
||||
-- 贫困生认定申请表teacher_name字段修复脚本
|
||||
-- 文件: database_fix_teacher_name_field.sql
|
||||
-- 功能: 添加缺失的teacher_name字段
|
||||
-- ================================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 检查并添加 teacher_name 字段
|
||||
SELECT '开始检查 teacher_name 字段...' AS message;
|
||||
|
||||
-- 检查字段是否存在
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
IS_NULLABLE,
|
||||
COLUMN_DEFAULT,
|
||||
DATA_TYPE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_name';
|
||||
|
||||
-- 添加 teacher_name 字段(如果不存在)
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @count
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'teacher_name';
|
||||
|
||||
SELECT IF(@count = 0,
|
||||
'ALTER TABLE jcbt_poverty_application ADD COLUMN teacher_name varchar(100) NULL COMMENT ''班主任教师姓名'' AFTER teacher_id;',
|
||||
'SELECT ''teacher_name 字段已存在'' AS result;'
|
||||
) INTO @sql;
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '✅ teacher_name 字段检查完成' AS message;
|
||||
|
||||
-- 2. 验证修复结果
|
||||
SELECT '=== 修复结果验证 ===' AS message;
|
||||
|
||||
-- 显示teacher相关字段信息
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME LIKE '%teacher%'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 3. 显示完整表结构确认
|
||||
SELECT '=== 班级相关字段确认 ===' AS message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN (
|
||||
'class_id', 'class_name', 'teacher_id', 'teacher_name'
|
||||
)
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
SELECT '🎉 teacher_name字段修复操作完成!' AS message;
|
||||
SELECT '📝 请重启后端服务以生效!' AS note;
|
||||
@@ -1,30 +0,0 @@
|
||||
-- 调试compatibility_type字段问题
|
||||
-- 检查表结构
|
||||
DESCRIBE jcbt_scholarship_type;
|
||||
|
||||
-- 检查字段是否存在
|
||||
SHOW COLUMNS FROM jcbt_scholarship_type LIKE 'compatibility_type';
|
||||
|
||||
-- 查看具体数据
|
||||
SELECT id, type_name, compatibility_type,
|
||||
CASE
|
||||
WHEN compatibility_type IS NULL THEN 'NULL值'
|
||||
WHEN compatibility_type = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值:', compatibility_type)
|
||||
END as value_status
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE deleted = 0
|
||||
LIMIT 10;
|
||||
|
||||
-- 统计各种值的分布
|
||||
SELECT
|
||||
compatibility_type,
|
||||
COUNT(*) as count,
|
||||
CASE
|
||||
WHEN compatibility_type IS NULL THEN 'NULL值'
|
||||
WHEN compatibility_type = '' THEN '空字符串'
|
||||
ELSE '有效值'
|
||||
END as value_type
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE deleted = 0
|
||||
GROUP BY compatibility_type;
|
||||
@@ -1,134 +0,0 @@
|
||||
-- ========================================
|
||||
-- 奖学金名额分配删除问题诊断脚本
|
||||
-- 创建时间: 2025-01-28
|
||||
-- 说明: 用于排查无法删除的名额分配记录
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 查看所有名额分配记录的状态
|
||||
SELECT
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
allocation_level,
|
||||
target_dept_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_adjustable,
|
||||
is_locked,
|
||||
status,
|
||||
deleted,
|
||||
create_time,
|
||||
update_time
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 2. 查找可能有问题的记录(已使用名额大于0或已锁定)
|
||||
SELECT
|
||||
'已使用名额大于0' as issue_type,
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_locked,
|
||||
status
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0 AND used_quota > 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'已被锁定' as issue_type,
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_locked,
|
||||
status
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0 AND is_locked = 1
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'状态异常' as issue_type,
|
||||
id,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
total_quota,
|
||||
used_quota,
|
||||
reserved_quota,
|
||||
available_quota,
|
||||
is_locked,
|
||||
status
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0 AND status != 'ACTIVE';
|
||||
|
||||
-- 3. 检查是否存在外键约束或关联数据
|
||||
-- 检查是否有申请记录引用了这些名额
|
||||
SELECT
|
||||
q.id as quota_id,
|
||||
q.batch_id,
|
||||
q.scholarship_type_id,
|
||||
q.used_quota,
|
||||
q.is_locked,
|
||||
COUNT(DISTINCT a.id) as application_count
|
||||
FROM jcbt_scholarship_quota q
|
||||
LEFT JOIN jcbt_scholarship_application a ON a.batch_id = q.batch_id
|
||||
AND a.scholarship_type_id = q.scholarship_type_id
|
||||
WHERE q.deleted = 0
|
||||
GROUP BY q.id, q.batch_id, q.scholarship_type_id, q.used_quota, q.is_locked
|
||||
HAVING application_count > 0 OR q.used_quota > 0 OR q.is_locked = 1;
|
||||
|
||||
-- 4. 检查是否有下级名额分配
|
||||
SELECT
|
||||
parent.id as parent_quota_id,
|
||||
parent.allocation_level as parent_level,
|
||||
parent.used_quota as parent_used_quota,
|
||||
parent.is_locked as parent_is_locked,
|
||||
COUNT(child.id) as child_count
|
||||
FROM jcbt_scholarship_quota parent
|
||||
LEFT JOIN jcbt_scholarship_quota child ON child.parent_quota_id = parent.id AND child.deleted = 0
|
||||
WHERE parent.deleted = 0
|
||||
GROUP BY parent.id, parent.allocation_level, parent.used_quota, parent.is_locked
|
||||
HAVING child_count > 0;
|
||||
|
||||
-- 5. 详细查看有问题的记录(根据实际情况调整ID)
|
||||
-- 请替换下面的ID为实际无法删除的记录ID
|
||||
-- SELECT * FROM jcbt_scholarship_quota WHERE id = 替换为实际ID;
|
||||
|
||||
-- 6. 查看相关批次信息
|
||||
SELECT
|
||||
b.id as batch_id,
|
||||
b.batch_name,
|
||||
b.batch_code,
|
||||
b.status as batch_status,
|
||||
b.start_time,
|
||||
b.end_time,
|
||||
COUNT(q.id) as quota_count
|
||||
FROM jcbt_scholarship_batch b
|
||||
LEFT JOIN jcbt_scholarship_quota q ON q.batch_id = b.id AND q.deleted = 0
|
||||
WHERE b.deleted = 0
|
||||
GROUP BY b.id, b.batch_name, b.batch_code, b.status, b.start_time, b.end_time;
|
||||
|
||||
-- 7. 查看奖学金类型信息
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.type_code,
|
||||
st.status as type_status,
|
||||
COUNT(q.id) as quota_count
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_quota q ON q.scholarship_type_id = st.id AND q.deleted = 0
|
||||
WHERE st.deleted = 0
|
||||
GROUP BY st.id, st.type_name, st.type_code, st.status;
|
||||
@@ -1,249 +0,0 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade_level,
|
||||
c.dept_id,
|
||||
d.dept_name
|
||||
FROM sys_user u
|
||||
LEFT JOIN jcbt_class c ON u.user_id = c.head_teacher_id
|
||||
LEFT JOIN sys_dept d ON c.dept_id = d.dept_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.class_id IS NOT NULL
|
||||
ORDER BY c.class_id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
batch_id,
|
||||
batch_name,
|
||||
batch_status,
|
||||
start_date,
|
||||
end_date,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE batch_status = '1' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
WHERE st.type_status = '1' -- 启用状态
|
||||
ORDER BY st.type_level, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
qa.allocation_id,
|
||||
qa.batch_id,
|
||||
b.batch_name,
|
||||
qa.type_id,
|
||||
st.type_name,
|
||||
qa.class_id,
|
||||
c.class_name,
|
||||
qa.allocated_quota,
|
||||
qa.allocation_basis,
|
||||
qa.create_time
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON qa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
LEFT JOIN jcbt_class c ON qa.class_id = c.class_id
|
||||
ORDER BY qa.batch_id, qa.class_id, qa.type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.type_id
|
||||
LEFT JOIN jcbt_class c ON sa.applicant_class_id = c.class_id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总 ===' as info;
|
||||
|
||||
SELECT
|
||||
qa.batch_id,
|
||||
b.batch_name,
|
||||
qa.class_id,
|
||||
c.class_name,
|
||||
qa.type_id,
|
||||
st.type_name,
|
||||
qa.allocated_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
(qa.allocated_quota - COALESCE(used.used_count, 0)) as available_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (qa.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON qa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
LEFT JOIN jcbt_class c ON qa.class_id = c.class_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) used ON qa.batch_id = used.batch_id
|
||||
AND qa.type_id = used.scholarship_type_id
|
||||
AND qa.class_id = used.applicant_class_id
|
||||
ORDER BY qa.batch_id, qa.class_id, qa.type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade_level,
|
||||
u.user_name as head_teacher_name,
|
||||
u.nick_name as head_teacher_nick
|
||||
FROM jcbt_class c
|
||||
LEFT JOIN sys_user u ON c.head_teacher_id = u.user_id
|
||||
WHERE c.class_id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
qa.type_id,
|
||||
st.type_name,
|
||||
qa.allocated_quota,
|
||||
qa.allocation_basis
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
WHERE qa.class_id = 1
|
||||
ORDER BY qa.type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_batch_type bt ON st.type_id = bt.type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_quota_allocation qa ON st.type_id = qa.type_id AND bt.batch_id = qa.batch_id
|
||||
WHERE st.type_status = '1'
|
||||
AND b.batch_status = '1'
|
||||
AND qa.allocation_id IS NULL;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
qa.allocation_id,
|
||||
qa.type_id,
|
||||
qa.batch_id,
|
||||
qa.class_id
|
||||
FROM jcbt_quota_allocation qa
|
||||
LEFT JOIN jcbt_scholarship_type st ON qa.type_id = st.type_id
|
||||
WHERE st.type_id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_description,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN 0
|
||||
ELSE qa.allocated_quota
|
||||
END as total_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN 0
|
||||
WHEN qa.allocated_quota = 0 THEN 999999
|
||||
ELSE (qa.allocated_quota - COALESCE(used.used_count, 0))
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN FALSE
|
||||
WHEN qa.allocated_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN qa.allocated_quota IS NULL THEN 'unlimited'
|
||||
WHEN qa.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (qa.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_quota_allocation qa ON st.type_id = qa.type_id
|
||||
AND bt.batch_id = qa.batch_id
|
||||
AND qa.class_id = 1
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE batch_id = 1
|
||||
AND applicant_class_id = 1
|
||||
AND application_status IN ('submitted', 'approved')
|
||||
GROUP BY scholarship_type_id, applicant_class_id
|
||||
) used ON st.type_id = used.scholarship_type_id
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.type_status = '1'
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
END,
|
||||
st.type_level,
|
||||
st.type_name;
|
||||
@@ -1,245 +0,0 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本 (修正版)
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.dept_id
|
||||
FROM sys_user u
|
||||
LEFT JOIN xg_class_info c ON u.user_id = c.head_teacher_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.class_id IS NOT NULL
|
||||
ORDER BY c.class_id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
batch_id,
|
||||
batch_name,
|
||||
batch_status,
|
||||
start_date,
|
||||
end_date,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE batch_status = '1' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
WHERE st.type_status = '1' -- 启用状态
|
||||
ORDER BY st.type_level, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.quota_id,
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.type_id,
|
||||
st.type_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.allocated_quota,
|
||||
cq.create_time
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
LEFT JOIN xg_class_info c ON cq.class_id = c.class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.type_id
|
||||
LEFT JOIN xg_class_info c ON sa.applicant_class_id = c.class_id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.type_id,
|
||||
st.type_name,
|
||||
cq.allocated_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
(cq.allocated_quota - COALESCE(used.used_count, 0)) as available_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
LEFT JOIN xg_class_info c ON cq.class_id = c.class_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) used ON cq.batch_id = used.batch_id
|
||||
AND cq.type_id = used.scholarship_type_id
|
||||
AND cq.class_id = used.applicant_class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
u.user_name as head_teacher_name,
|
||||
u.nick_name as head_teacher_nick
|
||||
FROM xg_class_info c
|
||||
LEFT JOIN sys_user u ON c.head_teacher_id = u.user_id
|
||||
WHERE c.class_id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
cq.type_id,
|
||||
st.type_name,
|
||||
cq.allocated_quota
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
WHERE cq.class_id = 1
|
||||
ORDER BY cq.type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.type_id AND bt.batch_id = cq.batch_id
|
||||
WHERE st.type_status = '1'
|
||||
AND b.batch_status = '1'
|
||||
AND cq.quota_id IS NULL;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
cq.quota_id,
|
||||
cq.type_id,
|
||||
cq.batch_id,
|
||||
cq.class_id
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.type_id = st.type_id
|
||||
WHERE st.type_id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_description,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN 0
|
||||
ELSE cq.allocated_quota
|
||||
END as total_quota,
|
||||
COALESCE(used.used_count, 0) as used_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN 0
|
||||
WHEN cq.allocated_quota = 0 THEN 999999
|
||||
ELSE (cq.allocated_quota - COALESCE(used.used_count, 0))
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN FALSE
|
||||
WHEN cq.allocated_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN cq.allocated_quota IS NULL THEN 'unlimited'
|
||||
WHEN cq.allocated_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.allocated_quota - COALESCE(used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND cq.class_id = 1
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE batch_id = 1
|
||||
AND applicant_class_id = 1
|
||||
AND application_status IN ('submitted', 'approved')
|
||||
GROUP BY scholarship_type_id, applicant_class_id
|
||||
) used ON st.type_id = used.scholarship_type_id
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.type_status = '1'
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
END,
|
||||
st.type_level,
|
||||
st.type_name;
|
||||
@@ -1,353 +0,0 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本 (完全修正版)
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- 表名和字段名完全修正
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.college_id,
|
||||
c.major_id
|
||||
FROM sys_user u
|
||||
LEFT JOIN xg_class_msg c ON u.user_id = c.class_teacher_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.id IS NOT NULL
|
||||
ORDER BY c.id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
id as batch_id,
|
||||
batch_name,
|
||||
status as batch_status,
|
||||
start_time,
|
||||
end_time,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE status = 'ACTIVE' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.level_type,
|
||||
st.status as type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.id
|
||||
WHERE st.status = 1 -- 启用状态
|
||||
ORDER BY st.level_type, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.id as quota_id,
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status,
|
||||
cq.create_time
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as actual_used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON sa.applicant_class_id = c.id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总与一致性
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总与一致性检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used_quota,
|
||||
COALESCE(actual_used.used_count, 0) as actual_used_quota,
|
||||
cq.available_quota as recorded_available_quota,
|
||||
(cq.total_quota - COALESCE(actual_used.used_count, 0)) as calculated_available_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota != COALESCE(actual_used.used_count, 0) THEN 'INCONSISTENT'
|
||||
WHEN cq.available_quota != (cq.total_quota - COALESCE(actual_used.used_count, 0)) THEN 'INCONSISTENT'
|
||||
ELSE 'CONSISTENT'
|
||||
END as consistency_status,
|
||||
CASE
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.total_quota - COALESCE(actual_used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual_used ON cq.batch_id = actual_used.batch_id
|
||||
AND cq.scholarship_type_id = actual_used.scholarship_type_id
|
||||
AND cq.class_id = actual_used.applicant_class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.class_teacher_id,
|
||||
u.user_name as class_teacher_name,
|
||||
u.nick_name as class_teacher_nick
|
||||
FROM xg_class_msg c
|
||||
LEFT JOIN sys_user u ON c.class_teacher_id = u.user_id
|
||||
WHERE c.id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
WHERE cq.class_id = 1
|
||||
ORDER BY cq.scholarship_type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name,
|
||||
COUNT(DISTINCT c.id) as total_classes_without_quota
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.id
|
||||
CROSS JOIN xg_class_msg c
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND c.id = cq.class_id
|
||||
WHERE st.status = 1
|
||||
AND b.status = 'ACTIVE'
|
||||
AND c.class_status = '1'
|
||||
AND cq.id IS NULL
|
||||
GROUP BY st.id, st.type_name, bt.batch_id, b.batch_name;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.batch_id,
|
||||
cq.class_id
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
WHERE st.id IS NULL;
|
||||
|
||||
-- 检查名额分配指向不存在的班级
|
||||
SELECT
|
||||
'名额分配指向不存在的班级:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.class_id,
|
||||
cq.class_name as recorded_class_name
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
WHERE c.id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.level_type,
|
||||
st.description,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 0
|
||||
ELSE cq.total_quota
|
||||
END as total_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota IS NULL THEN 0
|
||||
ELSE cq.used_quota
|
||||
END as used_quota,
|
||||
CASE
|
||||
WHEN cq.available_quota IS NULL THEN 0
|
||||
WHEN cq.total_quota = 0 THEN 999999
|
||||
ELSE cq.available_quota
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN FALSE
|
||||
WHEN cq.total_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 'no_allocation'
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN cq.available_quota > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status,
|
||||
cq.allocation_method,
|
||||
cq.status as allocation_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND cq.class_id = 1
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.status = 1
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
WHEN 'no_allocation' THEN 4
|
||||
END,
|
||||
st.level_type,
|
||||
st.type_name;
|
||||
|
||||
-- 10. 额外检查:验证数据同步问题
|
||||
SELECT
|
||||
'=== 10. 数据同步问题检查 ===' as info;
|
||||
|
||||
-- 检查used_quota和available_quota字段是否需要更新
|
||||
SELECT
|
||||
'need_quota_update' as check_type,
|
||||
cq.id,
|
||||
cq.batch_id,
|
||||
cq.class_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used,
|
||||
COALESCE(actual.actual_used, 0) as actual_used,
|
||||
cq.available_quota as recorded_available,
|
||||
(cq.total_quota - COALESCE(actual.actual_used, 0)) as calculated_available
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as actual_used
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual ON cq.batch_id = actual.batch_id
|
||||
AND cq.scholarship_type_id = actual.scholarship_type_id
|
||||
AND cq.class_id = actual.applicant_class_id
|
||||
WHERE cq.used_quota != COALESCE(actual.actual_used, 0)
|
||||
OR cq.available_quota != (cq.total_quota - COALESCE(actual.actual_used, 0));
|
||||
|
||||
-- 11. 快速检查当前数据状态
|
||||
SELECT
|
||||
'=== 11. 快速数据状态检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
'总批次数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_batch;
|
||||
|
||||
SELECT
|
||||
'启用批次数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE status = 'ACTIVE';
|
||||
|
||||
SELECT
|
||||
'总奖学金类型数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_type;
|
||||
|
||||
SELECT
|
||||
'启用奖学金类型数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE status = 1;
|
||||
|
||||
SELECT
|
||||
'总班级数' as item,
|
||||
COUNT(*) as count
|
||||
FROM xg_class_msg;
|
||||
|
||||
SELECT
|
||||
'启用班级数' as item,
|
||||
COUNT(*) as count
|
||||
FROM xg_class_msg
|
||||
WHERE class_status = '1';
|
||||
|
||||
SELECT
|
||||
'总名额分配记录数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_class_quota;
|
||||
|
||||
SELECT
|
||||
'总申请记录数' as item,
|
||||
COUNT(*) as count
|
||||
FROM jcbt_scholarship_application;
|
||||
@@ -1,306 +0,0 @@
|
||||
-- ===================================================================
|
||||
-- 奖学金名额显示问题诊断脚本 (最终修正版)
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 目的: 检查班级名额分配和奖学金类型的数据完整性
|
||||
-- 表名修正: xg_class_msg, jcbt_scholarship_class_quota
|
||||
-- ===================================================================
|
||||
|
||||
-- 1. 检查当前班主任和班级信息
|
||||
SELECT
|
||||
'=== 1. 班主任和班级信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.nick_name,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.college_id,
|
||||
c.major_id
|
||||
FROM sys_user u
|
||||
LEFT JOIN xg_class_msg c ON u.user_id = c.class_teacher_id
|
||||
WHERE u.user_type = '03' -- 班主任
|
||||
AND c.id IS NOT NULL
|
||||
ORDER BY c.id;
|
||||
|
||||
-- 2. 检查奖学金批次信息
|
||||
SELECT
|
||||
'=== 2. 奖学金批次信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
id as batch_id,
|
||||
batch_name,
|
||||
status as batch_status,
|
||||
start_time,
|
||||
end_time,
|
||||
create_time
|
||||
FROM jcbt_scholarship_batch
|
||||
WHERE status = 'ACTIVE' -- 启用状态
|
||||
ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 检查奖学金类型信息
|
||||
SELECT
|
||||
'=== 3. 奖学金类型信息检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
st.id as type_id,
|
||||
st.type_name,
|
||||
st.level_type,
|
||||
st.status as type_status,
|
||||
bt.batch_id,
|
||||
b.batch_name
|
||||
FROM jcbt_scholarship_type st
|
||||
LEFT JOIN jcbt_scholarship_batch_type bt ON st.id = bt.scholarship_type_id
|
||||
LEFT JOIN jcbt_scholarship_batch b ON bt.batch_id = b.id
|
||||
WHERE st.status = 1 -- 启用状态
|
||||
ORDER BY st.level_type, st.type_name;
|
||||
|
||||
-- 4. 检查班级名额分配情况
|
||||
SELECT
|
||||
'=== 4. 班级名额分配情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.id as quota_id,
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status,
|
||||
cq.create_time
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 5. 检查已使用名额情况
|
||||
SELECT
|
||||
'=== 5. 已使用名额情况检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
sa.batch_id,
|
||||
b.batch_name,
|
||||
sa.scholarship_type_id,
|
||||
st.type_name,
|
||||
sa.applicant_class_id,
|
||||
c.class_name,
|
||||
COUNT(*) as actual_used_quota,
|
||||
GROUP_CONCAT(sa.application_status) as status_list
|
||||
FROM jcbt_scholarship_application sa
|
||||
LEFT JOIN jcbt_scholarship_batch b ON sa.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON sa.scholarship_type_id = st.type_id
|
||||
LEFT JOIN xg_class_msg c ON sa.applicant_class_id = c.id
|
||||
WHERE sa.application_status IN ('submitted', 'approved') -- 有效申请
|
||||
GROUP BY sa.batch_id, sa.scholarship_type_id, sa.applicant_class_id
|
||||
ORDER BY sa.batch_id, sa.applicant_class_id, sa.scholarship_type_id;
|
||||
|
||||
-- 6. 检查名额使用情况汇总与一致性
|
||||
SELECT
|
||||
'=== 6. 名额使用情况汇总与一致性检查 ===' as info;
|
||||
|
||||
SELECT
|
||||
cq.batch_id,
|
||||
b.batch_name,
|
||||
cq.class_id,
|
||||
c.class_name,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used_quota,
|
||||
COALESCE(actual_used.used_count, 0) as actual_used_quota,
|
||||
cq.available_quota as recorded_available_quota,
|
||||
(cq.total_quota - COALESCE(actual_used.used_count, 0)) as calculated_available_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota != COALESCE(actual_used.used_count, 0) THEN 'INCONSISTENT'
|
||||
WHEN cq.available_quota != (cq.total_quota - COALESCE(actual_used.used_count, 0)) THEN 'INCONSISTENT'
|
||||
ELSE 'CONSISTENT'
|
||||
END as consistency_status,
|
||||
CASE
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN (cq.total_quota - COALESCE(actual_used.used_count, 0)) > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_batch b ON cq.batch_id = b.batch_id
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.type_id
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as used_count
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual_used ON cq.batch_id = actual_used.batch_id
|
||||
AND cq.scholarship_type_id = actual_used.scholarship_type_id
|
||||
AND cq.class_id = actual_used.applicant_class_id
|
||||
ORDER BY cq.batch_id, cq.class_id, cq.scholarship_type_id;
|
||||
|
||||
-- 7. 检查特定班级的详细情况(以班级ID=1为例)
|
||||
SELECT
|
||||
'=== 7. 特定班级详细情况检查 (class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
'班级基本信息:' as section,
|
||||
c.id as class_id,
|
||||
c.class_name,
|
||||
c.grade,
|
||||
c.class_teacher_id,
|
||||
u.user_name as class_teacher_name,
|
||||
u.nick_name as class_teacher_nick
|
||||
FROM xg_class_msg c
|
||||
LEFT JOIN sys_user u ON c.class_teacher_id = u.user_id
|
||||
WHERE c.id = 1;
|
||||
|
||||
SELECT
|
||||
'该班级的名额分配:' as section,
|
||||
cq.scholarship_type_id,
|
||||
st.type_name,
|
||||
cq.total_quota,
|
||||
cq.used_quota,
|
||||
cq.available_quota,
|
||||
cq.allocation_method,
|
||||
cq.status
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.type_id
|
||||
WHERE cq.class_id = 1
|
||||
ORDER BY cq.scholarship_type_id;
|
||||
|
||||
-- 8. 检查数据完整性问题
|
||||
SELECT
|
||||
'=== 8. 数据完整性问题检查 ===' as info;
|
||||
|
||||
-- 检查缺少名额分配的奖学金类型
|
||||
SELECT
|
||||
'缺少名额分配的奖学金类型:' as issue_type,
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
bt.batch_id,
|
||||
b.batch_name,
|
||||
COUNT(DISTINCT c.id) as total_classes_without_quota
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
INNER JOIN jcbt_scholarship_batch b ON bt.batch_id = b.batch_id
|
||||
CROSS JOIN xg_class_msg c
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND c.id = cq.class_id
|
||||
WHERE st.type_status = '1'
|
||||
AND b.batch_status = '1'
|
||||
AND c.class_status = '1'
|
||||
AND cq.id IS NULL
|
||||
GROUP BY st.type_id, st.type_name, bt.batch_id, b.batch_name;
|
||||
|
||||
-- 检查有名额分配但奖学金类型不存在的情况
|
||||
SELECT
|
||||
'名额分配指向不存在的奖学金类型:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.batch_id,
|
||||
cq.class_id
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN jcbt_scholarship_type st ON cq.scholarship_type_id = st.type_id
|
||||
WHERE st.type_id IS NULL;
|
||||
|
||||
-- 检查名额分配指向不存在的班级
|
||||
SELECT
|
||||
'名额分配指向不存在的班级:' as issue_type,
|
||||
cq.id as quota_id,
|
||||
cq.class_id,
|
||||
cq.class_name as recorded_class_name
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN xg_class_msg c ON cq.class_id = c.id
|
||||
WHERE c.id IS NULL;
|
||||
|
||||
-- 9. 模拟API查询结果
|
||||
SELECT
|
||||
'=== 9. 模拟API查询结果 (batch_id=1, class_id=1) ===' as info;
|
||||
|
||||
SELECT
|
||||
st.type_id,
|
||||
st.type_name,
|
||||
st.type_level,
|
||||
st.type_description,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 0
|
||||
ELSE cq.total_quota
|
||||
END as total_quota,
|
||||
CASE
|
||||
WHEN cq.used_quota IS NULL THEN 0
|
||||
ELSE cq.used_quota
|
||||
END as used_quota,
|
||||
CASE
|
||||
WHEN cq.available_quota IS NULL THEN 0
|
||||
WHEN cq.total_quota = 0 THEN 999999
|
||||
ELSE cq.available_quota
|
||||
END as available_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN FALSE
|
||||
WHEN cq.total_quota = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END as has_quota,
|
||||
CASE
|
||||
WHEN cq.total_quota IS NULL THEN 'no_allocation'
|
||||
WHEN cq.total_quota = 0 THEN 'unlimited'
|
||||
WHEN cq.available_quota > 0 THEN 'available'
|
||||
ELSE 'full'
|
||||
END as quota_status,
|
||||
cq.allocation_method,
|
||||
cq.status as allocation_status
|
||||
FROM jcbt_scholarship_type st
|
||||
INNER JOIN jcbt_scholarship_batch_type bt ON st.type_id = bt.type_id
|
||||
LEFT JOIN jcbt_scholarship_class_quota cq ON st.type_id = cq.scholarship_type_id
|
||||
AND bt.batch_id = cq.batch_id
|
||||
AND cq.class_id = 1
|
||||
WHERE bt.batch_id = 1
|
||||
AND st.type_status = '1'
|
||||
ORDER BY
|
||||
CASE quota_status
|
||||
WHEN 'available' THEN 1
|
||||
WHEN 'unlimited' THEN 2
|
||||
WHEN 'full' THEN 3
|
||||
WHEN 'no_allocation' THEN 4
|
||||
END,
|
||||
st.type_level,
|
||||
st.type_name;
|
||||
|
||||
-- 10. 额外检查:验证数据同步问题
|
||||
SELECT
|
||||
'=== 10. 数据同步问题检查 ===' as info;
|
||||
|
||||
-- 检查used_quota和available_quota字段是否需要更新
|
||||
SELECT
|
||||
'need_quota_update' as check_type,
|
||||
cq.id,
|
||||
cq.batch_id,
|
||||
cq.class_id,
|
||||
cq.scholarship_type_id,
|
||||
cq.total_quota,
|
||||
cq.used_quota as recorded_used,
|
||||
COALESCE(actual.actual_used, 0) as actual_used,
|
||||
cq.available_quota as recorded_available,
|
||||
(cq.total_quota - COALESCE(actual.actual_used, 0)) as calculated_available
|
||||
FROM jcbt_scholarship_class_quota cq
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
applicant_class_id,
|
||||
COUNT(*) as actual_used
|
||||
FROM jcbt_scholarship_application
|
||||
WHERE application_status IN ('submitted', 'approved')
|
||||
GROUP BY batch_id, scholarship_type_id, applicant_class_id
|
||||
) actual ON cq.batch_id = actual.batch_id
|
||||
AND cq.scholarship_type_id = actual.scholarship_type_id
|
||||
AND cq.class_id = actual.applicant_class_id
|
||||
WHERE cq.used_quota != COALESCE(actual.actual_used, 0)
|
||||
OR cq.available_quota != (cq.total_quota - COALESCE(actual.actual_used, 0));
|
||||
@@ -1,45 +0,0 @@
|
||||
-- 修复 jcbt_poverty_application 表中审核字段名称不一致问题
|
||||
-- 问题: 数据库字段为 auditor_time/auditor_opinion,但实体类期望 audit_time/audit_opinion
|
||||
-- 解决方案: 重命名数据库字段,保持与实体类一致
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 检查当前字段状态
|
||||
SELECT '=== 修复前字段检查 ===' as message;
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
IS_NULLABLE as '允许NULL',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN ('auditor_time', 'auditor_opinion', 'audit_time', 'audit_opinion');
|
||||
|
||||
-- 方案1: 重命名字段(推荐)
|
||||
SELECT '=== 开始重命名字段 ===' as message;
|
||||
|
||||
-- 重命名 auditor_time 为 audit_time
|
||||
ALTER TABLE jcbt_poverty_application
|
||||
CHANGE COLUMN auditor_time audit_time datetime DEFAULT NULL COMMENT '审核时间';
|
||||
|
||||
-- 重命名 auditor_opinion 为 audit_opinion
|
||||
ALTER TABLE jcbt_poverty_application
|
||||
CHANGE COLUMN auditor_opinion audit_opinion text COMMENT '审核意见';
|
||||
|
||||
-- 验证修复结果
|
||||
SELECT '=== 修复后字段检查 ===' as message;
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
IS_NULLABLE as '允许NULL',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN ('auditor_time', 'auditor_opinion', 'audit_time', 'audit_opinion')
|
||||
ORDER BY COLUMN_NAME;
|
||||
|
||||
SELECT '✅ 字段重命名完成!现在数据库字段与实体类保持一致!' as result;
|
||||
@@ -1,36 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金兼得关系表 - create_dept字段修复脚本
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 问题描述: 实体类继承BaseEntity包含create_dept字段,但数据库表缺少该字段
|
||||
-- 解决方案: 为jcbt_scholarship_compatibility表添加create_dept字段
|
||||
-- =====================================================
|
||||
|
||||
USE `ruoyi-vue-pro`;
|
||||
|
||||
-- 为奖学金兼得关系表添加create_dept字段
|
||||
ALTER TABLE `jcbt_scholarship_compatibility`
|
||||
ADD COLUMN IF NOT EXISTS `create_dept` BIGINT(20) COMMENT '创建部门'
|
||||
AFTER `description`;
|
||||
|
||||
-- 验证字段添加结果
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
DATA_TYPE,
|
||||
IS_NULLABLE,
|
||||
COLUMN_DEFAULT,
|
||||
COLUMN_COMMENT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'ruoyi-vue-pro'
|
||||
AND TABLE_NAME = 'jcbt_scholarship_compatibility'
|
||||
AND COLUMN_NAME = 'create_dept';
|
||||
|
||||
-- 显示表结构确认修复结果
|
||||
DESCRIBE `jcbt_scholarship_compatibility`;
|
||||
|
||||
-- =====================================================
|
||||
-- 修复说明:
|
||||
-- 1. 该字段是BaseEntity的标准字段,用于记录创建部门
|
||||
-- 2. 字段类型为BIGINT(20),允许NULL,与其他表保持一致
|
||||
-- 3. 字段位置放在description字段之后,符合标准字段顺序
|
||||
-- =====================================================
|
||||
@@ -1,56 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金管理模块 - 兼得类型字段修复脚本
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-08-04
|
||||
-- 说明: 为jcbt_scholarship_type表添加缺失的compatibility_type字段
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 为奖学金类型表添加兼得类型字段
|
||||
-- =====================================================
|
||||
|
||||
-- 检查字段是否存在,如果不存在则添加
|
||||
ALTER TABLE `jcbt_scholarship_type`
|
||||
ADD COLUMN IF NOT EXISTS `compatibility_type` VARCHAR(20) DEFAULT 'COMPATIBLE' COMMENT '兼得类型:EXCLUSIVE-完全互斥,COMPATIBLE-完全兼容,PRIORITY-优先级关系,CUSTOM-自定义配置'
|
||||
AFTER `application_guide`;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 添加兼得类型字段索引
|
||||
-- =====================================================
|
||||
|
||||
-- 为新字段添加索引以提高查询性能
|
||||
ALTER TABLE `jcbt_scholarship_type`
|
||||
ADD INDEX IF NOT EXISTS `idx_compatibility_type` (`compatibility_type`) COMMENT '兼得类型索引';
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 更新现有数据(可选)
|
||||
-- =====================================================
|
||||
|
||||
-- 将现有数据的兼得类型设置为默认值(兼容)
|
||||
-- 如果需要不同的默认值,可以修改这里的UPDATE语句
|
||||
UPDATE `jcbt_scholarship_type`
|
||||
SET `compatibility_type` = 'COMPATIBLE'
|
||||
WHERE `compatibility_type` IS NULL AND `deleted` = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 验证字段添加结果
|
||||
-- =====================================================
|
||||
|
||||
-- 查询表结构确认字段已添加
|
||||
-- DESCRIBE `jcbt_scholarship_type`;
|
||||
|
||||
-- 查询数据确认字段值正确
|
||||
-- SELECT id, type_name, compatibility_type FROM `jcbt_scholarship_type` WHERE deleted = 0 LIMIT 5;
|
||||
|
||||
-- =====================================================
|
||||
-- 脚本执行完成
|
||||
-- =====================================================
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 执行完成提示
|
||||
SELECT '兼得类型字段修复完成!' AS status;
|
||||
@@ -1,33 +0,0 @@
|
||||
-- 修复奖学金申请表缺失的create_dept字段
|
||||
-- 问题: MyBatis-Plus插入数据时报错 Unknown column 'create_dept' in 'field list'
|
||||
-- 原因: 数据库表缺少BaseEntity中的create_dept字段
|
||||
-- 解决方案: 为jcbt_scholarship_application表添加create_dept字段
|
||||
|
||||
-- 检查字段是否存在,不存在则添加
|
||||
SET @sql = '';
|
||||
SELECT COUNT(*) INTO @col_exists
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'hzdyjs_xg'
|
||||
AND table_name = 'jcbt_scholarship_application'
|
||||
AND column_name = 'create_dept';
|
||||
|
||||
-- 如果字段不存在,则添加
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE jcbt_scholarship_application ADD COLUMN create_dept bigint(20) DEFAULT NULL COMMENT ''创建部门'' AFTER submit_time;',
|
||||
'SELECT ''字段 create_dept 已存在,跳过添加'' AS message;');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
IS_NULLABLE as '允许空值',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'hzdyjs_xg'
|
||||
AND table_name = 'jcbt_scholarship_application'
|
||||
AND column_name = 'create_dept';
|
||||
@@ -1,27 +0,0 @@
|
||||
-- 修复助学金申请表状态问题
|
||||
-- 将状态为SUBMITTED的记录改为WAITING,以便正常进行审核
|
||||
|
||||
-- 查看当前状态分布(执行前检查)
|
||||
SELECT status, COUNT(*) as count
|
||||
FROM jcbt_poverty_application
|
||||
GROUP BY status;
|
||||
|
||||
-- 修复SUBMITTED状态为WAITING
|
||||
UPDATE jcbt_poverty_application
|
||||
SET status = 'WAITING',
|
||||
update_time = NOW(),
|
||||
update_by = 103,
|
||||
remark = CONCAT(IFNULL(remark, ''), ' [系统修复:状态从SUBMITTED更新为WAITING以支持审核]')
|
||||
WHERE status = 'SUBMITTED';
|
||||
|
||||
-- 查看修复后的状态分布
|
||||
SELECT status, COUNT(*) as count
|
||||
FROM jcbt_poverty_application
|
||||
GROUP BY status;
|
||||
|
||||
-- 显示被修复的记录详情
|
||||
SELECT id, application_no, student_name, status, submit_time, update_time
|
||||
FROM jcbt_poverty_application
|
||||
WHERE status = 'WAITING'
|
||||
AND remark LIKE '%系统修复:状态从SUBMITTED更新为WAITING%'
|
||||
ORDER BY update_time DESC;
|
||||
@@ -1,101 +0,0 @@
|
||||
-- ========================================
|
||||
-- 修复奖学金名额分配唯一约束问题
|
||||
-- 创建时间: 2025-01-28
|
||||
-- 问题描述: 唯一约束包含deleted字段导致逻辑删除时出现约束冲突
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 查看当前的唯一约束问题数据
|
||||
SELECT
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
target_dept_id,
|
||||
deleted,
|
||||
COUNT(*) as count_records,
|
||||
GROUP_CONCAT(id) as record_ids,
|
||||
GROUP_CONCAT(status) as statuses
|
||||
FROM jcbt_scholarship_quota
|
||||
GROUP BY batch_id, scholarship_type_id, target_dept_id, deleted
|
||||
HAVING COUNT(*) > 1
|
||||
ORDER BY batch_id, scholarship_type_id, target_dept_id;
|
||||
|
||||
-- 2. 查看可能存在冲突的记录(同一组合下有删除和未删除的记录)
|
||||
SELECT
|
||||
q1.id as active_id,
|
||||
q1.batch_id,
|
||||
q1.scholarship_type_id,
|
||||
q1.target_dept_id,
|
||||
q1.deleted as active_deleted,
|
||||
q1.status as active_status,
|
||||
q2.id as deleted_id,
|
||||
q2.deleted as deleted_deleted,
|
||||
q2.status as deleted_status
|
||||
FROM jcbt_scholarship_quota q1
|
||||
INNER JOIN jcbt_scholarship_quota q2 ON
|
||||
q1.batch_id = q2.batch_id
|
||||
AND q1.scholarship_type_id = q2.scholarship_type_id
|
||||
AND q1.target_dept_id = q2.target_dept_id
|
||||
AND q1.deleted = 0
|
||||
AND q2.deleted = 1
|
||||
ORDER BY q1.batch_id, q1.scholarship_type_id, q1.target_dept_id;
|
||||
|
||||
-- 3. 删除旧的唯一约束(包含deleted字段的约束)
|
||||
ALTER TABLE jcbt_scholarship_quota DROP INDEX uk_batch_type_dept;
|
||||
|
||||
-- 4. 先清理可能的重复数据,然后重新添加不包含deleted字段的唯一约束
|
||||
-- 这样可以避免删除时的约束冲突,同时保证业务数据的唯一性
|
||||
|
||||
-- 清理重复的已删除记录(保留最新的一条)
|
||||
DELETE q1 FROM jcbt_scholarship_quota q1
|
||||
INNER JOIN jcbt_scholarship_quota q2
|
||||
WHERE q1.batch_id = q2.batch_id
|
||||
AND q1.scholarship_type_id = q2.scholarship_type_id
|
||||
AND q1.target_dept_id = q2.target_dept_id
|
||||
AND q1.deleted = 1
|
||||
AND q2.deleted = 1
|
||||
AND q1.id < q2.id;
|
||||
|
||||
-- 如果仍然存在同一业务组合的active和deleted记录,物理删除deleted记录
|
||||
DELETE FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 1
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM jcbt_scholarship_quota q2
|
||||
WHERE q2.batch_id = jcbt_scholarship_quota.batch_id
|
||||
AND q2.scholarship_type_id = jcbt_scholarship_quota.scholarship_type_id
|
||||
AND q2.target_dept_id = jcbt_scholarship_quota.target_dept_id
|
||||
AND q2.deleted = 0
|
||||
);
|
||||
|
||||
-- 重新添加不包含deleted字段的唯一约束
|
||||
ALTER TABLE jcbt_scholarship_quota
|
||||
ADD CONSTRAINT uk_batch_type_dept_business
|
||||
UNIQUE (batch_id, scholarship_type_id, target_dept_id);
|
||||
|
||||
-- 5. 验证修复结果
|
||||
SELECT
|
||||
'修复后检查' as check_type,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
target_dept_id,
|
||||
COUNT(*) as count_records,
|
||||
GROUP_CONCAT(CONCAT('id:', id, ',deleted:', deleted)) as record_details
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 0
|
||||
GROUP BY batch_id, scholarship_type_id, target_dept_id
|
||||
HAVING COUNT(*) > 1
|
||||
UNION ALL
|
||||
SELECT
|
||||
'已删除记录检查' as check_type,
|
||||
batch_id,
|
||||
scholarship_type_id,
|
||||
target_dept_id,
|
||||
COUNT(*) as count_records,
|
||||
GROUP_CONCAT(CONCAT('id:', id, ',deleted:', deleted)) as record_details
|
||||
FROM jcbt_scholarship_quota
|
||||
WHERE deleted = 1
|
||||
GROUP BY batch_id, scholarship_type_id, target_dept_id
|
||||
HAVING COUNT(*) > 1;
|
||||
|
||||
-- 6. 显示当前表的约束信息
|
||||
SHOW INDEX FROM jcbt_scholarship_quota WHERE Key_name LIKE '%batch%' OR Key_name LIKE '%type%' OR Key_name LIKE '%dept%';
|
||||
@@ -1,20 +0,0 @@
|
||||
-- 修复勤工俭学岗位表缺少 create_dept 字段的问题
|
||||
-- 创建日期: 2025-01-03
|
||||
-- 说明: 添加 create_dept 字段以保持与 BaseEntity 的一致性
|
||||
|
||||
-- 添加 create_dept 字段
|
||||
ALTER TABLE `jcbt_work_study_position`
|
||||
ADD COLUMN `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门'
|
||||
AFTER `tenant_id`;
|
||||
|
||||
-- 更新现有数据的 create_dept 字段(设置为默认值 NULL)
|
||||
UPDATE `jcbt_work_study_position`
|
||||
SET `create_dept` = NULL
|
||||
WHERE `create_dept` IS NULL;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_work_study_position'
|
||||
AND COLUMN_NAME = 'create_dept';
|
||||
@@ -1,71 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金名额分配 - 简单测试数据插入脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 插入基础测试数据
|
||||
-- =====================================================
|
||||
|
||||
-- 设置数据库
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 插入奖学金批次数据
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_batch (
|
||||
id, batch_code, batch_name, academic_year, semester, batch_type,
|
||||
start_time, end_time, apply_start_time, apply_end_time,
|
||||
review_start_time, review_end_time, status, description,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000001, 'BATCH_2024_1', '2024学年第一学期奖学金评定', '2024-2025', 1, 'REGULAR',
|
||||
'2024-09-01 00:00:00', '2024-12-31 23:59:59', '2024-10-01 00:00:00', '2024-10-31 23:59:59',
|
||||
'2024-11-01 00:00:00', '2024-11-30 23:59:59', 'ACTIVE', '2024学年第一学期常规奖学金评定批次',
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入奖学金类型数据
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria,
|
||||
compatibility_type, sort_order, status, is_system,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000101, 'GJZXJ', '国家奖学金', 'NATIONAL', 'FIRST_CLASS', 8000.00,
|
||||
'国家奖学金是为了激励普通本科高校、高等职业学校和高等专科学校学生勤奋学习、努力进取。',
|
||||
'学生本人提出申请,按学校规定程序推荐上报。', '品学兼优,学习成绩排名在评选范围内位于前10%',
|
||||
'学习成绩、综合测评、道德品质等综合评定', 'EXCLUSIVE', 1, 1, 1,
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入名额分配数据
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_quota (
|
||||
id, batch_id, scholarship_type_id, allocation_level, target_dept_id, parent_quota_id,
|
||||
total_quota, used_quota, reserved_quota, available_quota,
|
||||
allocation_rule, allocation_basis, allocation_method, is_adjustable, is_locked, status,
|
||||
remark, create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000201, 1890000000000000001, 1890000000000000101, 'UNIVERSITY', NULL, NULL,
|
||||
50, 0, 5, 45, '{"type":"university","rule":"total_allocation"}', '根据学校总体规模和历年获奖情况分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校国家奖学金总名额', 1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 验证数据
|
||||
-- =====================================================
|
||||
SELECT '插入结果验证' as message;
|
||||
SELECT COUNT(*) as batch_count FROM jcbt_scholarship_batch WHERE deleted = 0;
|
||||
SELECT COUNT(*) as type_count FROM jcbt_scholarship_type WHERE deleted = 0;
|
||||
SELECT COUNT(*) as quota_count FROM jcbt_scholarship_quota WHERE deleted = 0;
|
||||
|
||||
-- 验证关联查询
|
||||
SELECT
|
||||
q.id,
|
||||
b.batch_name,
|
||||
st.type_name as scholarship_type_name,
|
||||
q.allocation_level,
|
||||
q.total_quota,
|
||||
q.status
|
||||
FROM jcbt_scholarship_quota q
|
||||
LEFT JOIN jcbt_scholarship_batch b ON q.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON q.scholarship_type_id = st.id
|
||||
WHERE q.deleted = 0;
|
||||
@@ -1,119 +0,0 @@
|
||||
-- ========================================
|
||||
-- 贫困生认定申请管理模块 - 菜单权限配置
|
||||
-- 创建时间: 2025-01-26
|
||||
-- 说明: 配置贫困生认定申请管理功能的菜单和权限
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置变量
|
||||
SET @parent_menu_id = 2015; -- 奖惩补贴管理父菜单ID
|
||||
SET @menu_order = 4; -- 菜单排序(在奖学金申请管理之后)
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 删除已存在的菜单(开发环境重新创建)
|
||||
-- =====================================================
|
||||
DELETE FROM sys_menu WHERE menu_name = '助学金申请管理' AND parent_id = @parent_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 创建助学金申请管理菜单
|
||||
-- =====================================================
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('助学金申请管理', @parent_menu_id, @menu_order, 'povertyApplication', 'jcbt/poverty/Application/index', '', 1, 0, 'C', '0', '0', 'jcbt:povertyApplication:list', 'money', 1, NOW(), 1, NOW(), '贫困生认定申请管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @poverty_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 创建基础管理功能按钮权限(6个)
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请查询', @poverty_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:query', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.2 新增权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请新增', @poverty_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:add', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.3 修改权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请修改', @poverty_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:edit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.4 删除权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请删除', @poverty_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:remove', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.5 详情权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请详情', @poverty_menu_id, 5, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:detail', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.6 导出权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请导出', @poverty_menu_id, 6, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:export', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 创建业务功能权限(4个)
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 我的申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('我的申请', @poverty_menu_id, 7, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:myList', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.2 待审核申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('待审核申请', @poverty_menu_id, 8, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:pendingList', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.3 申请资格检查权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('资格检查', @poverty_menu_id, 9, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:check', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.4 申请审核权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请审核', @poverty_menu_id, 10, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:approve', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 创建辅助功能权限(6个)
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 提交申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('提交申请', @poverty_menu_id, 11, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:submit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.2 撤回申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('撤回申请', @poverty_menu_id, 12, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:cancel', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.3 驳回申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('驳回申请', @poverty_menu_id, 13, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:reject', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.4 草稿保存权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('保存草稿', @poverty_menu_id, 14, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:draft', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.5 重复检查权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('重复检查', @poverty_menu_id, 15, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:duplicate', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.6 申请统计权限 ⚠️ 这是关键的统计权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请统计', @poverty_menu_id, 16, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:povertyApplication:statistics', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 分配权限给超级管理员角色
|
||||
-- =====================================================
|
||||
|
||||
-- 获取超级管理员角色ID (通常是1)
|
||||
SET @admin_role_id = 1;
|
||||
|
||||
-- 分配所有权限给超级管理员
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @admin_role_id, menu_id FROM sys_menu WHERE parent_id = @poverty_menu_id OR menu_id = @poverty_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 7. 输出确认信息
|
||||
-- =====================================================
|
||||
SELECT '贫困生认定申请管理菜单权限配置完成!' as message;
|
||||
SELECT CONCAT('主菜单ID: ', @poverty_menu_id) as menu_info;
|
||||
SELECT COUNT(*) as total_permissions FROM sys_menu WHERE parent_id = @poverty_menu_id OR menu_id = @poverty_menu_id;
|
||||
@@ -1,311 +0,0 @@
|
||||
-- ============================================================================
|
||||
-- 贫困生认定申请管理 - 数据库表创建脚本
|
||||
-- 创建时间: 2024-12-19
|
||||
-- 描述: 创建贫困生认定申请相关的数据库表、菜单权限和测试数据
|
||||
-- ============================================================================
|
||||
|
||||
-- ============================================================================
|
||||
-- 1. 创建贫困生认定申请表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `jcbt_poverty_application` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`application_no` varchar(50) DEFAULT NULL COMMENT '申请编号',
|
||||
`academic_year` varchar(20) DEFAULT NULL COMMENT '学年',
|
||||
`term` int(11) DEFAULT NULL COMMENT '学期',
|
||||
`student_id` bigint(20) DEFAULT NULL COMMENT '学生ID',
|
||||
`student_no` varchar(50) DEFAULT NULL COMMENT '学号',
|
||||
`student_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
|
||||
`gender` varchar(10) DEFAULT NULL COMMENT '性别',
|
||||
`college_id` bigint(20) DEFAULT NULL COMMENT '学院ID',
|
||||
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||
`major_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
|
||||
`major_name` varchar(100) DEFAULT NULL COMMENT '专业名称',
|
||||
`class_id` bigint(20) DEFAULT NULL COMMENT '班级ID',
|
||||
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称',
|
||||
`recognition_group` varchar(50) DEFAULT NULL COMMENT '认定群体(特殊群体/其他群体)',
|
||||
`recognition_type_id` bigint(20) DEFAULT NULL COMMENT '认定类型ID',
|
||||
`recognition_type_code` varchar(50) DEFAULT NULL COMMENT '认定类型编码',
|
||||
`recognition_type_name` varchar(100) DEFAULT NULL COMMENT '认定类型名称',
|
||||
`assistance_type_ids` varchar(500) DEFAULT NULL COMMENT '申请自助类型ID数组(多选)',
|
||||
`assistance_type_names` varchar(500) DEFAULT NULL COMMENT '申请自助类型名称(多个用逗号分隔)',
|
||||
`family_economy_summary` text COMMENT '家庭经济情况摘要',
|
||||
`attach_application_form_url` varchar(500) DEFAULT NULL COMMENT '申请表附件URL',
|
||||
`attach_application_form_id` bigint(20) DEFAULT NULL COMMENT '申请表附件ID',
|
||||
`attach_survey_form_url` varchar(500) DEFAULT NULL COMMENT '调查表附件URL',
|
||||
`attach_survey_form_id` bigint(20) DEFAULT NULL COMMENT '调查表附件ID',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '申请状态(DRAFT-草稿,SUBMITTED-已提交,REVIEWING-审核中,APPROVED-已通过,REJECTED-已拒绝,WITHDRAWN-已撤回)',
|
||||
`submitter_id` bigint(20) DEFAULT NULL COMMENT '提交人ID',
|
||||
`submitter_name` varchar(100) DEFAULT NULL COMMENT '提交人姓名',
|
||||
`submit_time` datetime DEFAULT NULL COMMENT '提交时间',
|
||||
`auditor_id` bigint(20) DEFAULT NULL COMMENT '审核人ID',
|
||||
`auditor_name` varchar(100) DEFAULT NULL COMMENT '审核人姓名',
|
||||
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`audit_opinion` text COMMENT '审核意见',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` bigint(20) DEFAULT '0' COMMENT '逻辑删除标记(0-正常,非0-已删除)',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' 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 '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_student_no` (`student_no`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_academic_year` (`academic_year`),
|
||||
KEY `idx_college_id` (`college_id`),
|
||||
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贫困生认定申请表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 2. 插入菜单权限配置
|
||||
-- ============================================================================
|
||||
|
||||
-- 2.1 插入主菜单(贫困生认定申请管理)
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043650013946881',
|
||||
'贫困生认定申请管理',
|
||||
'1851080776692494337',
|
||||
'4',
|
||||
'jcbt:poverty:application:list',
|
||||
'poverty/Application/index',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'C',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:list',
|
||||
'education',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 2.2 插入按钮权限
|
||||
-- 查询按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043651013946881',
|
||||
'贫困生认定申请查询',
|
||||
'1954043650013946881',
|
||||
'1',
|
||||
'jcbt:poverty:application:query',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:query',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 新增按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043652013946881',
|
||||
'贫困生认定申请新增',
|
||||
'1954043650013946881',
|
||||
'2',
|
||||
'jcbt:poverty:application:add',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:add',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 修改按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043653013946881',
|
||||
'贫困生认定申请修改',
|
||||
'1954043650013946881',
|
||||
'3',
|
||||
'jcbt:poverty:application:edit',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:edit',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 删除按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043654013946881',
|
||||
'贫困生认定申请删除',
|
||||
'1954043650013946881',
|
||||
'4',
|
||||
'jcbt:poverty:application:remove',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:remove',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 导出按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043655013946881',
|
||||
'贫困生认定申请导出',
|
||||
'1954043650013946881',
|
||||
'5',
|
||||
'jcbt:poverty:application:export',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:export',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- 审核按钮
|
||||
INSERT INTO sys_menu VALUES(
|
||||
'1954043656013946881',
|
||||
'贫困生认定申请审核',
|
||||
'1954043650013946881',
|
||||
'6',
|
||||
'jcbt:poverty:application:audit',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'1',
|
||||
'0',
|
||||
'F',
|
||||
'0',
|
||||
'0',
|
||||
'jcbt:poverty:application:audit',
|
||||
'#',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
''
|
||||
);
|
||||
|
||||
-- ============================================================================
|
||||
-- 3. 插入字典数据
|
||||
-- ============================================================================
|
||||
|
||||
-- 3.1 申请状态字典
|
||||
INSERT INTO sys_dict_type VALUES(
|
||||
(SELECT IFNULL(MAX(dict_id), 0) + 1 FROM sys_dict_type t),
|
||||
'贫困生申请状态',
|
||||
'jcbt_poverty_application_status',
|
||||
'0',
|
||||
'103',
|
||||
'1',
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
'贫困生认定申请状态选项'
|
||||
);
|
||||
|
||||
-- 获取刚插入的字典类型ID
|
||||
SET @dict_type_id = (SELECT dict_id FROM sys_dict_type WHERE dict_type = 'jcbt_poverty_application_status');
|
||||
|
||||
-- 插入状态字典数据
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 1, 1, '草稿', 'DRAFT', 'jcbt_poverty_application_status', '', 'info', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请草稿状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 2, 2, '已提交', 'SUBMITTED', 'jcbt_poverty_application_status', '', 'primary', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已提交状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 3, 3, '审核中', 'REVIEWING', 'jcbt_poverty_application_status', '', 'warning', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请审核中状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 4, 4, '已通过', 'APPROVED', 'jcbt_poverty_application_status', '', 'success', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已通过状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 5, 5, '已拒绝', 'REJECTED', 'jcbt_poverty_application_status', '', 'danger', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已拒绝状态');
|
||||
INSERT INTO sys_dict_data VALUES(@dict_type_id * 10 + 6, 6, '已撤回', 'WITHDRAWN', 'jcbt_poverty_application_status', '', 'info', 'N', '0', '103', '1', NOW(), NULL, NULL, '申请已撤回状态');
|
||||
|
||||
-- ============================================================================
|
||||
-- 4. 插入测试数据
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO `jcbt_poverty_application` VALUES
|
||||
(1954048400013946881, 'PK2024001', '2024-2025', 1, 1001, '202401001', '张三', '男', 101, '计算机学院', 10101, '计算机科学与技术', 1010101, '计软2401班', '其他群体', 1, 'TYPE001', '一般困难', '1,2', '学费减免,生活补助', '家庭经济困难,父母务农收入微薄', '', NULL, '', NULL, 'SUBMITTED', 1001, '张三', '2024-12-01 10:00:00', NULL, NULL, NULL, NULL, '因家庭经济困难申请贫困生认定', 0, '000000', 103, '2024-12-01 09:30:00', 103, '2024-12-01 10:00:00'),
|
||||
(1954048401013946881, 'PK2024002', '2024-2025', 1, 1002, '202401002', '李四', '女', 102, '外国语学院', 10201, '英语', 1020101, '英语2401班', '特殊群体', 2, 'TYPE002', '特别困难', '1,3', '学费减免,勤工助学', '单亲家庭,母亲重病', '', NULL, '', NULL, 'REVIEWING', 1002, '李四', '2024-12-02 14:00:00', 201, '王老师', NULL, NULL, '单亲家庭申请特别困难认定', 0, '000000', 103, '2024-12-02 13:30:00', 201, '2024-12-02 14:00:00'),
|
||||
(1954048402013946881, 'PK2024003', '2024-2025', 1, 1003, '202401003', '王五', '男', 101, '计算机学院', 10102, '软件工程', 1010201, '软工2401班', '其他群体', 1, 'TYPE001', '一般困难', '2', '生活补助', '家庭收入较低', '', NULL, '', NULL, 'APPROVED', 1003, '王五', '2024-11-28 16:00:00', 201, '王老师', '2024-11-30 10:00:00', '符合认定条件,予以通过', '已通过认定审核', 0, '000000', 103, '2024-11-28 15:30:00', 201, '2024-11-30 10:00:00'),
|
||||
(1954048403013946881, 'PK2024004', '2024-2025', 1, 1004, '202401004', '赵六', '女', 103, '经济管理学院', 10301, '会计学', 1030101, '会计2401班', '其他群体', 1, 'TYPE001', '一般困难', '1,2,3', '学费减免,生活补助,勤工助学', '家庭经济确实困难', '', NULL, '', NULL, 'DRAFT', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '正在准备申请材料', 0, '000000', 103, '2024-12-05 11:00:00', 103, '2024-12-05 11:00:00'),
|
||||
(1954048404013946881, 'PK2024005', '2024-2025', 1, 1005, '202401005', '钱七', '男', 104, '机械工程学院', 10401, '机械设计制造及其自动化', 1040101, '机械2401班', '特殊群体', 2, 'TYPE002', '特别困难', '1,2', '学费减免,生活补助', '建档立卡贫困户', '', NULL, '', NULL, 'REJECTED', 1005, '钱七', '2024-11-25 09:00:00', 202, '李老师', '2024-11-27 15:00:00', '材料不够完整,请补充相关证明', '需要补充材料后重新申请', 0, '000000', 103, '2024-11-25 08:30:00', 202, '2024-11-27 15:00:00');
|
||||
|
||||
-- ============================================================================
|
||||
-- 5. 创建索引优化
|
||||
-- ============================================================================
|
||||
|
||||
-- 优化查询性能的复合索引
|
||||
CREATE INDEX idx_student_status_time ON jcbt_poverty_application(student_id, status, create_time);
|
||||
CREATE INDEX idx_college_year_status ON jcbt_poverty_application(college_id, academic_year, status);
|
||||
CREATE INDEX idx_auditor_time ON jcbt_poverty_application(auditor_id, audit_time);
|
||||
|
||||
-- ============================================================================
|
||||
-- 6. 数据统计视图(可选)
|
||||
-- ============================================================================
|
||||
|
||||
-- 创建状态统计视图
|
||||
CREATE OR REPLACE VIEW v_poverty_application_statistics AS
|
||||
SELECT
|
||||
status,
|
||||
COUNT(*) as count,
|
||||
academic_year,
|
||||
college_name
|
||||
FROM jcbt_poverty_application
|
||||
WHERE deleted = 0
|
||||
GROUP BY status, academic_year, college_name;
|
||||
|
||||
-- ============================================================================
|
||||
-- 脚本执行完成
|
||||
-- ============================================================================
|
||||
-- 执行完成后请检查:
|
||||
-- 1. 表结构是否创建成功: SHOW CREATE TABLE jcbt_poverty_application;
|
||||
-- 2. 菜单权限是否正确: SELECT * FROM sys_menu WHERE menu_name LIKE '%贫困生%';
|
||||
-- 3. 测试数据是否插入: SELECT COUNT(*) FROM jcbt_poverty_application;
|
||||
-- ============================================================================
|
||||
@@ -1,141 +0,0 @@
|
||||
-- ========================================
|
||||
-- 奖学金申请管理模块 - 菜单权限配置
|
||||
-- 创建时间: 2025-01-26
|
||||
-- 说明: 配置奖学金申请管理功能的菜单和权限
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置变量
|
||||
SET @parent_menu_id = 2015; -- 奖惩补贴管理父菜单ID
|
||||
SET @menu_order = 3; -- 菜单排序
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 删除已存在的菜单(开发环境重新创建)
|
||||
-- =====================================================
|
||||
DELETE FROM sys_menu WHERE menu_name = '申请管理' AND parent_id = @parent_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 创建申请管理菜单
|
||||
-- =====================================================
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请管理', @parent_menu_id, @menu_order, 'application', 'jcbt/scholarship/application/index', '', 1, 0, 'C', '0', '0', 'jcbt:scholarshipApplication:list', 'form', 1, NOW(), 1, NOW(), '奖学金申请管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @application_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 创建申请管理功能按钮权限
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请查询', @application_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:query', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.2 新增权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请新增', @application_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:add', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.3 修改权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请修改', @application_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:edit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.4 删除权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请删除', @application_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:remove', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.5 导出权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请导出', @application_menu_id, 5, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:export', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.6 导入权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请导入', @application_menu_id, 6, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:import', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 创建业务功能权限
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 我的申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('我的申请', @application_menu_id, 7, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:my', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.2 待审核申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('待审核申请', @application_menu_id, 8, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:pending', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.3 申请资格检查权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('资格检查', @application_menu_id, 9, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:check', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.4 批量审核权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('批量审核', @application_menu_id, 10, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:approve', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.5 提交申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('提交申请', @application_menu_id, 11, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:submit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.6 撤回申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('撤回申请', @application_menu_id, 12, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:withdraw', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.7 批量申请权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('批量申请', @application_menu_id, 13, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:batch', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 4.8 统计权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('申请统计', @application_menu_id, 14, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:statistics', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 创建扩展功能权限
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 名额查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额查询', @application_menu_id, 15, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:quota', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.2 可申请奖学金查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('可申请奖学金', @application_menu_id, 16, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:available', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.3 班级信息查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('班级信息查询', @application_menu_id, 17, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:classInfo', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.4 学生信息查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('学生信息查询', @application_menu_id, 18, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:students', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 5.5 奖学金类型查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('奖学金类型查询', @application_menu_id, 19, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipApplication:scholarshipTypes', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 为管理员角色分配权限
|
||||
-- =====================================================
|
||||
|
||||
-- 获取管理员角色ID (role_key = 'admin')
|
||||
SET @admin_role_id = (SELECT role_id FROM sys_role WHERE role_key = 'admin' LIMIT 1);
|
||||
|
||||
-- 为管理员分配奖学金申请管理菜单权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @admin_role_id, menu_id
|
||||
FROM sys_menu
|
||||
WHERE (menu_id = @application_menu_id OR parent_id = @application_menu_id)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu rm
|
||||
WHERE rm.role_id = @admin_role_id AND rm.menu_id = sys_menu.menu_id
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 7. 检查结果
|
||||
-- =====================================================
|
||||
SELECT '奖学金申请管理菜单权限配置完成!' as message;
|
||||
|
||||
-- 查看创建的菜单
|
||||
SELECT menu_id, menu_name, parent_id, perms, menu_type
|
||||
FROM sys_menu
|
||||
WHERE menu_id = @application_menu_id OR parent_id = @application_menu_id
|
||||
ORDER BY parent_id, order_num;
|
||||
@@ -1,42 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金管理模块 - 完整数据库表结构
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 包含奖学金类型表的完整结构定义
|
||||
-- =====================================================
|
||||
|
||||
-- 奖学金类型表
|
||||
CREATE TABLE IF NOT EXISTS jcbt_scholarship_type (
|
||||
id BIGINT(20) PRIMARY KEY COMMENT '主键ID',
|
||||
type_name VARCHAR(100) NOT NULL COMMENT '奖学金类型名称',
|
||||
type_code VARCHAR(50) UNIQUE NOT NULL COMMENT '类型代码',
|
||||
description TEXT COMMENT '详细描述',
|
||||
amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '金额',
|
||||
create_dept BIGINT(20) COMMENT '创建部门',
|
||||
create_by BIGINT(20) COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_by BIGINT(20) COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
tenant_id BIGINT(20) NOT NULL COMMENT '租户ID',
|
||||
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标记',
|
||||
is_system TINYINT(1) DEFAULT 0 COMMENT '是否系统内置',
|
||||
status TINYINT(1) DEFAULT 1 COMMENT '状态',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
KEY idx_status (status) COMMENT '状态索引',
|
||||
KEY idx_create_time (create_time) COMMENT '创建时间索引',
|
||||
KEY idx_tenant_deleted (tenant_id, deleted) COMMENT '租户删除索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖学金类型表';
|
||||
|
||||
-- 如果表已存在,添加create_dept字段(兼容性处理)
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN IF NOT EXISTS create_dept BIGINT(20) COMMENT '创建部门'
|
||||
AFTER is_system;
|
||||
|
||||
-- =====================================================
|
||||
-- 奖学金兼得关系表修复
|
||||
-- =====================================================
|
||||
|
||||
-- 为jcbt_scholarship_compatibility表添加create_dept字段
|
||||
ALTER TABLE jcbt_scholarship_compatibility
|
||||
ADD COLUMN IF NOT EXISTS create_dept BIGINT(20) COMMENT '创建部门'
|
||||
AFTER description;
|
||||
@@ -1,98 +0,0 @@
|
||||
-- ========================================
|
||||
-- 奖学金名额分配模块 - 数据库建表脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 模块: ruoyi-jcbt
|
||||
-- 说明: 按批次进行名额分配管理
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 删除已存在的表(开发环境)
|
||||
DROP TABLE IF EXISTS `jcbt_scholarship_quota_adjustment`;
|
||||
DROP TABLE IF EXISTS `jcbt_scholarship_quota`;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 名额分配主表
|
||||
-- =====================================================
|
||||
CREATE TABLE `jcbt_scholarship_quota` (
|
||||
`id` BIGINT(20) NOT NULL COMMENT '主键ID',
|
||||
`batch_id` BIGINT(20) NOT NULL COMMENT '批次ID',
|
||||
`scholarship_type_id` BIGINT(20) NOT NULL COMMENT '奖学金类型ID',
|
||||
`allocation_level` VARCHAR(20) NOT NULL COMMENT '分配级别:UNIVERSITY-全校,COLLEGE-学院,MAJOR-专业,CLASS-班级',
|
||||
`target_dept_id` BIGINT(20) DEFAULT NULL COMMENT '目标部门ID(学院/专业/班级)',
|
||||
`parent_quota_id` BIGINT(20) DEFAULT NULL COMMENT '上级名额ID(层级分配)',
|
||||
`total_quota` INT NOT NULL DEFAULT 0 COMMENT '总名额',
|
||||
`used_quota` INT NOT NULL DEFAULT 0 COMMENT '已使用名额',
|
||||
`reserved_quota` INT NOT NULL DEFAULT 0 COMMENT '预留名额',
|
||||
`available_quota` INT NOT NULL DEFAULT 0 COMMENT '可用名额',
|
||||
`allocation_rule` TEXT DEFAULT NULL COMMENT '分配规则(JSON格式)',
|
||||
`allocation_basis` VARCHAR(500) DEFAULT NULL COMMENT '分配依据说明',
|
||||
`allocation_method` VARCHAR(20) DEFAULT 'MANUAL' COMMENT '分配方式:MANUAL-手动分配,AUTO-自动分配,PROPORTIONAL-按比例分配',
|
||||
`is_adjustable` TINYINT(1) DEFAULT 1 COMMENT '是否可调整:0-否,1-是',
|
||||
`is_locked` TINYINT(1) DEFAULT 0 COMMENT '是否锁定:0-否,1-是',
|
||||
`status` VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE-生效,INACTIVE-失效,PENDING-待审核',
|
||||
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` BIGINT(20) NOT NULL COMMENT '租户ID',
|
||||
`create_dept` BIGINT(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` BIGINT(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` BIGINT(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` TINYINT(1) DEFAULT 0 COMMENT '删除标记:0-正常,1-删除',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_batch_type_dept` (`batch_id`, `scholarship_type_id`, `target_dept_id`, `deleted`),
|
||||
INDEX `idx_batch_level` (`batch_id`, `allocation_level`),
|
||||
INDEX `idx_dept_quota` (`target_dept_id`, `total_quota`),
|
||||
INDEX `idx_parent_quota` (`parent_quota_id`),
|
||||
INDEX `idx_tenant_status` (`tenant_id`, `status`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='奖学金名额分配表';
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 名额调整记录表
|
||||
-- =====================================================
|
||||
CREATE TABLE `jcbt_scholarship_quota_adjustment` (
|
||||
`id` BIGINT(20) NOT NULL COMMENT '主键ID',
|
||||
`quota_id` BIGINT(20) NOT NULL COMMENT '名额分配ID',
|
||||
`adjustment_type` VARCHAR(20) NOT NULL COMMENT '调整类型:INCREASE-增加,DECREASE-减少,TRANSFER-转移',
|
||||
`from_quota_id` BIGINT(20) DEFAULT NULL COMMENT '源名额ID(转移时使用)',
|
||||
`to_quota_id` BIGINT(20) DEFAULT NULL COMMENT '目标名额ID(转移时使用)',
|
||||
`adjustment_amount` INT NOT NULL COMMENT '调整数量',
|
||||
`before_total` INT NOT NULL COMMENT '调整前总名额',
|
||||
`after_total` INT NOT NULL COMMENT '调整后总名额',
|
||||
`adjustment_reason` VARCHAR(500) NOT NULL COMMENT '调整原因',
|
||||
`approval_status` VARCHAR(20) DEFAULT 'PENDING' COMMENT '审批状态:PENDING-待审批,APPROVED-已通过,REJECTED-已拒绝',
|
||||
`approval_user_id` BIGINT(20) DEFAULT NULL COMMENT '审批人ID',
|
||||
`approval_time` DATETIME DEFAULT NULL COMMENT '审批时间',
|
||||
`approval_remark` VARCHAR(500) DEFAULT NULL COMMENT '审批备注',
|
||||
`tenant_id` BIGINT(20) NOT NULL COMMENT '租户ID',
|
||||
`create_dept` BIGINT(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` BIGINT(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` BIGINT(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` TINYINT(1) DEFAULT 0 COMMENT '删除标记:0-正常,1-删除',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_quota_id` (`quota_id`),
|
||||
INDEX `idx_adjustment_type` (`adjustment_type`, `approval_status`),
|
||||
INDEX `idx_from_to_quota` (`from_quota_id`, `to_quota_id`),
|
||||
INDEX `idx_tenant` (`tenant_id`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='名额调整记录表';
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 添加外键约束(可选,根据实际情况)
|
||||
-- =====================================================
|
||||
-- ALTER TABLE `jcbt_scholarship_quota`
|
||||
-- ADD CONSTRAINT `fk_quota_batch` FOREIGN KEY (`batch_id`) REFERENCES `jcbt_scholarship_batch` (`id`);
|
||||
|
||||
-- ALTER TABLE `jcbt_scholarship_quota`
|
||||
-- ADD CONSTRAINT `fk_quota_type` FOREIGN KEY (`scholarship_type_id`) REFERENCES `jcbt_scholarship_type` (`id`);
|
||||
|
||||
-- ALTER TABLE `jcbt_scholarship_quota_adjustment`
|
||||
-- ADD CONSTRAINT `fk_adjustment_quota` FOREIGN KEY (`quota_id`) REFERENCES `jcbt_scholarship_quota` (`id`);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 验证表创建
|
||||
-- =====================================================
|
||||
SHOW TABLES LIKE 'jcbt_scholarship_quota%';
|
||||
DESCRIBE jcbt_scholarship_quota;
|
||||
DESCRIBE jcbt_scholarship_quota_adjustment;
|
||||
@@ -1,134 +0,0 @@
|
||||
-- ========================================
|
||||
-- 奖学金名额分配模块 - 菜单权限配置
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 配置名额分配功能的菜单和权限
|
||||
-- ========================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 设置变量
|
||||
SET @parent_menu_id = 2015; -- 奖惩补贴管理父菜单ID
|
||||
SET @menu_order = 4; -- 菜单排序
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 删除已存在的菜单(开发环境重新创建)
|
||||
-- =====================================================
|
||||
DELETE FROM sys_menu WHERE menu_name = '名额分配管理' AND parent_id = @parent_menu_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 创建名额分配管理菜单
|
||||
-- =====================================================
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配管理', @parent_menu_id, @menu_order, 'scholarshipQuota', 'jcbt/scholarshipQuota/index', '', 1, 0, 'C', '0', '0', 'jcbt:scholarshipQuota:list', 'tree-table', 1, NOW(), 1, NOW(), '奖学金名额分配管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @quota_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 创建名额分配功能按钮权限
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 查询权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配查询', @quota_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:query', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.2 新增权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配新增', @quota_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:add', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.3 修改权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配修改', @quota_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:edit', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.4 删除权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配删除', @quota_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:remove', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.5 导出权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配导出', @quota_menu_id, 5, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:export', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.6 批量分配权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('批量分配名额', @quota_menu_id, 6, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:batchAllocate', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.7 名额调整权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额调整', @quota_menu_id, 7, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:adjust', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.8 名额锁定权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额锁定', @quota_menu_id, 8, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:lock', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.9 自动分配权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('自动分配名额', @quota_menu_id, 9, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:autoAllocate', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- 3.10 复制分配权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('复制名额分配', @quota_menu_id, 10, '', '', '', 1, 0, 'F', '0', '0', 'jcbt:scholarshipQuota:copy', '#', 1, NOW(), 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 为管理员角色分配权限
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 获取管理员角色ID
|
||||
SET @admin_role_id = (SELECT role_id FROM sys_role WHERE role_key = 'admin' LIMIT 1);
|
||||
|
||||
-- 4.2 为管理员角色分配名额分配菜单权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @admin_role_id, menu_id
|
||||
FROM sys_menu
|
||||
WHERE (menu_id = @quota_menu_id OR parent_id = @quota_menu_id)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu rm
|
||||
WHERE rm.role_id = @admin_role_id AND rm.menu_id = sys_menu.menu_id
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 创建字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 分配级别字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配级别', 'jcbt_quota_allocation_level', '0', 1, NOW(), 1, NOW(), '奖学金名额分配级别字典类型')
|
||||
ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES
|
||||
(1, '全校', 'UNIVERSITY', 'jcbt_quota_allocation_level', '', 'primary', 'Y', '0', 1, NOW(), 1, NOW(), '全校级别分配'),
|
||||
(2, '学院', 'COLLEGE', 'jcbt_quota_allocation_level', '', 'success', 'N', '0', 1, NOW(), 1, NOW(), '学院级别分配'),
|
||||
(3, '专业', 'MAJOR', 'jcbt_quota_allocation_level', '', 'info', 'N', '0', 1, NOW(), 1, NOW(), '专业级别分配'),
|
||||
(4, '班级', 'CLASS', 'jcbt_quota_allocation_level', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '班级级别分配')
|
||||
ON DUPLICATE KEY UPDATE dict_label = VALUES(dict_label);
|
||||
|
||||
-- 5.2 分配方式字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配方式', 'jcbt_quota_allocation_method', '0', 1, NOW(), 1, NOW(), '奖学金名额分配方式字典类型')
|
||||
ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES
|
||||
(1, '手动分配', 'MANUAL', 'jcbt_quota_allocation_method', '', 'primary', 'Y', '0', 1, NOW(), 1, NOW(), '手动分配名额'),
|
||||
(2, '自动分配', 'AUTO', 'jcbt_quota_allocation_method', '', 'success', 'N', '0', 1, NOW(), 1, NOW(), '自动分配名额'),
|
||||
(3, '按比例分配', 'PROPORTIONAL', 'jcbt_quota_allocation_method', '', 'info', 'N', '0', 1, NOW(), 1, NOW(), '按比例分配名额')
|
||||
ON DUPLICATE KEY UPDATE dict_label = VALUES(dict_label);
|
||||
|
||||
-- 5.3 分配状态字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES ('名额分配状态', 'jcbt_quota_status', '0', 1, NOW(), 1, NOW(), '奖学金名额分配状态字典类型')
|
||||
ON DUPLICATE KEY UPDATE dict_name = VALUES(dict_name);
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES
|
||||
(1, '生效', 'ACTIVE', 'jcbt_quota_status', '', 'success', 'Y', '0', 1, NOW(), 1, NOW(), '名额分配生效'),
|
||||
(2, '失效', 'INACTIVE', 'jcbt_quota_status', '', 'danger', 'N', '0', 1, NOW(), 1, NOW(), '名额分配失效'),
|
||||
(3, '待审核', 'PENDING', 'jcbt_quota_status', '', 'warning', 'N', '0', 1, NOW(), 1, NOW(), '名额分配待审核')
|
||||
ON DUPLICATE KEY UPDATE dict_label = VALUES(dict_label);
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 验证创建结果
|
||||
-- =====================================================
|
||||
SELECT '名额分配管理菜单创建完成!' as message;
|
||||
SELECT menu_id, menu_name, parent_id, perms FROM sys_menu WHERE menu_name LIKE '%名额分配%' ORDER BY parent_id, order_num;
|
||||
SELECT dict_type, COUNT(*) as count FROM sys_dict_data WHERE dict_type LIKE 'jcbt_quota_%' GROUP BY dict_type;
|
||||
@@ -1,224 +0,0 @@
|
||||
-- ====================================================================
|
||||
-- 奖学金管理模块 - 测试数据脚本
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 包含奖学金类型、班级、申请记录的测试数据
|
||||
-- ====================================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 清理现有测试数据
|
||||
-- =====================================================
|
||||
DELETE FROM jcbt_scholarship_application WHERE student_name LIKE '测试学生%';
|
||||
DELETE FROM jcbt_scholarship_type WHERE type_name LIKE '测试%';
|
||||
DELETE FROM xg_class_msg WHERE class_name LIKE '测试%';
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入奖学金类型测试数据
|
||||
-- =====================================================
|
||||
INSERT INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria,
|
||||
compatibility_type, sort_order, status, is_system, tenant_id, deleted,
|
||||
create_by, create_time, update_by, update_time
|
||||
) VALUES
|
||||
(
|
||||
1863768901234567001,
|
||||
'ACADEMIC_EXCELLENCE',
|
||||
'优秀学生奖学金',
|
||||
'ACADEMIC',
|
||||
'FIRST_CLASS',
|
||||
3000.00,
|
||||
'奖励品学兼优的学生',
|
||||
'申请时需要提交成绩单和获奖证书',
|
||||
'学期平均分85分以上,无挂科记录',
|
||||
'按成绩排名评定',
|
||||
'COMPATIBLE',
|
||||
1, 1, 0, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234567002,
|
||||
'POVERTY_ASSISTANCE',
|
||||
'贫困助学金',
|
||||
'ASSISTANCE',
|
||||
'GENERAL',
|
||||
2000.00,
|
||||
'资助家庭经济困难学生',
|
||||
'申请时需要提交家庭经济证明',
|
||||
'家庭经济困难,成绩及格以上',
|
||||
'按经济困难程度评定',
|
||||
'COMPATIBLE',
|
||||
2, 1, 0, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234567003,
|
||||
'INNOVATION_PRIZE',
|
||||
'创新创业奖学金',
|
||||
'INNOVATION',
|
||||
'SPECIAL',
|
||||
5000.00,
|
||||
'奖励在创新创业方面表现突出的学生',
|
||||
'申请时需要提交创新项目材料',
|
||||
'有创新成果或创业经历',
|
||||
'按创新项目质量评定',
|
||||
'EXCLUSIVE',
|
||||
3, 1, 0, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入班级测试数据
|
||||
-- =====================================================
|
||||
INSERT INTO xg_class_msg (
|
||||
id, college_id, college_name, major_id, major_name,
|
||||
class_code, class_name, class_type, grade, enrollment_year, graduation_year,
|
||||
class_teacher_id, class_teacher_name, class_status,
|
||||
planned_capacity, current_student_count, tenant_id, deleted,
|
||||
create_by, create_time, update_by, update_time
|
||||
) VALUES
|
||||
(
|
||||
1863768901234568001,
|
||||
100, '计算机学院', 101, '软件工程',
|
||||
'CS2021001', '测试班级2021级软件工程1班', '1', '2021', 2021, 2025,
|
||||
1001, '张老师', '1',
|
||||
30, 28, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234568002,
|
||||
100, '计算机学院', 101, '软件工程',
|
||||
'CS2021002', '测试班级2021级软件工程2班', '1', '2021', 2021, 2025,
|
||||
1002, '李老师', '1',
|
||||
30, 26, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234568003,
|
||||
200, '机械学院', 201, '机械设计制造及其自动化',
|
||||
'ME2021001', '测试班级2021级机械1班', '1', '2021', 2021, 2025,
|
||||
2001, '王老师', '1',
|
||||
25, 24, '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 插入申请记录测试数据
|
||||
-- =====================================================
|
||||
INSERT INTO jcbt_scholarship_application (
|
||||
id, application_no, batch_id, scholarship_type_id,
|
||||
student_no, student_name, student_id, dept_id, major_id, class_id,
|
||||
application_type, current_status, apply_reason, self_evaluation,
|
||||
calculated_score, final_score, ranking_in_dept, ranking_in_major,
|
||||
submit_time, tenant_id, deleted,
|
||||
create_by, create_time, update_by, update_time
|
||||
) VALUES
|
||||
(
|
||||
1863768901234569001,
|
||||
'APPLY20250127001',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567001, -- 优秀学生奖学金
|
||||
'2021001001', '测试学生张三', 1863768901234570001,
|
||||
100, 101, 1863768901234568001, -- 计算机学院,软件工程,测试班级1
|
||||
'STUDENT', 'SUBMITTED', '学习成绩优异,积极参与社会实践',
|
||||
'我在本学期各科成绩均在90分以上,积极参与班级和学院活动,希望能够获得奖学金鼓励。',
|
||||
92.5, 93.0, 2, 1,
|
||||
NOW(), '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569002,
|
||||
'APPLY20250127002',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567002, -- 贫困助学金
|
||||
'2021001002', '测试学生李四', 1863768901234570002,
|
||||
100, 101, 1863768901234568001, -- 计算机学院,软件工程,测试班级1
|
||||
'STUDENT', 'SUBMITTED', '家庭经济困难,需要资助',
|
||||
'家庭经济困难,父母务农收入微薄,希望通过助学金减轻经济负担,专心学习。',
|
||||
78.5, 80.0, 15, 8,
|
||||
NOW(), '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569003,
|
||||
'APPLY20250127003',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567003, -- 创新创业奖学金
|
||||
'2021002001', '测试学生王五', 1863768901234570003,
|
||||
100, 101, 1863768901234568002, -- 计算机学院,软件工程,测试班级2
|
||||
'RECOMMEND', 'REVIEWING', '在创新创业方面表现突出',
|
||||
'参与开发了校园APP项目,获得大学生创新创业大赛二等奖,具有很强的创新能力。',
|
||||
88.0, 89.5, 5, 3,
|
||||
NOW(), '000000', 0,
|
||||
1, NOW(), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569004,
|
||||
'APPLY20250127004',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567001, -- 优秀学生奖学金
|
||||
'2021003001', '测试学生赵六', 1863768901234570004,
|
||||
200, 201, 1863768901234568003, -- 机械学院,机械设计,测试班级3
|
||||
'STUDENT', 'APPROVED', '学习成绩优秀,综合素质高',
|
||||
'各科成绩均名列前茅,担任班长职务,热心为同学服务,积极参与各项活动。',
|
||||
95.0, 95.5, 1, 1,
|
||||
DATE_SUB(NOW(), INTERVAL 2 DAY), '000000', 0,
|
||||
1, DATE_SUB(NOW(), INTERVAL 2 DAY), 1, NOW()
|
||||
),
|
||||
(
|
||||
1863768901234569005,
|
||||
'APPLY20250127005',
|
||||
1863768901234560001, -- 假设批次ID
|
||||
1863768901234567002, -- 贫困助学金
|
||||
'2021003002', '测试学生孙七', 1863768901234570005,
|
||||
200, 201, 1863768901234568003, -- 机械学院,机械设计,测试班级3
|
||||
'STUDENT', 'REJECTED', '经济困难但成绩有待提高',
|
||||
'虽然家庭经济困难,但我会努力学习,提高成绩,争取下次申请成功。',
|
||||
65.0, 68.0, 20, 12,
|
||||
DATE_SUB(NOW(), INTERVAL 3 DAY), '000000', 0,
|
||||
1, DATE_SUB(NOW(), INTERVAL 3 DAY), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 插入奖学金批次测试数据(如果需要)
|
||||
-- =====================================================
|
||||
INSERT IGNORE INTO jcbt_scholarship_batch (
|
||||
id, batch_name, batch_code, academic_year, semester,
|
||||
start_date, end_date, status, description,
|
||||
tenant_id, deleted, create_by, create_time, update_by, update_time
|
||||
) VALUES (
|
||||
1863768901234560001,
|
||||
'2024-2025学年第一学期奖学金申请',
|
||||
'BATCH202401',
|
||||
'2024-2025', '1',
|
||||
'2024-09-01', '2024-09-30', 'ACTIVE', '2024-2025学年第一学期奖学金申请批次',
|
||||
'000000', 0, 1, NOW(), 1, NOW()
|
||||
);
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 验证数据插入
|
||||
-- =====================================================
|
||||
SELECT '=== 奖学金类型数据 ===' AS info;
|
||||
SELECT id, type_code, type_name, award_amount FROM jcbt_scholarship_type WHERE type_name LIKE '测试%' OR type_name LIKE '%奖学金' OR type_name LIKE '%助学金' LIMIT 5;
|
||||
|
||||
SELECT '=== 班级数据 ===' AS info;
|
||||
SELECT id, class_code, class_name, college_name, major_name FROM xg_class_msg WHERE class_name LIKE '测试%' LIMIT 5;
|
||||
|
||||
SELECT '=== 申请记录数据 ===' AS info;
|
||||
SELECT id, application_no, student_name, current_status FROM jcbt_scholarship_application WHERE student_name LIKE '测试学生%' LIMIT 5;
|
||||
|
||||
SELECT '=== 关联查询测试 ===' AS info;
|
||||
SELECT
|
||||
a.application_no,
|
||||
a.student_name,
|
||||
st.type_name as scholarship_type_name,
|
||||
c.class_name,
|
||||
a.current_status
|
||||
FROM jcbt_scholarship_application a
|
||||
LEFT JOIN jcbt_scholarship_type st ON a.scholarship_type_id = st.id
|
||||
LEFT JOIN xg_class_msg c ON a.class_id = c.id
|
||||
WHERE a.student_name LIKE '测试学生%'
|
||||
LIMIT 10;
|
||||
|
||||
COMMIT;
|
||||
@@ -1,43 +0,0 @@
|
||||
-- 测试 assistance_types 字段修复结果
|
||||
USE hzdyjs_xg;
|
||||
|
||||
SELECT '=== 检查 assistance_types 字段属性 ===' as message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
IS_NULLABLE as '允许NULL',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME = 'assistance_types';
|
||||
|
||||
SELECT '=== 测试插入记录(assistance_types为NULL)===' as message;
|
||||
|
||||
-- 插入测试记录,assistance_types 字段为 NULL
|
||||
INSERT INTO jcbt_poverty_application (
|
||||
id, application_no, academic_year, term, student_id, student_no, student_name,
|
||||
gender, college_id, college_name, major_id, major_name, class_id, class_name,
|
||||
recognition_group, recognition_type_id, recognition_type_name,
|
||||
status, create_by, create_time, tenant_id
|
||||
) VALUES (
|
||||
999999998, 'TEST002', '2024-2025', 1, 1002, '202401002', '测试学生2',
|
||||
'1', 102, '测试学院', 10102, '测试专业', 1010102, '测试班级2',
|
||||
'特殊群体', 1, '特困生',
|
||||
'DRAFT', 103, NOW(), '000000'
|
||||
);
|
||||
|
||||
SELECT '=== 查询测试记录 ===' as message;
|
||||
|
||||
SELECT id, student_name, assistance_types, status
|
||||
FROM jcbt_poverty_application
|
||||
WHERE id = 999999998;
|
||||
|
||||
SELECT '=== 清理测试数据 ===' as message;
|
||||
|
||||
-- 清理测试数据
|
||||
DELETE FROM jcbt_poverty_application WHERE id = 999999998;
|
||||
|
||||
SELECT '✅ 测试完成!如果没有错误,说明 assistance_types 字段修复成功!' as result;
|
||||
@@ -1,35 +0,0 @@
|
||||
-- 测试审核字段修复结果
|
||||
USE hzdyjs_xg;
|
||||
|
||||
SELECT '=== 检查修复后的审核字段 ===' as message;
|
||||
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
IS_NULLABLE as '允许NULL',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN ('audit_time', 'audit_opinion', 'auditor_id', 'auditor_name')
|
||||
ORDER BY COLUMN_NAME;
|
||||
|
||||
SELECT '=== 测试审核字段查询(模拟MyBatis-Plus查询)===' as message;
|
||||
|
||||
-- 模拟MyBatis-Plus的查询,包含所有字段
|
||||
SELECT
|
||||
id, application_no, academic_year, term, student_id, student_no, student_name,
|
||||
gender, college_id, college_name, major_id, major_name, class_id, class_name,
|
||||
teacher_id, teacher_name, recognition_group, recognition_type_id, recognition_type_code,
|
||||
recognition_type_name, assistance_type_ids, assistance_type_names, family_economy_summary,
|
||||
attach_application_form_url, attach_application_form_id, attach_survey_form_url,
|
||||
attach_survey_form_id, status, submitter_id, submitter_name, submit_time,
|
||||
auditor_id, auditor_name, audit_time, audit_opinion, remark,
|
||||
deleted, create_dept, create_by, create_time, update_by, update_time
|
||||
FROM jcbt_poverty_application
|
||||
WHERE deleted = 0 AND tenant_id = '000000'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 1;
|
||||
|
||||
SELECT '✅ 测试完成!如果没有 Unknown column 错误,说明字段修复成功!' as result;
|
||||
@@ -1,52 +0,0 @@
|
||||
-- ================================================================
|
||||
-- 测试 teacher_name 字段修复结果
|
||||
-- 文件: test_fix_result.sql
|
||||
-- 功能: 验证修复是否成功
|
||||
-- ================================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 1. 检查表结构
|
||||
SELECT '=== 检查表结构 ===' AS message;
|
||||
SHOW CREATE TABLE jcbt_poverty_application;
|
||||
|
||||
-- 2. 检查关键字段属性
|
||||
SELECT '=== 检查关键字段属性 ===' AS message;
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
DATA_TYPE AS '数据类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'jcbt_poverty_application'
|
||||
AND COLUMN_NAME IN ('teacher_id', 'teacher_name')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 3. 测试插入记录(不包含teacher_name)
|
||||
SELECT '=== 测试插入记录 ===' AS message;
|
||||
|
||||
INSERT INTO jcbt_poverty_application (
|
||||
id, application_no, academic_year, term, student_id, student_no, student_name,
|
||||
gender, college_id, college_name, major_id, major_name, class_id, class_name,
|
||||
recognition_group, recognition_type_id, recognition_type_name, assistance_types,
|
||||
status, create_by, create_time, tenant_id
|
||||
) VALUES (
|
||||
999999999, 'TEST001', '2024-2025', 1, 1001, '202401001', '测试学生',
|
||||
'1', 101, '计算机学院', 10101, '计算机科学', 1010101, '测试班级',
|
||||
'特殊群体', 1, '特困生', '助学金',
|
||||
'DRAFT', 103, NOW(), '000000'
|
||||
);
|
||||
|
||||
-- 4. 查询测试记录
|
||||
SELECT '=== 查询测试记录 ===' AS message;
|
||||
SELECT
|
||||
id, student_name, teacher_id, teacher_name, status
|
||||
FROM jcbt_poverty_application
|
||||
WHERE id = 999999999;
|
||||
|
||||
-- 5. 清理测试数据
|
||||
DELETE FROM jcbt_poverty_application WHERE id = 999999999;
|
||||
|
||||
SELECT '✅ 测试完成!如果没有错误,说明修复成功!' AS result;
|
||||
@@ -1,105 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金类型表字段修复验证脚本
|
||||
-- 创建时间: 2025-08-04
|
||||
-- 说明: 验证申请条件、评定标准、备注字段是否正确添加和工作
|
||||
-- =====================================================
|
||||
|
||||
-- 1. 验证字段是否存在
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
CHARACTER_MAXIMUM_LENGTH as '最大长度',
|
||||
IS_NULLABLE as '是否可空',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '字段注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jcbt_scholarship_type'
|
||||
AND COLUMN_NAME IN ('application_conditions', 'evaluation_criteria', 'remark')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 2. 查看表结构(包含新增字段的完整表结构)
|
||||
DESCRIBE jcbt_scholarship_type;
|
||||
|
||||
-- 3. 测试插入数据(包含新增字段)
|
||||
INSERT INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria, remark,
|
||||
sort_order, status, is_system, compatibility_type,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES (
|
||||
1001, 'TEST_001', '测试奖学金', 'ACADEMIC', 'FIRST_CLASS', 5000.00,
|
||||
'这是一个测试奖学金描述',
|
||||
'请按照以下步骤申请:\n1. 填写申请表\n2. 提交相关材料',
|
||||
'申请条件:\n1. 学习成绩优秀,GPA≥3.5\n2. 无违纪记录\n3. 积极参与社会实践',
|
||||
'评定标准:\n1. 学习成绩占60%\n2. 综合素质占30%\n3. 社会实践占10%',
|
||||
'备注:本奖学金每学期评选一次,优秀学生可连续获得',
|
||||
1, 1, 0, 'COMPATIBLE',
|
||||
1, NOW(), 1, NOW(), '000000', 0
|
||||
);
|
||||
|
||||
-- 4. 验证数据插入是否成功
|
||||
SELECT
|
||||
id, type_code, type_name,
|
||||
LEFT(application_conditions, 50) as '申请条件_前50字符',
|
||||
LEFT(evaluation_criteria, 50) as '评定标准_前50字符',
|
||||
LEFT(remark, 50) as '备注_前50字符'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 5. 测试更新操作
|
||||
UPDATE jcbt_scholarship_type
|
||||
SET
|
||||
application_conditions = '更新后的申请条件:\n1. GPA≥3.8\n2. 英语四级以上\n3. 无挂科记录',
|
||||
evaluation_criteria = '更新后的评定标准:\n1. 学习成绩70%\n2. 英语水平20%\n3. 综合表现10%',
|
||||
remark = '更新后的备注:此奖学金面向大二及以上学生',
|
||||
update_time = NOW()
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 6. 验证更新是否成功
|
||||
SELECT
|
||||
id, type_code, type_name,
|
||||
application_conditions as '申请条件',
|
||||
evaluation_criteria as '评定标准',
|
||||
remark as '备注',
|
||||
update_time as '更新时间'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 7. 查询所有奖学金类型的这三个字段(查看现有数据)
|
||||
SELECT
|
||||
id, type_code, type_name,
|
||||
CASE
|
||||
WHEN application_conditions IS NULL THEN '空值'
|
||||
WHEN application_conditions = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值-', LEFT(application_conditions, 20), '...')
|
||||
END as '申请条件状态',
|
||||
CASE
|
||||
WHEN evaluation_criteria IS NULL THEN '空值'
|
||||
WHEN evaluation_criteria = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值-', LEFT(evaluation_criteria, 20), '...')
|
||||
END as '评定标准状态',
|
||||
CASE
|
||||
WHEN remark IS NULL THEN '空值'
|
||||
WHEN remark = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值-', LEFT(remark, 20), '...')
|
||||
END as '备注状态'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE deleted = 0
|
||||
ORDER BY sort_order, create_time DESC;
|
||||
|
||||
-- 8. 清理测试数据
|
||||
DELETE FROM jcbt_scholarship_type WHERE type_code = 'TEST_001';
|
||||
|
||||
-- 9. 验证清理结果
|
||||
SELECT COUNT(*) as '清理后剩余测试数据数量'
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE type_code = 'TEST_001';
|
||||
|
||||
-- =====================================================
|
||||
-- 测试完成提示
|
||||
-- =====================================================
|
||||
SELECT
|
||||
'字段修复验证完成' as '状态',
|
||||
'如果以上查询都正常执行,说明字段修复成功' as '说明',
|
||||
'现在可以重启后端服务测试详情页面显示' as '下一步';
|
||||
@@ -1,131 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金名额分配 - 基础数据检查和测试数据插入
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 说明: 检查和创建测试用的基础数据
|
||||
-- =====================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 检查现有数据
|
||||
-- =====================================================
|
||||
|
||||
-- 检查奖学金批次数据
|
||||
SELECT 'jcbt_scholarship_batch' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_batch WHERE deleted = 0;
|
||||
|
||||
-- 检查奖学金类型数据
|
||||
SELECT 'jcbt_scholarship_type' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_type WHERE deleted = 0;
|
||||
|
||||
-- 检查名额分配数据
|
||||
SELECT 'jcbt_scholarship_quota' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_quota WHERE deleted = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入测试批次数据(如果不存在)
|
||||
-- =====================================================
|
||||
|
||||
INSERT IGNORE INTO jcbt_scholarship_batch (
|
||||
id, batch_code, batch_name, academic_year, semester, batch_type,
|
||||
start_time, end_time, apply_start_time, apply_end_time,
|
||||
review_start_time, review_end_time, status, description,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000001, 'BATCH_2024_1', '2024学年第一学期奖学金评定', '2024-2025', 1, 'REGULAR',
|
||||
'2024-09-01 00:00:00', '2024-12-31 23:59:59', '2024-10-01 00:00:00', '2024-10-31 23:59:59',
|
||||
'2024-11-01 00:00:00', '2024-11-30 23:59:59', 'ACTIVE', '2024学年第一学期常规奖学金评定批次',
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000002, 'BATCH_2024_2', '2024学年第二学期奖学金评定', '2024-2025', 2, 'REGULAR',
|
||||
'2025-02-01 00:00:00', '2025-06-30 23:59:59', '2025-03-01 00:00:00', '2025-03-31 23:59:59',
|
||||
'2025-04-01 00:00:00', '2025-04-30 23:59:59', 'DRAFT', '2024学年第二学期常规奖学金评定批次',
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入测试奖学金类型数据(如果不存在)
|
||||
-- =====================================================
|
||||
|
||||
INSERT IGNORE INTO jcbt_scholarship_type (
|
||||
id, type_code, type_name, type_category, level_type, award_amount,
|
||||
description, application_guide, application_conditions, evaluation_criteria,
|
||||
compatibility_type, sort_order, status, is_system,
|
||||
create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
(1890000000000000101, 'GJZXJ', '国家奖学金', 'NATIONAL', 'FIRST_CLASS', 8000.00,
|
||||
'国家奖学金是为了激励普通本科高校、高等职业学校和高等专科学校学生勤奋学习、努力进取,在德、智、体、美等方面全面发展,由中央政府出资设立的奖励特别优秀学生的奖学金。',
|
||||
'学生本人提出申请,按学校规定程序推荐上报。', '品学兼优,学习成绩排名在评选范围内位于前10%',
|
||||
'学习成绩、综合测评、道德品质等综合评定', 'EXCLUSIVE', 1, 1, 1,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000102, 'GJLZJ', '国家励志奖学金', 'NATIONAL', 'SECOND_CLASS', 5000.00,
|
||||
'国家励志奖学金是为了激励普通本科高校、高等职业学校和高等专科学校的家庭经济困难学生勤奋学习、努力进取,在德、智、体、美等方面全面发展,由中央和地方政府共同出资设立的,奖励资助品学兼优的家庭经济困难学生的奖学金。',
|
||||
'学生本人提出申请,按学校规定程序推荐上报。', '家庭经济困难且品学兼优,学习成绩排名在评选范围内位于前25%',
|
||||
'学习成绩、综合测评、家庭经济状况等综合评定', 'EXCLUSIVE', 2, 1, 1,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000103, 'XXZXJ1', '校级奖学金一等奖', 'SCHOOL', 'FIRST_CLASS', 3000.00,
|
||||
'学校设立的奖学金,奖励学习成绩优秀、综合素质突出的学生。',
|
||||
'学生本人提出申请,班级推荐,学院审核。', '学习成绩排名在专业前5%,综合测评排名在专业前10%',
|
||||
'学习成绩、综合测评、特长发展等', 'COMPATIBLE', 3, 1, 0,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000104, 'XXZXJ2', '校级奖学金二等奖', 'SCHOOL', 'SECOND_CLASS', 2000.00,
|
||||
'学校设立的奖学金,奖励学习成绩良好、综合素质较好的学生。',
|
||||
'学生本人提出申请,班级推荐,学院审核。', '学习成绩排名在专业前15%,综合测评排名在专业前20%',
|
||||
'学习成绩、综合测评、特长发展等', 'COMPATIBLE', 4, 1, 0,
|
||||
1, NOW(), 1, NOW(), 1, 0),
|
||||
(1890000000000000105, 'SZZXJ', '社会专项奖学金', 'ENTERPRISE', 'SPECIAL', 1500.00,
|
||||
'由社会企业、校友或其他组织设立的专项奖学金。',
|
||||
'学生本人提出申请,按专项奖学金具体要求推荐。', '符合专项奖学金设立的特定条件和要求',
|
||||
'按照专项奖学金的评定标准执行', 'CUSTOM', 5, 1, 0,
|
||||
1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 插入测试名额分配数据(如果不存在)
|
||||
-- =====================================================
|
||||
|
||||
INSERT IGNORE INTO jcbt_scholarship_quota (
|
||||
id, batch_id, scholarship_type_id, allocation_level, target_dept_id, parent_quota_id,
|
||||
total_quota, used_quota, reserved_quota, available_quota,
|
||||
allocation_rule, allocation_basis, allocation_method, is_adjustable, is_locked, status,
|
||||
remark, create_by, create_time, update_by, update_time, tenant_id, deleted
|
||||
) VALUES
|
||||
-- 国家奖学金 - 全校级分配
|
||||
(1890000000000000201, 1890000000000000001, 1890000000000000101, 'UNIVERSITY', NULL, NULL,
|
||||
50, 0, 5, 45, '{"type":"university","rule":"total_allocation"}', '根据学校总体规模和历年获奖情况分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校国家奖学金总名额', 1, NOW(), 1, NOW(), 1, 0),
|
||||
|
||||
-- 国家励志奖学金 - 全校级分配
|
||||
(1890000000000000202, 1890000000000000001, 1890000000000000102, 'UNIVERSITY', NULL, NULL,
|
||||
200, 0, 20, 180, '{"type":"university","rule":"total_allocation"}', '根据学校困难学生比例和名额分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校国家励志奖学金总名额', 1, NOW(), 1, NOW(), 1, 0),
|
||||
|
||||
-- 校级奖学金一等奖 - 全校级分配
|
||||
(1890000000000000203, 1890000000000000001, 1890000000000000103, 'UNIVERSITY', NULL, NULL,
|
||||
100, 0, 10, 90, '{"type":"university","rule":"total_allocation"}', '根据学校各学院学生人数比例分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校校级一等奖学金总名额', 1, NOW(), 1, NOW(), 1, 0),
|
||||
|
||||
-- 校级奖学金二等奖 - 全校级分配
|
||||
(1890000000000000204, 1890000000000000001, 1890000000000000104, 'UNIVERSITY', NULL, NULL,
|
||||
300, 0, 30, 270, '{"type":"university","rule":"total_allocation"}', '根据学校各学院学生人数比例分配',
|
||||
'MANUAL', 1, 0, 'ACTIVE', '全校校级二等奖学金总名额', 1, NOW(), 1, NOW(), 1, 0);
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 验证插入结果
|
||||
-- =====================================================
|
||||
|
||||
-- 再次检查数据插入结果
|
||||
SELECT '插入后-jcbt_scholarship_batch' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_batch WHERE deleted = 0;
|
||||
SELECT '插入后-jcbt_scholarship_type' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_type WHERE deleted = 0;
|
||||
SELECT '插入后-jcbt_scholarship_quota' as table_name, COUNT(*) as record_count FROM jcbt_scholarship_quota WHERE deleted = 0;
|
||||
|
||||
-- 查看详细数据
|
||||
SELECT
|
||||
q.id,
|
||||
b.batch_name,
|
||||
st.type_name as scholarship_type_name,
|
||||
q.allocation_level,
|
||||
q.total_quota,
|
||||
q.available_quota,
|
||||
q.status
|
||||
FROM jcbt_scholarship_quota q
|
||||
LEFT JOIN jcbt_scholarship_batch b ON q.batch_id = b.id
|
||||
LEFT JOIN jcbt_scholarship_type st ON q.scholarship_type_id = st.id
|
||||
WHERE q.deleted = 0
|
||||
ORDER BY q.id;
|
||||
|
||||
-- =====================================================
|
||||
@@ -1,95 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 勤工俭学测试数据脚本 - 修正版
|
||||
-- 匹配当前数据库表结构
|
||||
-- 创建时间: 2025-01-03
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 插入测试岗位数据
|
||||
-- =====================================================
|
||||
|
||||
-- 1.1 图书馆助理管理员岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000001, '图书馆助理管理员', 'UNIVERSITY', 5, '周一至周五 14:00-17:00,每天3小时', '2025-01-03', '2025-06-30',
|
||||
'1. 大二及以上年级\n2. 学习成绩良好\n3. 责任心强,工作认真\n4. 熟悉图书分类和管理',
|
||||
'15元/小时', '张老师', '13800138001',
|
||||
1001, '文学院', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 1.2 实验室设备维护岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000002, '实验室设备维护', 'COLLEGE', 2, '周三、周五 16:00-18:00,每次2小时', '2025-01-03', '2025-05-31',
|
||||
'1. 理工科专业学生\n2. 有基础的设备维护经验\n3. 动手能力强\n4. 能吃苦耐劳',
|
||||
'18元/小时', '李老师', '13800138002',
|
||||
1002, '理学院', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 1.3 学生宿舍管理助理岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000003, '学生宿舍管理助理', 'UNIVERSITY', 3, '周一至周日轮班,每次4小时', '2025-01-03', '2025-07-31',
|
||||
'1. 品行端正,无违纪记录\n2. 沟通能力强\n3. 能适应轮班工作\n4. 有服务意识',
|
||||
'12元/小时,夜班补贴3元/小时', '王老师', '13800138003',
|
||||
1003, '学生处', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入测试申请数据
|
||||
-- =====================================================
|
||||
|
||||
-- 2.1 张三的申请
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `position_type`, `work_location`, `planned_work_hours`,
|
||||
`student_id`, `student_name`, `student_number`, `college_id`, `college_name`, `major_id`, `major_name`,
|
||||
`grade`, `class_name`, `contact_phone`, `family_financial_status`, `application_reason`,
|
||||
`personal_ability`, `time_arrangement`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736100000000000001, 1736000000000000001, '图书馆助理管理员', 'TEACHING_ASSISTANT', '图书馆', 15,
|
||||
2000001, '张三', '2023001001', 1001, '文学院', 2001, '汉语言文学', '2', '汉语言文学2023-1班',
|
||||
'13900139001', 'DIFFICULT', '家庭经济困难,希望通过勤工俭学减轻家庭负担,同时锻炼自己的工作能力。',
|
||||
'有图书管理相关经验,熟悉图书分类方法,责任心强,工作细致认真。',
|
||||
'周一至周五下午14:00-17:00有空,时间安排合理,不会影响学习。',
|
||||
'SUBMITTED', '2025-01-03 10:00:00', 1, 1, '000000');
|
||||
|
||||
-- 2.2 李四的申请
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `position_type`, `work_location`, `planned_work_hours`,
|
||||
`student_id`, `student_name`, `student_number`, `college_id`, `college_name`, `major_id`, `major_name`,
|
||||
`grade`, `class_name`, `contact_phone`, `family_financial_status`, `application_reason`,
|
||||
`personal_ability`, `time_arrangement`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736100000000000002, 1736000000000000002, '实验室设备维护', 'LOGISTICS', '物理实验室', 8,
|
||||
2000002, '李四', '2023002001', 1002, '理学院', 2002, '应用物理学', '3', '应用物理学2021-1班',
|
||||
'13900139002', 'AVERAGE', '希望通过实验室工作积累实践经验,为将来就业做准备。',
|
||||
'理工科背景,具备基本的物理实验操作能力,对设备维护有浓厚兴趣。',
|
||||
'周三、周五下午时间充足,能保证工作时间,不影响专业课学习。',
|
||||
'COLLEGE_PASSED', '2025-01-03 11:30:00', 1, 1, '000000');
|
||||
|
||||
-- 2.3 王五的申请
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `position_type`, `work_location`, `planned_work_hours`,
|
||||
`student_id`, `student_name`, `student_number`, `college_id`, `college_name`, `major_id`, `major_name`,
|
||||
`grade`, `class_name`, `contact_phone`, `family_financial_status`, `application_reason`,
|
||||
`personal_ability`, `time_arrangement`, `status`, `application_date`,
|
||||
`college_review_status`, `college_review_time`, `college_reviewer_name`, `college_review_comment`,
|
||||
`create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736100000000000003, 1736000000000000003, '学生宿舍管理助理', 'SERVICE', '学生宿舍区', 20,
|
||||
2000003, '王五', '2023003001', 1003, '管理学院', 2003, '工商管理', '2', '工商管理2023-2班',
|
||||
'13900139003', 'GOOD', '希望通过宿舍管理工作提升组织协调能力和服务意识。',
|
||||
'性格开朗,沟通能力强,有学生干部经验,能够胜任宿舍管理工作。',
|
||||
'时间灵活,能够适应轮班制度,周末和晚上都有时间。',
|
||||
'APPROVED', '2025-01-03 09:15:00',
|
||||
'APPROVED', '2025-01-03 15:30:00', '赵老师', '学生综合素质优秀,适合宿舍管理工作。',
|
||||
1, 1, '000000');
|
||||
@@ -1,246 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 微信JS-SDK配置初始化脚本
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-03
|
||||
-- 说明: 在sys_config表中添加微信相关配置项
|
||||
-- =====================================================
|
||||
|
||||
-- 删除已存在的微信配置(避免重复)
|
||||
-- DELETE FROM sys_config WHERE config_key IN ('wechat.app.id', 'wechat.app.secret');
|
||||
|
||||
-- 插入微信AppID配置
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信公众号AppID',
|
||||
'wechat.app.id',
|
||||
'wx1234567890abcdef',
|
||||
'Y',
|
||||
'微信公众号的AppID,用于JS-SDK初始化配置',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 插入微信AppSecret配置
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信公众号AppSecret',
|
||||
'wechat.app.secret',
|
||||
'your_app_secret_here',
|
||||
'Y',
|
||||
'微信公众号的AppSecret,用于获取access_token和jsapi_ticket',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 插入微信JS-SDK域名配置
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信JS-SDK安全域名',
|
||||
'wechat.js.domain',
|
||||
'example.com',
|
||||
'Y',
|
||||
'微信JS-SDK的安全域名配置,需要在微信公众平台配置',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 插入微信商户号配置(支付功能使用)
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信商户号',
|
||||
'wechat.mch.id',
|
||||
'1234567890',
|
||||
'Y',
|
||||
'微信支付商户号,用于微信支付功能',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 插入微信商户密钥配置(支付功能使用)
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信商户密钥',
|
||||
'wechat.mch.key',
|
||||
'your_mch_key_here',
|
||||
'Y',
|
||||
'微信支付商户密钥,用于支付签名',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 插入微信支付回调地址配置
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信支付回调地址',
|
||||
'wechat.pay.notify.url',
|
||||
'https://example.com/api/wechat/pay/notify',
|
||||
'Y',
|
||||
'微信支付结果通知回调地址',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 插入微信调试模式配置
|
||||
INSERT INTO sys_wechat_config (
|
||||
config_name,
|
||||
config_key,
|
||||
config_value,
|
||||
config_type,
|
||||
remark,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
tenant_id
|
||||
) VALUES (
|
||||
'微信JS-SDK调试模式',
|
||||
'wechat.debug.enabled',
|
||||
'false',
|
||||
'Y',
|
||||
'微信JS-SDK调试模式开关,true开启,false关闭',
|
||||
1,
|
||||
NOW(),
|
||||
1,
|
||||
NOW(),
|
||||
'000000'
|
||||
);
|
||||
|
||||
-- 验证插入结果
|
||||
SELECT config_name, config_key, config_value, remark
|
||||
FROM sys_wechat_config
|
||||
WHERE config_key LIKE 'wechat.%'
|
||||
ORDER BY config_key;
|
||||
|
||||
-- =====================================================
|
||||
-- 配置说明
|
||||
-- =====================================================
|
||||
--
|
||||
-- 1. wechat.app.id: 微信公众号AppID
|
||||
-- - 获取方式:微信公众平台 → 开发 → 基本配置
|
||||
-- - 示例:wx1234567890abcdef
|
||||
--
|
||||
-- 2. wechat.app.secret: 微信公众号AppSecret
|
||||
-- - 获取方式:微信公众平台 → 开发 → 基本配置
|
||||
-- - 注意:AppSecret需要保密,不能暴露在前端
|
||||
--
|
||||
-- 3. wechat.js.domain: JS-SDK安全域名
|
||||
-- - 配置方式:微信公众平台 → 设置 → 公众号设置 → 功能设置
|
||||
-- - 示例:example.com(不包含http://)
|
||||
--
|
||||
-- 4. wechat.mch.id: 微信商户号
|
||||
-- - 获取方式:微信支付商户平台
|
||||
-- - 用途:微信支付功能
|
||||
--
|
||||
-- 5. wechat.mch.key: 微信商户密钥
|
||||
-- - 获取方式:微信支付商户平台 → 账户中心 → API安全
|
||||
-- - 用途:微信支付签名
|
||||
--
|
||||
-- 6. wechat.pay.notify.url: 支付回调地址
|
||||
-- - 说明:微信支付结果通知地址
|
||||
-- - 要求:必须是HTTPS地址
|
||||
--
|
||||
-- 7. wechat.debug.enabled: 调试模式
|
||||
-- - 说明:开发环境建议开启,生产环境关闭
|
||||
-- - 值:true/false
|
||||
--
|
||||
-- =====================================================
|
||||
-- 部署说明
|
||||
-- =====================================================
|
||||
--
|
||||
-- 1. 生产环境部署前,请修改以下配置:
|
||||
-- - wechat.app.id: 替换为真实的微信AppID
|
||||
-- - wechat.app.secret: 替换为真实的微信AppSecret
|
||||
-- - wechat.js.domain: 替换为实际的域名
|
||||
-- - wechat.mch.id: 替换为真实的商户号(如需支付功能)
|
||||
-- - wechat.mch.key: 替换为真实的商户密钥(如需支付功能)
|
||||
-- - wechat.pay.notify.url: 替换为实际的回调地址
|
||||
--
|
||||
-- 2. 微信公众平台配置:
|
||||
-- - 配置JS接口安全域名
|
||||
-- - 开通所需的接口权限
|
||||
-- - 配置服务器白名单(如需要)
|
||||
--
|
||||
-- 3. 安全建议:
|
||||
-- - AppSecret和商户密钥需要定期更新
|
||||
-- - 生产环境关闭调试模式
|
||||
-- - 使用HTTPS协议
|
||||
--
|
||||
-- =====================================================
|
||||
@@ -1,92 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 勤工俭学管理系统字典数据脚本
|
||||
-- 项目: 校园管理系统 - 勤工俭学模块
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-03
|
||||
-- 说明: 适配现有系统字典表结构
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 插入字典类型数据
|
||||
-- =====================================================
|
||||
|
||||
-- 1.1 岗位状态字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`)
|
||||
VALUES (1736000001, '勤工俭学岗位状态', 'work_study_position_status', 1, NOW(), '勤工俭学岗位状态字典');
|
||||
|
||||
-- 1.2 申请状态字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`)
|
||||
VALUES (1736000002, '勤工俭学申请状态', 'work_study_application_status', 1, NOW(), '勤工俭学申请状态字典');
|
||||
|
||||
-- 1.3 审核状态字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`)
|
||||
VALUES (1736000003, '勤工俭学审核状态', 'work_study_review_status', 1, NOW(), '勤工俭学审核状态字典');
|
||||
|
||||
-- 1.4 岗位发布范围字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `remark`)
|
||||
VALUES (1736000004, '勤工俭学岗位发布范围', 'work_study_position_scope', 1, NOW(), '勤工俭学岗位发布范围字典');
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 检查字典数据表结构
|
||||
-- =====================================================
|
||||
|
||||
-- 先检查sys_dict_data表结构
|
||||
-- DESC sys_dict_data;
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 插入字典数据(需要根据实际表结构调整)
|
||||
-- =====================================================
|
||||
|
||||
-- 查看现有字典数据样例来确定正确的字段结构
|
||||
SELECT * FROM sys_dict_data LIMIT 1;
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 预留字典数据插入区域
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 岗位状态字典数据(待确认表结构后插入)
|
||||
/*
|
||||
草稿(DRAFT), 已发布(PUBLISHED), 招录中(RECRUITING),
|
||||
已满员(FULL), 已过期(EXPIRED), 已暂停(SUSPENDED), 已取消(CANCELLED)
|
||||
*/
|
||||
|
||||
-- 4.2 申请状态字典数据(待确认表结构后插入)
|
||||
/*
|
||||
草稿(DRAFT), 已提交(SUBMITTED), 学院审核中(COLLEGE_REVIEWING),
|
||||
学院审核通过(COLLEGE_PASSED), 学院审核不通过(COLLEGE_REJECTED),
|
||||
学生处审核中(FINAL_REVIEWING), 审核通过(APPROVED),
|
||||
审核不通过(REJECTED), 已撤回(WITHDRAWN)
|
||||
*/
|
||||
|
||||
-- 4.3 审核状态字典数据(待确认表结构后插入)
|
||||
/*
|
||||
待审核(PENDING), 审核通过(PASSED), 审核不通过(REJECTED)
|
||||
*/
|
||||
|
||||
-- 4.4 岗位发布范围字典数据(待确认表结构后插入)
|
||||
/*
|
||||
本学院(COLLEGE), 全校(UNIVERSITY)
|
||||
*/
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 查询验证字典类型数据
|
||||
-- =====================================================
|
||||
|
||||
SELECT
|
||||
dict_name as '字典名称',
|
||||
dict_type as '字典类型',
|
||||
create_time as '创建时间',
|
||||
remark as '备注'
|
||||
FROM sys_dict_type
|
||||
WHERE dict_type LIKE 'work_study%'
|
||||
ORDER BY dict_id;
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 脚本执行完成提示
|
||||
-- =====================================================
|
||||
SELECT 'JCBT勤工俭学模块字典类型数据插入完成!' AS '执行结果';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM sys_dict_type WHERE dict_type LIKE 'work_study%') AS '字典类型数量';
|
||||
@@ -1,211 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 勤工俭学管理系统完整字典数据脚本
|
||||
-- 项目: 校园管理系统 - 勤工俭学模块
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-03
|
||||
-- 说明: 基于实际字典表结构的完整字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 岗位状态字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 1.1 草稿
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001001, '000000', 1, '草稿', 'DRAFT', 'work_study_position_status', '', 'info', 'N', 103, 1, NOW(), '岗位创建但未发布');
|
||||
|
||||
-- 1.2 已发布
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001002, '000000', 2, '已发布', 'PUBLISHED', 'work_study_position_status', '', 'primary', 'N', 103, 1, NOW(), '岗位已发布但未开始招录');
|
||||
|
||||
-- 1.3 招录中
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001003, '000000', 3, '招录中', 'RECRUITING', 'work_study_position_status', '', 'success', 'Y', 103, 1, NOW(), '岗位正在招录学生');
|
||||
|
||||
-- 1.4 已满员
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001004, '000000', 4, '已满员', 'FULL', 'work_study_position_status', '', 'warning', 'N', 103, 1, NOW(), '岗位申请人数已满');
|
||||
|
||||
-- 1.5 已过期
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001005, '000000', 5, '已过期', 'EXPIRED', 'work_study_position_status', '', 'danger', 'N', 103, 1, NOW(), '岗位已过有效期');
|
||||
|
||||
-- 1.6 已暂停
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001006, '000000', 6, '已暂停', 'SUSPENDED', 'work_study_position_status', '', 'info', 'N', 103, 1, NOW(), '岗位暂时停止招录');
|
||||
|
||||
-- 1.7 已取消
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736001007, '000000', 7, '已取消', 'CANCELLED', 'work_study_position_status', '', 'danger', 'N', 103, 1, NOW(), '岗位被取消');
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 申请状态字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 2.1 草稿
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002001, '000000', 1, '草稿', 'DRAFT', 'work_study_application_status', '', 'info', 'N', 103, 1, NOW(), '申请暂存未提交');
|
||||
|
||||
-- 2.2 已提交
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002002, '000000', 2, '已提交', 'SUBMITTED', 'work_study_application_status', '', 'primary', 'Y', 103, 1, NOW(), '申请已提交,等待学院审核');
|
||||
|
||||
-- 2.3 学院审核中
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002003, '000000', 3, '学院审核中', 'COLLEGE_REVIEWING', 'work_study_application_status', '', 'primary', 'N', 103, 1, NOW(), '二级学院正在审核');
|
||||
|
||||
-- 2.4 学院审核通过
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002004, '000000', 4, '学院审核通过', 'COLLEGE_PASSED', 'work_study_application_status', '', 'success', 'N', 103, 1, NOW(), '学院审核通过,待学生处审核');
|
||||
|
||||
-- 2.5 学院审核不通过
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002005, '000000', 5, '学院审核不通过', 'COLLEGE_REJECTED', 'work_study_application_status', '', 'danger', 'N', 103, 1, NOW(), '学院审核未通过');
|
||||
|
||||
-- 2.6 学生处审核中
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002006, '000000', 6, '学生处审核中', 'FINAL_REVIEWING', 'work_study_application_status', '', 'warning', 'N', 103, 1, NOW(), '学生处正在终审');
|
||||
|
||||
-- 2.7 审核通过
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002007, '000000', 7, '审核通过', 'APPROVED', 'work_study_application_status', '', 'success', 'N', 103, 1, NOW(), '最终审核通过');
|
||||
|
||||
-- 2.8 审核不通过
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002008, '000000', 8, '审核不通过', 'REJECTED', 'work_study_application_status', '', 'danger', 'N', 103, 1, NOW(), '最终审核未通过');
|
||||
|
||||
-- 2.9 已撤回
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736002009, '000000', 9, '已撤回', 'WITHDRAWN', 'work_study_application_status', '', 'info', 'N', 103, 1, NOW(), '学生主动撤回申请');
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 审核状态字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 待审核
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736003001, '000000', 1, '待审核', 'PENDING', 'work_study_review_status', '', 'warning', 'Y', 103, 1, NOW(), '等待审核');
|
||||
|
||||
-- 3.2 审核通过
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736003002, '000000', 2, '审核通过', 'PASSED', 'work_study_review_status', '', 'success', 'N', 103, 1, NOW(), '审核通过');
|
||||
|
||||
-- 3.3 审核不通过
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736003003, '000000', 3, '审核不通过', 'REJECTED', 'work_study_review_status', '', 'danger', 'N', 103, 1, NOW(), '审核不通过');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 岗位发布范围字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 本学院
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736004001, '000000', 1, '本学院', 'COLLEGE', 'work_study_position_scope', '', 'primary', 'Y', 103, 1, NOW(), '仅本学院学生可见和申请');
|
||||
|
||||
-- 4.2 全校
|
||||
INSERT INTO `sys_dict_data`
|
||||
(`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
VALUES
|
||||
(1736004002, '000000', 2, '全校', 'UNIVERSITY', 'work_study_position_scope', '', 'success', 'N', 103, 1, NOW(), '所有学生可见和申请');
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 查询验证字典数据
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 查询岗位状态字典
|
||||
SELECT
|
||||
dict_label as '标签',
|
||||
dict_value as '值',
|
||||
dict_type as '字典类型',
|
||||
list_class as '样式',
|
||||
remark as '说明'
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'work_study_position_status'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
-- 5.2 查询申请状态字典
|
||||
SELECT
|
||||
dict_label as '标签',
|
||||
dict_value as '值',
|
||||
dict_type as '字典类型',
|
||||
list_class as '样式',
|
||||
remark as '说明'
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'work_study_application_status'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
-- 5.3 查询审核状态字典
|
||||
SELECT
|
||||
dict_label as '标签',
|
||||
dict_value as '值',
|
||||
dict_type as '字典类型',
|
||||
list_class as '样式',
|
||||
remark as '说明'
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'work_study_review_status'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
-- 5.4 查询发布范围字典
|
||||
SELECT
|
||||
dict_label as '标签',
|
||||
dict_value as '值',
|
||||
dict_type as '字典类型',
|
||||
list_class as '样式',
|
||||
remark as '说明'
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'work_study_position_scope'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 脚本执行完成提示
|
||||
-- =====================================================
|
||||
SELECT 'JCBT勤工俭学模块完整字典数据插入完成!' AS '执行结果';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM sys_dict_data WHERE dict_type LIKE 'work_study%') AS '字典数据总数',
|
||||
(SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'work_study_position_status') AS '岗位状态数量',
|
||||
(SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'work_study_application_status') AS '申请状态数量',
|
||||
(SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'work_study_review_status') AS '审核状态数量',
|
||||
(SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'work_study_position_scope') AS '发布范围数量';
|
||||
@@ -1,269 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 勤工俭学管理系统数据库建表脚本
|
||||
-- 项目: 校园管理系统 - 勤工俭学模块
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-03
|
||||
-- 数据库: MySQL 8.0
|
||||
-- 字符集: utf8mb4
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 勤工俭学岗位信息表
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `jcbt_work_study_position`;
|
||||
CREATE TABLE `jcbt_work_study_position` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID(雪花ID)',
|
||||
`position_name` varchar(100) NOT NULL COMMENT '岗位名称',
|
||||
`position_scope` varchar(20) NOT NULL COMMENT '发布范围(COLLEGE/UNIVERSITY)',
|
||||
`required_count` int NOT NULL DEFAULT 1 COMMENT '需求人数',
|
||||
`work_time` varchar(200) NOT NULL COMMENT '工作时间描述',
|
||||
`start_date` date NOT NULL COMMENT '岗位有效期开始',
|
||||
`end_date` date NOT NULL COMMENT '岗位有效期结束',
|
||||
`position_requirements` text NOT NULL COMMENT '岗位要求',
|
||||
`salary_info` varchar(200) NOT NULL COMMENT '薪资情况',
|
||||
`contact_teacher` varchar(50) NOT NULL COMMENT '联系老师',
|
||||
`contact_phone` varchar(20) NOT NULL COMMENT '联系电话',
|
||||
`college_id` bigint(20) NOT NULL COMMENT '发布学院ID',
|
||||
`college_name` varchar(100) NOT NULL COMMENT '发布学院名称',
|
||||
`status` varchar(20) NOT NULL DEFAULT 'DRAFT' COMMENT '岗位状态',
|
||||
`current_count` int NOT NULL DEFAULT 0 COMMENT '当前申请通过人数',
|
||||
`is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
|
||||
`create_by` bigint(20) NOT NULL COMMENT '创建者',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` bigint(20) NOT NULL COMMENT '更新者',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户ID',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_position_college_status` (`college_id`, `status`, `deleted`),
|
||||
INDEX `idx_position_scope_date` (`position_scope`, `start_date`, `end_date`),
|
||||
INDEX `idx_position_name` (`position_name`),
|
||||
INDEX `idx_position_create_time` (`create_time`),
|
||||
INDEX `idx_position_tenant` (`tenant_id`, `deleted`),
|
||||
CONSTRAINT `chk_position_date` CHECK (`start_date` <= `end_date`),
|
||||
CONSTRAINT `chk_position_count` CHECK (`required_count` > 0 AND `current_count` >= 0 AND `current_count` <= `required_count`),
|
||||
CONSTRAINT `chk_position_scope` CHECK (`position_scope` IN ('COLLEGE', 'UNIVERSITY'))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='勤工俭学岗位信息表';
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 勤工俭学申请信息表
|
||||
-- =====================================================
|
||||
DROP TABLE IF EXISTS `jcbt_work_study_application`;
|
||||
CREATE TABLE `jcbt_work_study_application` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID(雪花ID)',
|
||||
`position_id` bigint(20) NOT NULL COMMENT '岗位ID',
|
||||
`position_name` varchar(100) NOT NULL COMMENT '岗位名称(冗余字段)',
|
||||
`student_id` bigint(20) NOT NULL COMMENT '学生ID',
|
||||
`student_name` varchar(50) NOT NULL COMMENT '学生姓名',
|
||||
`student_number` varchar(20) NOT NULL COMMENT '学号',
|
||||
`college_id` bigint(20) NOT NULL COMMENT '学生所在学院ID',
|
||||
`college_name` varchar(100) NOT NULL COMMENT '学生所在学院名称',
|
||||
`major` varchar(100) NOT NULL COMMENT '专业',
|
||||
`grade` varchar(10) NOT NULL COMMENT '年级',
|
||||
`class_name` varchar(50) DEFAULT NULL COMMENT '班级',
|
||||
`phone` varchar(20) NOT NULL COMMENT '联系电话',
|
||||
`email` varchar(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
`application_reason` text NOT NULL COMMENT '申请理由',
|
||||
`status` varchar(20) NOT NULL DEFAULT 'DRAFT' COMMENT '申请状态',
|
||||
`application_date` datetime NOT NULL COMMENT '申请提交时间',
|
||||
`college_review_status` varchar(20) DEFAULT NULL COMMENT '学院审核状态',
|
||||
`college_review_time` datetime DEFAULT NULL COMMENT '学院审核时间',
|
||||
`college_reviewer_id` bigint(20) DEFAULT NULL COMMENT '学院审核人ID',
|
||||
`college_reviewer_name` varchar(50) DEFAULT NULL COMMENT '学院审核人姓名',
|
||||
`college_review_comment` text DEFAULT NULL COMMENT '学院审核意见',
|
||||
`final_review_status` varchar(20) DEFAULT NULL COMMENT '学生处审核状态',
|
||||
`final_review_time` datetime DEFAULT NULL COMMENT '学生处审核时间',
|
||||
`final_reviewer_id` bigint(20) DEFAULT NULL COMMENT '学生处审核人ID',
|
||||
`final_reviewer_name` varchar(50) DEFAULT NULL COMMENT '学生处审核人姓名',
|
||||
`final_review_comment` text DEFAULT NULL COMMENT '学生处审核意见',
|
||||
`work_start_date` date DEFAULT NULL COMMENT '工作开始时间',
|
||||
`work_end_date` date DEFAULT NULL COMMENT '工作结束时间',
|
||||
`create_by` bigint(20) NOT NULL COMMENT '创建者',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` bigint(20) NOT NULL COMMENT '更新者',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户ID',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_application_position` (`position_id`, `deleted`),
|
||||
INDEX `idx_application_student` (`student_id`, `deleted`),
|
||||
INDEX `idx_application_student_number` (`student_number`),
|
||||
INDEX `idx_application_college_status` (`college_id`, `status`, `deleted`),
|
||||
INDEX `idx_application_status_time` (`status`, `application_date`),
|
||||
INDEX `idx_application_review_status` (`college_review_status`, `final_review_status`),
|
||||
INDEX `idx_application_tenant` (`tenant_id`, `deleted`),
|
||||
UNIQUE INDEX `uk_student_position` (`student_id`, `position_id`, `deleted`),
|
||||
CONSTRAINT `chk_application_work_date` CHECK (`work_start_date` IS NULL OR `work_end_date` IS NULL OR `work_start_date` <= `work_end_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='勤工俭学申请信息表';
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 系统字典数据插入
|
||||
-- =====================================================
|
||||
|
||||
-- 3.1 岗位状态字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('勤工俭学岗位状态', 'work_study_position_status', '0', 1, NOW(), '勤工俭学岗位状态字典');
|
||||
|
||||
-- 3.2 岗位状态字典数据
|
||||
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1, '草稿', 'DRAFT', 'work_study_position_status', '', 'info', 'N', '0', 1, NOW(), '岗位创建但未发布'),
|
||||
(2, '已发布', 'PUBLISHED', 'work_study_position_status', '', 'primary', 'N', '0', 1, NOW(), '岗位已发布但未开始招录'),
|
||||
(3, '招录中', 'RECRUITING', 'work_study_position_status', '', 'success', 'Y', '0', 1, NOW(), '岗位正在招录学生'),
|
||||
(4, '已满员', 'FULL', 'work_study_position_status', '', 'warning', 'N', '0', 1, NOW(), '岗位申请人数已满'),
|
||||
(5, '已过期', 'EXPIRED', 'work_study_position_status', '', 'danger', 'N', '0', 1, NOW(), '岗位已过有效期'),
|
||||
(6, '已暂停', 'SUSPENDED', 'work_study_position_status', '', 'info', 'N', '0', 1, NOW(), '岗位暂时停止招录'),
|
||||
(7, '已取消', 'CANCELLED', 'work_study_position_status', '', 'danger', 'N', '0', 1, NOW(), '岗位被取消');
|
||||
|
||||
-- 3.3 申请状态字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('勤工俭学申请状态', 'work_study_application_status', '0', 1, NOW(), '勤工俭学申请状态字典');
|
||||
|
||||
-- 3.4 申请状态字典数据
|
||||
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1, '草稿', 'DRAFT', 'work_study_application_status', '', 'info', 'N', '0', 1, NOW(), '申请暂存未提交'),
|
||||
(2, '已提交', 'SUBMITTED', 'work_study_application_status', '', 'primary', 'Y', '0', 1, NOW(), '申请已提交,等待学院审核'),
|
||||
(3, '学院审核中', 'COLLEGE_REVIEWING', 'work_study_application_status', '', 'primary', 'N', '0', 1, NOW(), '二级学院正在审核'),
|
||||
(4, '学院审核通过', 'COLLEGE_PASSED', 'work_study_application_status', '', 'success', 'N', '0', 1, NOW(), '学院审核通过,待学生处审核'),
|
||||
(5, '学院审核不通过', 'COLLEGE_REJECTED', 'work_study_application_status', '', 'danger', 'N', '0', 1, NOW(), '学院审核未通过'),
|
||||
(6, '学生处审核中', 'FINAL_REVIEWING', 'work_study_application_status', '', 'warning', 'N', '0', 1, NOW(), '学生处正在终审'),
|
||||
(7, '审核通过', 'APPROVED', 'work_study_application_status', '', 'success', 'N', '0', 1, NOW(), '最终审核通过'),
|
||||
(8, '审核不通过', 'REJECTED', 'work_study_application_status', '', 'danger', 'N', '0', 1, NOW(), '最终审核未通过'),
|
||||
(9, '已撤回', 'WITHDRAWN', 'work_study_application_status', '', 'info', 'N', '0', 1, NOW(), '学生主动撤回申请');
|
||||
|
||||
-- 3.5 审核状态字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('勤工俭学审核状态', 'work_study_review_status', '0', 1, NOW(), '勤工俭学审核状态字典');
|
||||
|
||||
-- 3.6 审核状态字典数据
|
||||
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1, '待审核', 'PENDING', 'work_study_review_status', '', 'warning', 'Y', '0', 1, NOW(), '等待审核'),
|
||||
(2, '审核通过', 'PASSED', 'work_study_review_status', '', 'success', 'N', '0', 1, NOW(), '审核通过'),
|
||||
(3, '审核不通过', 'REJECTED', 'work_study_review_status', '', 'danger', 'N', '0', 1, NOW(), '审核不通过');
|
||||
|
||||
-- 3.7 岗位发布范围字典类型
|
||||
INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('勤工俭学岗位发布范围', 'work_study_position_scope', '0', 1, NOW(), '勤工俭学岗位发布范围字典');
|
||||
|
||||
-- 3.8 岗位发布范围字典数据
|
||||
INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `remark`) VALUES
|
||||
(1, '本学院', 'COLLEGE', 'work_study_position_scope', '', 'primary', 'Y', '0', 1, NOW(), '仅本学院学生可见和申请'),
|
||||
(2, '全校', 'UNIVERSITY', 'work_study_position_scope', '', 'success', 'N', '0', 1, NOW(), '所有学生可见和申请');
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 示例测试数据插入(可选)
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 插入测试岗位数据
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000001, '图书馆助理管理员', 'UNIVERSITY', 5, '周一至周五 14:00-17:00', '2025-01-03', '2025-06-30',
|
||||
'1. 大二及以上年级\n2. 学习成绩良好\n3. 责任心强,工作认真\n4. 熟悉图书分类和管理',
|
||||
'每小时15元,按实际工作时间计算', '张老师', '13800138001',
|
||||
1001, '文学院', 'RECRUITING', 1, 1, '000000'),
|
||||
|
||||
(1736000000000000002, '实验室设备维护', 'COLLEGE', 2, '周三、周五 16:00-18:00', '2025-01-03', '2025-05-31',
|
||||
'1. 理工科专业学生\n2. 有基础的设备维护经验\n3. 动手能力强\n4. 能吃苦耐劳',
|
||||
'每小时18元,有技术补贴', '李老师', '13800138002',
|
||||
1002, '理学院', 'RECRUITING', 1, 1, '000000'),
|
||||
|
||||
(1736000000000000003, '学生宿舍管理助理', 'UNIVERSITY', 8, '周一至周日轮班,每次4小时', '2025-01-03', '2025-07-31',
|
||||
'1. 品行端正,无违纪记录\n2. 沟通能力强\n3. 能适应轮班工作\n4. 有服务意识',
|
||||
'每小时12元,夜班有补贴', '王老师', '13800138003',
|
||||
1003, '学生处', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 4.2 插入测试申请数据
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000101, 1736000000000000001, '图书馆助理管理员', 2001001, '张三', '2023001001',
|
||||
1001, '文学院', '汉语言文学', '2023', '汉语言文学1班', '13900139001', 'zhangsan@example.com',
|
||||
'我热爱读书,熟悉图书分类,希望能在图书馆工作,为同学们提供更好的服务。同时也能减轻家庭经济负担。',
|
||||
'SUBMITTED', '2025-01-03 09:00:00', 2001001, 2001001, '000000'),
|
||||
|
||||
(1736000000000000102, 1736000000000000002, '实验室设备维护', 2002001, '李四', '2023002001',
|
||||
1002, '理学院', '物理学', '2023', '物理学1班', '13900139002', 'lisi@example.com',
|
||||
'我是物理专业学生,对实验设备比较了解,有维修电子设备的经验,希望能申请这个岗位。',
|
||||
'SUBMITTED', '2025-01-03 10:00:00', 2002001, 2002001, '000000'),
|
||||
|
||||
(1736000000000000103, 1736000000000000003, '学生宿舍管理助理', 2003001, '王五', '2023003001',
|
||||
1004, '管理学院', '工商管理', '2023', '工商管理1班', '13900139003', 'wangwu@example.com',
|
||||
'我性格开朗,善于与人沟通,希望能为同学们的宿舍生活提供帮助,同时锻炼自己的管理能力。',
|
||||
'SUBMITTED', '2025-01-03 11:00:00', 2003001, 2003001, '000000');
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 权限菜单数据插入
|
||||
-- =====================================================
|
||||
|
||||
-- 5.1 勤工俭学主菜单
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('勤工俭学', 2000, 6, 'workstudy', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'work', 1, NOW(), '勤工俭学管理菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID (假设为最新的菜单ID)
|
||||
SET @workstudy_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- 5.2 岗位管理菜单
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('岗位管理', @workstudy_menu_id, 1, 'position', 'jcbt/workstudy/position/index', NULL, 1, 0, 'C', '0', '0', 'jcbt:workstudy:position:list', 'job', 1, NOW(), '勤工俭学岗位管理');
|
||||
|
||||
SET @position_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- 5.3 岗位管理权限按钮
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
|
||||
('岗位查询', @position_menu_id, 1, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:position:query', '#', 1, NOW(), ''),
|
||||
('岗位新增', @position_menu_id, 2, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:position:add', '#', 1, NOW(), ''),
|
||||
('岗位修改', @position_menu_id, 3, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:position:edit', '#', 1, NOW(), ''),
|
||||
('岗位删除', @position_menu_id, 4, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:position:remove', '#', 1, NOW(), ''),
|
||||
('岗位导出', @position_menu_id, 5, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:position:export', '#', 1, NOW(), '');
|
||||
|
||||
-- 5.4 申请管理菜单
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('申请管理', @workstudy_menu_id, 2, 'application', 'jcbt/workstudy/application/index', NULL, 1, 0, 'C', '0', '0', 'jcbt:workstudy:application:list', 'form', 1, NOW(), '勤工俭学申请管理');
|
||||
|
||||
SET @application_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- 5.5 申请管理权限按钮
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
|
||||
('申请查询', @application_menu_id, 1, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:application:query', '#', 1, NOW(), ''),
|
||||
('申请新增', @application_menu_id, 2, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:application:add', '#', 1, NOW(), ''),
|
||||
('申请修改', @application_menu_id, 3, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:application:edit', '#', 1, NOW(), ''),
|
||||
('申请删除', @application_menu_id, 4, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:application:remove', '#', 1, NOW(), ''),
|
||||
('申请导出', @application_menu_id, 5, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:application:export', '#', 1, NOW(), ''),
|
||||
('申请审核', @application_menu_id, 6, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:application:review', '#', 1, NOW(), '');
|
||||
|
||||
-- 5.6 审核管理菜单
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
|
||||
VALUES ('审核管理', @workstudy_menu_id, 3, 'review', 'jcbt/workstudy/review/index', NULL, 1, 0, 'C', '0', '0', 'jcbt:workstudy:review:list', 'eye', 1, NOW(), '勤工俭学审核管理');
|
||||
|
||||
SET @review_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- 5.7 审核管理权限按钮
|
||||
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
|
||||
('审核查询', @review_menu_id, 1, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:review:query', '#', 1, NOW(), ''),
|
||||
('学院审核', @review_menu_id, 2, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:review:college', '#', 1, NOW(), ''),
|
||||
('终审', @review_menu_id, 3, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:review:final', '#', 1, NOW(), ''),
|
||||
('审核记录', @review_menu_id, 4, '', '', NULL, 1, 0, 'F', '0', '0', 'jcbt:workstudy:review:record', '#', 1, NOW(), '');
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 恢复外键检查
|
||||
-- =====================================================
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- =====================================================
|
||||
-- 7. 脚本执行完成提示
|
||||
-- =====================================================
|
||||
SELECT 'JCBT勤工俭学模块数据库建表脚本执行完成!' AS '执行结果';
|
||||
SELECT '包含内容:' AS '脚本内容',
|
||||
'1. 岗位信息表' AS '表1',
|
||||
'2. 申请信息表' AS '表2',
|
||||
'3. 系统字典数据' AS '数据1',
|
||||
'4. 测试示例数据' AS '数据2',
|
||||
'5. 权限菜单数据' AS '数据3';
|
||||
@@ -1,193 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 勤工俭学管理系统测试数据脚本
|
||||
-- 项目: 校园管理系统 - 勤工俭学模块
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-03
|
||||
-- =====================================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 插入测试岗位数据
|
||||
-- =====================================================
|
||||
|
||||
-- 1.1 图书馆助理管理员岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000001, '图书馆助理管理员', 'UNIVERSITY', 5, '周一至周五 14:00-17:00', '2025-01-03', '2025-06-30',
|
||||
'1. 大二及以上年级\n2. 学习成绩良好\n3. 责任心强,工作认真\n4. 熟悉图书分类和管理',
|
||||
'每小时15元,按实际工作时间计算', '张老师', '13800138001',
|
||||
1001, '文学院', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 1.2 实验室设备维护岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000002, '实验室设备维护', 'COLLEGE', 2, '周三、周五 16:00-18:00', '2025-01-03', '2025-05-31',
|
||||
'1. 理工科专业学生\n2. 有基础的设备维护经验\n3. 动手能力强\n4. 能吃苦耐劳',
|
||||
'每小时18元,有技术补贴', '李老师', '13800138002',
|
||||
1002, '理学院', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 1.3 学生宿舍管理助理岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000003, '学生宿舍管理助理', 'UNIVERSITY', 8, '周一至周日轮班,每次4小时', '2025-01-03', '2025-07-31',
|
||||
'1. 品行端正,无违纪记录\n2. 沟通能力强\n3. 能适应轮班工作\n4. 有服务意识',
|
||||
'每小时12元,夜班有补贴', '王老师', '13800138003',
|
||||
1003, '学生处', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 1.4 教学助理岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000004, '教学助理', 'COLLEGE', 3, '周二、周四 10:00-12:00', '2025-01-03', '2025-06-15',
|
||||
'1. 本专业学生\n2. 学习成绩优秀\n3. 表达能力强\n4. 有耐心和责任心',
|
||||
'每小时20元,期末有奖励', '赵老师', '13800138004',
|
||||
1001, '文学院', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- 1.5 校园网络维护岗位
|
||||
INSERT INTO `jcbt_work_study_position`
|
||||
(`id`, `position_name`, `position_scope`, `required_count`, `work_time`, `start_date`, `end_date`,
|
||||
`position_requirements`, `salary_info`, `contact_teacher`, `contact_phone`,
|
||||
`college_id`, `college_name`, `status`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000005, '校园网络维护', 'UNIVERSITY', 4, '周一至周五随时待命', '2025-01-03', '2025-12-31',
|
||||
'1. 计算机相关专业\n2. 熟悉网络技术\n3. 能够解决常见网络问题\n4. 工作时间灵活',
|
||||
'每小时25元,紧急出勤有额外补贴', '孙老师', '13800138005',
|
||||
1004, '信息学院', 'RECRUITING', 1, 1, '000000');
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 插入测试申请数据
|
||||
-- =====================================================
|
||||
|
||||
-- 2.1 张三申请图书馆助理管理员
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000101, 1736000000000000001, '图书馆助理管理员', 2001001, '张三', '2023001001',
|
||||
1001, '文学院', '汉语言文学', '2023', '汉语言文学1班', '13900139001', 'zhangsan@example.com',
|
||||
'我热爱读书,熟悉图书分类,希望能在图书馆工作,为同学们提供更好的服务。同时也能减轻家庭经济负担。',
|
||||
'SUBMITTED', '2025-01-03 09:00:00', 2001001, 2001001, '000000');
|
||||
|
||||
-- 2.2 李四申请实验室设备维护
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000102, 1736000000000000002, '实验室设备维护', 2002001, '李四', '2023002001',
|
||||
1002, '理学院', '物理学', '2023', '物理学1班', '13900139002', 'lisi@example.com',
|
||||
'我是物理专业学生,对实验设备比较了解,有维修电子设备的经验,希望能申请这个岗位。',
|
||||
'SUBMITTED', '2025-01-03 10:00:00', 2002001, 2002001, '000000');
|
||||
|
||||
-- 2.3 王五申请学生宿舍管理助理
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000103, 1736000000000000003, '学生宿舍管理助理', 2003001, '王五', '2023003001',
|
||||
1004, '管理学院', '工商管理', '2023', '工商管理1班', '13900139003', 'wangwu@example.com',
|
||||
'我性格开朗,善于与人沟通,希望能为同学们的宿舍生活提供帮助,同时锻炼自己的管理能力。',
|
||||
'SUBMITTED', '2025-01-03 11:00:00', 2003001, 2003001, '000000');
|
||||
|
||||
-- 2.4 赵六申请教学助理
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`, `create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000104, 1736000000000000004, '教学助理', 2001002, '赵六', '2023001002',
|
||||
1001, '文学院', '汉语言文学', '2023', '汉语言文学2班', '13900139004', 'zhaoliu@example.com',
|
||||
'我的学习成绩优秀,有良好的表达能力,希望能帮助老师进行教学工作,同时提升自己的能力。',
|
||||
'COLLEGE_REVIEWING', '2025-01-03 12:00:00', 2001002, 2001002, '000000');
|
||||
|
||||
-- 2.5 孙七申请校园网络维护
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`, `college_review_status`, `college_review_time`,
|
||||
`college_reviewer_id`, `college_reviewer_name`, `college_review_comment`,
|
||||
`create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000105, 1736000000000000005, '校园网络维护', 2004001, '孙七', '2023004001',
|
||||
1004, '信息学院', '计算机科学与技术', '2023', '计算机1班', '13900139005', 'sunqi@example.com',
|
||||
'我是计算机专业学生,熟悉网络技术,有实际网络维护经验,能够解决各种网络问题。',
|
||||
'COLLEGE_PASSED', '2025-01-03 13:00:00', 'PASSED', '2025-01-03 15:00:00',
|
||||
3001, '信息学院审核老师', '该学生专业技能扎实,推荐通过。',
|
||||
2004001, 2004001, '000000');
|
||||
|
||||
-- 2.6 周八申请图书馆助理管理员(已审核通过)
|
||||
INSERT INTO `jcbt_work_study_application`
|
||||
(`id`, `position_id`, `position_name`, `student_id`, `student_name`, `student_number`,
|
||||
`college_id`, `college_name`, `major`, `grade`, `class_name`, `phone`, `email`,
|
||||
`application_reason`, `status`, `application_date`,
|
||||
`college_review_status`, `college_review_time`, `college_reviewer_id`, `college_reviewer_name`, `college_review_comment`,
|
||||
`final_review_status`, `final_review_time`, `final_reviewer_id`, `final_reviewer_name`, `final_review_comment`,
|
||||
`work_start_date`, `work_end_date`,
|
||||
`create_by`, `update_by`, `tenant_id`)
|
||||
VALUES
|
||||
(1736000000000000106, 1736000000000000001, '图书馆助理管理员', 2002002, '周八', '2023002002',
|
||||
1002, '理学院', '数学与应用数学', '2023', '数学1班', '13900139006', 'zhouba@example.com',
|
||||
'我有良好的组织能力和服务意识,希望能在图书馆为同学们提供优质服务。',
|
||||
'APPROVED', '2025-01-02 14:00:00',
|
||||
'PASSED', '2025-01-02 16:00:00', 3002, '理学院审核老师', '学生表现优秀,同意申请。',
|
||||
'PASSED', '2025-01-02 18:00:00', 4001, '学生处终审老师', '经终审,同意该学生申请。',
|
||||
'2025-01-05', '2025-06-30',
|
||||
2002002, 2002002, '000000');
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 更新岗位当前申请通过人数
|
||||
-- =====================================================
|
||||
|
||||
-- 更新图书馆助理管理员岗位的当前人数
|
||||
UPDATE `jcbt_work_study_position`
|
||||
SET `current_count` = 1, `update_time` = NOW()
|
||||
WHERE `id` = 1736000000000000001;
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 查询验证数据
|
||||
-- =====================================================
|
||||
|
||||
-- 4.1 查询岗位数据
|
||||
SELECT
|
||||
position_name as '岗位名称',
|
||||
position_scope as '发布范围',
|
||||
required_count as '需求人数',
|
||||
current_count as '当前人数',
|
||||
status as '状态',
|
||||
college_name as '发布学院'
|
||||
FROM jcbt_work_study_position
|
||||
WHERE deleted = 0;
|
||||
|
||||
-- 4.2 查询申请数据
|
||||
SELECT
|
||||
student_name as '学生姓名',
|
||||
position_name as '申请岗位',
|
||||
status as '申请状态',
|
||||
college_name as '学生学院',
|
||||
application_date as '申请时间'
|
||||
FROM jcbt_work_study_application
|
||||
WHERE deleted = 0
|
||||
ORDER BY application_date;
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 脚本执行完成提示
|
||||
-- =====================================================
|
||||
SELECT 'JCBT勤工俭学模块测试数据插入完成!' AS '执行结果';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM jcbt_work_study_position WHERE deleted = 0) AS '岗位数量',
|
||||
(SELECT COUNT(*) FROM jcbt_work_study_application WHERE deleted = 0) AS '申请数量';
|
||||
@@ -1 +0,0 @@
|
||||
ALTER TABLE jcbt_scholarship_type ADD COLUMN create_dept BIGINT(20) COMMENT '创建部门' AFTER is_system;
|
||||
@@ -1,30 +0,0 @@
|
||||
-- 调试compatibility_type字段问题
|
||||
-- 检查表结构
|
||||
DESCRIBE jcbt_scholarship_type;
|
||||
|
||||
-- 检查字段是否存在
|
||||
SHOW COLUMNS FROM jcbt_scholarship_type LIKE 'compatibility_type';
|
||||
|
||||
-- 查看具体数据
|
||||
SELECT id, type_name, compatibility_type,
|
||||
CASE
|
||||
WHEN compatibility_type IS NULL THEN 'NULL值'
|
||||
WHEN compatibility_type = '' THEN '空字符串'
|
||||
ELSE CONCAT('有值:', compatibility_type)
|
||||
END as value_status
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE deleted = 0
|
||||
LIMIT 10;
|
||||
|
||||
-- 统计各种值的分布
|
||||
SELECT
|
||||
compatibility_type,
|
||||
COUNT(*) as count,
|
||||
CASE
|
||||
WHEN compatibility_type IS NULL THEN 'NULL值'
|
||||
WHEN compatibility_type = '' THEN '空字符串'
|
||||
ELSE '有效值'
|
||||
END as value_type
|
||||
FROM jcbt_scholarship_type
|
||||
WHERE deleted = 0
|
||||
GROUP BY compatibility_type;
|
||||
@@ -1,36 +0,0 @@
|
||||
-- =====================================================
|
||||
-- 奖学金兼得关系表 - create_dept字段修复脚本
|
||||
-- 版本: v1.0
|
||||
-- 创建时间: 2025-01-27
|
||||
-- 问题描述: 实体类继承BaseEntity包含create_dept字段,但数据库表缺少该字段
|
||||
-- 解决方案: 为jcbt_scholarship_compatibility表添加create_dept字段
|
||||
-- =====================================================
|
||||
|
||||
USE `ruoyi-vue-pro`;
|
||||
|
||||
-- 为奖学金兼得关系表添加create_dept字段
|
||||
ALTER TABLE `jcbt_scholarship_compatibility`
|
||||
ADD COLUMN IF NOT EXISTS `create_dept` BIGINT(20) COMMENT '创建部门'
|
||||
AFTER `description`;
|
||||
|
||||
-- 验证字段添加结果
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
DATA_TYPE,
|
||||
IS_NULLABLE,
|
||||
COLUMN_DEFAULT,
|
||||
COLUMN_COMMENT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'ruoyi-vue-pro'
|
||||
AND TABLE_NAME = 'jcbt_scholarship_compatibility'
|
||||
AND COLUMN_NAME = 'create_dept';
|
||||
|
||||
-- 显示表结构确认修复结果
|
||||
DESCRIBE `jcbt_scholarship_compatibility`;
|
||||
|
||||
-- =====================================================
|
||||
-- 修复说明:
|
||||
-- 1. 该字段是BaseEntity的标准字段,用于记录创建部门
|
||||
-- 2. 字段类型为BIGINT(20),允许NULL,与其他表保持一致
|
||||
-- 3. 字段位置放在description字段之后,符合标准字段顺序
|
||||
-- =====================================================
|
||||
@@ -1,37 +0,0 @@
|
||||
mysql: [Warning] Using a password on the command line interface can be insecure.
|
||||
info
|
||||
=== 1. 班主任和班级信息检查 ===
|
||||
info
|
||||
=== 2. 奖学金批次信息检查 ===
|
||||
batch_id batch_name batch_status start_time end_time create_time
|
||||
1952730449122004993 2025-2026??????????????? ACTIVE 2025-08-05 00:00:00 2025-08-29 00:00:00 2025-08-05 21:56:34
|
||||
1 2024-2025??????????? ACTIVE 2024-09-01 00:00:00 2024-12-31 23:59:59 2025-08-05 09:04:39
|
||||
info
|
||||
=== 3. 奖学金类型信息检查 ===
|
||||
type_id type_name level_type type_status batch_id batch_name
|
||||
1 ??????? FIRST 1 1953330495479644161 2025-2026?????????????
|
||||
1 ??????? FIRST 1 1952730449122004993 2025-2026???????????????
|
||||
5 ????????? FIRST 1 1952730449122004993 2025-2026???????????????
|
||||
1953004971846852609 ??????? FIRST 1 1952730449122004993 2025-2026???????????????
|
||||
6 ????????? FIRST 1 NULL NULL
|
||||
2 ??????? SECOND 1 1953330495479644161 2025-2026?????????????
|
||||
2 ??????? SECOND 1 1952730449122004993 2025-2026???????????????
|
||||
1953005237862195202 ??????? SECOND 1 1952730449122004993 2025-2026???????????????
|
||||
7 ????????? SECOND 1 NULL NULL
|
||||
1953004602014097409 ??????? SPECIAL 1 1952730449122004993 2025-2026???????????????
|
||||
4 ????????? SPECIAL 1 1952730449122004993 2025-2026???????????????
|
||||
8 ??????? SPECIAL 1 NULL NULL
|
||||
1952634577994387457 ????? SPECIAL 1 1952730449122004993 2025-2026???????????????
|
||||
1953004324552499202 ?????? SPECIAL 1 1952730449122004993 2025-2026???????????????
|
||||
3 ??????? THIRD 1 1952730449122004993 2025-2026???????????????
|
||||
1953005415696490497 ??????? THIRD 1 1952730449122004993 2025-2026???????????????
|
||||
info
|
||||
=== 4. 班级名额分配情况检查 ===
|
||||
quota_id batch_id batch_name scholarship_type_id type_name class_id class_name total_quota used_quota available_quota allocation_method status create_time
|
||||
2001 1 2024-2025??????????? 1 ??????? 1001 NULL 2 0 2 MANUAL ACTIVE 2025-08-06 11:00:49
|
||||
2003 1 2024-2025??????????? 2 ??????? 1001 NULL 3 0 2 MANUAL ACTIVE 2025-08-06 11:00:49
|
||||
2002 1 2024-2025??????????? 1 ??????? 1002 NULL 1 0 1 MANUAL ACTIVE 2025-08-06 11:00:49
|
||||
2004 1 2024-2025??????????? 2 ??????? 1002 NULL 2 0 2 MANUAL ACTIVE 2025-08-06 11:00:49
|
||||
info
|
||||
=== 5. 已使用名额情况检查 ===
|
||||
ERROR 1054 (42S22) at line 87: Unknown column 'sa.applicant_class_id' in 'field list'
|
||||
@@ -1,326 +0,0 @@
|
||||
# 学生信息管理界面API接口调整记录
|
||||
|
||||
**调整日期**: 2025-01-27
|
||||
**调整人员**: assistant
|
||||
**相关模块**: 学工管理-学生信息管理
|
||||
**调整类型**: 接口优化
|
||||
|
||||
## 📋 调整概述
|
||||
|
||||
完善学生信息管理界面(`web/src/views/studentMsg/studentMsg/index.vue`),将table数据请求方式从旧的API模块调用改为直接使用 `service` 调用后端 `XgStudentMsgController.java` 的 `listByDeptId` 接口。
|
||||
|
||||
## 🔧 主要调整内容
|
||||
|
||||
### 1. 列表查询接口调整
|
||||
- **修改函数**: `getList()`
|
||||
- **原实现**: 使用 `api.listStudent(queryParams)`
|
||||
- **新实现**: 直接使用 `service.post('/studentMsg/studentMsg/listByDeptId', requestBody, {params: pageQuery})`
|
||||
- **调整原因**: 按用户要求,通过 `import service from '@/utils/request'` 直接请求接口
|
||||
|
||||
### 2. 删除功能接口调整
|
||||
- **修改函数**: `handleDelete()`
|
||||
- **原实现**: 使用 `api.delStudent(studentIds)`
|
||||
- **新实现**: 直接使用 `service.delete(\`/studentMsg/studentMsg/\${studentIds}\`)`
|
||||
- **增强**: 添加了完善的错误处理和用户提示
|
||||
|
||||
### 3. 新增/修改功能接口调整
|
||||
- **修改函数**: `submitForm()`
|
||||
- **原实现**: 使用 `addStudentMsg(form)` 和 `updateStudentMsg(form)`
|
||||
- **新实现**:
|
||||
- 新增: `service.post('/studentMsg/studentMsg', form)`
|
||||
- 修改: `service.put('/studentMsg/studentMsg', form)`
|
||||
- **增强**: 添加了完善的错误处理和用户提示
|
||||
|
||||
### 4. 获取学生详情接口调整
|
||||
- **修改函数**: `handleUpdate()`
|
||||
- **原实现**: 使用 `api.getStudent(studentId)`
|
||||
- **新实现**: 直接使用 `service.get(\`/studentMsg/studentMsg/\${studentId}\`)`
|
||||
- **调整**: 暂时注释了专业和班级选项的处理,因为这些字段在表单中是disabled状态
|
||||
|
||||
### 5. 查询参数优化
|
||||
- **修改函数**: `resetQuery()`
|
||||
- **增强**: 明确清空所有查询条件,确保重置操作的完整性
|
||||
- **优化**: 改进了请求体构造逻辑,处理空值情况
|
||||
|
||||
### 6. 代码清理
|
||||
- **清理内容**: 移除了不再使用的API函数导入
|
||||
- **移除**: `addStudentMsg`, `updateStudentMsg`, `delStudentMsg`, `getStudentMsg`, `listStudentMsg`
|
||||
- **保留**: 必要的类型定义导入
|
||||
|
||||
## 🎯 调用触发点确认
|
||||
|
||||
确保以下场景都能正确触发新的接口调用:
|
||||
|
||||
✅ **界面打开时**: `onMounted()` → `getList()`
|
||||
✅ **点击部门树节点**: `handleNodeClick()` → `handleQuery()` → `getList()`
|
||||
✅ **搜索操作**: `handleQuery()` → `getList()`
|
||||
✅ **重置操作**: `resetQuery()` → `handleQuery()` → `getList()`
|
||||
✅ **新增学生后**: `submitForm()` → `getList()`
|
||||
✅ **修改学生后**: `submitForm()` → `getList()`
|
||||
✅ **删除学生后**: `handleDelete()` → `getList()`
|
||||
|
||||
## 📊 请求参数映射
|
||||
|
||||
### listByDeptId 接口参数
|
||||
```javascript
|
||||
// 请求体
|
||||
{
|
||||
name: queryParams.name || '',
|
||||
studentNo: queryParams.studentNo || '',
|
||||
phone: queryParams.phone || '',
|
||||
studentStatus: queryParams.studentStatus || '',
|
||||
dept_id: queryParams.deptId || null,
|
||||
beginTime: dateRange.value[0], // 可选
|
||||
endTime: dateRange.value[1] // 可选
|
||||
}
|
||||
|
||||
// 分页参数
|
||||
{
|
||||
pageNum: queryParams.pageNum,
|
||||
pageSize: queryParams.pageSize
|
||||
}
|
||||
```
|
||||
|
||||
## 🚨 注意事项
|
||||
|
||||
1. **专业班级选项**: 在修改学生信息时,专业和班级选项的获取逻辑暂时被注释,因为在当前表单中这些字段是disabled状态
|
||||
2. **错误处理**: 所有接口调用都添加了完善的错误处理和用户提示
|
||||
3. **数据格式**: 后端返回的数据格式可能与之前的API有所不同,已进行相应适配
|
||||
4. **权限验证**: 所有接口都需要相应的权限验证,确保用户有访问权限
|
||||
|
||||
## 📝 测试建议
|
||||
|
||||
1. **基础功能测试**: 测试列表查询、新增、修改、删除功能
|
||||
2. **部门筛选测试**: 测试点击不同部门节点的学生列表筛选
|
||||
3. **搜索功能测试**: 测试各种搜索条件组合
|
||||
4. **权限测试**: 确保用户权限控制正常
|
||||
5. **错误场景测试**: 测试网络异常、权限不足等错误场景的处理
|
||||
|
||||
## 🔄 后续优化建议
|
||||
|
||||
1. 如果需要在修改学生信息时支持专业和班级的动态选择,需要添加相应的接口调用
|
||||
2. 可以考虑添加接口调用的loading状态,提升用户体验
|
||||
3. 可以考虑添加接口调用的重试机制,提高系统健壮性
|
||||
|
||||
---
|
||||
|
||||
# 代码调整记录 - 2025-01-27 - assistant
|
||||
|
||||
## 📝 概述
|
||||
本文档记录了2025年1月27日的代码调整内容,包括修复的问题、改进的功能和相关的技术实现。
|
||||
|
||||
---
|
||||
|
||||
## 🔧 修复记录
|
||||
|
||||
### 1. 修复学生信息按部门查询SQL语法错误 (2025-01-27 19:55:00)
|
||||
|
||||
**问题描述:**
|
||||
- 学生信息管理页面按部门ID查询时出现SQL语法错误
|
||||
- 错误信息:`ParseException: Encountered unexpected token: "AND" "AND"`
|
||||
- 生成的SQL出现重复的ORDER BY子句,导致SQL结构错误
|
||||
|
||||
**错误SQL结构:**
|
||||
```sql
|
||||
WHERE (deleted = ?) ORDER BY create_time DESC
|
||||
|
||||
AND class_id IN (...)
|
||||
ORDER BY create_time DESC
|
||||
```
|
||||
|
||||
**根本原因:**
|
||||
- 在`XgStudentMsgServiceImpl.buildQueryWrapperForDeptQuery()`方法中使用了`lqw.orderByDesc(XgStudentMsg::getCreateTime)`
|
||||
- 同时在`XgStudentMsgMapper.xml`的SQL模板中也有固定的`ORDER BY create_time DESC`
|
||||
- MyBatis-Plus的`${ew.sqlSegment}`包含了排序条件,与XML中的排序冲突
|
||||
|
||||
**修复内容:**
|
||||
1. **文件**:`backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentMsgServiceImpl.java`
|
||||
2. **修改**:移除`buildQueryWrapperForDeptQuery`方法中的`lqw.orderByDesc(XgStudentMsg::getCreateTime)`调用
|
||||
3. **代码变更**:
|
||||
```java
|
||||
// 修改前
|
||||
// 排序:按创建时间倒序
|
||||
lqw.orderByDesc(XgStudentMsg::getCreateTime);
|
||||
|
||||
// 修改后
|
||||
// 注意:排序在XML中处理,这里不添加排序条件,避免SQL语法错误
|
||||
```
|
||||
|
||||
**影响范围:**
|
||||
- 学生信息管理页面的部门查询功能
|
||||
- 接口:`POST /studentMsg/studentMsg/listByDeptId`
|
||||
|
||||
**测试验证:**
|
||||
- ✅ 部门查询功能正常工作
|
||||
- ✅ SQL语法错误已解决
|
||||
- ✅ 数据按创建时间倒序显示
|
||||
|
||||
**技术说明:**
|
||||
- MyBatis-Plus的LambdaQueryWrapper在使用`${ew.sqlSegment}`时会生成完整的WHERE条件和ORDER BY子句
|
||||
- 避免在Service层和XML映射文件中重复定义排序条件
|
||||
- 优先在XML中定义固定的排序逻辑,保持SQL模板的清晰性
|
||||
|
||||
---
|
||||
|
||||
## 📊 影响统计
|
||||
- 修复文件数量:1个
|
||||
- 涉及模块:学工管理-学生信息管理
|
||||
- 预估影响用户:所有使用学生信息查询功能的用户
|
||||
|
||||
---
|
||||
|
||||
## 📋 待优化项
|
||||
1. 考虑统一排序逻辑的处理方式
|
||||
2. 完善SQL错误处理机制
|
||||
3. 增加更多的单元测试覆盖
|
||||
|
||||
---
|
||||
|
||||
**记录时间**:2025-01-27 19:55:00
|
||||
**处理人员**:assistant
|
||||
**审核状态**:待测试验证
|
||||
|
||||
---
|
||||
|
||||
# 代码调整记录 - 2025-01-27
|
||||
|
||||
## 修复奖学金申请列表显示空白问题
|
||||
|
||||
**时间**: 2025-01-27 20:30:00
|
||||
**模块**: 奖惩补贴管理 -> 奖学金管理 -> 奖学金申请管理
|
||||
**问题**: 前端列表显示"暂无数据",但后台有数据且网络请求正常
|
||||
|
||||
### 问题分析
|
||||
|
||||
1. **响应数据结构处理错误**
|
||||
- 实际返回:`{total: 2, rows: [...], code: 200, msg: "查询成功"}`
|
||||
- 前端处理:`res.data.rows`(错误)
|
||||
- 应该处理:`res.rows`(正确)
|
||||
|
||||
2. **字段映射验证**
|
||||
- 后端VO字段:`studentCode`, `studentName`, `className`, `scholarshipTypeName`, `status`
|
||||
- 前端表格字段:完全匹配 ✅
|
||||
|
||||
### 修复内容
|
||||
|
||||
**文件**: `web/src/views/jcbt/scholarship/application/index.vue`
|
||||
|
||||
**修改前**:
|
||||
```typescript
|
||||
if (res.data) {
|
||||
applicationList.value = res.data.rows || res.data.list || res.data || [];
|
||||
total.value = res.data.total || 0;
|
||||
}
|
||||
```
|
||||
|
||||
**修改后**:
|
||||
```typescript
|
||||
applicationList.value = res.rows || [];
|
||||
total.value = res.total || 0;
|
||||
```
|
||||
|
||||
### 根本原因
|
||||
|
||||
前端错误地假设响应数据包装在 `res.data` 中,但实际上 `TableDataInfo` 的数据直接在 `res` 层级。
|
||||
|
||||
### 验证方法
|
||||
|
||||
1. 刷新奖学金申请管理页面
|
||||
2. 确认列表能正常显示数据
|
||||
3. 检查分页功能正常工作
|
||||
|
||||
### 相关文档
|
||||
|
||||
- 无需更新API文档(接口未变)
|
||||
- 问题类型:前端数据处理错误
|
||||
|
||||
---
|
||||
|
||||
## 修复班级名称和状态翻译显示问题
|
||||
|
||||
**时间**: 2025-01-27 21:00:00
|
||||
**模块**: 奖惩补贴管理 -> 奖学金管理 -> 奖学金申请管理
|
||||
**问题**: 班级和奖学金类型没有显示,申请类型和申请状态展示英文而非中文
|
||||
|
||||
### 问题分析
|
||||
|
||||
1. **班级名称缺失**
|
||||
- SQL查询缺少班级表关联
|
||||
- resultMap缺少className字段映射
|
||||
|
||||
2. **状态翻译错误**
|
||||
- 后端返回:`DRAFT`, `SUBMITTED`, `APPROVED`, `REJECTED` 等
|
||||
- 前端判断:`draft`, `waiting`, `complete`, `rejected` 等
|
||||
- 大小写不匹配导致翻译失败
|
||||
|
||||
3. **申请类型映射不正确**
|
||||
- 后端返回:`RECOMMEND`, `AUTO`, `DIRECT`
|
||||
- 前端判断:`TEACHER_RECOMMEND`, `STUDENT`, `AUTO`, `DIRECT`
|
||||
|
||||
### 修复内容
|
||||
|
||||
**文件1**: `backend/ruoyi-modules/ruoyi-jcbt/src/main/resources/mapper/jcbt/JcbtScholarshipApplicationMapper.xml`
|
||||
|
||||
**增加班级表关联**:
|
||||
```xml
|
||||
<!-- 在resultMap中添加 -->
|
||||
<result property="className" column="class_name"/>
|
||||
|
||||
<!-- 在查询SQL中添加 -->
|
||||
left join xg_class_msg c on a.class_id = c.id
|
||||
select ... c.class_name, ...
|
||||
```
|
||||
|
||||
**文件2**: `web/src/views/jcbt/scholarship/application/index.vue`
|
||||
|
||||
**修复申请类型映射**:
|
||||
```typescript
|
||||
// 修改前
|
||||
scope.row.applicationType === 'TEACHER_RECOMMEND'
|
||||
// 修改后
|
||||
scope.row.applicationType === 'RECOMMEND'
|
||||
```
|
||||
|
||||
**修复申请状态映射**:
|
||||
```typescript
|
||||
// 修改前
|
||||
scope.row.status === 'draft' → 草稿
|
||||
scope.row.status === 'waiting' → 待审核
|
||||
scope.row.status === 'complete' → 已完成
|
||||
|
||||
// 修改后
|
||||
scope.row.status === 'DRAFT' → 草稿
|
||||
scope.row.status === 'SUBMITTED' → 已提交
|
||||
scope.row.status === 'REVIEWING' → 审核中
|
||||
scope.row.status === 'APPROVED' → 已通过
|
||||
scope.row.status === 'REJECTED' → 已拒绝
|
||||
scope.row.status === 'WITHDRAWN' → 已撤回
|
||||
```
|
||||
|
||||
### 状态值对照表
|
||||
|
||||
**申请类型映射**:
|
||||
- `RECOMMEND` → 教师推荐
|
||||
- `AUTO` → 自动评定
|
||||
- `DIRECT` → 直接指定
|
||||
|
||||
**申请状态映射**:
|
||||
- `DRAFT` → 草稿
|
||||
- `SUBMITTED` → 已提交
|
||||
- `REVIEWING` → 审核中
|
||||
- `APPROVED` → 已通过
|
||||
- `REJECTED` → 已拒绝
|
||||
- `WITHDRAWN` → 已撤回
|
||||
|
||||
### 验证方法
|
||||
|
||||
1. 重启后端服务(使数据库映射生效)
|
||||
2. 刷新奖学金申请管理页面
|
||||
3. 确认班级名称正常显示
|
||||
4. 确认奖学金类型名称正常显示
|
||||
5. 确认申请类型和状态显示中文
|
||||
|
||||
### 相关文档
|
||||
|
||||
- 无需更新API文档(接口未变)
|
||||
- 问题类型:字段映射缺失 + 前端翻译逻辑错误
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,231 +0,0 @@
|
||||
# 项目预算数据统计功能开发记录
|
||||
|
||||
**开发日期**: 2025-01-27
|
||||
**开发人员**: Cursor AI
|
||||
**需求来源**: 用户需求 - 项目预算数据统计功能
|
||||
**状态**: ✅ 已完成
|
||||
|
||||
## 📋 为奖学金管理模块添加英文文件夹名称
|
||||
**时间**: 2025-01-27 14:50:00
|
||||
**修改人**: AI Assistant
|
||||
**任务描述**: 为奖学金管理模块产品需求设计文档中的各个功能模块添加英文文件夹名称
|
||||
|
||||
### 📋 修改内容
|
||||
**修改文件**: `docs/需求文档/奖惩补贴需求/奖学金管理模块产品需求设计.md`
|
||||
|
||||
**具体修改**:
|
||||
1. **奖项管理模块** → **奖项管理模块 (scholarship-type)**
|
||||
2. **规则引擎模块** → **规则引擎模块 (scholarship-rule)**
|
||||
3. **批次管理模块** → **批次管理模块 (scholarship-batch)**
|
||||
4. **名额分配模块** → **名额分配模块 (scholarship-quota)**
|
||||
5. **申请管理模块** → **申请管理模块 (scholarship-application)**
|
||||
6. **审核管理模块** → **审核管理模块 (scholarship-review)**
|
||||
7. **数据导出模块** → **数据导出模块 (scholarship-export)**
|
||||
8. **统计报表模块** → **统计报表模块 (scholarship-statistics)**(系统架构图中)
|
||||
|
||||
### ✅ 修改目的
|
||||
- 🎯 **开发指导**: 为后续代码开发提供明确的模块文件夹命名规范
|
||||
- 📁 **文件组织**: 统一英文命名规范,便于项目结构管理
|
||||
- 🔧 **技术实施**: 与Spring Boot项目结构保持一致
|
||||
- 📚 **文档完善**: 增强需求文档的技术可操作性
|
||||
|
||||
### 📋 命名规范
|
||||
- **前缀**: 统一使用 `scholarship-` 作为奖学金模块前缀
|
||||
- **格式**: 采用 kebab-case 命名风格(小写字母+连字符)
|
||||
- **语义**: 英文名称与中文功能模块一一对应
|
||||
- **扩展**: 为后续模块扩展预留命名空间
|
||||
|
||||
---
|
||||
|
||||
## 📋 创建奖学金管理模块产品需求设计文档
|
||||
**时间**: 2025-01-27 14:45:00
|
||||
**修改人**: AI Assistant
|
||||
**任务描述**: 根据用户原始需求,创建奖学金管理模块的完整产品需求设计文档
|
||||
|
||||
### 📋 需求分析内容
|
||||
**用户原始需求拆解**:
|
||||
1. 自动评定规则设置和执行
|
||||
2. 奖种兼得关系维护功能
|
||||
3. 评定批次管理功能
|
||||
4. 二级学院名额分配和二次分配
|
||||
5. 学生在线申请和条件校验
|
||||
6. 学生处奖项设立功能
|
||||
7. 二级学院直接指定学生功能
|
||||
8. 申请审核和进度跟踪
|
||||
9. 评定结果导出功能
|
||||
|
||||
### 📋 文档创建内容
|
||||
**创建文件**: `docs/业务模块/奖惩补贴管理/奖学金管理模块产品需求设计.md`
|
||||
|
||||
**文档结构**:
|
||||
1. 需求概述(业务背景、目标用户、核心价值)
|
||||
2. 核心需求分析(需求拆解、业务流程分析)
|
||||
3. 功能模块设计(7个核心模块设计)
|
||||
4. 用户角色与权限(4类角色权限矩阵)
|
||||
5. 技术实现方案(技术架构、核心技术点、数据库设计)
|
||||
6. 业务流程设计(完整流程图、关键业务规则)
|
||||
7. 系统集成方案(学生信息系统集成)
|
||||
8. 测试方案(功能、性能、安全测试)
|
||||
9. 实施计划(8.5周开发计划)
|
||||
10. 风险评估与应对(技术、业务、项目风险)
|
||||
|
||||
### ✅ 特殊处理
|
||||
- ❌ **已移除财务系统对接相关内容**(按用户要求)
|
||||
- ✅ 保留数据导出功能替代财务对接
|
||||
- ✅ 完整的需求分析和功能设计
|
||||
- ✅ 详细的技术实现方案和数据库设计
|
||||
|
||||
### 📋 文档特点
|
||||
- 📊 **完整性**: 涵盖需求分析到实施的全流程
|
||||
- 🎯 **针对性**: 基于用户原始需求精准设计
|
||||
- 🔧 **可实施性**: 提供具体的技术方案和开发计划
|
||||
- 📈 **可扩展性**: 预留后续功能扩展空间
|
||||
|
||||
---
|
||||
|
||||
## 📋 需求描述
|
||||
|
||||
开发项目预算数据统计功能,该模块需要具备以下功能:
|
||||
|
||||
1. **项目清单查看**: 查看所有申请项目的清单
|
||||
2. **状态筛选查询**: 根据不同审批状态进行查询和统计
|
||||
3. **年度预算汇总**: 根据预算年度进行各部门的预算汇总统计
|
||||
4. **多维度统计**: 提供状态统计、部门汇总、年度汇总等多种统计视图
|
||||
|
||||
## 🔧 技术实现
|
||||
|
||||
### 后端开发
|
||||
|
||||
#### 1. 控制器新增接口 `CwProjectApplicationController.java`
|
||||
- ✅ `GET /cw/application/statistics/list` - 获取项目清单
|
||||
- ✅ `GET /cw/application/statistics/status` - 获取状态统计
|
||||
- ✅ `GET /cw/application/statistics/department` - 获取部门预算汇总
|
||||
- ✅ `GET /cw/application/statistics/yearly` - 获取年度汇总统计
|
||||
|
||||
#### 2. 服务接口扩展 `ICwProjectApplicationService.java`
|
||||
- ✅ `getStatusStatistics(String budgetYear)` - 状态统计方法
|
||||
- ✅ `getDepartmentStatistics(String budgetYear)` - 部门统计方法
|
||||
- ✅ `getYearlyStatistics()` - 年度统计方法
|
||||
|
||||
#### 3. 服务实现 `CwProjectApplicationServiceImpl.java`
|
||||
- ✅ **状态统计**: 按审批状态统计项目数量、预算金额
|
||||
- ✅ **部门统计**: 按部门分组统计项目数量、预算金额、通过率
|
||||
- ✅ **年度统计**: 按预算年度统计项目分布情况
|
||||
|
||||
### 前端开发
|
||||
|
||||
#### 1. API接口 `web/src/api/cw/statistics.ts`
|
||||
- ✅ `getStatisticsList()` - 项目清单查询
|
||||
- ✅ `getStatusStatistics()` - 状态统计查询
|
||||
- ✅ `getDepartmentStatistics()` - 部门统计查询
|
||||
- ✅ `getYearlyStatistics()` - 年度统计查询
|
||||
|
||||
#### 2. 统计页面 `web/src/views/cw/statistics/index.vue`
|
||||
- ✅ **筛选条件**: 预算年度选择
|
||||
- ✅ **统计概览**: 4个关键指标卡片展示
|
||||
- ✅ **Tab切换**: 状态统计、部门汇总、年度汇总、项目清单
|
||||
- ✅ **数据表格**: 各维度统计数据表格展示
|
||||
|
||||
#### 3. 菜单配置 `script/sql/cw-statistics-menu.sql`
|
||||
- ✅ **主菜单**: 项目预算统计 (menu_id: 7100)
|
||||
- ✅ **查询权限**: cw:statistics:list (menu_id: 7101)
|
||||
- ✅ **导出权限**: cw:statistics:export (menu_id: 7102)
|
||||
- ✅ **角色分配**: 财务管理员、系统管理员
|
||||
|
||||
## 📊 功能特性
|
||||
|
||||
### 1. 统计概览
|
||||
- **项目总数**: 显示当前筛选条件下的项目总数
|
||||
- **预算总额**: 显示总投资金额(万元)
|
||||
- **已通过项目**: 显示审批通过的项目数量
|
||||
- **涉及部门**: 显示参与项目申报的部门数量
|
||||
|
||||
### 2. 状态统计
|
||||
- **状态详情**: 表格显示各状态的数量和占比
|
||||
- **支持状态**: 草稿、已提交、审批中、已通过、已拒绝、已退回、已取消
|
||||
|
||||
### 3. 部门汇总
|
||||
- **部门维度**: 按部门统计项目申报情况
|
||||
- **统计指标**: 项目数量、预算总额、已通过数量、已通过金额、通过率
|
||||
- **排序规则**: 按预算总额降序排列
|
||||
|
||||
### 4. 年度汇总
|
||||
- **年度维度**: 按预算年度统计项目分布
|
||||
- **统计指标**: 项目数量、预算总额、已通过数量、已通过金额、通过率
|
||||
- **排序规则**: 按年度降序排列
|
||||
|
||||
### 5. 项目清单
|
||||
- **完整清单**: 显示所有项目的详细信息
|
||||
- **关键字段**: 申报编号、项目名称、申报部门、申报人、预算年度、总投资、审批状态、提交时间
|
||||
|
||||
## 🔐 权限配置
|
||||
|
||||
### 权限标识
|
||||
- `cw:statistics:list` - 项目预算统计查询权限
|
||||
- `cw:statistics:export` - 项目预算统计导出权限
|
||||
|
||||
### 角色分配
|
||||
- **财务管理员 (cw_admin)**: 拥有完整的统计查询和导出权限
|
||||
- **系统管理员 (admin)**: 拥有完整的统计查询和导出权限
|
||||
|
||||
## 📁 文件变更清单
|
||||
|
||||
### 后端文件
|
||||
1. `backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/controller/CwProjectApplicationController.java` - 新增统计接口
|
||||
2. `backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/ICwProjectApplicationService.java` - 新增服务接口
|
||||
3. `backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/impl/CwProjectApplicationServiceImpl.java` - 实现统计方法
|
||||
|
||||
### 前端文件
|
||||
1. `web/src/api/cw/statistics.ts` - 新增API接口文件
|
||||
2. `web/src/views/cw/statistics/index.vue` - 新增统计页面
|
||||
|
||||
### 配置文件
|
||||
1. `script/sql/cw-statistics-menu.sql` - 菜单配置脚本
|
||||
|
||||
## 🔄 部署说明
|
||||
|
||||
### 部署步骤
|
||||
1. **后端编译**: 重新编译后端服务
|
||||
2. **服务重启**: 重启后端服务使新接口生效
|
||||
3. **菜单配置**: 执行菜单配置脚本(已完成)
|
||||
4. **权限分配**: 确认相关角色权限配置正确
|
||||
5. **功能测试**: 验证统计功能正常工作
|
||||
|
||||
### 注意事项
|
||||
- 首次访问页面可能需要重新登录以刷新权限
|
||||
- 统计数据基于现有项目申报数据
|
||||
|
||||
---
|
||||
|
||||
**开发完成时间**: 2025-01-27 17:30:00
|
||||
**功能状态**: ✅ 开发完成,可进行测试部署
|
||||
|
||||
## 🔧 修复统计页面项目详情缺少绩效指标问题
|
||||
**时间**: 2025-01-27 14:30:00
|
||||
**修改人**: AI Assistant
|
||||
**问题描述**: 预算申报统计模块中项目清单的详情展示缺少绩效指标设置内容
|
||||
|
||||
### 🚨 问题根源
|
||||
- **正常申报页面**: 使用 `/cw/application/{id}` 接口,会获取绩效指标数据
|
||||
- **统计页面**: 使用 `/cw/application/statistics/list` 接口,缺少绩效指标数据获取步骤
|
||||
|
||||
### 🔧 修改内容
|
||||
**修改文件**: `backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/impl/CwProjectApplicationServiceImpl.java`
|
||||
**修改方法**: `queryStatisticsPageList`(第84-102行)
|
||||
|
||||
**修改说明**:
|
||||
1. 在查询结果返回前,为每个项目补充绩效指标数据
|
||||
2. 添加异常处理,避免绩效指标获取失败影响整体查询
|
||||
3. 增强日志输出,显示绩效指标数量信息
|
||||
4. 参考 `queryById` 方法的处理方式,保持数据结构一致
|
||||
|
||||
### ✅ 修改效果
|
||||
- ✅ 统计页面项目清单详情现在包含完整的绩效指标设置内容
|
||||
- ✅ ApplicationSummary组件中的绩效指标卡片正常显示
|
||||
- ✅ 保持前端代码不变,向下兼容
|
||||
- ✅ 统一了正常页面和统计页面的数据结构
|
||||
|
||||
### 📋 需要操作
|
||||
**⚠️ 需要重新编译后端服务才能生效**
|
||||
|
||||
---
|
||||
@@ -1,582 +0,0 @@
|
||||
# 代码调整记录 - 2025-01-27 - wuzhen
|
||||
|
||||
## 📋 变更概览
|
||||
- **变更日期**: 2025-01-27
|
||||
- **操作人员**: wuzhen
|
||||
- **变更类型**: 新增模块 - 数据模型设计
|
||||
- **影响范围**: 奖学金管理模块
|
||||
|
||||
---
|
||||
|
||||
## 🎯 本次变更内容
|
||||
|
||||
### ✅ 创建奖学金名额分配模块数据库表 (2025-01-27 16:32:00)
|
||||
|
||||
#### 📊 变更类型
|
||||
- **类型**: 数据库结构变更
|
||||
- **操作**: 新建表
|
||||
- **模块**: ruoyi-jcbt 奖学金名额分配管理
|
||||
|
||||
#### 🎯 创建表结构
|
||||
1. **jcbt_scholarship_quota** - 奖学金名额分配表
|
||||
- 支持多级分配(全校→学院→专业→班级)
|
||||
- 包含总名额、已使用、预留、可用等字段
|
||||
- 支持手动分配、自动分配、按比例分配等方式
|
||||
|
||||
2. **jcbt_scholarship_quota_adjustment** - 名额调整记录表
|
||||
- 记录名额增加、减少、转移等操作
|
||||
- 支持审批流程和状态管理
|
||||
- 保留调整前后的完整数据记录
|
||||
|
||||
#### 📁 相关文件
|
||||
- **SQL脚本**: `backend/sql/jcbt_scholarship_quota_management.sql`
|
||||
- **数据库**: hzdyjs_xg (远程MySQL: 47.99.164.66:3306)
|
||||
|
||||
#### 🔍 表特性
|
||||
- ✅ 符合项目数据库规范(雪花ID、逻辑删除、多租户)
|
||||
- ✅ 完整的索引策略和约束设置
|
||||
- ✅ 支持层级化名额分配管理
|
||||
- ✅ 完整的审批流程支持
|
||||
|
||||
#### 📋 执行结果
|
||||
```sql
|
||||
-- 成功创建表
|
||||
Tables_in_hzdyjs_xg (jcbt_scholarship_quota%)
|
||||
jcbt_scholarship_quota
|
||||
jcbt_scholarship_quota_adjustment
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🛠️ 修复奖学金类型搜索功能和Vue组件重复模板错误 (2025-01-27 13:58:00)
|
||||
|
||||
#### 🔍 问题发现
|
||||
1. **搜索功能失效**:奖学金类型管理页面的搜索表单无法正常工作
|
||||
2. **Vue编译错误**:`Single file component can contain only one <template> element`
|
||||
|
||||
#### 🎯 问题分析
|
||||
1. **前端字段绑定错误**:
|
||||
- 搜索表单中使用了错误的字段名 `gradeType`,应为 `levelType`
|
||||
- `queryParams` 对象缺少 `compatibilityType` 字段
|
||||
- TypeScript接口 `ScholarshipTypeQuery` 缺少 `compatibilityType` 字段定义
|
||||
|
||||
2. **Vue组件结构错误**:
|
||||
- 文件中存在重复的 `<template>` 标签(第1行和第1260行)
|
||||
- 文件总行数2517行,包含完全重复的组件内容
|
||||
|
||||
#### ✅ 解决方案
|
||||
1. **修复搜索字段绑定**:
|
||||
```vue
|
||||
<!-- 修复前:错误的字段名 -->
|
||||
<el-select v-model="queryParams.gradeType">
|
||||
|
||||
<!-- 修复后:正确的字段名 -->
|
||||
<el-select v-model="queryParams.levelType">
|
||||
```
|
||||
|
||||
2. **完善QueryParams和接口定义**:
|
||||
```typescript
|
||||
// 添加缺失的compatibilityType字段
|
||||
interface ScholarshipTypeQuery {
|
||||
// ... 其他字段
|
||||
levelType?: string; // 奖学金等级
|
||||
compatibilityType?: string; // 兼得类型 (新增)
|
||||
// ... 其他字段
|
||||
}
|
||||
```
|
||||
|
||||
3. **清理重复的Vue组件内容**:
|
||||
- 删除第1259行开始的所有重复内容
|
||||
- 保留正确的组件结构:template(1-545行) + script(547-987行) + style(989-1258行)
|
||||
|
||||
#### 📁 修改文件
|
||||
- `web/src/views/jcbt/scholarship/type/index.vue` - 修复字段绑定和删除重复内容
|
||||
- `web/src/api/jcbt/scholarshipType.ts` - 添加compatibilityType字段定义
|
||||
|
||||
#### 🔄 验证结果
|
||||
- ✅ Vue组件编译正常,无重复template错误
|
||||
- ✅ 前端开发服务器启动成功
|
||||
- ✅ 搜索表单字段绑定正确
|
||||
- ✅ TypeScript类型定义完整
|
||||
|
||||
---
|
||||
|
||||
### 🛠️ 修复兼得类型搜索功能失效问题 (2025-01-27 14:05:00)
|
||||
|
||||
#### 🔍 问题发现
|
||||
用户反馈在奖学金类型管理页面中,选择兼得类型进行搜索时无法正常工作,其他条件搜索正常。
|
||||
|
||||
#### 🎯 问题分析
|
||||
1. **Service层缺少查询条件**:
|
||||
- `JcbtScholarshipTypeServiceImpl.buildQueryWrapper()` 方法中缺少 `compatibilityType` 字段的查询条件
|
||||
- 前端传递的 `compatibilityType` 参数被忽略,导致搜索失效
|
||||
|
||||
2. **Mapper XML字段名不一致**:
|
||||
- XML文件中使用 `typeLevel` 字段名,但Bo类中字段名是 `levelType`
|
||||
- 可能影响奖学金等级的搜索功能
|
||||
|
||||
#### ✅ 解决方案
|
||||
1. **添加缺失的查询条件**:
|
||||
```java
|
||||
// 在 JcbtScholarshipTypeServiceImpl.buildQueryWrapper() 中添加
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCompatibilityType()),
|
||||
JcbtScholarshipType::getCompatibilityType, bo.getCompatibilityType());
|
||||
```
|
||||
|
||||
2. **修复XML字段名**:
|
||||
```xml
|
||||
<!-- 修复前 -->
|
||||
<if test="typeLevel != null and typeLevel != ''"> and type_level = #{typeLevel}</if>
|
||||
|
||||
<!-- 修复后 -->
|
||||
<if test="levelType != null and levelType != ''"> and level_type = #{levelType}</if>
|
||||
```
|
||||
|
||||
#### 📁 修改文件
|
||||
- `backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/service/impl/JcbtScholarshipTypeServiceImpl.java` - 添加compatibilityType查询条件
|
||||
- `backend/ruoyi-modules/ruoyi-jcbt/src/main/resources/mapper/jcbt/JcbtScholarshipTypeMapper.xml` - 修复levelType字段名
|
||||
|
||||
#### 🔄 验证结果
|
||||
- ✅ 兼得类型搜索功能正常
|
||||
- ✅ 所有搜索条件字段名一致
|
||||
- ✅ 后端查询逻辑完整
|
||||
|
||||
#### ⚠️ 编译提醒
|
||||
**需要重启后端服务**:修改了Service实现类和Mapper XML文件,需要重新编译后端服务才能生效。
|
||||
|
||||
---
|
||||
|
||||
### 🛠️ 修复奖学金兼容性配置类型转换错误 (2025-01-27 18:30:00)
|
||||
|
||||
#### 🔍 问题发现
|
||||
在测试奖学金类型的兼容性配置保存功能时,遇到类型转换错误:
|
||||
```
|
||||
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Long
|
||||
```
|
||||
|
||||
#### 🎯 问题分析
|
||||
1. **前端数据类型不一致**:
|
||||
- TypeScript接口定义:`exclusiveTypeIds?: Array<string | number>`
|
||||
- API接口定义:`exclusiveTypeIds?: number[]`
|
||||
- 前端选择器可能返回字符串类型的ID
|
||||
|
||||
2. **后端强制类型转换错误**:
|
||||
- Controller中直接强制转换:`(List<Long>) config.get("exclusiveTypeIds")`
|
||||
- 无法处理前端传递的字符串类型ID
|
||||
|
||||
#### 🛠️ 修复方案
|
||||
采用安全的类型转换逻辑,支持前端传递的字符串或数字类型:
|
||||
|
||||
**修改文件**: `JcbtScholarshipTypeController.java`
|
||||
- **修改方法**: `saveCompatibilityConfig`
|
||||
- **修复内容**:
|
||||
1. 使用 `List<Object>` 接收原始数据
|
||||
2. 通过 `stream().map()` 进行安全类型转换
|
||||
3. 支持 `String` → `Long` 和 `Number` → `Long` 转换
|
||||
4. 添加类型验证和错误处理
|
||||
|
||||
#### 📝 修改代码示例
|
||||
```java
|
||||
// 修改前(出错的代码)
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Long> exclusiveTypeIds = (List<Long>) config.get("exclusiveTypeIds");
|
||||
|
||||
// 修改后(安全的转换)
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object> exclusiveTypeIdsObj = (List<Object>) config.get("exclusiveTypeIds");
|
||||
List<Long> exclusiveTypeIds = exclusiveTypeIdsObj != null ?
|
||||
exclusiveTypeIdsObj.stream()
|
||||
.map(obj -> {
|
||||
if (obj instanceof String) {
|
||||
return Long.parseLong((String) obj);
|
||||
} else if (obj instanceof Number) {
|
||||
return ((Number) obj).longValue();
|
||||
} else {
|
||||
throw new IllegalArgumentException("Invalid exclusiveTypeId type: " + obj.getClass());
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList()) :
|
||||
null;
|
||||
```
|
||||
|
||||
#### ✅ 修复结果
|
||||
- ✅ 解决了前后端数据类型不一致导致的转换错误
|
||||
- ✅ 支持前端传递字符串或数字类型的ID
|
||||
- ✅ 增强了代码的健壮性和容错性
|
||||
- ✅ 保持了API接口的向前兼容性
|
||||
|
||||
---
|
||||
|
||||
### 🔧 修复奖学金模块字段映射问题 (2025-01-27 16:45:00 - 17:15:00)
|
||||
|
||||
#### 🔍 问题发现
|
||||
在测试奖学金类型管理功能时,发现MyBatis字段映射错误:
|
||||
- **奖学金类型表**: Java字段`typeLevel` ≠ 数据库字段`level_type`
|
||||
- **兼得关系表**: 多个字段存在命名不匹配问题
|
||||
|
||||
#### 🎯 修复方案
|
||||
采用规范化字段名称映射方式:
|
||||
1. **奖学金类型表**: 统一修改Java字段名 `typeLevel` → `levelType`
|
||||
2. **兼得关系表**: 使用`@TableField`注解进行字段映射
|
||||
|
||||
#### 📝 修改文件清单
|
||||
**奖学金类型相关 (4个文件)**:
|
||||
- `JcbtScholarshipType.java` - 实体类字段名修改
|
||||
- `JcbtScholarshipTypeVo.java` - VO类字段名修改
|
||||
- `JcbtScholarshipTypeBo.java` - BO类字段名修改
|
||||
- `JcbtScholarshipTypeServiceImpl.java` - 服务类方法名修改
|
||||
|
||||
**兼得关系相关 (3个文件)**:
|
||||
- `JcbtScholarshipCompatibility.java` - 添加@TableField注解
|
||||
- `JcbtScholarshipCompatibilityVo.java` - 添加@TableField注解和import
|
||||
- `JcbtScholarshipCompatibilityBo.java` - 添加@TableField注解和import
|
||||
|
||||
#### ✅ 修复结果
|
||||
- ✅ 解决了MyBatis字段映射错误
|
||||
- ✅ 保持了数据库表结构不变
|
||||
- ✅ 符合项目命名规范要求
|
||||
- ✅ 确保了代码的可维护性
|
||||
|
||||
#### 🆕 第二阶段:实体类字段完全对齐数据库表结构 (2025-01-27 17:00:00)
|
||||
|
||||
**问题发现**:
|
||||
SQL错误提示 `Unknown column 'application_conditions' in 'field list'`,发现Java实体类字段与数据库表结构完全不匹配。
|
||||
|
||||
**对比分析**:
|
||||
```
|
||||
数据库实际字段 Java实体类字段
|
||||
├── type_code ❌ 缺失
|
||||
├── type_name ✅ typeName
|
||||
├── type_category ✅ typeCategory
|
||||
├── level_type ✅ levelType
|
||||
├── award_amount ✅ awardAmount
|
||||
├── description ❌ applicationConditions (错误)
|
||||
├── application_guide ❌ evaluationCriteria (错误)
|
||||
├── status ✅ status
|
||||
├── sort_order ✅ sortOrder
|
||||
├── is_system ❌ compatibilityType (错误)
|
||||
└── remark ❌ remark (数据库无此字段)
|
||||
```
|
||||
|
||||
**彻底修复方案**:
|
||||
1. **新增字段**: 添加 `typeCode`(奖学金类型编码)
|
||||
2. **字段重命名**: `applicationConditions` → `description`(奖学金描述)
|
||||
3. **字段重命名**: `evaluationCriteria` → `applicationGuide`(申请指南)
|
||||
4. **字段重命名**: `compatibilityType` → `isSystem`(是否系统内置)
|
||||
5. **删除字段**: 移除数据库中不存在的 `remark` 字段
|
||||
|
||||
**修改文件清单**:
|
||||
- `JcbtScholarshipType.java` - 实体类字段完全重构
|
||||
- `JcbtScholarshipTypeVo.java` - VO类字段同步调整
|
||||
- `JcbtScholarshipTypeBo.java` - BO类字段和验证规则调整
|
||||
- `JcbtScholarshipTypeServiceImpl.java` - 查询条件方法名同步更新
|
||||
|
||||
**字段验证规则调整**:
|
||||
- `typeCode`: 新增必填验证,最大长度50
|
||||
- `awardAmount`: 移除必填验证(数据库允许NULL)
|
||||
- 移除已删除字段的相关验证规则
|
||||
|
||||
#### 🎨 第三阶段:前端字段映射同步修复 (2025-01-27 17:15:00)
|
||||
|
||||
**问题发现**:
|
||||
提交时提示"奖学金类型编码不能为空",但前端页面没有对应的 `typeCode` 输入框。
|
||||
|
||||
**根本原因**:
|
||||
前端API接口定义、表单字段、验证规则都还在使用旧的字段名称,与后端新字段名称不匹配。
|
||||
|
||||
**前端修复方案**:
|
||||
1. **API接口定义同步**:更新 `scholarshipType.ts` 中的三个接口类型
|
||||
- `ScholarshipTypeVO` - 添加 `typeCode`,字段重命名对应
|
||||
- `ScholarshipTypeForm` - 完整同步后端字段结构
|
||||
- `ScholarshipTypeQuery` - 查询参数字段名称修正
|
||||
|
||||
2. **表单页面字段修复**:
|
||||
- ✅ **新增字段**: 添加"类型编码"输入框(`typeCode`)
|
||||
- ✅ **字段重命名**: `typeLevel` → `levelType`
|
||||
- ✅ **删除重复**: 移除重复的奖学金等级字段
|
||||
- ✅ **新增描述字段**: 添加"奖学金描述"文本域(`description`)
|
||||
- ✅ **新增指南字段**: 添加"申请指南"文本域(`applicationGuide`)
|
||||
- ✅ **新增系统标识**: 添加"是否系统内置"单选框(`isSystem`)
|
||||
|
||||
3. **验证规则更新**:
|
||||
- ✅ `typeCode`: 必填验证,2-50字符长度
|
||||
- ✅ `levelType`: 替换 `typeLevel` 的验证规则
|
||||
- ✅ `isSystem`: 新增必填验证
|
||||
- ✅ 移除已删除字段的验证规则
|
||||
|
||||
4. **表单重置和查询参数**:
|
||||
- ✅ 表单重置方法字段名称同步
|
||||
- ✅ 查询参数字段名称修正
|
||||
|
||||
**修改文件清单(前端3个)**:
|
||||
- `web/src/api/jcbt/scholarshipType.ts` - API接口类型定义更新
|
||||
- `web/src/views/jcbt/scholarship/type/index.vue` - 表单页面字段同步
|
||||
- 字段映射完全对齐后端新结构
|
||||
|
||||
#### 🔧 第四阶段:数据库字段映射修复 (2025-01-27 17:25:00)
|
||||
|
||||
**问题发现**:
|
||||
提交时SQL报错:"Unknown column 'create_dept' in 'field list'"
|
||||
|
||||
**根本原因**:
|
||||
实体类继承 `BaseEntity`,包含 `createDept` 字段,但数据库表中没有此字段。
|
||||
|
||||
**最终解决方案**:
|
||||
在数据库表中添加 `create_dept` 字段,执行以下SQL:
|
||||
```sql
|
||||
ALTER TABLE jcbt_scholarship_type
|
||||
ADD COLUMN create_dept BIGINT(20) COMMENT '创建部门'
|
||||
AFTER is_system;
|
||||
```
|
||||
|
||||
**修改文件清单(后端2个+SQL1个)**:
|
||||
- `backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/JcbtScholarshipType.java` - 简化实体类
|
||||
- `backend/sql/jcbt_scholarship_management.sql` - 完善表结构,添加create_dept字段
|
||||
- **手动执行SQL** - 在现有数据库表中添加create_dept字段
|
||||
|
||||
### 1. 新增奖学金管理模块数据模型设计 (2025-01-27 14:30:00)
|
||||
|
||||
#### 1.1 变更背景
|
||||
根据用户需求,为奖惩补贴系统设计奖学金管理模块的完整数据模型,包括数据库表结构设计、规则引擎设计、基础数据配置等。
|
||||
|
||||
#### 1.2 新增文件列表
|
||||
```
|
||||
docs/需求文档/奖惩补贴需求/
|
||||
├── 奖学金管理数据模型设计.md (新增) - 完整的数据模型设计文档
|
||||
├── 奖学金管理建表脚本.sql (新增) - MySQL建表脚本
|
||||
├── 奖学金管理基础数据.sql (新增) - 基础数据初始化脚本
|
||||
└── README.md (新增) - 模块说明和使用指南
|
||||
```
|
||||
|
||||
#### 1.3 后端模块目录结构优化
|
||||
```
|
||||
backend/ruoyi-modules/ruoyi-jcbt/
|
||||
├── 新增.gitkeep文件确保目录结构被Git跟踪
|
||||
├── controller/ (.gitkeep)
|
||||
├── service/ (.gitkeep)
|
||||
├── service/impl/ (.gitkeep)
|
||||
├── mapper/ (.gitkeep)
|
||||
├── domain/entity/ (.gitkeep)
|
||||
├── domain/vo/ (.gitkeep)
|
||||
├── domain/bo/ (.gitkeep)
|
||||
├── event/ (.gitkeep)
|
||||
├── listener/ (.gitkeep)
|
||||
└── resources/mapper/ (.gitkeep)
|
||||
```
|
||||
|
||||
#### 1.4 核心设计特性
|
||||
1. **灵活规则引擎**: 支持复杂的奖学金评定规则配置
|
||||
2. **11张核心表**: 覆盖奖学金管理全生命周期
|
||||
3. **性能优化**: 合理的索引设计和缓存策略
|
||||
4. **规范遵循**: 完全符合项目数据库规范
|
||||
5. **扩展性设计**: 支持后续业务扩展
|
||||
|
||||
#### 1.5 技术亮点
|
||||
- **条件组合逻辑**: 支持AND/OR复杂逻辑关系
|
||||
- **权重计算**: 支持加权分数评定算法
|
||||
- **兼得关系**: 完善的奖学金互斥/兼容关系管理
|
||||
- **多租户支持**: 完整的租户隔离设计
|
||||
- **逻辑删除**: 符合项目安全规范
|
||||
|
||||
---
|
||||
|
||||
## 📊 数据库变更详情
|
||||
|
||||
### 2.1 新增表结构 (11张表)
|
||||
|
||||
#### 2.1.1 基础配置表
|
||||
- `jcbt_scholarship_type` - 奖学金类型表
|
||||
- `jcbt_scholarship_compatibility` - 兼得关系表
|
||||
- `jcbt_scholarship_batch` - 评定批次表
|
||||
|
||||
#### 2.1.2 规则引擎表
|
||||
- `jcbt_scholarship_rule` - 评定规则主表
|
||||
- `jcbt_scholarship_rule_condition` - 规则条件表 ⭐ 核心
|
||||
- `jcbt_scholarship_rule_action` - 规则动作表
|
||||
|
||||
#### 2.1.3 业务管理表
|
||||
- `jcbt_scholarship_quota` - 名额分配表
|
||||
- `jcbt_scholarship_application` - 申请记录表
|
||||
- `jcbt_scholarship_attachment` - 申请材料表
|
||||
- `jcbt_scholarship_review` - 审核记录表
|
||||
- `jcbt_scholarship_award` - 获奖记录表
|
||||
|
||||
### 2.2 字典数据配置
|
||||
新增9类字典数据,涵盖奖学金类别、等级、状态等业务枚举值。
|
||||
|
||||
### 2.3 索引优化
|
||||
设计13个性能优化索引,支持高效查询。
|
||||
|
||||
---
|
||||
|
||||
## 🔧 技术规范遵循
|
||||
|
||||
### 3.1 数据库规范 ✅
|
||||
- 雪花ID主键: `bigint(20)`
|
||||
- 统一基础字段: `create_by`, `create_time`, `update_by`, `update_time`
|
||||
- 逻辑删除: `deleted` 字段
|
||||
- 多租户: `tenant_id` 字段
|
||||
- 字符编码: UTF8MB4
|
||||
|
||||
### 3.2 命名规范 ✅
|
||||
- 表名前缀: `jcbt_`
|
||||
- 字段命名: 下划线分隔
|
||||
- 索引命名: `idx_` 或 `uk_` 前缀
|
||||
|
||||
### 3.3 文档规范 ✅
|
||||
- Markdown格式文档
|
||||
- 完整的设计说明
|
||||
- 详细的使用指南
|
||||
- 标准的变更记录
|
||||
|
||||
---
|
||||
|
||||
## 📈 业务价值
|
||||
|
||||
### 4.1 功能完整性
|
||||
- 支持8大核心业务模块
|
||||
- 覆盖奖学金全生命周期管理
|
||||
- 满足复杂业务规则需求
|
||||
|
||||
### 4.2 技术先进性
|
||||
- 灵活的规则引擎设计
|
||||
- 高性能的数据库设计
|
||||
- 现代化的架构理念
|
||||
|
||||
### 4.3 可维护性
|
||||
- 完整的技术文档
|
||||
- 标准化的代码结构
|
||||
- 清晰的业务边界
|
||||
|
||||
---
|
||||
|
||||
## 🎯 后续计划
|
||||
|
||||
### 5.1 第一阶段 (本周内)
|
||||
- [ ] 执行建表脚本,初始化数据库
|
||||
- [ ] 创建Maven配置文件 (pom.xml)
|
||||
- [ ] 开发基础实体类
|
||||
|
||||
### 5.2 第二阶段 (下周)
|
||||
- [ ] 开发核心业务API接口
|
||||
- [ ] 实现规则引擎核心算法
|
||||
- [ ] 完成单元测试
|
||||
|
||||
### 5.3 第三阶段 (计划中)
|
||||
- [ ] 前端页面开发
|
||||
- [ ] 系统集成测试
|
||||
- [ ] 用户验收测试
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 6.1 开发注意事项
|
||||
1. **VO类规范**: 必须包含四个基础字段,避免MyBatis映射错误
|
||||
2. **权限控制**: 每个接口必须有 `@SaCheckPermission` 注解
|
||||
3. **参数校验**: 使用Bean Validation进行参数校验
|
||||
4. **异常处理**: 遵循统一异常处理规范
|
||||
|
||||
### 6.2 数据安全
|
||||
1. 敏感数据加密存储
|
||||
2. 完整的操作审计日志
|
||||
3. 严格的权限边界控制
|
||||
4. 多租户数据隔离
|
||||
|
||||
### 6.3 性能考虑
|
||||
1. 大数据量使用批量操作
|
||||
2. 合理使用索引和缓存
|
||||
3. 避免深度分页查询
|
||||
4. 定期数据归档策略
|
||||
|
||||
---
|
||||
|
||||
## 📝 文档更新记录
|
||||
|
||||
### 7.1 新增文档
|
||||
- `docs/需求文档/奖惩补贴需求/奖学金管理数据模型设计.md` - 581行,详细设计文档
|
||||
- `docs/需求文档/奖惩补贴需求/奖学金管理建表脚本.sql` - 366行,完整建表脚本
|
||||
- `docs/需求文档/奖惩补贴需求/奖学金管理基础数据.sql` - 215行,基础数据配置
|
||||
- `docs/需求文档/奖惩补贴需求/README.md` - 369行,使用指南
|
||||
|
||||
### 7.2 相关文档
|
||||
需要后续创建的API文档:
|
||||
- `docs/开发文档/API/奖学金管理API.md` (计划中)
|
||||
- `docs/开发文档/奖学金规则引擎开发指南.md` (计划中)
|
||||
|
||||
---
|
||||
|
||||
## 🎉 变更总结
|
||||
|
||||
本次变更成功完成了奖学金管理模块的数据模型设计,建立了完整的技术基础:
|
||||
|
||||
✅ **设计完整**: 11张核心表,覆盖全业务场景
|
||||
✅ **技术先进**: 灵活规则引擎,支持复杂业务逻辑
|
||||
✅ **规范标准**: 完全符合项目技术规范
|
||||
✅ **文档齐全**: 4个核心文档,使用指南完整
|
||||
✅ **可扩展性**: 支持后续功能扩展和技术升级
|
||||
|
||||
**下一步重点**: 基于此数据模型开始后端API开发,实现核心业务功能。
|
||||
|
||||
---
|
||||
|
||||
## 🔧 数据库字段缺失修复 - create_dept字段
|
||||
|
||||
**⏰ 修复时间**: 2025-01-27 17:30:00
|
||||
|
||||
### 🚨 问题描述
|
||||
在前面修复了Controller类型转换问题后,测试时发现新的数据库错误:
|
||||
```
|
||||
Unknown column 'create_dept' in 'field list'
|
||||
```
|
||||
|
||||
**根本原因**:
|
||||
- `JcbtScholarshipCompatibility` 实体类继承了 `BaseEntity`
|
||||
- `BaseEntity` 包含 `create_dept` 字段(第37行)
|
||||
- 但 `jcbt_scholarship_compatibility` 数据库表缺少该字段
|
||||
- MyBatis插入时试图插入不存在的字段,导致SQL语法错误
|
||||
|
||||
### 🛠️ 修复方案
|
||||
**文件**: `backend/fix_compatibility_create_dept.sql`
|
||||
|
||||
创建专门的数据库修复脚本:
|
||||
```sql
|
||||
ALTER TABLE `jcbt_scholarship_compatibility`
|
||||
ADD COLUMN IF NOT EXISTS `create_dept` BIGINT(20) COMMENT '创建部门'
|
||||
AFTER `description`;
|
||||
```
|
||||
|
||||
### 📝 修改内容
|
||||
1. **新增SQL修复脚本**:`backend/fix_compatibility_create_dept.sql`
|
||||
- 为 `jcbt_scholarship_compatibility` 表添加 `create_dept` 字段
|
||||
- 包含验证脚本确认修复效果
|
||||
- 添加详细的修复说明
|
||||
|
||||
2. **更新通用修复脚本**:`backend/sql/jcbt_scholarship_management.sql`
|
||||
- 在现有脚本基础上添加兼容性表的字段修复
|
||||
- 确保后续部署时自动包含该修复
|
||||
|
||||
### ✅ 修复步骤
|
||||
1. **执行SQL修复脚本**:
|
||||
```bash
|
||||
mysql -u root -p ruoyi-vue-pro < backend/fix_compatibility_create_dept.sql
|
||||
```
|
||||
2. **重启后端服务**确保缓存清除
|
||||
3. **测试兼容性配置功能**验证修复效果
|
||||
|
||||
### 🎯 修复效果
|
||||
- ✅ 解决了 `create_dept` 字段缺失导致的SQL错误
|
||||
- ✅ 保证了实体类与数据库表结构的一致性
|
||||
- ✅ 修复了兼容性配置保存功能
|
||||
- ✅ 确保了BaseEntity标准字段的完整性
|
||||
|
||||
### 📋 注意事项
|
||||
- 必须先执行数据库修复脚本再重启服务
|
||||
- 该修复适用于所有继承BaseEntity的表
|
||||
- 建议检查其他可能缺少标准字段的表
|
||||
|
||||
---
|
||||
|
||||
**变更完成时间**: 2025-01-27 17:30:00
|
||||
**总耗时**: 约1小时
|
||||
**变更质量**: 高质量完成 ⭐⭐⭐⭐⭐
|
||||
@@ -1,79 +0,0 @@
|
||||
## 2025-01-28 14:30:00 - 解决"我已审批"功能数据权限过滤问题
|
||||
|
||||
### 🐛 问题描述
|
||||
- **问题现象**: "我已审批"功能查询不到数据,返回空列表
|
||||
- **根本原因**: MyBatis-Plus数据权限插件拦截了CwApprovalRecordMapper的查询,但该Mapper缺少@DataPermission注解配置
|
||||
- **影响范围**: 所有用户的"我已审批"功能无法正常显示历史审批记录
|
||||
|
||||
### 🔧 解决方案
|
||||
**采用方案4**: 使用`DataPermissionHelper.ignore()`绕过数据权限过滤
|
||||
|
||||
**修改文件**: `backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/impl/CwApprovalRecordServiceImpl.java`
|
||||
1. **添加导入**: 引入`org.dromara.common.mybatis.helper.DataPermissionHelper`
|
||||
2. **修改方法**: `queryApprovedByCurrentUser()`使用`DataPermissionHelper.ignore()`包装查询逻辑
|
||||
3. **保持业务逻辑**: 仍然按照approverId过滤,只是绕过了数据权限插件的额外过滤
|
||||
|
||||
### ✅ 技术细节
|
||||
```java
|
||||
// 🔧 使用DataPermissionHelper.ignore()绕过数据权限过滤
|
||||
// 原因:我已审批功能应该显示当前用户的所有审批记录,不受数据权限限制
|
||||
List<CwApprovalRecord> records = DataPermissionHelper.ignore(() -> {
|
||||
// 查询当前用户已审批的记录(状态不是waiting和pending)
|
||||
LambdaQueryWrapper<CwApprovalRecord> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(CwApprovalRecord::getApproverId, currentUserId)
|
||||
.notIn(CwApprovalRecord::getNodeStatus, Arrays.asList("waiting", "pending"))
|
||||
.orderByDesc(CwApprovalRecord::getEndTime);
|
||||
|
||||
return baseMapper.selectList(queryWrapper);
|
||||
});
|
||||
```
|
||||
|
||||
### 📋 验证步骤
|
||||
1. 手动重新编译后端服务
|
||||
2. 重启服务
|
||||
3. 登录系统测试"我已审批"功能
|
||||
4. 确认能正常显示已审批的历史记录
|
||||
|
||||
### 📊 备选方案(未采用)
|
||||
- 方案1: 为CwApprovalRecordMapper添加@DataPermission注解
|
||||
- 方案2: 使用@IgnoreDataPermission注解
|
||||
- 方案3: 修改为自定义SQL查询
|
||||
|
||||
---
|
||||
|
||||
## 2025-01-28 15:45:00 - 修复班主任批量申请奖学金页面字段映射错误
|
||||
|
||||
### 🐛 问题描述
|
||||
- **问题现象**: 班主任批量申请奖学金功能失败,提交时报"学生学号不能为空"错误
|
||||
- **根本原因**: 批量申请提交时使用了错误的字段名 `s.studentCode`,但学生数据中实际字段为 `s.studentNo`
|
||||
- **影响范围**: 班主任批量申请奖学金功能完全无法使用
|
||||
|
||||
### 🔧 解决方案
|
||||
**修改文件**: `web/src/views/jcbt/scholarship/application/index.vue` 第1104行
|
||||
|
||||
**修改内容**:
|
||||
```javascript
|
||||
// ❌ 修复前(错误)
|
||||
studentCode: s.studentCode,
|
||||
|
||||
// ✅ 修复后(正确)
|
||||
studentCode: s.studentNo,
|
||||
```
|
||||
|
||||
### 📋 技术细节
|
||||
- **数据库字段**: `student_no`
|
||||
- **后端实体类**: `studentCode` 通过 `@TableField("student_no")` 映射
|
||||
- **前端学生数据**: API返回的学生对象使用 `studentNo` 字段
|
||||
- **提交数据**: 需要将 `studentNo` 映射到 `studentCode` 以匹配后端期望
|
||||
|
||||
### ✅ 验证步骤
|
||||
1. 重新编译前端项目
|
||||
2. 登录班主任账号测试批量申请功能
|
||||
3. 确认能够成功提交批量申请
|
||||
4. 验证申请记录正常显示
|
||||
|
||||
### 🔗 相关变更
|
||||
- 关联问题:2025-08-08 后端实体类字段映射修复后,前端未同步更新
|
||||
- 参考文档:`code-adjust-record-2025-08-08-wuzhen.md`
|
||||
|
||||
---
|
||||
@@ -1,27 +0,0 @@
|
||||
-- 招生统计概览菜单
|
||||
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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '招生统计概览', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1), 1, 'statistics', 'zsjy/statistics/index', 0, 0, 'C', '0', '0', 'zsjy:statistics:list', 'chart', 'admin', sysdate(), '', 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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '统计概览', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生统计概览' AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1) LIMIT 1), 1, '#', '', 0, 0, 'F', '0', '0', 'zsjy:statistics:overview', '#', 'admin', sysdate(), '', 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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '专业分布', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生统计概览' AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1) LIMIT 1), 2, '#', '', 0, 0, 'F', '0', '0', 'zsjy:statistics:major', '#', 'admin', sysdate(), '', 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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '地区分布', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生统计概览' AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1) LIMIT 1), 3, '#', '', 0, 0, 'F', '0', '0', 'zsjy:statistics:region', '#', 'admin', sysdate(), '', 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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '性别比例', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生统计概览' AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1) LIMIT 1), 4, '#', '', 0, 0, 'F', '0', '0', 'zsjy:statistics:gender', '#', 'admin', sysdate(), '', 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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '报名趋势', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生统计概览' AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1) LIMIT 1), 5, '#', '', 0, 0, 'F', '0', '0', 'zsjy:statistics:trend', '#', 'admin', sysdate(), '', 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_by, create_time, update_by, update_time, remark)
|
||||
VALUES(next value for sys_menu_seq, '状态分布', (SELECT menu_id FROM sys_menu WHERE menu_name = '招生统计概览' AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招生迎新' LIMIT 1) LIMIT 1), 6, '#', '', 0, 0, 'F', '0', '0', 'zsjy:statistics:status', '#', 'admin', sysdate(), '', null, '');
|
||||
@@ -1,238 +0,0 @@
|
||||
-- 假期留宿状态过滤功能 - 数据库索引优化脚本
|
||||
--
|
||||
-- 目的:优化假期留宿管理表的查询性能,特别是状态过滤功能
|
||||
-- 创建时间:2025-01-28
|
||||
-- 适用表:xg_holiday_stay
|
||||
|
||||
-- =============================================================================
|
||||
-- 1. 基础索引:结束日期字段索引
|
||||
-- =============================================================================
|
||||
|
||||
-- 检查是否已存在索引
|
||||
SELECT
|
||||
INDEX_NAME,
|
||||
COLUMN_NAME,
|
||||
NON_UNIQUE
|
||||
FROM
|
||||
INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'xg_holiday_stay'
|
||||
AND COLUMN_NAME = 'apply_end_date';
|
||||
|
||||
-- 创建结束日期索引(如果不存在)
|
||||
-- 这个索引对状态过滤查询非常重要
|
||||
SET @sql = '
|
||||
CREATE INDEX idx_xg_holiday_stay_apply_end_date
|
||||
ON xg_holiday_stay(apply_end_date)
|
||||
COMMENT ''假期留宿结束日期索引,用于状态过滤查询优化''';
|
||||
|
||||
-- 检查索引是否存在,不存在则创建
|
||||
SET @index_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'xg_holiday_stay'
|
||||
AND INDEX_NAME = 'idx_xg_holiday_stay_apply_end_date'
|
||||
);
|
||||
|
||||
SET @sql = IF(@index_exists = 0, @sql, 'SELECT ''索引 idx_xg_holiday_stay_apply_end_date 已存在'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================================================
|
||||
-- 2. 复合索引:状态查询优化
|
||||
-- =============================================================================
|
||||
|
||||
-- 创建状态查询复合索引
|
||||
-- 包含:租户ID + 删除标志 + 结束日期
|
||||
-- 这个索引能显著提升多租户环境下的状态过滤查询性能
|
||||
SET @sql = '
|
||||
CREATE INDEX idx_xg_holiday_stay_status_query
|
||||
ON xg_holiday_stay(tenant_id, deleted, apply_end_date)
|
||||
COMMENT ''假期留宿状态查询复合索引,优化多租户环境下的过滤查询''';
|
||||
|
||||
-- 检查索引是否存在
|
||||
SET @index_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'xg_holiday_stay'
|
||||
AND INDEX_NAME = 'idx_xg_holiday_stay_status_query'
|
||||
);
|
||||
|
||||
SET @sql = IF(@index_exists = 0, @sql, 'SELECT ''索引 idx_xg_holiday_stay_status_query 已存在'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================================================
|
||||
-- 3. 学生查询优化索引
|
||||
-- =============================================================================
|
||||
|
||||
-- 创建学生相关查询的复合索引
|
||||
-- 包含:学生姓名 + 结束日期,便于按学生筛选时的状态过滤
|
||||
SET @sql = '
|
||||
CREATE INDEX idx_xg_holiday_stay_student_status
|
||||
ON xg_holiday_stay(student_name, apply_end_date)
|
||||
COMMENT ''假期留宿学生状态查询索引,优化按学生筛选的状态过滤''';
|
||||
|
||||
-- 检查索引是否存在
|
||||
SET @index_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'xg_holiday_stay'
|
||||
AND INDEX_NAME = 'idx_xg_holiday_stay_student_status'
|
||||
);
|
||||
|
||||
SET @sql = IF(@index_exists = 0, @sql, 'SELECT ''索引 idx_xg_holiday_stay_student_status 已存在'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================================================
|
||||
-- 4. 时间范围查询优化索引
|
||||
-- =============================================================================
|
||||
|
||||
-- 创建时间范围查询的复合索引
|
||||
-- 包含:开始日期 + 结束日期,便于时间范围查询
|
||||
SET @sql = '
|
||||
CREATE INDEX idx_xg_holiday_stay_date_range
|
||||
ON xg_holiday_stay(apply_start_date, apply_end_date)
|
||||
COMMENT ''假期留宿时间范围查询索引,优化日期范围筛选''';
|
||||
|
||||
-- 检查索引是否存在
|
||||
SET @index_exists = (
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'xg_holiday_stay'
|
||||
AND INDEX_NAME = 'idx_xg_holiday_stay_date_range'
|
||||
);
|
||||
|
||||
SET @sql = IF(@index_exists = 0, @sql, 'SELECT ''索引 idx_xg_holiday_stay_date_range 已存在'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================================================
|
||||
-- 5. 索引使用情况分析
|
||||
-- =============================================================================
|
||||
|
||||
-- 查看表的所有索引
|
||||
SELECT
|
||||
INDEX_NAME AS '索引名称',
|
||||
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS '索引字段',
|
||||
INDEX_TYPE AS '索引类型',
|
||||
NON_UNIQUE AS '是否唯一',
|
||||
INDEX_COMMENT AS '索引注释'
|
||||
FROM
|
||||
INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'xg_holiday_stay'
|
||||
GROUP BY
|
||||
INDEX_NAME, INDEX_TYPE, NON_UNIQUE, INDEX_COMMENT
|
||||
ORDER BY
|
||||
INDEX_NAME;
|
||||
|
||||
-- =============================================================================
|
||||
-- 6. 查询性能测试示例
|
||||
-- =============================================================================
|
||||
|
||||
-- 设置查询性能测试变量
|
||||
SET @current_time = NOW();
|
||||
SET @test_tenant_id = 1; -- 替换为实际的租户ID
|
||||
|
||||
-- 测试1:有效状态查询
|
||||
EXPLAIN
|
||||
SELECT
|
||||
id, student_name, apply_end_date, tenant_id
|
||||
FROM
|
||||
xg_holiday_stay
|
||||
WHERE
|
||||
tenant_id = @test_tenant_id
|
||||
AND deleted = 0
|
||||
AND apply_end_date >= @current_time
|
||||
AND apply_end_date IS NOT NULL
|
||||
LIMIT 10;
|
||||
|
||||
-- 测试2:失效状态查询
|
||||
EXPLAIN
|
||||
SELECT
|
||||
id, student_name, apply_end_date, tenant_id
|
||||
FROM
|
||||
xg_holiday_stay
|
||||
WHERE
|
||||
tenant_id = @test_tenant_id
|
||||
AND deleted = 0
|
||||
AND (apply_end_date < @current_time OR apply_end_date IS NULL)
|
||||
LIMIT 10;
|
||||
|
||||
-- 测试3:按学生名称 + 状态查询
|
||||
EXPLAIN
|
||||
SELECT
|
||||
id, student_name, apply_end_date, tenant_id
|
||||
FROM
|
||||
xg_holiday_stay
|
||||
WHERE
|
||||
student_name LIKE '%张%'
|
||||
AND apply_end_date >= @current_time
|
||||
AND apply_end_date IS NOT NULL
|
||||
LIMIT 10;
|
||||
|
||||
-- =============================================================================
|
||||
-- 7. 索引维护建议
|
||||
-- =============================================================================
|
||||
|
||||
/*
|
||||
索引维护建议:
|
||||
|
||||
1. 监控索引使用情况
|
||||
- 定期检查索引的使用频率
|
||||
- 删除未使用的索引以减少存储开销
|
||||
|
||||
2. 索引大小监控
|
||||
- 监控索引占用的存储空间
|
||||
- 当数据量增长时,考虑索引的分区策略
|
||||
|
||||
3. 查询性能监控
|
||||
- 定期分析慢查询日志
|
||||
- 使用EXPLAIN分析查询执行计划
|
||||
|
||||
4. 数据更新频率考量
|
||||
- apply_end_date字段更新不频繁,适合建立索引
|
||||
- 如果业务场景中该字段更新频繁,需要权衡索引维护成本
|
||||
|
||||
5. 定期重建索引(可选)
|
||||
- 对于频繁更新的表,可以定期重建索引以优化性能
|
||||
- 命令:ALTER TABLE xg_holiday_stay ENGINE=InnoDB;
|
||||
*/
|
||||
|
||||
-- =============================================================================
|
||||
-- 8. 清理脚本(如需删除索引)
|
||||
-- =============================================================================
|
||||
|
||||
/*
|
||||
-- 如果需要删除创建的索引,可以使用以下命令:
|
||||
|
||||
DROP INDEX idx_xg_holiday_stay_apply_end_date ON xg_holiday_stay;
|
||||
DROP INDEX idx_xg_holiday_stay_status_query ON xg_holiday_stay;
|
||||
DROP INDEX idx_xg_holiday_stay_student_status ON xg_holiday_stay;
|
||||
DROP INDEX idx_xg_holiday_stay_date_range ON xg_holiday_stay;
|
||||
*/
|
||||
|
||||
-- =============================================================================
|
||||
-- 执行完成提示
|
||||
-- =============================================================================
|
||||
|
||||
SELECT
|
||||
'✅ 假期留宿状态过滤索引优化脚本执行完成' AS message,
|
||||
NOW() AS execution_time,
|
||||
'请查看上述输出确认索引创建情况' AS note;
|
||||
@@ -1,690 +0,0 @@
|
||||
/**
|
||||
* 维修分类功能端到端测试脚本
|
||||
*
|
||||
* 使用方法:
|
||||
* 1. 在 Cursor 中打开此文件
|
||||
* 2. 使用 Playwright MCP 插件运行测试
|
||||
* 3. 观察浏览器自动化执行测试流程
|
||||
*
|
||||
* 测试覆盖:
|
||||
* - 页面加载验证
|
||||
* - CRUD 操作测试
|
||||
* - 树形结构测试
|
||||
* - 搜索功能测试
|
||||
* - 数据验证测试
|
||||
*
|
||||
* @author Cursor AI
|
||||
* @date 2025-07-01
|
||||
*/
|
||||
|
||||
// 测试配置
|
||||
const testConfig = {
|
||||
baseUrl: 'http://localhost:80',
|
||||
timeout: 30000,
|
||||
testDataPath: '../test-data/category-test-data.json',
|
||||
};
|
||||
|
||||
// 测试数据(从JSON文件中提取的关键数据)
|
||||
const testData = {
|
||||
login: {
|
||||
username: 'admin',
|
||||
password: 'admin123',
|
||||
},
|
||||
testCategory: {
|
||||
categoryName: '测试电路维修',
|
||||
categoryCode: 'TEST_ELECTRIC_001',
|
||||
categoryDescription: '测试用电路维修分类,包括照明、插座、开关等电气设备的维修工作',
|
||||
skillLevel: '2',
|
||||
estimatedDuration: '120',
|
||||
standardCost: '200.00',
|
||||
},
|
||||
updateCategory: {
|
||||
categoryName: '测试电路维修-已修改',
|
||||
categoryDescription: '已修改的测试用电路维修分类描述',
|
||||
estimatedDuration: '180',
|
||||
standardCost: '250.00',
|
||||
},
|
||||
parentCategory: {
|
||||
categoryName: '测试父级分类',
|
||||
categoryCode: 'TEST_PARENT_001',
|
||||
categoryDescription: '测试用父级分类,用于验证树形结构功能',
|
||||
},
|
||||
childCategory: {
|
||||
categoryName: '测试子级分类',
|
||||
categoryCode: 'TEST_CHILD_001',
|
||||
categoryDescription: '测试用子级分类,验证父子关系',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* 主测试执行函数
|
||||
* 此函数将被 Playwright MCP 调用执行
|
||||
*/
|
||||
async function runMaintenanceCategoryTests() {
|
||||
console.log('🚀 开始执行维修分类功能端到端测试...');
|
||||
|
||||
try {
|
||||
// 阶段1: 环境准备和登录
|
||||
await stage1_LoginAndSetup();
|
||||
|
||||
// 阶段2: 页面加载验证
|
||||
await stage2_PageLoadValidation();
|
||||
|
||||
// 阶段3: CRUD操作测试
|
||||
await stage3_CRUDOperations();
|
||||
|
||||
// 阶段4: 树形结构测试
|
||||
await stage4_TreeStructureTest();
|
||||
|
||||
// 阶段5: 搜索功能测试
|
||||
await stage5_SearchFunctionality();
|
||||
|
||||
// 阶段6: 异常处理测试
|
||||
await stage6_ExceptionHandling();
|
||||
|
||||
// 阶段7: 清理测试数据
|
||||
await stage7_DataCleanup();
|
||||
|
||||
console.log('✅ 维修分类功能测试全部完成!');
|
||||
} catch (error) {
|
||||
console.error('❌ 测试执行失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段1: 登录和环境设置
|
||||
*/
|
||||
async function stage1_LoginAndSetup() {
|
||||
console.log('\n📋 阶段1: 登录和环境设置');
|
||||
|
||||
// 导航到登录页面
|
||||
await browser.navigate(testConfig.baseUrl + '/login');
|
||||
await browser.waitFor(2000);
|
||||
|
||||
// 获取登录页面快照
|
||||
console.log('📸 获取登录页面快照...');
|
||||
const loginSnapshot = await browser.snapshot();
|
||||
console.log('登录页面已加载');
|
||||
|
||||
// 执行登录操作
|
||||
console.log('🔑 执行登录操作...');
|
||||
await browser.type('用户名输入框', "input[placeholder*='用户名']", testData.login.username);
|
||||
await browser.type('密码输入框', "input[placeholder*='密码']", testData.login.password);
|
||||
await browser.click('登录按钮', "button:contains('登录')");
|
||||
|
||||
// 等待登录完成
|
||||
await browser.waitFor(3000);
|
||||
|
||||
// 验证登录成功
|
||||
const homeSnapshot = await browser.snapshot();
|
||||
console.log('✅ 登录成功,进入系统首页');
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段2: 页面加载验证
|
||||
*/
|
||||
async function stage2_PageLoadValidation() {
|
||||
console.log('\n📋 阶段2: 页面加载验证');
|
||||
|
||||
// 导航到维修分类页面
|
||||
console.log('🌐 导航到维修分类页面...');
|
||||
await browser.navigate(testConfig.baseUrl + '/hq/pm/repairCategory');
|
||||
await browser.waitFor(3000);
|
||||
|
||||
// 获取页面快照进行验证
|
||||
console.log('📸 验证页面加载状态...');
|
||||
const pageSnapshot = await browser.snapshot();
|
||||
|
||||
// 验证关键元素是否存在
|
||||
console.log('🔍 验证页面核心元素...');
|
||||
|
||||
// 验证页面标题
|
||||
console.log('- 检查页面标题');
|
||||
|
||||
// 验证操作按钮
|
||||
console.log('- 检查新增按钮是否可见');
|
||||
console.log('- 检查搜索功能区域');
|
||||
console.log('- 检查数据表格区域');
|
||||
|
||||
console.log('✅ 页面加载验证完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段3: CRUD操作测试
|
||||
*/
|
||||
async function stage3_CRUDOperations() {
|
||||
console.log('\n📋 阶段3: CRUD操作测试');
|
||||
|
||||
// 3.1 新增操作测试
|
||||
await test_CreateCategory();
|
||||
|
||||
// 3.2 查询操作测试
|
||||
await test_ReadCategory();
|
||||
|
||||
// 3.3 编辑操作测试
|
||||
await test_UpdateCategory();
|
||||
|
||||
// 3.4 删除操作测试 (最后执行)
|
||||
// await test_DeleteCategory(); // 暂时注释,避免影响后续测试
|
||||
|
||||
console.log('✅ CRUD操作测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试新增分类功能
|
||||
*/
|
||||
async function test_CreateCategory() {
|
||||
console.log('\n🔨 测试新增分类功能...');
|
||||
|
||||
// 点击新增按钮
|
||||
console.log('📝 点击新增按钮...');
|
||||
await browser.click('新增按钮', "button:contains('新增')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 获取弹窗快照
|
||||
const dialogSnapshot = await browser.snapshot();
|
||||
console.log('📸 新增弹窗已打开');
|
||||
|
||||
// 填写表单信息
|
||||
console.log('✏️ 填写表单信息...');
|
||||
|
||||
// 分类名称
|
||||
await browser.type(
|
||||
'分类名称输入框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.testCategory.categoryName,
|
||||
);
|
||||
console.log(`- 已填写分类名称: ${testData.testCategory.categoryName}`);
|
||||
|
||||
// 分类编码
|
||||
await browser.type(
|
||||
'分类编码输入框',
|
||||
"input[placeholder*='分类编码']",
|
||||
testData.testCategory.categoryCode,
|
||||
);
|
||||
console.log(`- 已填写分类编码: ${testData.testCategory.categoryCode}`);
|
||||
|
||||
// 描述信息
|
||||
await browser.type(
|
||||
'描述输入框',
|
||||
"textarea[placeholder*='描述']",
|
||||
testData.testCategory.categoryDescription,
|
||||
);
|
||||
console.log('- 已填写描述信息');
|
||||
|
||||
// 技能等级
|
||||
console.log('- 选择技能等级...');
|
||||
await browser.click('技能等级下拉', "select[placeholder*='技能等级']");
|
||||
await browser.selectOption('技能等级选项', 'select', [testData.testCategory.skillLevel]);
|
||||
|
||||
// 预估时长
|
||||
await browser.type(
|
||||
'预估时长输入框',
|
||||
"input[placeholder*='预估时长']",
|
||||
testData.testCategory.estimatedDuration,
|
||||
);
|
||||
console.log(`- 已填写预估时长: ${testData.testCategory.estimatedDuration} 分钟`);
|
||||
|
||||
// 标准成本
|
||||
await browser.type(
|
||||
'标准成本输入框',
|
||||
"input[placeholder*='标准成本']",
|
||||
testData.testCategory.standardCost,
|
||||
);
|
||||
console.log(`- 已填写标准成本: ${testData.testCategory.standardCost} 元`);
|
||||
|
||||
// 提交表单
|
||||
console.log('💾 提交表单...');
|
||||
await browser.click('确定按钮', "button:contains('确定')");
|
||||
await browser.waitFor(2000);
|
||||
|
||||
// 验证操作结果
|
||||
const resultSnapshot = await browser.snapshot();
|
||||
console.log('📸 获取操作结果快照');
|
||||
console.log('✅ 新增分类操作完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试查询分类功能
|
||||
*/
|
||||
async function test_ReadCategory() {
|
||||
console.log('\n🔍 测试查询分类功能...');
|
||||
|
||||
// 搜索刚创建的分类
|
||||
console.log('🔎 搜索新创建的分类...');
|
||||
await browser.type(
|
||||
'搜索框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.testCategory.categoryName,
|
||||
);
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 验证搜索结果
|
||||
const searchSnapshot = await browser.snapshot();
|
||||
console.log('📸 搜索结果快照已获取');
|
||||
console.log('✅ 查询功能验证完成');
|
||||
|
||||
// 重置搜索条件
|
||||
console.log('🔄 重置搜索条件...');
|
||||
await browser.click('重置按钮', "button:contains('重置')");
|
||||
await browser.waitFor(1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试编辑分类功能
|
||||
*/
|
||||
async function test_UpdateCategory() {
|
||||
console.log('\n✏️ 测试编辑分类功能...');
|
||||
|
||||
// 先搜索目标分类
|
||||
await browser.type(
|
||||
'搜索框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.testCategory.categoryName,
|
||||
);
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 点击编辑按钮
|
||||
console.log('📝 点击编辑按钮...');
|
||||
const editSnapshot = await browser.snapshot();
|
||||
await browser.click('编辑按钮', "button:contains('修改')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 修改表单信息
|
||||
console.log('✏️ 修改表单信息...');
|
||||
|
||||
// 修改分类名称
|
||||
await browser.type(
|
||||
'分类名称输入框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.updateCategory.categoryName,
|
||||
);
|
||||
console.log(`- 已修改分类名称: ${testData.updateCategory.categoryName}`);
|
||||
|
||||
// 修改描述
|
||||
await browser.type(
|
||||
'描述输入框',
|
||||
"textarea[placeholder*='描述']",
|
||||
testData.updateCategory.categoryDescription,
|
||||
);
|
||||
console.log('- 已修改描述信息');
|
||||
|
||||
// 修改预估时长
|
||||
await browser.type(
|
||||
'预估时长输入框',
|
||||
"input[placeholder*='预估时长']",
|
||||
testData.updateCategory.estimatedDuration,
|
||||
);
|
||||
console.log(`- 已修改预估时长: ${testData.updateCategory.estimatedDuration} 分钟`);
|
||||
|
||||
// 保存修改
|
||||
console.log('💾 保存修改...');
|
||||
await browser.click('确定按钮', "button:contains('确定')");
|
||||
await browser.waitFor(2000);
|
||||
|
||||
const updateResultSnapshot = await browser.snapshot();
|
||||
console.log('✅ 编辑操作完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段4: 树形结构测试
|
||||
*/
|
||||
async function stage4_TreeStructureTest() {
|
||||
console.log('\n📋 阶段4: 树形结构测试');
|
||||
|
||||
// 4.1 创建父级分类
|
||||
await test_CreateParentCategory();
|
||||
|
||||
// 4.2 创建子级分类
|
||||
await test_CreateChildCategory();
|
||||
|
||||
// 4.3 验证树形展示
|
||||
await test_TreeDisplay();
|
||||
|
||||
console.log('✅ 树形结构测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建父级分类
|
||||
*/
|
||||
async function test_CreateParentCategory() {
|
||||
console.log('\n🌳 创建父级分类...');
|
||||
|
||||
await browser.click('新增按钮', "button:contains('新增')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
await browser.type(
|
||||
'分类名称输入框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.parentCategory.categoryName,
|
||||
);
|
||||
await browser.type(
|
||||
'分类编码输入框',
|
||||
"input[placeholder*='分类编码']",
|
||||
testData.parentCategory.categoryCode,
|
||||
);
|
||||
await browser.type(
|
||||
'描述输入框',
|
||||
"textarea[placeholder*='描述']",
|
||||
testData.parentCategory.categoryDescription,
|
||||
);
|
||||
|
||||
await browser.click('确定按钮', "button:contains('确定')");
|
||||
await browser.waitFor(2000);
|
||||
|
||||
console.log('✅ 父级分类创建完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建子级分类
|
||||
*/
|
||||
async function test_CreateChildCategory() {
|
||||
console.log('\n🌿 创建子级分类...');
|
||||
|
||||
// 搜索父级分类
|
||||
await browser.type(
|
||||
'搜索框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.parentCategory.categoryName,
|
||||
);
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 获取当前页面快照,查找新增子类按钮
|
||||
const parentRowSnapshot = await browser.snapshot();
|
||||
|
||||
// 点击新增子类按钮(如果存在)
|
||||
console.log('📝 尝试创建子级分类...');
|
||||
// 注:如果没有专门的"新增子类"按钮,则通过常规新增并选择父级
|
||||
await browser.click('新增按钮', "button:contains('新增')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
await browser.type(
|
||||
'分类名称输入框',
|
||||
"input[placeholder*='分类名称']",
|
||||
testData.childCategory.categoryName,
|
||||
);
|
||||
await browser.type(
|
||||
'分类编码输入框',
|
||||
"input[placeholder*='分类编码']",
|
||||
testData.childCategory.categoryCode,
|
||||
);
|
||||
await browser.type(
|
||||
'描述输入框',
|
||||
"textarea[placeholder*='描述']",
|
||||
testData.childCategory.categoryDescription,
|
||||
);
|
||||
|
||||
// 选择父级分类(如果有相关控件)
|
||||
console.log('- 设置父级分类关系...');
|
||||
|
||||
await browser.click('确定按钮', "button:contains('确定')");
|
||||
await browser.waitFor(2000);
|
||||
|
||||
console.log('✅ 子级分类创建完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证树形展示
|
||||
*/
|
||||
async function test_TreeDisplay() {
|
||||
console.log('\n🌲 验证树形结构展示...');
|
||||
|
||||
// 重置搜索,查看完整树形结构
|
||||
await browser.click('重置按钮', "button:contains('重置')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 获取树形结构快照
|
||||
const treeSnapshot = await browser.snapshot();
|
||||
console.log('📸 树形结构快照已获取');
|
||||
|
||||
// 验证树形展开/折叠功能(如果支持)
|
||||
console.log('🔍 验证树形交互功能...');
|
||||
|
||||
console.log('✅ 树形结构验证完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段5: 搜索功能测试
|
||||
*/
|
||||
async function stage5_SearchFunctionality() {
|
||||
console.log('\n📋 阶段5: 搜索功能测试');
|
||||
|
||||
// 5.1 按名称搜索
|
||||
await test_SearchByName();
|
||||
|
||||
// 5.2 按编码搜索
|
||||
await test_SearchByCode();
|
||||
|
||||
// 5.3 组合搜索
|
||||
await test_CombinedSearch();
|
||||
|
||||
console.log('✅ 搜索功能测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 按名称搜索测试
|
||||
*/
|
||||
async function test_SearchByName() {
|
||||
console.log('\n🔎 测试按名称搜索...');
|
||||
|
||||
await browser.type('搜索框', "input[placeholder*='分类名称']", '电路');
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
const nameSearchSnapshot = await browser.snapshot();
|
||||
console.log('📸 名称搜索结果快照已获取');
|
||||
|
||||
await browser.click('重置按钮', "button:contains('重置')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
console.log('✅ 按名称搜索测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 按编码搜索测试
|
||||
*/
|
||||
async function test_SearchByCode() {
|
||||
console.log('\n🔎 测试按编码搜索...');
|
||||
|
||||
await browser.type('编码搜索框', "input[placeholder*='分类编码']", 'TEST');
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
const codeSearchSnapshot = await browser.snapshot();
|
||||
console.log('📸 编码搜索结果快照已获取');
|
||||
|
||||
await browser.click('重置按钮', "button:contains('重置')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
console.log('✅ 按编码搜索测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 组合搜索测试
|
||||
*/
|
||||
async function test_CombinedSearch() {
|
||||
console.log('\n🔎 测试组合搜索...');
|
||||
|
||||
await browser.type('搜索框', "input[placeholder*='分类名称']", '测试');
|
||||
|
||||
// 选择状态过滤
|
||||
await browser.click('状态下拉', "select[placeholder*='状态']");
|
||||
await browser.selectOption('状态选项', 'select', ['1']);
|
||||
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
const combinedSearchSnapshot = await browser.snapshot();
|
||||
console.log('📸 组合搜索结果快照已获取');
|
||||
|
||||
await browser.click('重置按钮', "button:contains('重置')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
console.log('✅ 组合搜索测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段6: 异常处理测试
|
||||
*/
|
||||
async function stage6_ExceptionHandling() {
|
||||
console.log('\n📋 阶段6: 异常处理测试');
|
||||
|
||||
// 6.1 必填字段验证
|
||||
await test_RequiredFieldValidation();
|
||||
|
||||
// 6.2 数据格式验证
|
||||
await test_DataFormatValidation();
|
||||
|
||||
console.log('✅ 异常处理测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 必填字段验证测试
|
||||
*/
|
||||
async function test_RequiredFieldValidation() {
|
||||
console.log('\n❗ 测试必填字段验证...');
|
||||
|
||||
// 尝试提交空表单
|
||||
await browser.click('新增按钮', "button:contains('新增')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 直接点击确定,不填写任何信息
|
||||
await browser.click('确定按钮', "button:contains('确定')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 验证错误提示
|
||||
const validationSnapshot = await browser.snapshot();
|
||||
console.log('📸 必填字段验证快照已获取');
|
||||
|
||||
// 关闭弹窗
|
||||
await browser.click('取消按钮', "button:contains('取消')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
console.log('✅ 必填字段验证测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据格式验证测试
|
||||
*/
|
||||
async function test_DataFormatValidation() {
|
||||
console.log('\n❗ 测试数据格式验证...');
|
||||
|
||||
await browser.click('新增按钮', "button:contains('新增')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 输入无效数据
|
||||
await browser.type('分类编码输入框', "input[placeholder*='分类编码']", '@#$%无效编码');
|
||||
await browser.type('预估时长输入框', "input[placeholder*='预估时长']", 'abc');
|
||||
await browser.type('标准成本输入框', "input[placeholder*='标准成本']", '-100');
|
||||
|
||||
await browser.click('确定按钮', "button:contains('确定')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 验证格式验证提示
|
||||
const formatValidationSnapshot = await browser.snapshot();
|
||||
console.log('📸 数据格式验证快照已获取');
|
||||
|
||||
await browser.click('取消按钮', "button:contains('取消')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
console.log('✅ 数据格式验证测试完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 阶段7: 清理测试数据
|
||||
*/
|
||||
async function stage7_DataCleanup() {
|
||||
console.log('\n📋 阶段7: 清理测试数据');
|
||||
|
||||
console.log('🧹 开始清理测试数据...');
|
||||
|
||||
// 清理测试分类数据
|
||||
const testCategoriesToDelete = [
|
||||
testData.testCategory.categoryName,
|
||||
testData.updateCategory.categoryName,
|
||||
testData.parentCategory.categoryName,
|
||||
testData.childCategory.categoryName,
|
||||
];
|
||||
|
||||
for (const categoryName of testCategoriesToDelete) {
|
||||
await deleteTestCategory(categoryName);
|
||||
}
|
||||
|
||||
console.log('✅ 测试数据清理完成');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除测试分类
|
||||
*/
|
||||
async function deleteTestCategory(categoryName) {
|
||||
console.log(`🗑️ 删除测试分类: ${categoryName}`);
|
||||
|
||||
try {
|
||||
// 搜索目标分类
|
||||
await browser.type('搜索框', "input[placeholder*='分类名称']", categoryName);
|
||||
await browser.click('搜索按钮', "button:contains('搜索')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
// 获取搜索结果快照
|
||||
const searchSnapshot = await browser.snapshot();
|
||||
|
||||
// 如果找到数据,执行删除
|
||||
await browser.click('删除按钮', "button:contains('删除')");
|
||||
await browser.waitFor(500);
|
||||
|
||||
// 确认删除
|
||||
await browser.click('确认删除', "button:contains('确定')");
|
||||
await browser.waitFor(1000);
|
||||
|
||||
console.log(`✅ ${categoryName} 删除完成`);
|
||||
} catch (error) {
|
||||
console.log(`⚠️ ${categoryName} 删除失败或不存在: ${error.message}`);
|
||||
}
|
||||
|
||||
// 重置搜索条件
|
||||
await browser.click('重置按钮', "button:contains('重置')");
|
||||
await browser.waitFor(1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成测试报告
|
||||
*/
|
||||
function generateTestReport() {
|
||||
const report = {
|
||||
testSuite: '维修分类功能端到端测试',
|
||||
executionTime: new Date().toISOString(),
|
||||
totalTests: 9,
|
||||
passedTests: 0,
|
||||
failedTests: 0,
|
||||
testResults: [],
|
||||
summary: '测试执行完成',
|
||||
recommendations: [
|
||||
'定期执行回归测试',
|
||||
'关注用户界面的一致性',
|
||||
'加强数据验证规则',
|
||||
'优化搜索性能',
|
||||
],
|
||||
};
|
||||
|
||||
console.log('\n📊 测试报告:', JSON.stringify(report, null, 2));
|
||||
return report;
|
||||
}
|
||||
|
||||
// 导出主函数供 Playwright MCP 调用
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
module.exports = {
|
||||
runMaintenanceCategoryTests,
|
||||
testConfig,
|
||||
testData,
|
||||
};
|
||||
}
|
||||
|
||||
// 如果直接运行此脚本
|
||||
if (typeof window === 'undefined' && require.main === module) {
|
||||
console.log('此脚本需要在 Cursor 的 Playwright MCP 环境中运行');
|
||||
console.log('请在 Cursor 中打开此文件,并使用 Playwright MCP 插件执行测试');
|
||||
}
|
||||
@@ -1,318 +0,0 @@
|
||||
{
|
||||
"testEnvironment": {
|
||||
"baseUrl": "http://localhost:80",
|
||||
"apiUrl": "http://localhost:8080",
|
||||
"loginCredentials": {
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
},
|
||||
"testCategories": [
|
||||
{
|
||||
"id": "test_category_001",
|
||||
"categoryName": "测试电路维修",
|
||||
"categoryCode": "TEST_ELECTRIC_001",
|
||||
"categoryDescription": "测试用电路维修分类,包括照明、插座、开关等电气设备的维修工作",
|
||||
"parentId": 0,
|
||||
"skillLevel": "2",
|
||||
"estimatedDuration": 120,
|
||||
"standardCost": 200.00,
|
||||
"iconUrl": "/icons/electric.svg",
|
||||
"colorCode": "#ff6b35",
|
||||
"sortOrder": 100,
|
||||
"status": "1",
|
||||
"requiredSkills": "电工技能,安全操作",
|
||||
"remark": "测试数据,请勿删除"
|
||||
},
|
||||
{
|
||||
"id": "test_category_002",
|
||||
"categoryName": "测试水暖维修",
|
||||
"categoryCode": "TEST_PLUMBING_001",
|
||||
"categoryDescription": "测试用水暖维修分类,包括水管、暖气、卫生间等设备维修",
|
||||
"parentId": 0,
|
||||
"skillLevel": "2",
|
||||
"estimatedDuration": 150,
|
||||
"standardCost": 300.00,
|
||||
"iconUrl": "/icons/plumbing.svg",
|
||||
"colorCode": "#1890ff",
|
||||
"sortOrder": 101,
|
||||
"status": "1",
|
||||
"requiredSkills": "水暖技能,管道知识",
|
||||
"remark": "测试数据,用于功能验证"
|
||||
},
|
||||
{
|
||||
"id": "test_category_003",
|
||||
"categoryName": "测试父级分类",
|
||||
"categoryCode": "TEST_PARENT_001",
|
||||
"categoryDescription": "测试用父级分类,用于验证树形结构功能",
|
||||
"parentId": 0,
|
||||
"skillLevel": "1",
|
||||
"estimatedDuration": 60,
|
||||
"standardCost": 100.00,
|
||||
"iconUrl": "/icons/parent.svg",
|
||||
"colorCode": "#52c41a",
|
||||
"sortOrder": 102,
|
||||
"status": "1",
|
||||
"requiredSkills": "基础技能",
|
||||
"remark": "树形结构测试父节点"
|
||||
},
|
||||
{
|
||||
"id": "test_category_004",
|
||||
"categoryName": "测试子级分类",
|
||||
"categoryCode": "TEST_CHILD_001",
|
||||
"categoryDescription": "测试用子级分类,验证父子关系",
|
||||
"parentId": "test_category_003",
|
||||
"skillLevel": "2",
|
||||
"estimatedDuration": 90,
|
||||
"standardCost": 150.00,
|
||||
"iconUrl": "/icons/child.svg",
|
||||
"colorCode": "#722ed1",
|
||||
"sortOrder": 103,
|
||||
"status": "1",
|
||||
"requiredSkills": "专业技能",
|
||||
"remark": "树形结构测试子节点"
|
||||
}
|
||||
],
|
||||
"updateTestData": [
|
||||
{
|
||||
"id": "test_category_001",
|
||||
"categoryName": "测试电路维修-已修改",
|
||||
"categoryDescription": "已修改的测试用电路维修分类描述",
|
||||
"estimatedDuration": 180,
|
||||
"standardCost": 250.00,
|
||||
"remark": "已修改的测试数据"
|
||||
}
|
||||
],
|
||||
"invalidTestData": [
|
||||
{
|
||||
"description": "空分类名称测试",
|
||||
"categoryName": "",
|
||||
"categoryCode": "INVALID_001",
|
||||
"expectedError": "分类名称不能为空"
|
||||
},
|
||||
{
|
||||
"description": "空分类编码测试",
|
||||
"categoryName": "无效测试分类",
|
||||
"categoryCode": "",
|
||||
"expectedError": "分类编码不能为空"
|
||||
},
|
||||
{
|
||||
"description": "无效字符编码测试",
|
||||
"categoryName": "特殊字符测试",
|
||||
"categoryCode": "@#$%^&*",
|
||||
"expectedError": "分类编码格式不正确"
|
||||
},
|
||||
{
|
||||
"description": "负数时长测试",
|
||||
"categoryName": "负数测试",
|
||||
"categoryCode": "NEGATIVE_001",
|
||||
"estimatedDuration": -10,
|
||||
"expectedError": "预估时长必须大于0"
|
||||
},
|
||||
{
|
||||
"description": "负数成本测试",
|
||||
"categoryName": "负成本测试",
|
||||
"categoryCode": "NEGATIVE_002",
|
||||
"standardCost": -100.00,
|
||||
"expectedError": "标准成本必须大于等于0"
|
||||
},
|
||||
{
|
||||
"description": "重复编码测试",
|
||||
"categoryName": "重复编码测试",
|
||||
"categoryCode": "ELECTRIC",
|
||||
"expectedError": "分类编码已存在"
|
||||
}
|
||||
],
|
||||
"searchTestData": [
|
||||
{
|
||||
"description": "按分类名称搜索",
|
||||
"searchType": "categoryName",
|
||||
"searchValue": "电路",
|
||||
"expectedResults": [
|
||||
"电路维修",
|
||||
"测试电路维修"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "按分类编码搜索",
|
||||
"searchType": "categoryCode",
|
||||
"searchValue": "ELECTRIC",
|
||||
"expectedResults": [
|
||||
"ELECTRIC",
|
||||
"TEST_ELECTRIC_001"
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "按状态过滤",
|
||||
"searchType": "status",
|
||||
"searchValue": "1",
|
||||
"expectedResults": "所有正常状态的分类"
|
||||
},
|
||||
{
|
||||
"description": "按技能等级过滤",
|
||||
"searchType": "skillLevel",
|
||||
"searchValue": "2",
|
||||
"expectedResults": "所有中级技能等级的分类"
|
||||
},
|
||||
{
|
||||
"description": "组合搜索测试",
|
||||
"searchType": "combined",
|
||||
"searchValues": {
|
||||
"categoryName": "维修",
|
||||
"skillLevel": "2"
|
||||
},
|
||||
"expectedResults": "包含'维修'且技能等级为中级的分类"
|
||||
}
|
||||
],
|
||||
"performanceTestData": {
|
||||
"batchCreateCount": 10,
|
||||
"concurrentOperations": 5,
|
||||
"pageLoadTimeout": 3000,
|
||||
"operationTimeout": 5000,
|
||||
"searchTimeout": 2000
|
||||
},
|
||||
"uiSelectors": {
|
||||
"loginPage": {
|
||||
"usernameInput": "input[placeholder*='用户名']",
|
||||
"passwordInput": "input[placeholder*='密码']",
|
||||
"loginButton": "button[type='submit']"
|
||||
},
|
||||
"categoryPage": {
|
||||
"pageTitle": "h1, .page-title",
|
||||
"addButton": "button:contains('新增')",
|
||||
"searchButton": "button:contains('搜索')",
|
||||
"resetButton": "button:contains('重置')",
|
||||
"exportButton": "button:contains('导出')",
|
||||
"dataTable": "table, .el-table",
|
||||
"paginationInfo": ".el-pagination__total"
|
||||
},
|
||||
"categoryForm": {
|
||||
"dialog": ".el-dialog",
|
||||
"categoryNameInput": "input[placeholder*='分类名称']",
|
||||
"categoryCodeInput": "input[placeholder*='分类编码']",
|
||||
"descriptionTextarea": "textarea[placeholder*='描述']",
|
||||
"parentSelect": ".el-select:contains('上级分类')",
|
||||
"skillLevelSelect": "select[placeholder*='技能等级']",
|
||||
"durationInput": "input[placeholder*='预估时长']",
|
||||
"costInput": "input[placeholder*='标准成本']",
|
||||
"statusSelect": "select[placeholder*='状态']",
|
||||
"confirmButton": "button:contains('确定')",
|
||||
"cancelButton": "button:contains('取消')"
|
||||
},
|
||||
"searchForm": {
|
||||
"categoryNameSearch": "input[placeholder*='分类名称']",
|
||||
"categoryCodeSearch": "input[placeholder*='分类编码']",
|
||||
"skillLevelFilter": "select[placeholder*='技能等级']",
|
||||
"statusFilter": "select[placeholder*='状态']"
|
||||
},
|
||||
"tableActions": {
|
||||
"editButton": "button:contains('修改')",
|
||||
"deleteButton": "button:contains('删除')",
|
||||
"addChildButton": "button:contains('新增子类')",
|
||||
"viewButton": "button:contains('查看')"
|
||||
},
|
||||
"notifications": {
|
||||
"successMessage": ".el-message--success",
|
||||
"errorMessage": ".el-message--error",
|
||||
"warningMessage": ".el-message--warning",
|
||||
"confirmDialog": ".el-message-box"
|
||||
}
|
||||
},
|
||||
"testValidationRules": {
|
||||
"categoryName": {
|
||||
"required": true,
|
||||
"maxLength": 50,
|
||||
"pattern": "^[\\u4e00-\\u9fa5a-zA-Z0-9\\s_-]+$"
|
||||
},
|
||||
"categoryCode": {
|
||||
"required": true,
|
||||
"maxLength": 20,
|
||||
"pattern": "^[A-Z0-9_]+$",
|
||||
"unique": true
|
||||
},
|
||||
"categoryDescription": {
|
||||
"required": false,
|
||||
"maxLength": 200
|
||||
},
|
||||
"estimatedDuration": {
|
||||
"required": false,
|
||||
"min": 0,
|
||||
"max": 9999,
|
||||
"type": "integer"
|
||||
},
|
||||
"standardCost": {
|
||||
"required": false,
|
||||
"min": 0,
|
||||
"max": 999999.99,
|
||||
"type": "decimal",
|
||||
"precision": 2
|
||||
},
|
||||
"skillLevel": {
|
||||
"required": true,
|
||||
"values": [
|
||||
"1",
|
||||
"2",
|
||||
"3"
|
||||
],
|
||||
"labels": [
|
||||
"初级",
|
||||
"中级",
|
||||
"高级"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"required": true,
|
||||
"values": [
|
||||
"0",
|
||||
"1"
|
||||
],
|
||||
"labels": [
|
||||
"停用",
|
||||
"正常"
|
||||
]
|
||||
}
|
||||
},
|
||||
"expectedResponses": {
|
||||
"createSuccess": {
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
},
|
||||
"updateSuccess": {
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
},
|
||||
"deleteSuccess": {
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
},
|
||||
"listSuccess": {
|
||||
"code": 200,
|
||||
"msg": "查询成功",
|
||||
"structure": {
|
||||
"total": "number",
|
||||
"rows": "array"
|
||||
}
|
||||
},
|
||||
"treeSuccess": {
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"structure": {
|
||||
"data": "array"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cleanupData": {
|
||||
"testCategoryCodes": [
|
||||
"TEST_ELECTRIC_001",
|
||||
"TEST_PLUMBING_001",
|
||||
"TEST_PARENT_001",
|
||||
"TEST_CHILD_001"
|
||||
],
|
||||
"testCategoryNames": [
|
||||
"测试电路维修",
|
||||
"测试水暖维修",
|
||||
"测试父级分类",
|
||||
"测试子级分类"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,237 +0,0 @@
|
||||
/*
|
||||
工作流模块数据库结构
|
||||
|
||||
业务域:工作流引擎相关表
|
||||
包含表:flow_category, flow_definition, flow_his_task, flow_instance,
|
||||
flow_node, flow_skip, flow_task, flow_user
|
||||
|
||||
创建时间:2025-01-08
|
||||
维护人员:项目开发团队
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_category
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_category`;
|
||||
CREATE TABLE `flow_category` (
|
||||
`category_id` bigint(20) NOT NULL COMMENT '流程分类ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`parent_id` bigint(20) DEFAULT '0' COMMENT '父流程分类id',
|
||||
`ancestors` varchar(500) DEFAULT '' COMMENT '祖级列表',
|
||||
`category_name` varchar(30) NOT NULL COMMENT '流程分类名称',
|
||||
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
PRIMARY KEY (`category_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程分类';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_definition
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_definition`;
|
||||
CREATE TABLE `flow_definition` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`flow_code` varchar(40) NOT NULL COMMENT '流程编码',
|
||||
`flow_name` varchar(100) NOT NULL COMMENT '流程名称',
|
||||
`category` varchar(100) DEFAULT NULL COMMENT '流程类别',
|
||||
`version` varchar(20) NOT NULL COMMENT '流程版本',
|
||||
`is_publish` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否发布(0未发布 1已发布 9失效)',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)',
|
||||
`listener_type` varchar(100) DEFAULT NULL COMMENT '监听器类型',
|
||||
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
|
||||
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_flow_code_version` (`flow_code`, `version`, `tenant_id`, `del_flag`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`),
|
||||
KEY `idx_flow_code` (`flow_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程定义表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_his_task
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_his_task`;
|
||||
CREATE TABLE `flow_his_task` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
|
||||
`instance_id` bigint(20) NOT NULL COMMENT '对应flow_instance表的id',
|
||||
`task_id` bigint(20) NOT NULL COMMENT '对应flow_task表的id',
|
||||
`node_code` varchar(100) DEFAULT NULL COMMENT '开始节点编码',
|
||||
`node_name` varchar(100) DEFAULT NULL COMMENT '开始节点名称',
|
||||
`node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码',
|
||||
`target_node_name` varchar(200) DEFAULT NULL COMMENT '结束节点名称',
|
||||
`approver` varchar(40) DEFAULT NULL COMMENT '审批者',
|
||||
`cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
|
||||
`collaborator` varchar(40) DEFAULT NULL COMMENT '协作人',
|
||||
`skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`message` varchar(500) DEFAULT NULL COMMENT '审批意见',
|
||||
`variable` text COMMENT '任务变量',
|
||||
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '任务开始时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '审批完成时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_definition_id` (`definition_id`),
|
||||
KEY `idx_instance_id` (`instance_id`),
|
||||
KEY `idx_task_id` (`task_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='历史任务记录表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_instance
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_instance`;
|
||||
CREATE TABLE `flow_instance` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
|
||||
`business_id` varchar(40) NOT NULL COMMENT '业务id',
|
||||
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`node_code` varchar(40) NOT NULL COMMENT '流程节点编码',
|
||||
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
|
||||
`variable` text COMMENT '任务变量',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
`activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)',
|
||||
`def_json` text COMMENT '流程定义json',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`ext` varchar(500) DEFAULT NULL COMMENT '扩展字段,预留给业务系统使用',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_definition_id` (`definition_id`),
|
||||
KEY `idx_business_id` (`business_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程实例表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_node
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_node`;
|
||||
CREATE TABLE `flow_node` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`definition_id` bigint(20) NOT NULL COMMENT '流程定义id',
|
||||
`node_code` varchar(100) NOT NULL COMMENT '流程节点编码',
|
||||
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
|
||||
`permission_flag` varchar(200) DEFAULT NULL COMMENT '权限标识(权限类型:权限标识,可以多个,用逗号隔开)',
|
||||
`node_ratio` decimal(6,3) DEFAULT NULL COMMENT '流程签署比例值',
|
||||
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
|
||||
`any_node_skip` varchar(100) DEFAULT NULL COMMENT '任意结点跳转',
|
||||
`listener_type` varchar(100) DEFAULT NULL COMMENT '监听器类型',
|
||||
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
|
||||
`handler_type` varchar(100) DEFAULT NULL COMMENT '处理器类型',
|
||||
`handler_path` varchar(400) DEFAULT NULL COMMENT '处理器路径',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`version` varchar(20) NOT NULL COMMENT '版本',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`ext` text COMMENT '扩展属性',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_definition_id` (`definition_id`),
|
||||
KEY `idx_node_code` (`node_code`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程节点表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_skip
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_skip`;
|
||||
CREATE TABLE `flow_skip` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`definition_id` bigint(20) NOT NULL COMMENT '流程定义id',
|
||||
`now_node_code` varchar(100) NOT NULL COMMENT '当前流程节点的编码',
|
||||
`now_node_type` tinyint(1) DEFAULT NULL COMMENT '当前节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`next_node_code` varchar(100) NOT NULL COMMENT '下一个流程节点的编码',
|
||||
`next_node_type` tinyint(1) DEFAULT NULL COMMENT '下一个节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`skip_name` varchar(100) DEFAULT NULL COMMENT '跳转名称',
|
||||
`skip_type` varchar(40) DEFAULT NULL COMMENT '跳转类型(PASS审批通过 REJECT退回)',
|
||||
`skip_condition` varchar(200) DEFAULT NULL COMMENT '跳转条件',
|
||||
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_definition_id` (`definition_id`),
|
||||
KEY `idx_now_node_code` (`now_node_code`),
|
||||
KEY `idx_next_node_code` (`next_node_code`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节点跳转关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_task
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_task`;
|
||||
CREATE TABLE `flow_task` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
|
||||
`instance_id` bigint(20) NOT NULL COMMENT '对应flow_instance表的id',
|
||||
`node_code` varchar(100) NOT NULL COMMENT '节点编码',
|
||||
`node_name` varchar(100) DEFAULT NULL COMMENT '节点名称',
|
||||
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_definition_id` (`definition_id`),
|
||||
KEY `idx_instance_id` (`instance_id`),
|
||||
KEY `idx_node_code` (`node_code`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='待办任务表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for flow_user
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `flow_user`;
|
||||
CREATE TABLE `flow_user` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键id',
|
||||
`type` char(1) NOT NULL COMMENT '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)',
|
||||
`processed_by` varchar(80) DEFAULT NULL COMMENT '权限人',
|
||||
`associated` bigint(20) NOT NULL COMMENT '任务表id',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(80) DEFAULT NULL COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_processed_type` (`processed_by`,`type`),
|
||||
KEY `idx_associated` (`associated`) USING BTREE,
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程用户表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
代码生成模块数据库结构
|
||||
|
||||
业务域:代码生成器相关表
|
||||
包含表:gen_table, gen_table_column
|
||||
|
||||
创建时间:2025-01-08
|
||||
维护人员:项目开发团队
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for gen_table
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `gen_table`;
|
||||
CREATE TABLE `gen_table` (
|
||||
`table_id` bigint(20) NOT NULL COMMENT '编号',
|
||||
`data_name` varchar(200) DEFAULT '' COMMENT '数据源名称',
|
||||
`table_name` varchar(200) DEFAULT '' COMMENT '表名称',
|
||||
`table_comment` varchar(500) DEFAULT '' COMMENT '表描述',
|
||||
`sub_table_name` varchar(64) DEFAULT NULL COMMENT '关联子表的表名',
|
||||
`sub_table_fk_name` varchar(64) DEFAULT NULL COMMENT '子表关联字段名',
|
||||
`class_name` varchar(100) DEFAULT '' COMMENT '实体类名称',
|
||||
`tpl_category` varchar(200) DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)',
|
||||
`package_name` varchar(100) DEFAULT NULL COMMENT '生成包路径',
|
||||
`module_name` varchar(30) DEFAULT NULL COMMENT '生成模块名',
|
||||
`business_name` varchar(30) DEFAULT NULL COMMENT '生成业务名',
|
||||
`function_name` varchar(50) DEFAULT NULL COMMENT '生成功能名',
|
||||
`function_author` varchar(50) DEFAULT NULL COMMENT '生成功能作者',
|
||||
`gen_type` char(1) DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)',
|
||||
`gen_path` varchar(200) DEFAULT '/' COMMENT '生成路径(不填默认项目路径)',
|
||||
`options` varchar(1000) DEFAULT NULL COMMENT '其它生成选项',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`table_id`),
|
||||
KEY `idx_table_name` (`table_name`),
|
||||
KEY `idx_data_name` (`data_name`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成业务表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for gen_table_column
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `gen_table_column`;
|
||||
CREATE TABLE `gen_table_column` (
|
||||
`column_id` bigint(20) NOT NULL COMMENT '编号',
|
||||
`table_id` bigint(20) DEFAULT NULL COMMENT '归属表编号',
|
||||
`column_name` varchar(200) DEFAULT NULL COMMENT '列名称',
|
||||
`column_comment` varchar(500) DEFAULT NULL COMMENT '列描述',
|
||||
`column_type` varchar(100) DEFAULT NULL COMMENT '列类型',
|
||||
`java_type` varchar(500) DEFAULT NULL COMMENT 'JAVA类型',
|
||||
`java_field` varchar(200) DEFAULT NULL COMMENT 'JAVA字段名',
|
||||
`is_pk` char(1) DEFAULT NULL COMMENT '是否主键(1是)',
|
||||
`is_increment` char(1) DEFAULT NULL COMMENT '是否自增(1是)',
|
||||
`is_required` char(1) DEFAULT NULL COMMENT '是否必填(1是)',
|
||||
`is_insert` char(1) DEFAULT NULL COMMENT '是否为插入字段(1是)',
|
||||
`is_edit` char(1) DEFAULT NULL COMMENT '是否编辑字段(1是)',
|
||||
`is_list` char(1) DEFAULT NULL COMMENT '是否列表字段(1是)',
|
||||
`is_query` char(1) DEFAULT NULL COMMENT '是否查询字段(1是)',
|
||||
`query_type` varchar(200) DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)',
|
||||
`html_type` varchar(200) DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
|
||||
`dict_type` varchar(200) DEFAULT '' COMMENT '字典类型',
|
||||
`sort` int(11) DEFAULT NULL COMMENT '排序',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
PRIMARY KEY (`column_id`),
|
||||
KEY `idx_table_id` (`table_id`),
|
||||
KEY `idx_column_name` (`column_name`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成业务表字段';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,320 +0,0 @@
|
||||
/*
|
||||
后勤管理模块数据库结构
|
||||
|
||||
业务域:后勤管理相关表
|
||||
包含表:hq_hall_info, hq_hall_reservation, hq_sat_answer, hq_sat_category,
|
||||
hq_sat_detail, hq_sat_option, hq_sat_question, hq_sat_record,
|
||||
hq_sat_survey, hq_sat_survey_question
|
||||
|
||||
模块说明:
|
||||
- 报告厅预约管理:hq_hall_info, hq_hall_reservation
|
||||
- 满意度调查系统:hq_sat_* 相关表
|
||||
|
||||
创建时间:2025-01-08
|
||||
维护人员:项目开发团队
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_hall_info
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_hall_info`;
|
||||
CREATE TABLE `hq_hall_info` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
|
||||
`hall_image` text COMMENT '报告厅图片url',
|
||||
`hall_status` char(1) NOT NULL DEFAULT '1' COMMENT '报告厅状态:0-不可用,1-正常',
|
||||
`hall_description` text COMMENT '报告厅描述',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_hall_status` (`hall_status`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报告厅信息表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_hall_reservation
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_hall_reservation`;
|
||||
CREATE TABLE `hq_hall_reservation` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`hall_id` bigint(20) NOT NULL COMMENT '报告厅ID,关联hq_hall_info.id',
|
||||
`hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
|
||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||||
`end_time` datetime NOT NULL COMMENT '结束时间',
|
||||
`reservation_purpose` varchar(200) NOT NULL COMMENT '预约用途',
|
||||
`applicant_id` bigint(20) NOT NULL COMMENT '申请人id,关联sys_user.id',
|
||||
`applicant_name` varchar(50) NOT NULL COMMENT '申请人姓名',
|
||||
`applicant_phone` varchar(20) DEFAULT NULL COMMENT '申请人电话',
|
||||
`status` char(1) NOT NULL DEFAULT '0' COMMENT '预约状态:0-待审核,1-预约成功,2-预约失败',
|
||||
`audit_by` bigint(20) DEFAULT NULL COMMENT '审核人id,关联sys_user.id',
|
||||
`audit_name` varchar(50) DEFAULT NULL COMMENT '审核人姓名',
|
||||
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_hall_id` (`hall_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_applicant_id` (`applicant_id`),
|
||||
KEY `idx_time_range` (`start_time`,`end_time`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报告厅预约表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_answer
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_answer`;
|
||||
CREATE TABLE `hq_sat_answer` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`record_id` bigint(20) NOT NULL COMMENT '答题记录ID,关联hq_sat_record.id',
|
||||
`question_id` bigint(20) NOT NULL COMMENT '题目ID,关联hq_sat_question.id',
|
||||
`question_type` char(1) NOT NULL COMMENT '题目类型(1单选题 2多选题 3问答题)',
|
||||
`option_id` bigint(20) DEFAULT NULL COMMENT '选项ID,关联hq_sat_option.id(单选题、多选题用,问答题为NULL)',
|
||||
`option_value` varchar(50) DEFAULT NULL COMMENT '选项值(A、B、C、D等)',
|
||||
`option_text` varchar(500) DEFAULT NULL COMMENT '选项文本内容',
|
||||
`answer_value` text COMMENT '答案值(单选题存选项值,多选题存逗号分隔选项值,问答题存文本内容)',
|
||||
`answer_score` int(11) DEFAULT '0' COMMENT '该答案得分',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_record_id` (`record_id`),
|
||||
KEY `idx_question_id` (`question_id`),
|
||||
KEY `idx_question_type` (`question_type`),
|
||||
KEY `idx_option_id` (`option_id`),
|
||||
KEY `idx_record_question` (`record_id`,`question_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题答案表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_category
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_category`;
|
||||
CREATE TABLE `hq_sat_category` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`category_code` varchar(50) NOT NULL COMMENT '分类编码',
|
||||
`category_name` varchar(100) NOT NULL COMMENT '分类名称',
|
||||
`category_desc` varchar(500) DEFAULT NULL COMMENT '分类描述',
|
||||
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_category_code` (`category_code`,`tenant_id`,`deleted`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目分类表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_detail
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_detail`;
|
||||
CREATE TABLE `hq_sat_detail` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`record_id` bigint(20) NOT NULL COMMENT '答题记录ID,关联hq_sat_record.id',
|
||||
`question_id` bigint(20) NOT NULL COMMENT '题目ID,关联hq_sat_question.id',
|
||||
`answer_score` int(11) DEFAULT '0' COMMENT '答案分数',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_record_question` (`record_id`,`question_id`,`deleted`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_record_id` (`record_id`),
|
||||
KEY `idx_question_id` (`question_id`),
|
||||
KEY `idx_answer_score` (`answer_score`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题详情表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_option
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_option`;
|
||||
CREATE TABLE `hq_sat_option` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`option_text` varchar(50) NOT NULL COMMENT '选项文本',
|
||||
`option_value` int(11) NOT NULL COMMENT '选项分值',
|
||||
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评分选项表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_question
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_question`;
|
||||
CREATE TABLE `hq_sat_question` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`question_title` varchar(200) NOT NULL COMMENT '题目标题',
|
||||
`question_content` text COMMENT '题目内容(支持富文本)',
|
||||
`category_id` bigint(20) NOT NULL COMMENT '所属分类ID,关联hq_sat_category.id',
|
||||
`question_type` char(1) DEFAULT '1' COMMENT '题目类型(1单选题 2多选题 3问答题)',
|
||||
`is_required` tinyint(1) DEFAULT '1' COMMENT '是否必填(0否 1是)',
|
||||
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_category_id` (`category_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_question_type` (`question_type`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题库表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_record
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_record`;
|
||||
CREATE TABLE `hq_sat_record` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`survey_id` bigint(20) NOT NULL COMMENT '问卷ID,关联hq_sat_survey.id',
|
||||
`user_id` bigint(20) DEFAULT NULL COMMENT '答题用户ID,关联sys_user.id(匿名时为NULL)',
|
||||
`user_type` char(1) NOT NULL COMMENT '用户类型(1学生 2教职工 3超级管理员)',
|
||||
`user_dept` varchar(100) DEFAULT NULL COMMENT '用户部门(匿名时为NULL)',
|
||||
`submit_time` datetime NOT NULL COMMENT '提交时间',
|
||||
`total_score` decimal(10,2) DEFAULT '0.00' COMMENT '总分',
|
||||
`avg_score` decimal(5,2) DEFAULT '0.00' COMMENT '平均分',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_survey_id` (`survey_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_user_type` (`user_type`),
|
||||
KEY `idx_submit_time` (`submit_time`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题记录表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_survey
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_survey`;
|
||||
CREATE TABLE `hq_sat_survey` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`survey_code` varchar(50) NOT NULL COMMENT '问卷编号',
|
||||
`survey_title` varchar(200) NOT NULL COMMENT '问卷标题',
|
||||
`survey_desc` varchar(1000) DEFAULT NULL COMMENT '问卷描述',
|
||||
`survey_instruction` text COMMENT '填写说明',
|
||||
`target_group` varchar(100) NOT NULL COMMENT '目标群体(1学生 2教职工 3全体)',
|
||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||||
`end_time` datetime NOT NULL COMMENT '结束时间',
|
||||
`max_submit_times` int(11) DEFAULT '1' COMMENT '最大提交次数(0不限制)',
|
||||
`is_anonymous` tinyint(1) DEFAULT '0' COMMENT '是否匿名(0否 1是)',
|
||||
`is_published` tinyint(1) DEFAULT '0' COMMENT '是否发布(0否 1是)',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0草稿 1进行中 2已结束)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_survey_code` (`survey_code`,`tenant_id`,`deleted`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_target_group` (`target_group`),
|
||||
KEY `idx_time_range` (`start_time`,`end_time`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问卷表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_sat_survey_question
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_sat_survey_question`;
|
||||
CREATE TABLE `hq_sat_survey_question` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`survey_id` bigint(20) NOT NULL COMMENT '问卷ID,关联hq_sat_survey.id',
|
||||
`question_id` bigint(20) NOT NULL COMMENT '题目ID,关联hq_sat_question.id',
|
||||
`sort_order` int(11) DEFAULT '0' COMMENT '题目顺序',
|
||||
`weight` decimal(5,2) DEFAULT '1.00' COMMENT '题目权重',
|
||||
`is_required` tinyint(1) DEFAULT '1' COMMENT '是否必填(0否 1是)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_survey_question` (`survey_id`,`question_id`,`deleted`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_survey_id` (`survey_id`),
|
||||
KEY `idx_question_id` (`question_id`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问卷题目关联表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,286 +0,0 @@
|
||||
/*
|
||||
任务调度模块数据库结构
|
||||
|
||||
业务域:SnailJob任务调度相关表
|
||||
包含表: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
|
||||
|
||||
创建时间:2025-01-08
|
||||
维护人员:项目开发团队
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_distributed_lock
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_distributed_lock`;
|
||||
CREATE TABLE `sj_distributed_lock` (
|
||||
`name` varchar(64) NOT NULL COMMENT '锁名称',
|
||||
`lock_until` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '锁定时长',
|
||||
`locked_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '锁定时间',
|
||||
`locked_by` varchar(255) NOT NULL COMMENT '锁定者',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='锁定表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_group_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_group_config`;
|
||||
CREATE TABLE `sj_group_config` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`description` varchar(256) DEFAULT NULL COMMENT '描述',
|
||||
`group_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '组状态 0、关闭 1、开启',
|
||||
`version` int(11) NOT NULL DEFAULT '1' COMMENT '版本号',
|
||||
`group_partition` int(11) DEFAULT '0' COMMENT '分区',
|
||||
`init_scene` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否初始化场景 0、关闭 1、开启',
|
||||
`bucket_index` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'bucket索引',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_namespace_group_partition` (`namespace_id`,`group_name`,`group_partition`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组配置';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_namespace_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_namespace_config`;
|
||||
CREATE TABLE `sj_namespace_config` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`name` varchar(64) NOT NULL COMMENT '命名空间名称',
|
||||
`unique_id` varchar(64) NOT NULL COMMENT '唯一id',
|
||||
`description` varchar(256) DEFAULT NULL COMMENT '描述',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_unique_id` (`unique_id`),
|
||||
UNIQUE KEY `uk_name` (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='命名空间';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_notify_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_notify_config`;
|
||||
CREATE TABLE `sj_notify_config` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL DEFAULT '' COMMENT '命名空间id',
|
||||
`group_name` varchar(64) NOT NULL DEFAULT '' COMMENT '组名称',
|
||||
`business_id` varchar(64) NOT NULL COMMENT '业务id',
|
||||
`notify_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '通知状态 0、关闭 1、开启',
|
||||
`notify_type` tinyint(4) NOT NULL COMMENT '通知类型',
|
||||
`notify_attribute` text NOT NULL COMMENT '配置属性',
|
||||
`notify_threshold` int(11) DEFAULT '100' COMMENT '通知阈值',
|
||||
`notify_scene` tinyint(4) NOT NULL COMMENT '通知场景',
|
||||
`rate_limiter_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '限流状态 0、关闭 1、开启',
|
||||
`rate_limiter_threshold` int(11) NOT NULL DEFAULT '20' COMMENT '限流阈值',
|
||||
`description` varchar(256) DEFAULT '' COMMENT '描述',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_namespace_group_business_type_scene` (`namespace_id`,`group_name`,`business_id`,`notify_type`,`notify_scene`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知配置';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_retry_dead_letter
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_retry_dead_letter`;
|
||||
CREATE TABLE `sj_retry_dead_letter` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
|
||||
`idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
|
||||
`biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
|
||||
`executor_name` varchar(512) NOT NULL COMMENT '执行器名称',
|
||||
`args_str` text COMMENT '执行方法参数',
|
||||
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
|
||||
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务类型 1、重试数据 2、回调数据',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_namespace_group_scene_idempotent` (`namespace_id`,`group_name`,`scene_name`,`idempotent_id`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`),
|
||||
KEY `idx_scene_name` (`scene_name`),
|
||||
KEY `idx_create_dt` (`create_dt`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='死信队列';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_retry_summary
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_retry_summary`;
|
||||
CREATE TABLE `sj_retry_summary` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
|
||||
`trigger_date` date NOT NULL COMMENT '统计日期',
|
||||
`running_num` int(11) NOT NULL DEFAULT '0' COMMENT '重试中',
|
||||
`finish_num` int(11) NOT NULL DEFAULT '0' COMMENT '重试完成数量',
|
||||
`max_count_num` int(11) NOT NULL DEFAULT '0' COMMENT '重试到达最大次数',
|
||||
`suspend_num` int(11) NOT NULL DEFAULT '0' COMMENT '暂停数量',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_namespace_group_scene_date` (`namespace_id`,`group_name`,`scene_name`,`trigger_date`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`),
|
||||
KEY `idx_scene_name` (`scene_name`),
|
||||
KEY `idx_trigger_date` (`trigger_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务重试汇总统计表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_retry_task
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_retry_task`;
|
||||
CREATE TABLE `sj_retry_task` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
|
||||
`idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
|
||||
`biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
|
||||
`executor_name` varchar(512) NOT NULL COMMENT '执行器名称',
|
||||
`args_str` text COMMENT '执行方法参数',
|
||||
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
|
||||
`next_trigger_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下次触发时间',
|
||||
`retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '重试次数',
|
||||
`retry_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '重试状态 0、重试中 1、成功 2、最大次数',
|
||||
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务类型 1、重试数据 2、回调数据',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_namespace_group_scene_idempotent` (`namespace_id`,`group_name`,`scene_name`,`idempotent_id`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`),
|
||||
KEY `idx_scene_name` (`scene_name`),
|
||||
KEY `idx_next_trigger_at` (`next_trigger_at`),
|
||||
KEY `idx_retry_status` (`retry_status`),
|
||||
KEY `idx_create_dt` (`create_dt`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务信息';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_retry_task_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_retry_task_log`;
|
||||
CREATE TABLE `sj_retry_task_log` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
|
||||
`idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
|
||||
`biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
|
||||
`executor_name` varchar(512) NOT NULL COMMENT '执行器名称',
|
||||
`args_str` text COMMENT '执行方法参数',
|
||||
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
|
||||
`retry_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '重试状态 0、重试中 1、成功 2、最大次数',
|
||||
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务类型 1、重试数据 2、回调数据',
|
||||
`real_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '真实触发时间',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`),
|
||||
KEY `idx_scene_name` (`scene_name`),
|
||||
KEY `idx_idempotent_id` (`idempotent_id`),
|
||||
KEY `idx_create_dt` (`create_dt`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='重试日志';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_server_node
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_server_node`;
|
||||
CREATE TABLE `sj_server_node` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`host_id` varchar(64) NOT NULL COMMENT '主机id',
|
||||
`host_ip` varchar(64) NOT NULL COMMENT '主机ip',
|
||||
`host_port` int(11) NOT NULL COMMENT '主机端口',
|
||||
`expire_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
|
||||
`node_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '节点类型 1、客户端 2、服务端',
|
||||
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_namespace_group_host` (`namespace_id`,`group_name`,`host_id`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_group_name` (`group_name`),
|
||||
KEY `idx_expire_at` (`expire_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务器节点';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_system_user_permission
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_system_user_permission`;
|
||||
CREATE TABLE `sj_system_user_permission` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`group_name` varchar(64) NOT NULL COMMENT '组名称',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_group_name` (`group_name`),
|
||||
KEY `idx_namespace_id` (`namespace_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户权限表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_workflow_node
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_workflow_node`;
|
||||
CREATE TABLE `sj_workflow_node` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`workflow_id` bigint(20) unsigned NOT NULL COMMENT '工作流id',
|
||||
`node_name` varchar(64) NOT NULL COMMENT '节点名称',
|
||||
`node_type` tinyint(4) NOT NULL COMMENT '节点类型 1、任务节点 2、条件节点 3、回调节点',
|
||||
`job_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联的任务id',
|
||||
`expression_type` tinyint(4) DEFAULT NULL COMMENT '表达式类型 1、SpEL 2、Aviator 3、QL',
|
||||
`expression` varchar(256) DEFAULT NULL COMMENT '条件节点的表达式',
|
||||
`fail_strategy` tinyint(4) NOT NULL DEFAULT '1' COMMENT '失败策略 1、跳过 2、阻塞',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_workflow_id` (`workflow_id`),
|
||||
KEY `idx_namespace_id` (`namespace_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作流节点';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sj_workflow_task_batch
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sj_workflow_task_batch`;
|
||||
CREATE TABLE `sj_workflow_task_batch` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
|
||||
`workflow_id` bigint(20) unsigned NOT NULL COMMENT '工作流id',
|
||||
`task_batch_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '任务批次状态 0、运行中 1、成功 2、失败 3、取消 4、暂停',
|
||||
`operation_reason` tinyint(4) NOT NULL DEFAULT '0' COMMENT '操作原因 0、系统触发 1、人工操作',
|
||||
`workflow_task_batch_id` bigint(20) unsigned NOT NULL COMMENT '工作流任务批次id',
|
||||
`execution_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '执行时间',
|
||||
`flow_info` text COMMENT '流程信息',
|
||||
`ext_attrs` varchar(256) DEFAULT NULL COMMENT '扩展字段',
|
||||
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1、删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_workflow_id` (`workflow_id`),
|
||||
KEY `idx_namespace_id` (`namespace_id`),
|
||||
KEY `idx_execution_at` (`execution_at`),
|
||||
KEY `idx_task_batch_status` (`task_batch_status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作流任务批次';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,539 +0,0 @@
|
||||
/*
|
||||
系统管理模块数据库结构
|
||||
|
||||
业务域:系统管理相关表
|
||||
包含表:sys_client, sys_config, sys_dept, sys_dict_data, sys_dict_type,
|
||||
sys_logininfor, sys_menu, sys_notice, sys_oper_log, sys_oss,
|
||||
sys_oss_config, sys_post, sys_role, sys_role_dept, sys_role_menu,
|
||||
sys_social, sys_tenant, sys_tenant_package, sys_user, sys_user_post,
|
||||
sys_user_role
|
||||
|
||||
创建时间:2025-01-08
|
||||
维护人员:项目开发团队
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_client
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_client`;
|
||||
CREATE TABLE `sys_client` (
|
||||
`id` bigint(20) NOT NULL COMMENT 'id',
|
||||
`client_id` varchar(64) DEFAULT NULL COMMENT '客户端id',
|
||||
`client_key` varchar(32) DEFAULT NULL COMMENT '客户端key',
|
||||
`client_secret` varchar(255) DEFAULT NULL COMMENT '客户端秘钥',
|
||||
`grant_type` varchar(255) DEFAULT NULL COMMENT '授权类型',
|
||||
`device_type` varchar(32) DEFAULT NULL COMMENT '设备类型',
|
||||
`active_timeout` int(11) DEFAULT '1800' COMMENT 'token活跃超时时间',
|
||||
`timeout` int(11) DEFAULT '604800' COMMENT 'token固定超时',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_client_id` (`client_id`),
|
||||
KEY `idx_client_key` (`client_key`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统授权表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_config`;
|
||||
CREATE TABLE `sys_config` (
|
||||
`config_id` bigint(20) NOT NULL COMMENT '参数主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`config_name` varchar(100) DEFAULT '' COMMENT '参数名称',
|
||||
`config_key` varchar(100) DEFAULT '' COMMENT '参数键名',
|
||||
`config_value` varchar(500) DEFAULT '' COMMENT '参数键值',
|
||||
`config_type` char(1) DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`config_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_config_key` (`config_key`),
|
||||
KEY `idx_config_type` (`config_type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参数配置表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_dept
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_dept`;
|
||||
CREATE TABLE `sys_dept` (
|
||||
`dept_id` bigint(20) NOT NULL COMMENT '部门id',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`parent_id` bigint(20) DEFAULT '0' COMMENT '父部门id',
|
||||
`ancestors` varchar(500) DEFAULT '' COMMENT '祖级列表',
|
||||
`dept_name` varchar(30) DEFAULT '' COMMENT '部门名称',
|
||||
`dept_category` varchar(100) DEFAULT NULL COMMENT '部门类别编码',
|
||||
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
|
||||
`leader` bigint(20) DEFAULT NULL COMMENT '负责人,关联sys_user.user_id',
|
||||
`phone` varchar(11) DEFAULT NULL COMMENT '联系电话',
|
||||
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
|
||||
`status` char(1) DEFAULT '0' COMMENT '部门状态(0正常 1停用)',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
PRIMARY KEY (`dept_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_del_flag` (`del_flag`),
|
||||
KEY `idx_leader` (`leader`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_dict_data
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_dict_data`;
|
||||
CREATE TABLE `sys_dict_data` (
|
||||
`dict_code` bigint(20) NOT NULL COMMENT '字典编码',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`dict_sort` int(4) DEFAULT '0' COMMENT '字典排序',
|
||||
`dict_label` varchar(100) DEFAULT '' COMMENT '字典标签',
|
||||
`dict_value` varchar(100) DEFAULT '' COMMENT '字典键值',
|
||||
`dict_type` varchar(100) DEFAULT '' COMMENT '字典类型',
|
||||
`css_class` varchar(100) DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
|
||||
`list_class` varchar(100) DEFAULT NULL COMMENT '表格回显样式',
|
||||
`is_default` char(1) DEFAULT 'N' COMMENT '是否默认(Y是 N否)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`dict_code`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_dict_type` (`dict_type`),
|
||||
KEY `idx_dict_value` (`dict_value`),
|
||||
KEY `idx_dict_sort` (`dict_sort`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典数据表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_dict_type
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_dict_type`;
|
||||
CREATE TABLE `sys_dict_type` (
|
||||
`dict_id` bigint(20) NOT NULL COMMENT '字典主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`dict_name` varchar(100) DEFAULT '' COMMENT '字典名称',
|
||||
`dict_type` varchar(100) DEFAULT '' COMMENT '字典类型',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`dict_id`),
|
||||
UNIQUE KEY `tenant_id` (`tenant_id`,`dict_type`),
|
||||
KEY `idx_dict_type` (`dict_type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_logininfor
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_logininfor`;
|
||||
CREATE TABLE `sys_logininfor` (
|
||||
`info_id` bigint(20) NOT NULL COMMENT '访问ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`user_name` varchar(50) DEFAULT '' COMMENT '用户账号',
|
||||
`client_key` varchar(32) DEFAULT '' COMMENT '客户端',
|
||||
`device_type` varchar(32) DEFAULT '' COMMENT '设备类型',
|
||||
`ipaddr` varchar(128) DEFAULT '' COMMENT '登录IP地址',
|
||||
`login_location` varchar(255) DEFAULT '' COMMENT '登录地点',
|
||||
`browser` varchar(50) DEFAULT '' COMMENT '浏览器类型',
|
||||
`os` varchar(50) DEFAULT '' COMMENT '操作系统',
|
||||
`status` char(1) DEFAULT '0' COMMENT '登录状态(0成功 1失败)',
|
||||
`msg` varchar(255) DEFAULT '' COMMENT '提示消息',
|
||||
`login_time` datetime DEFAULT NULL COMMENT '访问时间',
|
||||
PRIMARY KEY (`info_id`),
|
||||
KEY `idx_sys_logininfor_s` (`status`),
|
||||
KEY `idx_sys_logininfor_lt` (`login_time`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_user_name` (`user_name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_menu
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_menu`;
|
||||
CREATE TABLE `sys_menu` (
|
||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
||||
`menu_name` varchar(50) NOT NULL COMMENT '菜单名称',
|
||||
`parent_id` bigint(20) DEFAULT '0' COMMENT '父菜单ID',
|
||||
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
|
||||
`path` varchar(200) DEFAULT '' COMMENT '路由地址',
|
||||
`component` varchar(255) DEFAULT NULL COMMENT '组件路径',
|
||||
`query_param` varchar(255) DEFAULT NULL COMMENT '路由参数',
|
||||
`is_frame` int(1) DEFAULT '1' COMMENT '是否为外链(0是 1否)',
|
||||
`is_cache` int(1) DEFAULT '0' COMMENT '是否缓存(0缓存 1不缓存)',
|
||||
`menu_type` char(1) DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
|
||||
`visible` char(1) DEFAULT '0' COMMENT '显示状态(0显示 1隐藏)',
|
||||
`status` char(1) DEFAULT '0' COMMENT '菜单状态(0正常 1停用)',
|
||||
`perms` varchar(100) DEFAULT NULL COMMENT '权限标识',
|
||||
`icon` varchar(100) DEFAULT '#' COMMENT '菜单图标',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '' COMMENT '备注',
|
||||
PRIMARY KEY (`menu_id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_menu_type` (`menu_type`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_visible` (`visible`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_notice
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_notice`;
|
||||
CREATE TABLE `sys_notice` (
|
||||
`notice_id` bigint(20) NOT NULL COMMENT '公告ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`notice_title` varchar(50) NOT NULL COMMENT '公告标题',
|
||||
`notice_type` char(1) NOT NULL COMMENT '公告类型(1通知 2公告)',
|
||||
`notice_content` longblob COMMENT '公告内容',
|
||||
`status` char(1) DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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(255) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`notice_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_notice_type` (`notice_type`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_oper_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_oper_log`;
|
||||
CREATE TABLE `sys_oper_log` (
|
||||
`oper_id` bigint(20) NOT NULL COMMENT '日志主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`title` varchar(50) DEFAULT '' COMMENT '模块标题',
|
||||
`business_type` int(2) DEFAULT '0' COMMENT '业务类型(0其它 1新增 2修改 3删除)',
|
||||
`method` varchar(200) DEFAULT '' COMMENT '方法名称',
|
||||
`request_method` varchar(10) DEFAULT '' COMMENT '请求方式',
|
||||
`operator_type` int(1) DEFAULT '0' COMMENT '操作类别(0其它 1后台用户 2手机端用户)',
|
||||
`oper_name` varchar(50) DEFAULT '' COMMENT '操作人员',
|
||||
`dept_name` varchar(50) DEFAULT '' COMMENT '部门名称',
|
||||
`oper_url` varchar(255) DEFAULT '' COMMENT '请求URL',
|
||||
`oper_ip` varchar(128) DEFAULT '' COMMENT '主机地址',
|
||||
`oper_location` varchar(255) DEFAULT '' COMMENT '操作地点',
|
||||
`oper_param` varchar(2000) DEFAULT '' COMMENT '请求参数',
|
||||
`json_result` varchar(2000) DEFAULT '' COMMENT '返回参数',
|
||||
`status` int(1) DEFAULT '0' COMMENT '操作状态(0正常 1异常)',
|
||||
`error_msg` varchar(2000) DEFAULT '' COMMENT '错误消息',
|
||||
`oper_time` datetime DEFAULT NULL COMMENT '操作时间',
|
||||
`cost_time` bigint(20) DEFAULT '0' COMMENT '消耗时间',
|
||||
PRIMARY KEY (`oper_id`),
|
||||
KEY `idx_sys_oper_log_bt` (`business_type`),
|
||||
KEY `idx_sys_oper_log_s` (`status`),
|
||||
KEY `idx_sys_oper_log_ot` (`oper_time`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志记录';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_oss
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_oss`;
|
||||
CREATE TABLE `sys_oss` (
|
||||
`oss_id` bigint(20) NOT NULL COMMENT '对象存储主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`file_name` varchar(255) NOT NULL DEFAULT '' COMMENT '文件名',
|
||||
`original_name` varchar(255) NOT NULL DEFAULT '' COMMENT '原名',
|
||||
`file_suffix` varchar(10) NOT NULL DEFAULT '' COMMENT '文件后缀名',
|
||||
`url` varchar(500) NOT NULL COMMENT 'URL地址',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '上传人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新人',
|
||||
`service` varchar(20) NOT NULL DEFAULT 'minio' COMMENT '服务商',
|
||||
PRIMARY KEY (`oss_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_file_name` (`file_name`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_service` (`service`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OSS对象存储表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_oss_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_oss_config`;
|
||||
CREATE TABLE `sys_oss_config` (
|
||||
`oss_config_id` bigint(20) NOT NULL COMMENT '主建',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`config_key` varchar(20) NOT NULL DEFAULT '' COMMENT '配置key',
|
||||
`access_key` varchar(255) DEFAULT '' COMMENT 'accessKey',
|
||||
`secret_key` varchar(255) DEFAULT '' COMMENT '秘钥',
|
||||
`bucket_name` varchar(255) DEFAULT '' COMMENT '桶名称',
|
||||
`prefix` varchar(255) DEFAULT '' COMMENT '前缀',
|
||||
`endpoint` varchar(255) DEFAULT '' COMMENT '访问站点',
|
||||
`domain` varchar(255) DEFAULT '' COMMENT '自定义域名',
|
||||
`is_https` char(1) DEFAULT 'N' COMMENT '是否https(Y=是,N=否)',
|
||||
`region` varchar(255) DEFAULT '' COMMENT '域',
|
||||
`access_policy` char(1) NOT NULL DEFAULT '1' COMMENT '桶权限类型(0=private 1=public 2=custom)',
|
||||
`status` char(1) DEFAULT '1' COMMENT '是否默认(0=是,1=否)',
|
||||
`ext1` varchar(255) DEFAULT '' COMMENT '扩展字段',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`oss_config_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_config_key` (`config_key`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对象存储配置表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_post
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_post`;
|
||||
CREATE TABLE `sys_post` (
|
||||
`post_id` bigint(20) NOT NULL COMMENT '岗位ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`post_code` varchar(64) NOT NULL COMMENT '岗位编码',
|
||||
`post_name` varchar(50) NOT NULL COMMENT '岗位名称',
|
||||
`post_sort` int(4) NOT NULL COMMENT '显示顺序',
|
||||
`status` char(1) NOT NULL COMMENT '状态(0正常 1停用)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`post_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_post_code` (`post_code`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位信息表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_role`;
|
||||
CREATE TABLE `sys_role` (
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`role_name` varchar(30) NOT NULL COMMENT '角色名称',
|
||||
`role_key` varchar(100) NOT NULL COMMENT '角色权限字符串',
|
||||
`role_sort` int(4) NOT NULL COMMENT '显示顺序',
|
||||
`data_scope` char(1) DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
||||
`menu_check_strictly` tinyint(1) DEFAULT '1' COMMENT '菜单树选择项是否关联显示',
|
||||
`dept_check_strictly` tinyint(1) DEFAULT '1' COMMENT '部门树选择项是否关联显示',
|
||||
`status` char(1) NOT NULL COMMENT '角色状态(0正常 1停用)',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`role_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_role_key` (`role_key`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色信息表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role_dept
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_role_dept`;
|
||||
CREATE TABLE `sys_role_dept` (
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`dept_id` bigint(20) NOT NULL COMMENT '部门ID',
|
||||
PRIMARY KEY (`role_id`,`dept_id`),
|
||||
KEY `idx_role_id` (`role_id`),
|
||||
KEY `idx_dept_id` (`dept_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和部门关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role_menu
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_role_menu`;
|
||||
CREATE TABLE `sys_role_menu` (
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
||||
PRIMARY KEY (`role_id`,`menu_id`),
|
||||
KEY `idx_role_id` (`role_id`),
|
||||
KEY `idx_menu_id` (`menu_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和菜单关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_social
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_social`;
|
||||
CREATE TABLE `sys_social` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.user_id',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户id',
|
||||
`auth_id` varchar(255) NOT NULL COMMENT '平台+平台唯一id',
|
||||
`source` varchar(255) NOT NULL COMMENT '用户来源',
|
||||
`open_id` varchar(255) DEFAULT NULL COMMENT '平台编号唯一id',
|
||||
`user_name` varchar(30) NOT NULL COMMENT '登录账号',
|
||||
`nick_name` varchar(30) DEFAULT '' COMMENT '用户昵称',
|
||||
`email` varchar(255) DEFAULT '' COMMENT '用户邮箱',
|
||||
`avatar` varchar(500) DEFAULT '' COMMENT '头像地址',
|
||||
`access_token` varchar(255) DEFAULT NULL COMMENT '用户的授权令牌',
|
||||
`expire_in` bigint(20) DEFAULT NULL COMMENT '用户的授权令牌的有效期,部分平台可能没有',
|
||||
`refresh_token` varchar(255) DEFAULT NULL COMMENT '刷新令牌,部分平台可能没有',
|
||||
`access_code` varchar(255) DEFAULT NULL COMMENT '平台的授权信息,部分平台可能没有',
|
||||
`union_id` varchar(255) DEFAULT NULL COMMENT '用户的 unionId',
|
||||
`scope` varchar(255) DEFAULT NULL COMMENT '授予的权限,部分平台可能没有',
|
||||
`token_type` varchar(255) DEFAULT NULL COMMENT '个别平台的授权信息,部分平台可能没有',
|
||||
`id_token` varchar(255) DEFAULT NULL COMMENT 'id token,部分平台可能没有',
|
||||
`mac_algorithm` varchar(255) DEFAULT NULL COMMENT '小米平台用户的附带属性,部分平台可能没有',
|
||||
`mac_key` varchar(255) DEFAULT NULL COMMENT '小米平台用户的附带属性,部分平台可能没有',
|
||||
`code` varchar(255) DEFAULT NULL COMMENT '用户的授权code,部分平台可能没有',
|
||||
`oauth_token` varchar(255) DEFAULT NULL COMMENT 'Twitter平台用户的附带属性,部分平台可能没有',
|
||||
`oauth_token_secret` varchar(255) DEFAULT NULL COMMENT 'Twitter平台用户的附带属性,部分平台可能没有',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_auth_id` (`auth_id`),
|
||||
KEY `idx_source` (`source`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社会化关系表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_tenant
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_tenant`;
|
||||
CREATE TABLE `sys_tenant` (
|
||||
`id` bigint(20) NOT NULL COMMENT 'id',
|
||||
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
|
||||
`contact_user_name` varchar(20) DEFAULT '' COMMENT '联系人',
|
||||
`contact_phone` varchar(20) DEFAULT '' COMMENT '联系电话',
|
||||
`company_name` varchar(50) DEFAULT '' COMMENT '企业名称',
|
||||
`license_number` varchar(30) DEFAULT '' COMMENT '统一社会信用代码',
|
||||
`address` varchar(200) DEFAULT '' COMMENT '地址',
|
||||
`intro` varchar(500) DEFAULT '' COMMENT '企业简介',
|
||||
`domain` varchar(200) DEFAULT '' COMMENT '域名',
|
||||
`remark` varchar(500) DEFAULT '' COMMENT '备注',
|
||||
`package_id` bigint(20) DEFAULT NULL COMMENT '租户套餐编号,关联sys_tenant_package.package_id',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
|
||||
`account_count` int(11) DEFAULT '-1' COMMENT '用户数量(-1不限制)',
|
||||
`status` char(1) DEFAULT '0' COMMENT '租户状态(0正常 1停用)',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tenant_id` (`tenant_id`),
|
||||
KEY `idx_package_id` (`package_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_tenant_package
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_tenant_package`;
|
||||
CREATE TABLE `sys_tenant_package` (
|
||||
`package_id` bigint(20) NOT NULL COMMENT '租户套餐id',
|
||||
`package_name` varchar(20) DEFAULT '' COMMENT '套餐名称',
|
||||
`menu_ids` varchar(3000) DEFAULT '' COMMENT '关联菜单id',
|
||||
`remark` varchar(500) DEFAULT '' COMMENT '备注',
|
||||
`menu_check_strictly` tinyint(1) DEFAULT '1' COMMENT '菜单树选择项是否关联显示',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
PRIMARY KEY (`package_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户套餐表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user`;
|
||||
CREATE TABLE `sys_user` (
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID,关联sys_dept.dept_id',
|
||||
`user_name` varchar(30) NOT NULL COMMENT '用户账号',
|
||||
`nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
|
||||
`user_type` varchar(10) DEFAULT 'sys_user' COMMENT '用户类型(sys_user系统用户)',
|
||||
`email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
|
||||
`phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
|
||||
`sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
|
||||
`avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
|
||||
`password` varchar(100) DEFAULT '' COMMENT '密码',
|
||||
`status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
`login_ip` varchar(128) DEFAULT '' COMMENT '最后登录IP',
|
||||
`login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 (`user_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_dept_id` (`dept_id`),
|
||||
KEY `idx_user_name` (`user_name`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_del_flag` (`del_flag`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user_post
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user_post`;
|
||||
CREATE TABLE `sys_user_post` (
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.user_id',
|
||||
`post_id` bigint(20) NOT NULL COMMENT '岗位ID,关联sys_post.post_id',
|
||||
PRIMARY KEY (`user_id`,`post_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_post_id` (`post_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户与岗位关联表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user_role
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user_role`;
|
||||
CREATE TABLE `sys_user_role` (
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.user_id',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID,关联sys_role.role_id',
|
||||
PRIMARY KEY (`user_id`,`role_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_role_id` (`role_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和角色关联表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,62 +0,0 @@
|
||||
/*
|
||||
测试模块数据库结构
|
||||
|
||||
业务域:测试和演示相关表
|
||||
包含表:test_tree
|
||||
|
||||
说明:此模块用于系统测试和功能演示,包含树形结构测试数据
|
||||
|
||||
创建时间:2025-01-08
|
||||
维护人员:项目开发团队
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for test_tree
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `test_tree`;
|
||||
CREATE TABLE `test_tree` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`parent_id` bigint(20) DEFAULT '0' COMMENT '父节点ID',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID,关联sys_dept.dept_id',
|
||||
`user_id` bigint(20) DEFAULT NULL COMMENT '用户ID,关联sys_user.user_id',
|
||||
`tree_name` varchar(30) DEFAULT '' COMMENT '节点名称',
|
||||
`version` int(11) DEFAULT '0' COMMENT '版本号',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_dept_id` (`dept_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_del_flag` (`del_flag`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试树表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of test_tree
|
||||
-- ----------------------------
|
||||
BEGIN;
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (1, '000000', 0, 102, 4, '测试数据权限', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (2, '000000', 1, 102, 3, '子节点1', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (3, '000000', 2, 102, 3, '子节点2', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (4, '000000', 0, 108, 4, '测试树1', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (5, '000000', 4, 108, 3, '子节点11', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (6, '000000', 4, 108, 3, '子节点22', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (7, '000000', 4, 108, 3, '子节点33', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (8, '000000', 5, 108, 3, '子节点44', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (9, '000000', 6, 108, 3, '子节点55', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (10, '000000', 7, 108, 3, '子节点66', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (11, '000000', 7, 108, 3, '子节点77', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (12, '000000', 10, 108, 3, '子节点88', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (13, '000000', 10, 108, 3, '子节点99', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
|
||||
COMMIT;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,426 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 物业报修管理模块数据库脚本
|
||||
-- 版本:V1.0.2
|
||||
-- 功能:物业报修管理模块完整表结构(表名规范化调整)
|
||||
-- 作者:Cursor AI 辅助
|
||||
-- 时间:2025-01-23
|
||||
-- 依据文档:docs/业务模块/property-maintenance/技术设计/数据库设计.md
|
||||
-- 表名规范:使用hq_前缀标识后勤管理模块
|
||||
-- ==========================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_pm_repair_order
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_pm_repair_order`;
|
||||
CREATE TABLE `hq_pm_repair_order` (
|
||||
-- 标准基础字段(必须)
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- 业务基础信息
|
||||
`order_no` varchar(50) NOT NULL COMMENT '工单编号,格式:RO+年月日+4位流水号',
|
||||
`title` varchar(200) NOT NULL COMMENT '报修标题',
|
||||
`description` text NOT NULL COMMENT '问题描述',
|
||||
`repair_location` varchar(200) NOT NULL COMMENT '报修地点',
|
||||
|
||||
-- 分类和紧急程度
|
||||
`category_id` bigint(20) NOT NULL COMMENT '维修类型ID,关联hq_pm_repair_category.id',
|
||||
`priority_level` tinyint(1) NOT NULL DEFAULT 3 COMMENT '紧急程度:1-非常紧急,2-紧急,3-一般,4-不紧急,5-可延后',
|
||||
`expected_finish_time` datetime DEFAULT NULL COMMENT '期望完成时间',
|
||||
|
||||
-- 报修人信息
|
||||
`reporter_id` bigint(20) NOT NULL COMMENT '报修人ID,关联sys_user.id',
|
||||
`reporter_name` varchar(50) NOT NULL COMMENT '报修人姓名',
|
||||
`reporter_phone` varchar(20) NOT NULL COMMENT '报修人电话',
|
||||
`reporter_dept` varchar(100) DEFAULT NULL COMMENT '报修人部门',
|
||||
|
||||
-- 工单状态和处理信息
|
||||
`order_status` char(1) NOT NULL DEFAULT '1' COMMENT '工单状态:1-待分派,2-已分派,3-进行中,4-已完成,5-已评价,6-已归档,9-已取消',
|
||||
`assign_time` datetime DEFAULT NULL COMMENT '分派时间',
|
||||
`assignee_id` bigint(20) DEFAULT NULL COMMENT '分派维修员ID,关联sys_user.id',
|
||||
`assignee_name` varchar(50) DEFAULT NULL COMMENT '分派维修员姓名',
|
||||
`assign_remark` varchar(500) DEFAULT NULL COMMENT '分派备注说明',
|
||||
|
||||
-- 处理时间信息
|
||||
`start_time` datetime DEFAULT NULL COMMENT '开始处理时间',
|
||||
`finish_time` datetime DEFAULT NULL COMMENT '完成时间',
|
||||
`total_duration` int(11) DEFAULT NULL COMMENT '总处理时长(分钟)',
|
||||
|
||||
-- 处理结果
|
||||
`repair_result` text DEFAULT NULL COMMENT '维修结果描述',
|
||||
`used_materials` varchar(500) DEFAULT NULL COMMENT '使用材料清单',
|
||||
`follow_suggestions` varchar(500) DEFAULT NULL COMMENT '后续建议',
|
||||
|
||||
-- 评价相关
|
||||
`evaluation_score` decimal(3,1) DEFAULT NULL COMMENT '综合评价得分(1.0-5.0)',
|
||||
`evaluation_time` datetime DEFAULT NULL COMMENT '评价时间',
|
||||
|
||||
-- 统计字段
|
||||
`attachment_count` int(11) DEFAULT 0 COMMENT '附件数量',
|
||||
`progress_count` int(11) DEFAULT 0 COMMENT '进度记录数量',
|
||||
|
||||
-- 其他字段
|
||||
`cancel_reason` varchar(500) DEFAULT NULL COMMENT '取消原因',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||||
|
||||
-- 主键和索引
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_order_no` (`order_no`, `tenant_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_order_status` (`order_status`),
|
||||
KEY `idx_priority_level` (`priority_level`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_reporter_id` (`reporter_id`),
|
||||
KEY `idx_assignee_id` (`assignee_id`),
|
||||
KEY `idx_category_id` (`category_id`),
|
||||
KEY `idx_assign_time` (`assign_time`),
|
||||
KEY `idx_finish_time` (`finish_time`),
|
||||
KEY `idx_tenant_status` (`tenant_id`, `order_status`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报修工单表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_pm_repair_attachment
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_pm_repair_attachment`;
|
||||
CREATE TABLE `hq_pm_repair_attachment` (
|
||||
-- 标准基础字段(必须)
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- 关联信息
|
||||
`order_id` bigint(20) NOT NULL COMMENT '报修工单ID,关联hq_pm_repair_order.id',
|
||||
|
||||
-- 文件信息
|
||||
`file_name` varchar(200) NOT NULL COMMENT '文件原始名称',
|
||||
`file_path` varchar(500) NOT NULL COMMENT '文件存储路径',
|
||||
`file_size` bigint(20) NOT NULL COMMENT '文件大小(字节)',
|
||||
`file_type` varchar(20) NOT NULL COMMENT '文件类型:image-图片,video-视频',
|
||||
`file_extension` varchar(10) NOT NULL COMMENT '文件扩展名',
|
||||
`file_mime_type` varchar(100) DEFAULT NULL COMMENT '文件MIME类型',
|
||||
|
||||
-- 上传信息
|
||||
`upload_stage` char(1) NOT NULL DEFAULT '1' COMMENT '上传阶段:1-报修申请,2-维修过程,3-完成确认',
|
||||
`uploader_id` bigint(20) NOT NULL COMMENT '上传人ID,关联sys_user.id',
|
||||
`uploader_name` varchar(50) NOT NULL COMMENT '上传人姓名',
|
||||
|
||||
-- 文件处理
|
||||
`thumbnail_path` varchar(500) DEFAULT NULL COMMENT '缩略图路径(图片文件)',
|
||||
`duration` int(11) DEFAULT NULL COMMENT '时长(视频文件,秒)',
|
||||
`resolution` varchar(20) DEFAULT NULL COMMENT '分辨率(如:1920x1080)',
|
||||
|
||||
-- 业务信息
|
||||
`description` varchar(200) DEFAULT NULL COMMENT '文件描述说明',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序顺序',
|
||||
|
||||
-- 主键和索引
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_order_id` (`order_id`),
|
||||
KEY `idx_upload_stage` (`upload_stage`),
|
||||
KEY `idx_uploader_id` (`uploader_id`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_file_type` (`file_type`),
|
||||
KEY `idx_order_stage` (`order_id`, `upload_stage`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报修附件表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_pm_repair_progress
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_pm_repair_progress`;
|
||||
CREATE TABLE `hq_pm_repair_progress` (
|
||||
-- 标准基础字段(必须)
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- 关联信息
|
||||
`order_id` bigint(20) NOT NULL COMMENT '报修工单ID,关联hq_pm_repair_order.id',
|
||||
|
||||
-- 进度信息
|
||||
`progress_type` char(1) NOT NULL COMMENT '进度类型:1-工单分派,2-接收确认,3-到达现场,4-开始维修,5-进度更新,6-完成维修,7-用户评价,8-工单归档,9-其他',
|
||||
`progress_status` varchar(50) NOT NULL COMMENT '进度状态描述',
|
||||
`progress_detail` text DEFAULT NULL COMMENT '进度详细描述',
|
||||
|
||||
-- 操作人信息
|
||||
`operator_id` bigint(20) NOT NULL COMMENT '操作人ID,关联sys_user.id',
|
||||
`operator_name` varchar(50) NOT NULL COMMENT '操作人姓名',
|
||||
`operator_role` varchar(20) NOT NULL COMMENT '操作人角色:user-用户,admin-管理员,worker-维修员',
|
||||
|
||||
-- 位置信息
|
||||
`location_info` varchar(200) DEFAULT NULL COMMENT '操作位置信息',
|
||||
`gps_latitude` decimal(10,7) DEFAULT NULL COMMENT 'GPS纬度',
|
||||
`gps_longitude` decimal(10,7) DEFAULT NULL COMMENT 'GPS经度',
|
||||
|
||||
-- 时间信息
|
||||
`operation_time` datetime NOT NULL COMMENT '操作时间',
|
||||
`estimated_duration` int(11) DEFAULT NULL COMMENT '预计耗时(分钟)',
|
||||
|
||||
-- 附加信息
|
||||
`attachment_ids` varchar(500) DEFAULT NULL COMMENT '关联附件ID列表(逗号分隔)',
|
||||
`next_step` varchar(200) DEFAULT NULL COMMENT '下一步计划',
|
||||
`issues_encountered` varchar(500) DEFAULT NULL COMMENT '遇到的问题',
|
||||
`materials_needed` varchar(200) DEFAULT NULL COMMENT '需要的材料',
|
||||
|
||||
-- 其他信息
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||||
|
||||
-- 主键和索引
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_order_id` (`order_id`),
|
||||
KEY `idx_progress_type` (`progress_type`),
|
||||
KEY `idx_operator_id` (`operator_id`),
|
||||
KEY `idx_operation_time` (`operation_time`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_order_time` (`order_id`, `operation_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维修进度表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_pm_service_evaluation
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_pm_service_evaluation`;
|
||||
CREATE TABLE `hq_pm_service_evaluation` (
|
||||
-- 标准基础字段(必须)
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- 关联信息
|
||||
`order_id` bigint(20) NOT NULL COMMENT '报修工单ID,关联hq_pm_repair_order.id',
|
||||
`evaluator_id` bigint(20) NOT NULL COMMENT '评价人ID,关联sys_user.id',
|
||||
`evaluator_name` varchar(50) NOT NULL COMMENT '评价人姓名',
|
||||
`evaluated_worker_id` bigint(20) NOT NULL COMMENT '被评价维修员ID,关联sys_user.id',
|
||||
`evaluated_worker_name` varchar(50) NOT NULL COMMENT '被评价维修员姓名',
|
||||
|
||||
-- 评价得分(1-5星,支持小数)
|
||||
`overall_score` decimal(3,1) NOT NULL COMMENT '综合评价得分(1.0-5.0)',
|
||||
`quality_score` decimal(3,1) NOT NULL COMMENT '维修质量得分(1.0-5.0)',
|
||||
`attitude_score` decimal(3,1) NOT NULL COMMENT '服务态度得分(1.0-5.0)',
|
||||
`response_speed_score` decimal(3,1) NOT NULL COMMENT '响应速度得分(1.0-5.0)',
|
||||
`communication_score` decimal(3,1) NOT NULL COMMENT '沟通效果得分(1.0-5.0)',
|
||||
|
||||
-- 评价内容
|
||||
`evaluation_content` text DEFAULT NULL COMMENT '文字评价内容',
|
||||
`satisfaction_level` char(1) NOT NULL COMMENT '满意度等级:1-非常满意,2-满意,3-一般,4-不满意,5-非常不满意',
|
||||
|
||||
-- 评价设置
|
||||
`is_anonymous` tinyint(1) DEFAULT 0 COMMENT '是否匿名评价(0-实名,1-匿名)',
|
||||
`is_public` tinyint(1) DEFAULT 1 COMMENT '是否公开显示(0-不公开,1-公开)',
|
||||
|
||||
-- 时间信息
|
||||
`evaluation_time` datetime NOT NULL COMMENT '评价时间',
|
||||
`service_start_time` datetime DEFAULT NULL COMMENT '服务开始时间',
|
||||
`service_end_time` datetime DEFAULT NULL COMMENT '服务结束时间',
|
||||
`service_duration` int(11) DEFAULT NULL COMMENT '服务时长(分钟)',
|
||||
|
||||
-- 标签和建议
|
||||
`positive_tags` varchar(200) DEFAULT NULL COMMENT '正面标签(逗号分隔)',
|
||||
`negative_tags` varchar(200) DEFAULT NULL COMMENT '负面标签(逗号分隔)',
|
||||
`improvement_suggestions` varchar(500) DEFAULT NULL COMMENT '改进建议',
|
||||
|
||||
-- 其他信息
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||||
|
||||
-- 主键和索引
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_order_evaluation` (`order_id`, `tenant_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_evaluator_id` (`evaluator_id`),
|
||||
KEY `idx_evaluated_worker_id` (`evaluated_worker_id`),
|
||||
KEY `idx_overall_score` (`overall_score`),
|
||||
KEY `idx_satisfaction_level` (`satisfaction_level`),
|
||||
KEY `idx_evaluation_time` (`evaluation_time`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务评价表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_pm_repair_category
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_pm_repair_category`;
|
||||
CREATE TABLE `hq_pm_repair_category` (
|
||||
-- 标准基础字段(必须)
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- 分类信息
|
||||
`category_name` varchar(50) NOT NULL COMMENT '类型名称',
|
||||
`category_code` varchar(20) NOT NULL COMMENT '类型编码',
|
||||
`category_description` varchar(200) DEFAULT NULL COMMENT '类型描述',
|
||||
|
||||
-- 层级结构
|
||||
`parent_id` bigint(20) DEFAULT 0 COMMENT '父级ID,顶级为0',
|
||||
`ancestor_ids` varchar(500) DEFAULT '0' COMMENT '祖级列表(逗号分隔)',
|
||||
`level_depth` tinyint(2) DEFAULT 1 COMMENT '层级深度(1-顶级,2-二级...)',
|
||||
`children_count` int(11) DEFAULT 0 COMMENT '子类数量',
|
||||
|
||||
-- 专业技能
|
||||
`required_skills` varchar(200) DEFAULT NULL COMMENT '所需专业技能(逗号分隔)',
|
||||
`skill_level` char(1) DEFAULT '1' COMMENT '技能等级要求:1-初级,2-中级,3-高级',
|
||||
|
||||
-- 时间和成本预估
|
||||
`estimated_duration` int(11) DEFAULT NULL COMMENT '预估维修时长(分钟)',
|
||||
`standard_cost` decimal(10,2) DEFAULT NULL COMMENT '标准成本(元)',
|
||||
|
||||
-- 显示控制
|
||||
`icon_url` varchar(200) DEFAULT NULL COMMENT '分类图标URL',
|
||||
`color_code` varchar(10) DEFAULT '#1890ff' COMMENT '分类颜色代码',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序顺序',
|
||||
`status` char(1) DEFAULT '1' COMMENT '状态(0-停用,1-正常)',
|
||||
|
||||
-- 统计信息
|
||||
`usage_count` int(11) DEFAULT 0 COMMENT '使用次数统计',
|
||||
`last_used_time` datetime DEFAULT NULL COMMENT '最后使用时间',
|
||||
|
||||
-- 其他信息
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||||
|
||||
-- 主键和索引
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_category_code` (`category_code`, `tenant_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_level_depth` (`level_depth`),
|
||||
KEY `idx_usage_count` (`usage_count`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维修类型表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for hq_pm_system_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `hq_pm_system_config`;
|
||||
CREATE TABLE `hq_pm_system_config` (
|
||||
-- 标准基础字段(必须)
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- 配置信息
|
||||
`config_key` varchar(100) NOT NULL COMMENT '配置键名',
|
||||
`config_value` text DEFAULT NULL COMMENT '配置值',
|
||||
`config_type` varchar(20) NOT NULL COMMENT '配置类型:string-字符串,number-数字,boolean-布尔,json-JSON对象',
|
||||
`config_group` varchar(50) NOT NULL COMMENT '配置分组:file-文件设置,time-时间设置,workflow-流程设置',
|
||||
|
||||
-- 配置描述
|
||||
`config_name` varchar(100) NOT NULL COMMENT '配置名称',
|
||||
`config_description` varchar(500) DEFAULT NULL COMMENT '配置描述说明',
|
||||
`default_value` text DEFAULT NULL COMMENT '默认值',
|
||||
|
||||
-- 配置约束
|
||||
`is_system` tinyint(1) DEFAULT 0 COMMENT '是否系统内置(0-否,1-是,系统内置不可删除)',
|
||||
`is_editable` tinyint(1) DEFAULT 1 COMMENT '是否可编辑(0-否,1-是)',
|
||||
`validation_rule` varchar(200) DEFAULT NULL COMMENT '验证规则(正则表达式或范围)',
|
||||
|
||||
-- 显示控制
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序顺序',
|
||||
`status` char(1) DEFAULT '1' COMMENT '状态(0-停用,1-正常)',
|
||||
|
||||
-- 其他信息
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注信息',
|
||||
|
||||
-- 主键和索引
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_config_key` (`config_key`, `tenant_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_config_group` (`config_group`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_is_system` (`is_system`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
|
||||
|
||||
-- ----------------------------
|
||||
-- 初始化数据:维修类型分类
|
||||
-- ----------------------------
|
||||
INSERT INTO `hq_pm_repair_category` (
|
||||
`id`, `tenant_id`, `category_name`, `category_code`, `category_description`,
|
||||
`parent_id`, `level_depth`, `required_skills`, `skill_level`,
|
||||
`estimated_duration`, `icon_url`, `color_code`, `sort_order`, `status`,
|
||||
`create_time`, `create_by`
|
||||
) VALUES
|
||||
(1, '000000', '电路维修', 'ELECTRIC', '电路、照明、开关、插座等电气设备维修', 0, 1, '电工技能', '2', 60, '/icons/electric.svg', '#ff6b35', 1, '1', NOW(), 1),
|
||||
(2, '000000', '水暖维修', 'PLUMBING', '水管、暖气、卫生间、厨房设备维修', 0, 1, '水暖技能', '2', 90, '/icons/plumbing.svg', '#1890ff', 2, '1', NOW(), 1),
|
||||
(3, '000000', '土建维修', 'CONSTRUCTION', '墙面、地面、天花板、门窗等土建维修', 0, 1, '泥工技能,木工技能', '2', 120, '/icons/construction.svg', '#52c41a', 3, '1', NOW(), 1),
|
||||
(4, '000000', '设备维修', 'EQUIPMENT', '空调、电梯、监控等设备维修', 0, 1, '设备维修技能', '3', 90, '/icons/equipment.svg', '#722ed1', 4, '1', NOW(), 1),
|
||||
(5, '000000', '园林维修', 'GARDEN', '绿化、草坪、树木修剪等园林维护', 0, 1, '园林技能', '1', 45, '/icons/garden.svg', '#13c2c2', 5, '1', NOW(), 1),
|
||||
(6, '000000', '清洁维护', 'CLEANING', '日常清洁、垃圾处理、环境维护', 0, 1, '清洁技能', '1', 30, '/icons/cleaning.svg', '#fa8c16', 6, '1', NOW(), 1);
|
||||
|
||||
-- ----------------------------
|
||||
-- 初始化数据:系统配置参数
|
||||
-- ----------------------------
|
||||
INSERT INTO `hq_pm_system_config` (
|
||||
`id`, `tenant_id`, `config_key`, `config_value`, `config_type`, `config_group`,
|
||||
`config_name`, `config_description`, `default_value`, `is_system`, `is_editable`,
|
||||
`sort_order`, `status`, `create_time`, `create_by`
|
||||
) VALUES
|
||||
(1, '000000', 'file.upload.image.max_size', '5242880', 'number', 'file', '图片文件最大大小', '图片文件上传的最大字节数(5MB)', '5242880', 1, 1, 1, '1', NOW(), 1),
|
||||
(2, '000000', 'file.upload.video.max_size', '52428800', 'number', 'file', '视频文件最大大小', '视频文件上传的最大字节数(50MB)', '52428800', 1, 1, 2, '1', NOW(), 1),
|
||||
(3, '000000', 'file.upload.allowed_image_types', 'jpg,jpeg,png,gif', 'string', 'file', '允许的图片类型', '允许上传的图片文件类型(逗号分隔)', 'jpg,jpeg,png,gif', 1, 1, 3, '1', NOW(), 1),
|
||||
(4, '000000', 'file.upload.allowed_video_types', 'mp4,avi,mov', 'string', 'file', '允许的视频类型', '允许上传的视频文件类型(逗号分隔)', 'mp4,avi,mov', 1, 1, 4, '1', NOW(), 1),
|
||||
(5, '000000', 'workflow.auto_assign_enabled', 'true', 'boolean', 'workflow', '启用自动分派', '是否启用智能自动分派功能', 'false', 1, 1, 11, '1', NOW(), 1),
|
||||
(6, '000000', 'workflow.auto_archive_days', '7', 'number', 'workflow', '自动归档天数', '工单评价后多少天自动归档', '7', 1, 1, 12, '1', NOW(), 1),
|
||||
(7, '000000', 'time.priority1_response_hours', '1', 'number', 'time', '非常紧急响应时限', '非常紧急工单的响应时限(小时)', '1', 1, 1, 21, '1', NOW(), 1),
|
||||
(8, '000000', 'time.priority2_response_hours', '4', 'number', 'time', '紧急响应时限', '紧急工单的响应时限(小时)', '4', 1, 1, 22, '1', NOW(), 1),
|
||||
(9, '000000', 'time.priority3_response_hours', '24', 'number', 'time', '一般响应时限', '一般工单的响应时限(小时)', '24', 1, 1, 23, '1', NOW(), 1),
|
||||
(10, '000000', 'time.working_hours_start', '08:00', 'string', 'time', '工作时间开始', '工作日开始时间(HH:mm格式)', '08:00', 1, 1, 31, '1', NOW(), 1),
|
||||
(11, '000000', 'time.working_hours_end', '18:00', 'string', 'time', '工作时间结束', '工作日结束时间(HH:mm格式)', '18:00', 1, 1, 32, '1', NOW(), 1);
|
||||
|
||||
-- ----------------------------
|
||||
-- 创建核心业务查询索引
|
||||
-- ----------------------------
|
||||
-- 报修工单表的核心查询索引
|
||||
CREATE INDEX idx_status_time ON hq_pm_repair_order (order_status, create_time);
|
||||
CREATE INDEX idx_assignee_status ON hq_pm_repair_order (assignee_id, order_status);
|
||||
CREATE INDEX idx_reporter_time ON hq_pm_repair_order (reporter_id, create_time);
|
||||
CREATE INDEX idx_priority_assign ON hq_pm_repair_order (priority_level, assign_time);
|
||||
|
||||
-- 附件表的查询索引
|
||||
CREATE INDEX idx_uploader_time ON hq_pm_repair_attachment (uploader_id, create_time);
|
||||
|
||||
-- 进度表的查询索引
|
||||
CREATE INDEX idx_order_operation_time ON hq_pm_repair_progress (order_id, operation_time);
|
||||
CREATE INDEX idx_operator_time ON hq_pm_repair_progress (operator_id, operation_time);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -1,166 +0,0 @@
|
||||
-- ==========================================
|
||||
-- 物业报修管理模块表名重命名脚本
|
||||
-- 版本:V1.0.0
|
||||
-- 功能:将现有pm_开头的表名重命名为hq_pm_开头
|
||||
-- 作者:Cursor AI 辅助
|
||||
-- 时间:2025-01-23
|
||||
-- 目的:符合项目表名规范(后勤管理模块使用hq_前缀)
|
||||
-- ==========================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 检查表是否存在并进行重命名
|
||||
-- 注意:在重命名之前请确保没有其他进程在使用这些表
|
||||
|
||||
-- 1. 重命名报修工单表
|
||||
-- 先检查表是否存在
|
||||
SELECT 'Checking table existence...' AS step;
|
||||
|
||||
-- 重命名主要业务表
|
||||
-- 1. pm_repair_order -> hq_pm_repair_order
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_order') > 0,
|
||||
'RENAME TABLE pm_repair_order TO hq_pm_repair_order',
|
||||
'SELECT "Table pm_repair_order does not exist" AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2. pm_repair_attachment -> hq_pm_repair_attachment
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_attachment') > 0,
|
||||
'RENAME TABLE pm_repair_attachment TO hq_pm_repair_attachment',
|
||||
'SELECT "Table pm_repair_attachment does not exist" AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3. pm_repair_progress -> hq_pm_repair_progress
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_progress') > 0,
|
||||
'RENAME TABLE pm_repair_progress TO hq_pm_repair_progress',
|
||||
'SELECT "Table pm_repair_progress does not exist" AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 4. pm_service_evaluation -> hq_pm_service_evaluation
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_service_evaluation') > 0,
|
||||
'RENAME TABLE pm_service_evaluation TO hq_pm_service_evaluation',
|
||||
'SELECT "Table pm_service_evaluation does not exist" AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5. pm_repair_category -> hq_pm_repair_category
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_category') > 0,
|
||||
'RENAME TABLE pm_repair_category TO hq_pm_repair_category',
|
||||
'SELECT "Table pm_repair_category does not exist" AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 6. pm_system_config -> hq_pm_system_config
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_system_config') > 0,
|
||||
'RENAME TABLE pm_system_config TO hq_pm_system_config',
|
||||
'SELECT "Table pm_system_config does not exist" AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 验证重命名结果
|
||||
SELECT 'Verifying table rename results...' AS step;
|
||||
|
||||
-- 检查新表名是否存在
|
||||
SELECT
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hq_pm_repair_order')
|
||||
THEN 'EXISTS'
|
||||
ELSE 'NOT EXISTS'
|
||||
END AS hq_pm_repair_order_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hq_pm_repair_attachment')
|
||||
THEN 'EXISTS'
|
||||
ELSE 'NOT EXISTS'
|
||||
END AS hq_pm_repair_attachment_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hq_pm_repair_progress')
|
||||
THEN 'EXISTS'
|
||||
ELSE 'NOT EXISTS'
|
||||
END AS hq_pm_repair_progress_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hq_pm_service_evaluation')
|
||||
THEN 'EXISTS'
|
||||
ELSE 'NOT EXISTS'
|
||||
END AS hq_pm_service_evaluation_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hq_pm_repair_category')
|
||||
THEN 'EXISTS'
|
||||
ELSE 'NOT EXISTS'
|
||||
END AS hq_pm_repair_category_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hq_pm_system_config')
|
||||
THEN 'EXISTS'
|
||||
ELSE 'NOT EXISTS'
|
||||
END AS hq_pm_system_config_status;
|
||||
|
||||
-- 检查旧表名是否还存在(应该不存在)
|
||||
SELECT
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_order')
|
||||
THEN 'STILL EXISTS (ERROR)'
|
||||
ELSE 'REMOVED (OK)'
|
||||
END AS old_pm_repair_order_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_attachment')
|
||||
THEN 'STILL EXISTS (ERROR)'
|
||||
ELSE 'REMOVED (OK)'
|
||||
END AS old_pm_repair_attachment_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_progress')
|
||||
THEN 'STILL EXISTS (ERROR)'
|
||||
ELSE 'REMOVED (OK)'
|
||||
END AS old_pm_repair_progress_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_service_evaluation')
|
||||
THEN 'STILL EXISTS (ERROR)'
|
||||
ELSE 'REMOVED (OK)'
|
||||
END AS old_pm_service_evaluation_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_repair_category')
|
||||
THEN 'STILL EXISTS (ERROR)'
|
||||
ELSE 'REMOVED (OK)'
|
||||
END AS old_pm_repair_category_status,
|
||||
|
||||
CASE
|
||||
WHEN EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pm_system_config')
|
||||
THEN 'STILL EXISTS (ERROR)'
|
||||
ELSE 'REMOVED (OK)'
|
||||
END AS old_pm_system_config_status;
|
||||
|
||||
SELECT 'Table rename operation completed!' AS result;
|
||||
@@ -1,155 +0,0 @@
|
||||
-- 出国申请管理模块菜单权限配置
|
||||
-- 创建时间: 2025-01-28
|
||||
-- 模块说明: 为出国申请管理功能创建菜单和权限配置
|
||||
-- 包含: 出国申请管理、出国审批管理的完整菜单权限体系
|
||||
|
||||
-- 使用雪花算法生成ID (这里使用固定ID,实际应用中应使用雪花算法)
|
||||
SET @baseMenuId = 2200; -- 基础ID,每个新菜单递增
|
||||
|
||||
-- 查找人事管理顶级菜单ID
|
||||
SET @parentId = (SELECT menu_id FROM sys_menu WHERE menu_name = '人事管理' AND parent_id = 0);
|
||||
|
||||
-- 如果人事管理菜单不存在,则创建
|
||||
INSERT IGNORE INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2050, '人事管理', 0, 50, 'rs', null, '', 1, 0, 'M', '0', '0', '', 'peoples', 1, now(), null, null, '人事管理目录');
|
||||
|
||||
-- 确保获取到人事管理菜单ID
|
||||
SET @parentId = IFNULL(@parentId, 2050);
|
||||
|
||||
-- 出国申请管理菜单
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请管理', @parentId, 10, 'overseas', 'rs/overseas/index', '', 1, 0, 'C', '0', '0', 'rs:overseas:application:list', 'guide', 1, now(), null, null, '出国申请管理菜单');
|
||||
|
||||
-- 获取出国申请管理菜单ID
|
||||
SET @overseasMenuId = @baseMenuId;
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请管理按钮权限
|
||||
|
||||
-- 出国申请查询权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请查询', @overseasMenuId, 1, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:query', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请新增权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请新增', @overseasMenuId, 2, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:add', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请修改权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请修改', @overseasMenuId, 3, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:edit', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请删除权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请删除', @overseasMenuId, 4, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:remove', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请导出权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请导出', @overseasMenuId, 5, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:export', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请提交权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请提交', @overseasMenuId, 6, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:submit', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请取消权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请取消', @overseasMenuId, 7, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:cancel', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国申请审批权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国申请审批', @overseasMenuId, 8, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:approve', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录查询权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录查询', @overseasMenuId, 9, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:query', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录新增权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录新增', @overseasMenuId, 10, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:add', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录修改权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录修改', @overseasMenuId, 11, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:edit', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录删除权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录删除', @overseasMenuId, 12, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:remove', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录导出权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录导出', @overseasMenuId, 13, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:export', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录创建权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录创建', @overseasMenuId, 14, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:create', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国记录完成权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国记录完成', @overseasMenuId, 15, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:record:complete', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国审批管理菜单
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国审批管理', @parentId, 11, 'overseas/approval', 'rs/overseas/approval', '', 1, 0, 'C', '0', '0', 'rs:overseas:approval:list', 'audit', 1, now(), null, null, '出国审批管理菜单');
|
||||
|
||||
-- 获取出国审批管理菜单ID
|
||||
SET @approvalMenuId = @baseMenuId;
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国审批管理按钮权限
|
||||
|
||||
-- 出国审批查询权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国审批查询', @approvalMenuId, 1, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:approval:query', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国审批新增权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国审批新增', @approvalMenuId, 2, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:approval:add', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国审批修改权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国审批修改', @approvalMenuId, 3, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:approval:edit', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国审批删除权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国审批删除', @approvalMenuId, 4, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:approval:remove', '#', 1, now(), null, null, '');
|
||||
SET @baseMenuId = @baseMenuId + 1;
|
||||
|
||||
-- 出国审批导出权限
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (@baseMenuId, '出国审批导出', @approvalMenuId, 5, '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:approval:export', '#', 1, now(), null, null, '');
|
||||
|
||||
-- 为管理员角色分配权限
|
||||
-- 获取管理员角色ID
|
||||
SET @adminRoleId = (SELECT role_id FROM sys_role WHERE role_key = 'admin' LIMIT 1);
|
||||
|
||||
-- 为管理员角色分配出国申请管理菜单的所有权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @adminRoleId, menu_id FROM sys_menu
|
||||
WHERE menu_id >= @overseasMenuId AND menu_id <= (@overseasMenuId + 15)
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = @adminRoleId AND menu_id = sys_menu.menu_id);
|
||||
|
||||
-- 为管理员角色分配出国审批管理菜单的所有权限
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT @adminRoleId, menu_id FROM sys_menu
|
||||
WHERE menu_id >= @approvalMenuId AND menu_id <= (@approvalMenuId + 5)
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = @adminRoleId AND menu_id = sys_menu.menu_id);
|
||||
|
||||
-- 确认菜单创建成功
|
||||
SELECT '出国申请管理模块菜单权限配置完成!' AS message;
|
||||
@@ -1,131 +0,0 @@
|
||||
-- ----------------------------
|
||||
-- 出国申请管理模块数据库表结构
|
||||
-- 创建时间: 2025-01-28
|
||||
-- 模块说明: 出国申请管理功能相关表结构定义
|
||||
-- 包含表: rs_overseas_application(出国申请表)、rs_overseas_record(出国记录表)、rs_overseas_approval(出国审批记录表)
|
||||
-- ----------------------------
|
||||
|
||||
-- 出国申请表
|
||||
DROP TABLE IF EXISTS `rs_overseas_application`;
|
||||
CREATE TABLE `rs_overseas_application` (
|
||||
`application_id` bigint(20) NOT NULL COMMENT '申请ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`applicant_id` bigint(20) NOT NULL COMMENT '申请人ID',
|
||||
`applicant_name` varchar(50) NOT NULL COMMENT '申请人姓名',
|
||||
`department` varchar(100) NOT NULL COMMENT '所属部门',
|
||||
`position` varchar(100) DEFAULT NULL COMMENT '职位',
|
||||
`contact_phone` varchar(20) NOT NULL COMMENT '联系电话',
|
||||
`contact_email` varchar(100) NOT NULL COMMENT '联系邮箱',
|
||||
`purpose` varchar(50) NOT NULL COMMENT '出国目的(academic_exchange-学术交流,conference-学术会议,training-培训学习,cooperation-合作项目,research-科研访问,other-其他)',
|
||||
`purpose_detail` text NOT NULL COMMENT '目的详细说明',
|
||||
`destination` varchar(100) NOT NULL COMMENT '目的地国家',
|
||||
`destination_city` varchar(100) DEFAULT NULL COMMENT '目的地城市',
|
||||
`start_date` date NOT NULL COMMENT '开始日期',
|
||||
`end_date` date NOT NULL COMMENT '结束日期',
|
||||
`duration` int(11) DEFAULT NULL COMMENT '出国天数',
|
||||
`budget` decimal(12,2) NOT NULL COMMENT '预算金额',
|
||||
`budget_source` varchar(50) NOT NULL COMMENT '经费来源(school-学校经费,government-政府资助,project-项目经费,self-个人承担,cooperation-合作单位,other-其他)',
|
||||
`invitation` varchar(500) DEFAULT NULL COMMENT '邀请函信息',
|
||||
`itinerary` text NOT NULL COMMENT '行程安排',
|
||||
`accommodation_plan` text DEFAULT NULL COMMENT '住宿安排',
|
||||
`transportation_plan` text DEFAULT NULL COMMENT '交通安排',
|
||||
`status` char(1) NOT NULL DEFAULT '0' COMMENT '申请状态(0-待审核,1-已通过,2-已拒绝,3-已取消,4-已完成)',
|
||||
`current_approver` varchar(100) DEFAULT NULL COMMENT '当前审批人',
|
||||
`approval_level` char(1) NOT NULL DEFAULT '1' COMMENT '审批级别(1-部门主管,2-分管领导,3-校领导)',
|
||||
`apply_time` datetime DEFAULT NULL COMMENT '申请时间',
|
||||
`approval_time` datetime DEFAULT NULL COMMENT '审批完成时间',
|
||||
`admin_remark` text DEFAULT NULL COMMENT '管理员备注',
|
||||
`applicant_remark` text DEFAULT NULL COMMENT '申请人备注',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
PRIMARY KEY (`application_id`) USING BTREE,
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_applicant_id` (`applicant_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_approval_level` (`approval_level`),
|
||||
KEY `idx_current_approver` (`current_approver`),
|
||||
KEY `idx_apply_time` (`apply_time`),
|
||||
KEY `idx_start_date` (`start_date`),
|
||||
KEY `idx_department` (`department`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出国申请表';
|
||||
|
||||
-- 出国记录表
|
||||
DROP TABLE IF EXISTS `rs_overseas_record`;
|
||||
CREATE TABLE `rs_overseas_record` (
|
||||
`record_id` bigint(20) NOT NULL COMMENT '记录ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`application_id` bigint(20) NOT NULL COMMENT '关联申请ID',
|
||||
`applicant_id` bigint(20) NOT NULL COMMENT '申请人ID',
|
||||
`applicant_name` varchar(50) NOT NULL COMMENT '申请人姓名',
|
||||
`department` varchar(100) NOT NULL COMMENT '所属部门',
|
||||
`purpose` varchar(50) NOT NULL COMMENT '出国目的',
|
||||
`destination` varchar(100) NOT NULL COMMENT '目的地国家',
|
||||
`actual_start_date` date DEFAULT NULL COMMENT '实际开始日期',
|
||||
`actual_end_date` date DEFAULT NULL COMMENT '实际结束日期',
|
||||
`actual_duration` int(11) DEFAULT NULL COMMENT '实际出国天数',
|
||||
`actual_budget` decimal(12,2) DEFAULT NULL COMMENT '实际花费金额',
|
||||
`completion_status` char(1) NOT NULL DEFAULT '1' COMMENT '完成状态(1-已完成,2-已拒绝)',
|
||||
`achievement` text DEFAULT NULL COMMENT '出国成果',
|
||||
`report_content` text DEFAULT NULL COMMENT '总结报告内容',
|
||||
`certificate_path` varchar(500) DEFAULT NULL COMMENT '证书文件路径',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
PRIMARY KEY (`record_id`) USING BTREE,
|
||||
UNIQUE KEY `uk_application_id` (`application_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_applicant_id` (`applicant_id`),
|
||||
KEY `idx_completion_status` (`completion_status`),
|
||||
KEY `idx_actual_start_date` (`actual_start_date`),
|
||||
KEY `idx_department` (`department`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出国记录表';
|
||||
|
||||
-- 出国审批记录表
|
||||
DROP TABLE IF EXISTS `rs_overseas_approval`;
|
||||
CREATE TABLE `rs_overseas_approval` (
|
||||
`approval_id` bigint(20) NOT NULL COMMENT '审批ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`application_id` bigint(20) NOT NULL COMMENT '关联申请ID',
|
||||
`approver_id` bigint(20) NOT NULL COMMENT '审批人ID',
|
||||
`approver_name` varchar(50) NOT NULL COMMENT '审批人姓名',
|
||||
`approval_level` char(1) NOT NULL COMMENT '审批级别(1-部门主管,2-分管领导,3-校领导)',
|
||||
`approval_status` char(1) NOT NULL COMMENT '审批状态(0-待审核,1-通过,2-拒绝)',
|
||||
`approval_opinion` text DEFAULT NULL COMMENT '审批意见',
|
||||
`approval_time` datetime DEFAULT NULL COMMENT '审批时间',
|
||||
`create_dept` bigint(20) DEFAULT NULL 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 '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
PRIMARY KEY (`approval_id`) USING BTREE,
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_application_id` (`application_id`),
|
||||
KEY `idx_approver_id` (`approver_id`),
|
||||
KEY `idx_approval_level` (`approval_level`),
|
||||
KEY `idx_approval_status` (`approval_status`),
|
||||
KEY `idx_approval_time` (`approval_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出国审批记录表';
|
||||
|
||||
-- 初始化示例数据
|
||||
INSERT INTO `rs_overseas_application` VALUES
|
||||
(1, '000000', 1, '张三', '计算机学院', '副教授', '13800138001', 'zhangsan@example.com', 'academic_exchange', '参加国际人工智能学术交流会议,发表研究论文并进行学术交流', '美国', '纽约', '2025-03-15', '2025-03-25', 11, 25000.00, 'school', '已收到会议邀请函', '3月15日飞往纽约,参加为期5天的会议,会后进行实验室访问', '入住会议指定酒店', '往返机票+当地交通', '1', 'admin', '2', '2025-01-28 10:00:00', '2025-01-28 15:30:00', NULL, '期待能够带回先进的研究成果', 1, 1, '2025-01-28 10:00:00', 1, '2025-01-28 15:30:00', 0),
|
||||
(2, '000000', 2, '李四', '外国语学院', '讲师', '13800138002', 'lisi@example.com', 'training', '参加剑桥大学举办的英语教学法培训项目,提升教学水平', '英国', '剑桥', '2025-04-10', '2025-05-10', 31, 45000.00, 'government', '政府公派留学资助项目', '4月10日飞往英国,参加为期1个月的培训课程', '剑桥大学安排的学生宿舍', '政府统一安排', '0', 'manager1', '1', '2025-01-28 14:00:00', NULL, NULL, '希望能学习到最新的教学方法', 1, 1, '2025-01-28 14:00:00', 1, '2025-01-28 14:00:00', 0),
|
||||
(3, '000000', 3, '王五', '机械工程学院', '教授', '13800138003', 'wangwu@example.com', 'cooperation', '与德国慕尼黑工业大学开展智能制造领域合作研究', '德国', '慕尼黑', '2025-05-01', '2025-06-30', 61, 60000.00, 'project', '项目合作经费支持', '5月1日赴德国,进行为期2个月的合作研究', '合作方提供住宿', '项目经费支持往返交通', '4', NULL, '3', '2025-01-25 09:00:00', '2025-01-26 16:00:00', '项目进展顺利,已完成合作研究', '希望能够建立长期合作关系', 1, 1, '2025-01-25 09:00:00', 1, '2025-01-26 16:00:00', 0);
|
||||
|
||||
INSERT INTO `rs_overseas_approval` VALUES
|
||||
(1, '000000', 1, 10, '部门主管A', '1', '1', '同意申请,项目具有重要学术价值', '2025-01-28 11:00:00', 1, 1, '2025-01-28 11:00:00', 1, '2025-01-28 11:00:00', 0),
|
||||
(2, '000000', 1, 20, '分管领导B', '2', '1', '批准出国申请,注意安全', '2025-01-28 15:30:00', 1, 1, '2025-01-28 15:30:00', 1, '2025-01-28 15:30:00', 0),
|
||||
(3, '000000', 3, 10, '部门主管C', '1', '1', '项目合作意义重大,同意申请', '2025-01-25 10:00:00', 1, 1, '2025-01-25 10:00:00', 1, '2025-01-25 10:00:00', 0),
|
||||
(4, '000000', 3, 20, '分管领导D', '2', '1', '支持国际合作项目', '2025-01-25 14:00:00', 1, 1, '2025-01-25 14:00:00', 1, '2025-01-25 14:00:00', 0),
|
||||
(5, '000000', 3, 30, '校领导E', '3', '1', '批准该合作项目,期待成果', '2025-01-26 16:00:00', 1, 1, '2025-01-26 16:00:00', 1, '2025-01-26 16:00:00', 0);
|
||||
|
||||
INSERT INTO `rs_overseas_record` VALUES
|
||||
(1, '000000', 3, 3, '王五', '机械工程学院', 'cooperation', '德国', '2025-05-01', '2025-06-30', 61, 58000.00, '1', '完成了智能制造设备的关键技术研究,发表论文2篇,申请专利1项', '通过与慕尼黑工业大学的深度合作,在智能制造领域取得了重要突破。完成了预定的研究目标,建立了长期合作关系。', '/uploads/certificates/cooperation_certificate_001.pdf', 1, 1, '2025-01-26 17:00:00', 1, '2025-07-01 10:00:00', 0);
|
||||
@@ -1,7 +0,0 @@
|
||||
-- 为rs_application表添加附件相关字段
|
||||
ALTER TABLE `rs_application`
|
||||
ADD COLUMN `attachment_path` varchar(255) DEFAULT NULL COMMENT '附件路径' AFTER `self_description`,
|
||||
ADD COLUMN `attachment_name` varchar(255) DEFAULT NULL COMMENT '附件名称' AFTER `attachment_path`;
|
||||
|
||||
-- 更新表注释
|
||||
ALTER TABLE `rs_application` COMMENT '应聘申请记录表';
|
||||
@@ -1,2 +0,0 @@
|
||||
-- 修改rs_job表的views字段为view_count
|
||||
ALTER TABLE `rs_job` CHANGE `views` `view_count` int(11) DEFAULT '0' COMMENT '浏览次数';
|
||||
@@ -1,133 +0,0 @@
|
||||
# 奖学金批次类型关联功能实现记录
|
||||
|
||||
**实施日期**: 2025-01-27
|
||||
**实施人员**: Cursor AI Assistant
|
||||
**功能描述**: 实现奖学金批次支持关联多个奖学金类型
|
||||
|
||||
## ✅ 已完成的工作
|
||||
|
||||
### 1. 数据库表创建
|
||||
- 创建了 `jcbt_scholarship_batch_type` 关联表
|
||||
- 支持批次与类型的多对多关联
|
||||
- 包含完整的审计字段和索引
|
||||
|
||||
### 2. 后端代码实现
|
||||
- 新增 JcbtScholarshipBatchType 实体类
|
||||
- 新增对应的 Mapper 和 Service 层
|
||||
- 修改批次 Service 支持类型关联保存
|
||||
- 更新 BO 和 VO 类支持类型ID列表
|
||||
|
||||
### 3. 核心功能
|
||||
- 批次新增时可关联多个奖学金类型
|
||||
- 批次编辑时可修改关联的奖学金类型
|
||||
- 批次查询时自动加载关联的类型列表
|
||||
- 完整的事务安全保证
|
||||
|
||||
## ✅ 编译问题已解决
|
||||
|
||||
### 编译错误修复记录
|
||||
- **问题**: MyBatis-Plus `Wrappers.lambdaQueryWrapper()` 方法不存在
|
||||
- **原因**: 方法名错误,应使用 `Wrappers.lambdaQuery()`
|
||||
- **解决**: 已修复 `JcbtScholarshipBatchTypeServiceImpl.java` 中的两处错误
|
||||
- **结果**: ✅ 编译成功,打包成功
|
||||
|
||||
### 已完成操作
|
||||
1. ✅ **后端代码编译** - 所有错误已修复
|
||||
2. ✅ **后端项目打包** - 生成 `ruoyi-admin.jar`
|
||||
3. ✅ **前端界面更新** - 添加奖学金类型选择组件
|
||||
4. ✅ **后端服务启动** - 服务已后台启动
|
||||
|
||||
### 前端界面功能详情
|
||||
|
||||
#### ✅ 已添加功能
|
||||
- **奖学金类型选择器**: 多选下拉框,支持批次关联多个奖学金类型
|
||||
- **表单验证**: 必须至少选择一个奖学金类型
|
||||
- **用户提示**: 添加友好的帮助文本说明
|
||||
- **样式优化**: 折叠标签显示,最多显示3个
|
||||
- **编辑回显功能**: 修复编辑时奖学金类型正确回显问题
|
||||
|
||||
#### 🎯 界面位置
|
||||
- **文件**: `web/src/views/jcbt/scholarship/batch/index.vue`
|
||||
- **位置**: 奖学金批次新增/编辑表单中
|
||||
- **字段**: "奖学金类型" - 批次描述字段之前
|
||||
|
||||
#### 📝 临时数据
|
||||
当前使用模拟数据(待API完善后对接):
|
||||
- 国家奖学金
|
||||
- 国家励志奖学金
|
||||
- 校级优秀学生奖学金
|
||||
- 专项奖学金
|
||||
- 企业奖学金
|
||||
|
||||
## 🎯 实现效果
|
||||
|
||||
1. ✅ **后端数据表创建** - 完整的批次类型关联表和相关业务逻辑
|
||||
2. ✅ **API接口完善** - 新增和编辑批次时自动处理类型关联
|
||||
3. ✅ **前端界面优化** - 美观的多选下拉框和用户提示
|
||||
4. ✅ **数据验证** - 确保批次至少关联一个奖学金类型
|
||||
5. ✅ **编辑功能修复** - 确保编辑时奖学金类型数据正确回显
|
||||
|
||||
## 🔧 技术细节
|
||||
|
||||
### 新增时数据保存修复
|
||||
**问题**: 新增奖学金批次时,奖学金类型关联关系没有正确保存到数据库
|
||||
**原因**: 在Service层使用了错误的数据源,应该使用BO对象的数据而不是转换后的实体对象
|
||||
|
||||
**修复前**:
|
||||
```java
|
||||
// 错误:使用转换后的实体对象
|
||||
if (add.getScholarshipTypeIds() != null && !add.getScholarshipTypeIds().isEmpty()) {
|
||||
batchTypeService.saveBatchTypes(add.getId(), add.getScholarshipTypeIds(), tenantId);
|
||||
}
|
||||
```
|
||||
|
||||
**修复后**:
|
||||
```java
|
||||
// 正确:使用原始BO对象的数据
|
||||
if (bo.getScholarshipTypeIds() != null && !bo.getScholarshipTypeIds().isEmpty()) {
|
||||
batchTypeService.saveBatchTypes(add.getId(), bo.getScholarshipTypeIds(), tenantId);
|
||||
}
|
||||
```
|
||||
|
||||
### 编辑回显处理
|
||||
在`handleUpdate`函数中添加了专门的scholarshipTypeIds处理逻辑:
|
||||
```javascript
|
||||
// 确保scholarshipTypeIds正确赋值
|
||||
if (res.data.scholarshipTypeIds && Array.isArray(res.data.scholarshipTypeIds)) {
|
||||
form.value.scholarshipTypeIds = [...res.data.scholarshipTypeIds];
|
||||
} else {
|
||||
form.value.scholarshipTypeIds = [];
|
||||
}
|
||||
```
|
||||
|
||||
### 后端查询逻辑
|
||||
在`JcbtScholarshipBatchServiceImpl.queryById`中:
|
||||
```java
|
||||
// 查询关联的奖学金类型ID列表
|
||||
List<Long> scholarshipTypeIds = batchTypeService.getScholarshipTypeIdsByBatchId(id);
|
||||
vo.setScholarshipTypeIds(scholarshipTypeIds);
|
||||
```
|
||||
|
||||
## 📝 技术要点
|
||||
|
||||
- 使用标准的多对多关联表设计
|
||||
- 遵循项目的数据库规范
|
||||
- 完整的事务管理
|
||||
- 符合若依框架的开发规范
|
||||
- 前端数据绑定和回显处理
|
||||
|
||||
---
|
||||
|
||||
**状态**: ✅ 功能完全实现!前后端代码已部署,数据库字段已修复,新增和编辑奖学金批次时都能正确处理奖学金类型关联
|
||||
|
||||
### 🚀 最新修复 (2025-01-27 14:00)
|
||||
- ✅ **新增保存修复**: 修复了新增奖学金批次时奖学金类型关联数据没有正确写入数据库的问题
|
||||
- ✅ **代码重新部署**: 后端服务已重新编译和部署,修复立即生效
|
||||
- 🎯 **测试建议**: 现在可以测试新增奖学金批次功能,选择的奖学金类型应该能正确保存到数据库
|
||||
|
||||
### 🛠️ 数据库字段修复 (2025-01-27 14:30)
|
||||
- ⚠️ **问题发现**: 新增提交时报错 `Unknown column 'create_dept' in 'field list'`
|
||||
- 🔍 **问题原因**: `JcbtScholarshipBatchType` 实体类继承 `BaseEntity`,包含 `createDept` 字段,但数据库表 `jcbt_scholarship_batch_type` 缺少对应的 `create_dept` 字段
|
||||
- ✅ **解决方案**: 创建修复脚本 `fix_batch_type_create_dept.sql`,为数据库表添加缺失字段
|
||||
- ✅ **修复执行**: 成功执行SQL脚本,添加 `create_dept BIGINT(20)` 字段
|
||||
- 🚀 **服务重启**: 重新启动后端服务,应用数据库结构修复
|
||||
@@ -1,231 +0,0 @@
|
||||
# 代码调整记录 - 2024-12-19 - Cursor
|
||||
|
||||
## 变更概述
|
||||
完成助学金申请管理前端页面开发,统一风格与后勤管理模块保持一致
|
||||
|
||||
## 具体变更内容
|
||||
|
||||
### 1. 助学金申请管理主页面样式更新
|
||||
**文件路径**: `web/src/views/jcbt/poverty/Application/index.vue`
|
||||
|
||||
**变更内容**:
|
||||
- 更新页面容器样式,使用 `page-container` 类替代 `app-container`
|
||||
- 统计卡片区域使用与后勤管理模块一致的设计
|
||||
- 搜索区域采用 transition 过渡效果和 `el-card shadow="hover"`
|
||||
- 工具栏样式与后勤管理模块保持一致
|
||||
- 表格样式统一,包括表头背景色和行悬停效果
|
||||
- 分页容器样式优化
|
||||
|
||||
**主要特点**:
|
||||
- 统计卡片使用渐变背景和图标展示
|
||||
- 搜索表单布局采用 4-4-4 列布局
|
||||
- 操作按钮使用图标+文字组合
|
||||
- 表格支持多选、排序、行悬停效果
|
||||
|
||||
### 2. 助学金申请表单页面样式更新
|
||||
**文件路径**: `web/src/views/jcbt/poverty/Application/form.vue`
|
||||
|
||||
**变更内容**:
|
||||
- 页面容器样式统一为 `page-container`
|
||||
- 表单卡片使用 `shadow="hover"` 效果
|
||||
- 表单标题更新为"助学金申请"
|
||||
- 图标组件更新为 Element Plus 新版本格式
|
||||
- 文件上传组件优化,支持多种文件格式
|
||||
- 表单操作按钮布局优化
|
||||
|
||||
**主要特点**:
|
||||
- 表单分为基本信息、家庭情况、申请信息、材料上传四个区块
|
||||
- 每个区块都有图标和标题
|
||||
- 支持文件上传预览和管理
|
||||
- 表单验证和交互体验优化
|
||||
|
||||
### 3. CSS样式统一化
|
||||
**变更范围**: 两个页面的样式文件
|
||||
|
||||
**主要调整**:
|
||||
- 页面容器 padding 统一为 8px
|
||||
- 统计卡片高度统一为 90px
|
||||
- 表格样式与后勤管理模块保持一致
|
||||
- 搜索按钮容器样式统一
|
||||
- 分页容器样式统一
|
||||
|
||||
### 4. API接口完善
|
||||
**文件路径**: `web/src/api/jcbt/povertyApplication.ts`
|
||||
|
||||
**现有功能**:
|
||||
- 完整的 CRUD 操作接口
|
||||
- 业务功能接口:我的申请、待审核列表、提交申请、撤销申请
|
||||
- 辅助功能接口:草稿保存、审核操作、重复检查等
|
||||
- 统计分析接口
|
||||
|
||||
## 技术特点
|
||||
|
||||
### 1. 设计风格统一
|
||||
- 与后勤管理模块保持完全一致的视觉风格
|
||||
- 使用相同的颜色方案和布局结构
|
||||
- 统一的交互体验和动画效果
|
||||
|
||||
### 2. 组件化开发
|
||||
- 复用项目中的通用组件
|
||||
- 图标使用 Element Plus 官方图标库
|
||||
- 表格、表单、卡片等组件风格统一
|
||||
|
||||
### 3. 响应式设计
|
||||
- 表格支持固定高度和滚动
|
||||
- 搜索表单支持响应式布局
|
||||
- 移动端友好的交互设计
|
||||
|
||||
### 4. 用户体验优化
|
||||
- 搜索区域支持展开/收起动画
|
||||
- 统计卡片支持悬停效果
|
||||
- 表格行悬停高亮显示
|
||||
- 操作按钮提供工具提示
|
||||
|
||||
## 开发规范遵循
|
||||
|
||||
### 1. 前端开发规范
|
||||
- 遵循 Vue 3 + TypeScript 开发规范
|
||||
- 使用 Element Plus 组件库
|
||||
- 代码结构清晰,注释完整
|
||||
|
||||
### 2. API接口规范
|
||||
- 统一的响应格式
|
||||
- 完整的 TypeScript 类型定义
|
||||
- 标准的 RESTful 接口设计
|
||||
|
||||
### 3. 样式规范
|
||||
- 使用 SCSS 预处理器
|
||||
- CSS类命名规范化
|
||||
- 响应式设计考虑
|
||||
|
||||
## 测试建议
|
||||
|
||||
### 1. 功能测试
|
||||
- 列表查询、分页、排序功能
|
||||
- 新增、修改、删除操作
|
||||
- 文件上传和预览功能
|
||||
- 审核流程操作
|
||||
|
||||
### 2. 样式测试
|
||||
- 不同屏幕尺寸下的显示效果
|
||||
- 悬停、点击等交互效果
|
||||
- 主题色彩一致性检查
|
||||
|
||||
### 3. 兼容性测试
|
||||
- 主流浏览器兼容性
|
||||
- 移动端显示效果
|
||||
- 网络环境适应性
|
||||
|
||||
## 后续优化建议
|
||||
|
||||
### 1. 功能增强
|
||||
- 批量操作功能优化
|
||||
- 导出功能增强
|
||||
- 搜索条件保存功能
|
||||
|
||||
### 2. 性能优化
|
||||
- 表格虚拟滚动
|
||||
- 图片懒加载
|
||||
- 接口请求优化
|
||||
|
||||
### 3. 用户体验
|
||||
- 加载状态优化
|
||||
- 错误处理完善
|
||||
- 操作反馈提升
|
||||
|
||||
---
|
||||
|
||||
## 补充修复内容
|
||||
|
||||
### 5. 后台服务编译错误修复
|
||||
**修复时间**: 2024-12-19 17:24:00
|
||||
|
||||
**问题描述**:
|
||||
后台服务在编译 `ruoyi-jcbt` 模块时出现 Excel 注解导入错误:
|
||||
```
|
||||
[ERROR] 程序包com.alibaba.excel.annotation不存在
|
||||
[ERROR] 找不到符号: 类 ExcelIgnoreUnannotated
|
||||
[ERROR] 找不到符号: 类 ExcelProperty
|
||||
```
|
||||
|
||||
**问题分析**:
|
||||
- `JcbtPovertyApplicationVo.java` 文件错误使用了 `com.alibaba.excel` 包
|
||||
- 项目实际使用的是 `cn.idev.excel` (FastExcel) 而非 EasyExcel
|
||||
- 需要修正导入语句以匹配项目的 Excel 依赖
|
||||
|
||||
**修复内容**:
|
||||
**文件路径**: `backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/vo/JcbtPovertyApplicationVo.java`
|
||||
|
||||
```diff
|
||||
- import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
- import com.alibaba.excel.annotation.ExcelProperty;
|
||||
+ import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
+ import cn.idev.excel.annotation.ExcelProperty;
|
||||
```
|
||||
|
||||
**验证结果**:
|
||||
- ✅ Maven 编译成功 (BUILD SUCCESS)
|
||||
- ✅ 所有 33 个模块编译通过
|
||||
- ✅ 总编译时间: 02:59 分钟
|
||||
- ✅ 无编译错误
|
||||
|
||||
**技术总结**:
|
||||
1. **依赖识别**: 项目使用 `cn.idev.excel` (FastExcel) 而非 `com.alibaba.excel` (EasyExcel)
|
||||
2. **导入修正**: 统一使用项目标准的 Excel 注解包
|
||||
3. **编译验证**: 通过完整编译确认修复有效性
|
||||
|
||||
### 6. 前端SASS语法错误修复
|
||||
**修复时间**: 2024-12-19 17:35:00
|
||||
|
||||
**问题描述**:
|
||||
前端页面在加载时出现 SASS 编译错误:
|
||||
```
|
||||
[plugin:vite:css] [sass] Expected identifier.
|
||||
╷
|
||||
7 │ .mb-[10px] {
|
||||
│ ^
|
||||
╵
|
||||
src/views/jcbt/poverty/Application/index.vue 7:6 root stylesheet
|
||||
```
|
||||
|
||||
**问题分析**:
|
||||
- CSS 类名 `.mb-[10px]` 是 Tailwind CSS 的语法
|
||||
- 在 SASS/SCSS 中,方括号 `[]` 被视为属性选择器
|
||||
- `10px` 不是有效的CSS标识符,导致语法错误
|
||||
- 需要将 Tailwind 风格的类名改为标准CSS类名
|
||||
|
||||
**修复内容**:
|
||||
**文件路径**: `web/src/views/jcbt/poverty/Application/index.vue`
|
||||
|
||||
```diff
|
||||
- .mb-[10px] {
|
||||
+ .mb-10px {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
- <div class="mb-[10px]">
|
||||
+ <div class="mb-10px">
|
||||
- <div v-show="showSearch" class="mb-[10px]">
|
||||
+ <div v-show="showSearch" class="mb-10px">
|
||||
- <el-card class="button-card mb-[10px]" shadow="never">
|
||||
+ <el-card class="button-card mb-10px" shadow="never">
|
||||
```
|
||||
|
||||
**修复范围**:
|
||||
1. CSS样式定义:`.mb-[10px]` → `.mb-10px`
|
||||
2. 模板使用:更新3处 `mb-[10px]` 类名引用
|
||||
3. 保持样式效果:`margin-bottom: 10px` 效果不变
|
||||
|
||||
**验证结果**:
|
||||
- ✅ SASS 编译错误消除
|
||||
- ✅ 前端开发服务器可正常启动
|
||||
- ✅ 页面样式效果保持一致
|
||||
- ✅ 无其他编译警告
|
||||
|
||||
---
|
||||
|
||||
**变更时间**: 2024-12-19 15:30:00 (初始开发) / 17:24:00 (编译修复) / 17:35:00 (SASS修复)
|
||||
**变更人员**: Cursor AI Assistant
|
||||
**变更类型**: 功能开发 + 编译修复 + 样式修复
|
||||
**影响范围**: 助学金申请管理模块前端页面 + 后端编译 + 前端样式编译
|
||||
**测试状态**: 前后端编译通过,页面可正常访问,功能待测试
|
||||
@@ -1,68 +0,0 @@
|
||||
# 代码调整记录 - 2025-01-01 - Assistant
|
||||
|
||||
## 修复记录(按时间倒序)
|
||||
|
||||
### ⚡ 修复时间:2025-01-01 15:30:00
|
||||
|
||||
**🐛 问题描述**:
|
||||
- **报错信息**:`Field 'application_type' doesn't have a default value`
|
||||
- **影响模块**:奖学金申请管理
|
||||
- **场景**:班主任批量申请奖学金时,插入数据库失败
|
||||
|
||||
**🔍 问题根因**:
|
||||
1. `jcbt_scholarship_application` 表中 `application_type` 字段定义为 `NOT NULL` 且无默认值
|
||||
2. 班主任批量申请方法 `batchSubmitApplicationsByTeacher()` 中缺少 `applicationType` 字段设置
|
||||
3. 通用插入方法 `insertByBo()` 中缺少 `applicationType` 默认值设置
|
||||
|
||||
**✅ 修复方案**:
|
||||
1. **在班主任批量申请中设置申请类型**
|
||||
- 文件:`JcbtScholarshipApplicationServiceImpl.java`
|
||||
- 位置:`batchSubmitApplicationsByTeacher()` 方法
|
||||
- 修改:添加 `applicationBo.setApplicationType("RECOMMEND");`
|
||||
- 逻辑:班主任代申请属于教师推荐类型
|
||||
|
||||
2. **在通用插入方法中添加默认值**
|
||||
- 文件:`JcbtScholarshipApplicationServiceImpl.java`
|
||||
- 位置:`insertByBo()` 方法
|
||||
- 修改:添加默认值设置逻辑
|
||||
- 逻辑:如果未设置申请类型,默认为 `"RECOMMEND"`
|
||||
|
||||
**📝 技术细节**:
|
||||
```java
|
||||
// 修复1:班主任批量申请
|
||||
applicationBo.setApplicationType("RECOMMEND"); // 班主任代申请属于教师推荐类型
|
||||
|
||||
// 修复2:通用插入方法默认值
|
||||
if (StringUtils.isBlank(add.getApplicationType())) {
|
||||
add.setApplicationType("RECOMMEND"); // 默认为教师推荐类型
|
||||
}
|
||||
```
|
||||
|
||||
**🎯 申请类型枚举值**:
|
||||
- `RECOMMEND` - 教师推荐(班主任代申请)
|
||||
- `AUTO` - 自动评定
|
||||
- `DIRECT` - 直接指定
|
||||
|
||||
**📊 修复结果**:
|
||||
- ✅ 班主任批量申请功能恢复正常
|
||||
- ✅ 所有申请记录都有明确的申请类型
|
||||
- ✅ 数据库插入不再报错
|
||||
- ✅ 符合业务逻辑:班主任代申请 = 教师推荐
|
||||
|
||||
**⚠️ 重启要求**:
|
||||
- **需要重新编译**:修改了 Java 业务代码
|
||||
- **需要重启服务**:修改了 Spring Bean 的业务逻辑
|
||||
- **影响模块**:ruoyi-jcbt 模块
|
||||
|
||||
**🔄 后续优化建议**:
|
||||
1. 考虑在数据库层面添加 `application_type` 字段的默认值
|
||||
2. 完善申请类型的业务规则文档
|
||||
3. 添加申请类型的数据字典配置
|
||||
|
||||
---
|
||||
|
||||
**📋 修复文件清单**:
|
||||
- `backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/service/impl/JcbtScholarshipApplicationServiceImpl.java`
|
||||
|
||||
**🕐 修复耗时**:约 10 分钟
|
||||
**✅ 测试状态**:待重启后验证
|
||||
@@ -1,165 +0,0 @@
|
||||
# 代码调整记录 - 2025-01-01 - wuzhen
|
||||
|
||||
## 📝 变更概述
|
||||
|
||||
### 变更时间
|
||||
- **日期**: 2025-01-01
|
||||
- **时间**: 14:30:00
|
||||
- **操作人**: wuzhen
|
||||
|
||||
### 变更类型
|
||||
- **类型**: 🐛 Bug修复
|
||||
- **影响范围**: 奖学金申请模块 - 班级信息确认功能
|
||||
|
||||
---
|
||||
|
||||
## 🔧 具体变更内容
|
||||
|
||||
### 1. 问题描述
|
||||
**问题**: 班主任在奖学金申请系统中,点击"班级信息确认"功能后,始终显示空白信息,无法获取到任何班级数据。
|
||||
|
||||
**根本原因**: 用户ID与班主任ID的数据映射不匹配
|
||||
- 前端传递:当前登录用户的用户ID(`sys_user`表主键)
|
||||
- 后端查询:使用该ID查询`xg_class_msg`表的`class_teacher_id`字段
|
||||
- 结果:数据不匹配,查询为空
|
||||
|
||||
### 2. 修改的文件
|
||||
```
|
||||
backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/service/impl/JcbtScholarshipApplicationServiceImpl.java
|
||||
```
|
||||
|
||||
### 3. 修改内容详情
|
||||
|
||||
#### 3.1 添加导入
|
||||
```java
|
||||
// 新增导入
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.domain.dto.LoginUser;
|
||||
```
|
||||
|
||||
#### 3.2 方法重构
|
||||
**修改方法**: `getClassInfoByTeacher(Long userId)`
|
||||
|
||||
**核心改进**:
|
||||
1. **获取准确用户信息**: 通过`LoginHelper.getLoginUser()`获取当前登录用户的完整信息
|
||||
2. **多种查询策略**:
|
||||
- 方式1:通过用户ID查询`class_teacher_id`字段
|
||||
- 方式2:通过用户名查询`class_teacher_name`字段
|
||||
- 方式3:兼容原逻辑,通过传入参数查询
|
||||
3. **详细日志记录**: 增加完整的调试日志,便于问题定位
|
||||
4. **友好错误提示**: 优化异常处理和用户提示信息
|
||||
|
||||
#### 3.3 关键逻辑变更
|
||||
```java
|
||||
// 原逻辑(单一查询方式)
|
||||
XgClassMsgBo queryBo = new XgClassMsgBo();
|
||||
queryBo.setClassTeacherId(teacherId);
|
||||
List<XgClassMsgVo> classList = xgClassMsgService.queryList(queryBo);
|
||||
|
||||
// 新逻辑(多重查询策略)
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
Long currentUserId = loginUser.getUserId();
|
||||
String currentUserName = loginUser.getNickname();
|
||||
|
||||
// 方式1:通过用户ID查询
|
||||
// 方式2:通过用户名查询
|
||||
// 方式3:兼容原逻辑
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 预期效果
|
||||
|
||||
### ✅ 解决的问题
|
||||
1. **班级信息显示**: 班主任能够正确获取到所带班级的信息
|
||||
2. **用户体验**: 消除空白页面,提供有意义的反馈信息
|
||||
3. **系统稳定性**: 增强错误处理,避免系统异常
|
||||
|
||||
### 📊 技术改进
|
||||
1. **兼容性**: 保持向后兼容,支持多种数据匹配方式
|
||||
2. **可调试性**: 增加详细日志,便于后续问题定位
|
||||
3. **健壮性**: 完善异常处理机制
|
||||
|
||||
---
|
||||
|
||||
## 🔍 测试建议
|
||||
|
||||
### 1. 基本功能测试
|
||||
- 使用有班级数据的班主任账号登录
|
||||
- 访问奖学金申请页面,点击"班级信息确认"
|
||||
- 验证是否正确显示班级信息
|
||||
|
||||
### 2. 边界条件测试
|
||||
- 测试没有关联班级的用户
|
||||
- 测试数据库异常情况
|
||||
- 验证错误提示信息的友好性
|
||||
|
||||
### 3. 日志检查
|
||||
- 检查应用日志中的详细调试信息
|
||||
- 确认各种查询方式的执行情况
|
||||
|
||||
---
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
### ⚠️ 重要提醒
|
||||
1. **数据一致性**: 需要长期关注用户表与班级表的数据一致性
|
||||
2. **性能影响**: 新增了多次查询逻辑,需要关注性能表现
|
||||
3. **数据维护**: 建议定期检查和维护用户与班级的关联关系
|
||||
|
||||
### 🔄 后续优化建议
|
||||
1. **数据规范**: 统一用户ID与班主任ID的数据标准
|
||||
2. **缓存机制**: 考虑增加班级信息缓存,提升查询性能
|
||||
3. **数据校验**: 增加数据完整性校验机制
|
||||
|
||||
---
|
||||
|
||||
## 🚀 部署说明
|
||||
|
||||
### 编译和重启步骤
|
||||
```bash
|
||||
# 1. 进入后端目录
|
||||
cd backend
|
||||
|
||||
# 2. 编译项目
|
||||
mvn clean compile
|
||||
|
||||
# 3. 重启应用
|
||||
# 根据实际部署方式重启应用服务
|
||||
```
|
||||
|
||||
### 验证步骤
|
||||
1. 检查应用启动日志,确认无编译错误
|
||||
2. 使用班主任账号测试班级信息确认功能
|
||||
3. 检查应用日志,确认新的调试信息正常输出
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## 🔧 2025-01-01 14:45:00 - 编译错误修复
|
||||
|
||||
### 问题描述
|
||||
编译时出现导入路径错误:
|
||||
```
|
||||
[ERROR] 程序包org.dromara.system.domain.dto不存在
|
||||
```
|
||||
|
||||
### 解决方案
|
||||
**修正导入路径**:
|
||||
```java
|
||||
// 错误导入
|
||||
import org.dromara.system.domain.dto.LoginUser;
|
||||
|
||||
// 正确导入
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
```
|
||||
|
||||
### 验证结果
|
||||
✅ 编译成功:`ruoyi-jcbt ......................................... SUCCESS [ 8.012 s]`
|
||||
|
||||
---
|
||||
|
||||
**修改人**: wuzhen
|
||||
**修改时间**: 2025-01-01 14:45:00
|
||||
**状态**: ✅ 已完成,编译验证通过
|
||||
@@ -1,186 +0,0 @@
|
||||
# 代码调整记录 - 2025-01-07 - cursor
|
||||
|
||||
## 🔧 修复奖学金申请"班级可用名额不足"错误
|
||||
|
||||
### 📋 问题描述
|
||||
- **错误现象**: 班主任批量申请奖学金时出现"班级可用名额不足,无法提交申请"错误
|
||||
- **错误位置**: 后端 JcbtScholarshipApplicationServiceImpl.java 第206行
|
||||
- **根本原因**: 前后端对班级名额验证逻辑不一致
|
||||
|
||||
### 🔍 问题分析
|
||||
1. **前端验证**: 只有当 `classQuota.hasQuota = true` 时才进行名额检查
|
||||
2. **后端验证**: 当 `queryAvailableQuota` 返回 `null` 时直接报错
|
||||
3. **数据不一致**: 班级没有分配名额时,前端显示但后端拒绝提交
|
||||
|
||||
### ✅ 解决方案
|
||||
**采用方案一**:修复前端验证逻辑,在提交前严格检查班级名额情况
|
||||
|
||||
---
|
||||
|
||||
## 🔄 第一次修复 (21:25:00)
|
||||
|
||||
### 📝 修改内容
|
||||
|
||||
#### 文件:`web/src/views/jcbt/scholarship/application/index.vue`
|
||||
**修改位置**: `submitBatchApplication` 方法中的名额验证逻辑(约第1195-1238行)
|
||||
|
||||
**修改前**:
|
||||
```javascript
|
||||
// 优先检查班级名额
|
||||
if (scholarshipType.classQuota && scholarshipType.classQuota.hasQuota) {
|
||||
if (count > scholarshipType.classQuota.availableQuota) {
|
||||
ElMessage.error(`申请人数超过班级可用名额`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**修改后**:
|
||||
```javascript
|
||||
// 检查班级名额情况
|
||||
if (scholarshipType.classQuota) {
|
||||
// 如果班级没有分配名额,直接报错
|
||||
if (!scholarshipType.classQuota.hasQuota) {
|
||||
ElMessage.error(`${scholarshipType.name} 在当前班级没有分配名额,无法申请`);
|
||||
return;
|
||||
}
|
||||
// 如果有名额但不足,报错
|
||||
if (count > scholarshipType.classQuota.availableQuota) {
|
||||
ElMessage.error(`${scholarshipType.name} 申请人数(${count})超过班级可用名额(${scholarshipType.classQuota.availableQuota})`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 🚨 第一次修复结果
|
||||
**用户反馈**: "还是有这个报错,没有任何改变"
|
||||
|
||||
---
|
||||
|
||||
## 🔍 深度分析 (21:45:00)
|
||||
|
||||
### 🎯 发现真正问题
|
||||
通过深入分析后端代码发现:
|
||||
1. **数据结构不匹配**: 前端期望嵌套结构,后端返回扁平结构
|
||||
2. **验证逻辑错误**: 前端验证逻辑与后端实际数据结构不符
|
||||
|
||||
### 📊 后端实际返回的数据结构
|
||||
```javascript
|
||||
// 后端 getScholarshipTypesWithQuota 实际返回结构
|
||||
{
|
||||
id: 123,
|
||||
name: "国家奖学金",
|
||||
hasQuota: true, // true=有班级名额分配, false=无班级名额分配
|
||||
totalQuota: 5, // 总名额
|
||||
usedQuota: 2, // 已用名额
|
||||
availableQuota: 3, // 可用名额
|
||||
quotaStatus: "available" // available/full/unlimited
|
||||
}
|
||||
```
|
||||
|
||||
### 📋 前端错误期望的结构
|
||||
```javascript
|
||||
// 前端错误期望的嵌套结构
|
||||
{
|
||||
classQuota: {
|
||||
hasQuota: true,
|
||||
availableQuota: 3
|
||||
},
|
||||
schoolQuota: {
|
||||
hasQuota: false,
|
||||
quotaStatus: 'unlimited'
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 第二次修复 (22:00:00)
|
||||
|
||||
### 📝 全面修复内容
|
||||
|
||||
#### 1. 修复 `submitBatchApplication` 验证逻辑
|
||||
**文件**: `web/src/views/jcbt/scholarship/application/index.vue`
|
||||
**位置**: 第1195-1268行
|
||||
|
||||
**修复后逻辑**:
|
||||
```javascript
|
||||
// 根据后端实际返回的数据结构进行验证
|
||||
// 如果hasQuota为true,表示有班级名额分配
|
||||
if (scholarshipType.hasQuota === true) {
|
||||
const availableQuota = scholarshipType.availableQuota || 0;
|
||||
if (availableQuota <= 0) {
|
||||
ElMessage.error(`${scholarshipType.name} 在当前班级没有可用名额,无法申请`);
|
||||
return;
|
||||
}
|
||||
if (count > availableQuota) {
|
||||
ElMessage.error(`${scholarshipType.name} 申请人数(${count})超过班级可用名额(${availableQuota})`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 如果hasQuota为false,表示没有班级名额分配,使用全校名额
|
||||
else if (scholarshipType.hasQuota === false) {
|
||||
const quotaStatus = scholarshipType.quotaStatus;
|
||||
const availableQuota = scholarshipType.availableQuota || 0;
|
||||
|
||||
if (quotaStatus === 'unlimited') {
|
||||
// 无限制名额,允许申请
|
||||
} else if (quotaStatus === 'available') {
|
||||
if (count > availableQuota) {
|
||||
ElMessage.error(`${scholarshipType.name} 申请人数(${count})超过全校可用名额(${availableQuota})`);
|
||||
return;
|
||||
}
|
||||
} else if (quotaStatus === 'full') {
|
||||
ElMessage.error(`${scholarshipType.name} 全校名额已满,无法申请`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 修复 `isScholarshipTypeSelectable` 函数
|
||||
**位置**: 第895-933行
|
||||
|
||||
**修复要点**:
|
||||
- 直接使用 `hasQuota` 字段判断是否有班级名额分配
|
||||
- 使用 `quotaStatus` 字段判断名额状态
|
||||
- 移除对不存在的嵌套结构的依赖
|
||||
|
||||
#### 3. 修复 `isQuotaExceeded` 和 `getRemainingQuota` 函数
|
||||
**位置**: 第935-1010行
|
||||
|
||||
**修复要点**:
|
||||
- 统一使用扁平的数据结构
|
||||
- 正确处理 `unlimited` 状态的名额
|
||||
- 移除对 `classQuota` 和 `schoolQuota` 嵌套对象的引用
|
||||
|
||||
### 🎯 修复效果
|
||||
1. **前端阻止**: 班级无名额的奖学金类型在提交前就被阻止
|
||||
2. **数据结构匹配**: 前端验证逻辑与后端返回数据完全匹配
|
||||
3. **友好提示**: 显示准确的错误信息和名额状态
|
||||
4. **避免后端错误**: 不再触发后端的"班级可用名额不足"异常
|
||||
|
||||
### 🚨 部署说明
|
||||
- **影响范围**: 前端Vue组件的3个核心验证函数
|
||||
- **需要重启**: 前端开发服务器 (`npm run dev`)
|
||||
- **清除缓存**: 建议强制刷新浏览器缓存
|
||||
|
||||
### 📊 测试验证
|
||||
- [ ] 有班级名额的奖学金类型:正常提交
|
||||
- [ ] 无班级名额的奖学金类型:前端阻止并显示友好错误
|
||||
- [ ] 名额不足的奖学金类型:显示具体名额不足信息
|
||||
- [ ] 无限制名额的奖学金类型:正常提交
|
||||
|
||||
### 📚 相关文档
|
||||
- **API文档**: `docs/开发文档/API/奖学金申请管理API.md`
|
||||
- **前端规范**: `.cursor/cursorrules-frontend.md`
|
||||
- **数据结构**: 后端 JcbtScholarshipApplicationServiceImpl.getScholarshipTypesWithQuota 方法
|
||||
|
||||
---
|
||||
|
||||
**第一次修复时间**: 2025-01-07 21:25:00
|
||||
**第二次修复时间**: 2025-01-07 22:00:00
|
||||
**修复人员**: Cursor AI Assistant
|
||||
**验证状态**: 待用户测试验证
|
||||
**优先级**: 高(影响核心业务功能)
|
||||
|
||||
**修复总结**: 通过深入分析后端实际数据结构,发现前端验证逻辑与后端返回数据不匹配的根本问题,进行了全面的数据结构适配修复。
|
||||
@@ -1,216 +0,0 @@
|
||||
# 代码调整记录 - 2025-01-07 - wuzhen
|
||||
|
||||
## 📋 变更概览
|
||||
|
||||
**变更日期**: 2025-01-07
|
||||
**变更人员**: wuzhen
|
||||
**变更类型**: 新功能开发
|
||||
**变更范围**: 奖学金名额统计功能
|
||||
|
||||
---
|
||||
|
||||
## 🎯 变更目标
|
||||
|
||||
为奖学金名额管理系统增加实时统计功能,包括:
|
||||
- 总名额统计
|
||||
- 已用名额统计
|
||||
- 可用名额统计
|
||||
- 使用率计算
|
||||
|
||||
---
|
||||
|
||||
## 🔧 技术实现
|
||||
|
||||
### 后端开发
|
||||
|
||||
#### 1. Controller层新增API接口
|
||||
**文件**: `backend/hzdyjs-api/hzdyjs-jcbt/src/main/java/com/hzdyjs/jcbt/controller/ScholarshipQuotaController.java`
|
||||
|
||||
**新增接口**:
|
||||
```java
|
||||
@GetMapping("/statistics/{batchId}")
|
||||
@SaCheckPermission("jcbt:scholarshipQuota:statistics")
|
||||
public R<Map<String, Object>> getStatistics(@PathVariable Long batchId)
|
||||
```
|
||||
|
||||
**功能**: 获取指定批次的名额统计数据
|
||||
|
||||
#### 2. Service层统计业务逻辑
|
||||
**文件**: `backend/hzdyjs-api/hzdyjs-jcbt/src/main/java/com/hzdyjs/jcbt/service/impl/ScholarshipQuotaServiceImpl.java`
|
||||
|
||||
**新增方法**:
|
||||
```java
|
||||
@Override
|
||||
public Map<String, Object> getStatistics(Long batchId)
|
||||
```
|
||||
|
||||
**统计逻辑**:
|
||||
- 查询指定批次的所有名额配置
|
||||
- 计算总名额、已用名额、可用名额
|
||||
- 计算使用率百分比
|
||||
- 返回统计结果
|
||||
|
||||
#### 3. 权限配置
|
||||
**权限标识**: `jcbt:scholarshipQuota:statistics`
|
||||
**权限名称**: 奖学金名额统计查看
|
||||
|
||||
### 前端开发
|
||||
|
||||
#### 1. 统计卡片组件
|
||||
**文件**: `web/src/views/jcbt/scholarship/quota/index.vue`
|
||||
|
||||
**新增功能**:
|
||||
- 统计数据展示卡片(总名额、已用名额、可用名额、使用率)
|
||||
- 响应式数据绑定
|
||||
- 实时数据更新
|
||||
|
||||
#### 2. 统计数据集成
|
||||
**集成点**:
|
||||
- 页面加载时获取统计数据
|
||||
- 批次切换时更新统计数据
|
||||
- 名额操作后自动刷新统计数据
|
||||
|
||||
**更新时机**:
|
||||
- `getList()` 方法中同步获取统计数据
|
||||
- 新增、修改、删除、调整名额后自动更新
|
||||
- 批次切换时重置并重新获取统计数据
|
||||
|
||||
#### 3. 错误处理和数据重置
|
||||
- 批次未选择时重置统计数据为0
|
||||
- API请求失败时重置统计数据
|
||||
- 数据验证和容错处理
|
||||
|
||||
---
|
||||
|
||||
## 📊 核心代码片段
|
||||
|
||||
### 后端统计方法
|
||||
```java
|
||||
@Override
|
||||
public Map<String, Object> getStatistics(Long batchId) {
|
||||
// 查询指定批次的所有名额配置
|
||||
LambdaQueryWrapper<ScholarshipQuota> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ScholarshipQuota::getBatchId, batchId)
|
||||
.eq(ScholarshipQuota::getDeleted, 0);
|
||||
|
||||
List<ScholarshipQuota> quotas = this.list(wrapper);
|
||||
|
||||
// 计算统计数据
|
||||
int totalQuota = quotas.stream().mapToInt(ScholarshipQuota::getTotalQuota).sum();
|
||||
int usedQuota = quotas.stream().mapToInt(ScholarshipQuota::getUsedQuota).sum();
|
||||
int availableQuota = totalQuota - usedQuota;
|
||||
double usageRate = totalQuota > 0 ? (double) usedQuota / totalQuota : 0.0;
|
||||
|
||||
// 构建返回结果
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("totalQuota", totalQuota);
|
||||
result.put("usedQuota", usedQuota);
|
||||
result.put("availableQuota", availableQuota);
|
||||
result.put("usageRate", usageRate);
|
||||
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
### 前端统计展示
|
||||
```vue
|
||||
<el-row :gutter="20" class="mb-4">
|
||||
<el-col :span="6">
|
||||
<el-card class="statistics-card">
|
||||
<div class="statistics-content">
|
||||
<div class="statistics-number">{{ totalQuota }}</div>
|
||||
<div class="statistics-label">总名额</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<!-- 其他统计卡片... -->
|
||||
</el-row>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试验证
|
||||
|
||||
### 自动化测试脚本
|
||||
**文件**: `scholarship_quota_statistics_test.py`
|
||||
|
||||
**测试覆盖**:
|
||||
- 登录认证测试
|
||||
- 统计API接口测试
|
||||
- 数据准确性验证
|
||||
- 多批次统计测试
|
||||
|
||||
**测试方法**:
|
||||
```bash
|
||||
python scholarship_quota_statistics_test.py
|
||||
```
|
||||
|
||||
### 测试结果验证
|
||||
- 手动计算与API返回数据对比
|
||||
- 多批次数据一致性检查
|
||||
- 边界条件测试(无数据批次)
|
||||
|
||||
---
|
||||
|
||||
## 📝 文档更新
|
||||
|
||||
### API文档更新
|
||||
**文件**: `docs/开发文档/API/奖学金名额管理API.md`
|
||||
|
||||
**新增内容**:
|
||||
- 统计API接口文档
|
||||
- 请求参数说明
|
||||
- 响应数据格式
|
||||
- 使用示例
|
||||
|
||||
### 变更记录
|
||||
**文件**: `docs/变更管理/code-adjust-record-2025-01-07-wuzhen.md`
|
||||
|
||||
**记录内容**:
|
||||
- 详细的变更说明
|
||||
- 技术实现方案
|
||||
- 代码片段示例
|
||||
- 测试验证结果
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 权限配置要求
|
||||
1. 需要在系统菜单管理中添加统计权限
|
||||
2. 为相关角色分配统计查看权限
|
||||
3. 确保权限标识与代码中一致
|
||||
|
||||
### 性能考虑
|
||||
1. 统计查询基于批次过滤,性能良好
|
||||
2. 统计数据实时计算,避免缓存一致性问题
|
||||
3. 大数据量场景可考虑添加缓存优化
|
||||
|
||||
### 数据一致性
|
||||
1. 统计数据基于实时查询保证准确性
|
||||
2. 名额操作后立即更新统计显示
|
||||
3. 并发操作不会影响统计准确性
|
||||
|
||||
---
|
||||
|
||||
## 🎉 变更效果
|
||||
|
||||
1. **用户体验提升**: 管理员可以直观查看名额使用情况
|
||||
2. **数据透明化**: 实时展示各类统计数据
|
||||
3. **操作便捷性**: 名额操作后统计数据自动更新
|
||||
4. **决策支持**: 为名额分配提供数据参考
|
||||
|
||||
---
|
||||
|
||||
## 📋 后续优化建议
|
||||
|
||||
1. **图表展示**: 可添加饼状图或柱状图展示统计数据
|
||||
2. **历史趋势**: 可增加时间维度的统计趋势分析
|
||||
3. **导出功能**: 可添加统计数据导出Excel功能
|
||||
4. **实时推送**: 可考虑WebSocket实时推送统计更新
|
||||
|
||||
---
|
||||
|
||||
**记录时间**: 2025-01-07 19:30:00
|
||||
**代码状态**: 开发完成,功能验证通过
|
||||
**部署状态**: 待部署测试环境
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
Loaded 100 of 266 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user