9.0 KiB
9.0 KiB
📚 用户导入和课程分配操作指南
最后更新:2025-12-11 目的:确保用户导入和课程分配数据一致性
📋 目录
🔧 导入前准备
第一步:数据备份(必须!)
# 运行备份脚本
双击运行:导入前数据备份.bat
备份内容:
sys_user- 用户表student_class- 班级关联表class- 班级表
备份位置: log\backup\backup_YYYYMMDD_HHMMSS\
第二步:检查当前数据状态
# 运行检查脚本
双击运行:检查班级数据一致性.bat
检查项目:
- ✅ 各班级学生数量(有效 vs 总数)
- ✅ 存在问题的班级
- ✅ 学生重复分配情况
- ✅ 孤儿记录(已删除学生的分配记录)
如果检查发现问题:
# 先修复现有数据
双击运行:修复所有班级status问题.bat
第三步:准备导入文件
Excel格式要求:
| 信息编号 | 罪犯姓名 | 监狱 | 监区 | 性别 | 民族 | 文化程度 | 罪名 | 刑期 | 刑期起日 | 刑期止日 | 入监日期 | 班级名称 | 学员状态 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 101 | 张三 | 某监狱 | 一监区 | 男 | 汉族 | 初中 | 盗窃 | 3年 | 2023-01-01 | 2026-01-01 | 2023-01-01 | 攻坚转换班2班 | 在押 |
⚠️ 重要字段说明:
- 信息编号:必填,纯数字,作为用户ID
- 罪犯姓名:必填
- 监区:必填
- 班级名称:
- 可选
- 如果填写,必须是系统中已存在的班级名称
- 如果班级不存在,导入会失败
- 学员状态:可选,默认为"在押"
班级名称验证:
-- 查询所有可用班级
SELECT id, class_name, prison_area
FROM class
ORDER BY class_name;
📥 执行导入
方式1:后台管理系统导入(推荐)
- 登录后台管理系统
- 进入 学生管理 页面
- 点击 导入 按钮
- 选择Excel文件
- 选择导入模式:
- 不更新:只导入新用户,跳过已存在的
- 覆盖更新:更新已存在的用户信息
导入逻辑:
- 根据
信息编号判断用户是否存在 - 新用户:创建用户 → 分配角色 → 分配班级(status=1)✅
- 已存在用户(更新模式):
- 更新用户信息
- 移除旧班级(status=0)
- 分配新班级(status=1)✅
异步处理:
- 大批量导入(>100条)会异步处理
- 可在页面查看实时进度
- 支持中途取消
方式2:数据库直接导入
⚠️ 不推荐,仅用于紧急情况或批量修复。
-- 1. 导入用户数据
LOAD DATA INFILE 'path/to/users.csv'
INTO TABLE sys_user
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
-- 2. 批量分配班级(status必须设为1)
INSERT INTO student_class (student_id, class_id, status, join_time)
SELECT u.user_id, 9, 1, NOW()
FROM sys_user u
WHERE u.prison_area = '一监区'
AND u.del_flag = '0'
AND NOT EXISTS (
SELECT 1 FROM student_class sc
WHERE sc.student_id = u.user_id AND sc.status = 1
);
✅ 导入后验证
第一步:检查导入结果
后台管理系统:
- 查看导入任务结果
- 记录成功数、更新数、失败数
命令行检查:
# 运行检查脚本
双击运行:检查班级数据一致性.bat
第二步:验证关键数据
# 运行统计脚本
双击运行:统计课程分配情况.bat
验证要点:
- ✅ 各班级学生数是否正确
- ✅ 学生管理显示人数 = 课程分配显示人数
- ✅ 监区筛选结果准确
- ✅ 没有学生同时在多个有效班级(status=1)
第三步:前端界面验证
学生管理页面:
筛选条件:一监区 + 攻坚转换班2班
预期结果:显示所有该班级的学生(12人或14人等)
课程分配页面:
选择课程 → 选择监区:一监区 → 选择班级:攻坚转换班2班
预期结果:显示的学生数与学生管理页面一致
⚠️ 如果不一致:
# 运行修复脚本
双击运行:修复所有班级status问题.bat
❓ 常见问题
Q1: 导入后人数不一致怎么办?
症状:
- 学生管理筛选:12人
- 课程分配显示:14人
原因:
- 存在
status=0的无效分配记录 - 学生管理只统计
status=1 - 课程分配可能统计了所有记录
解决:
双击运行:修复所有班级status问题.bat
Q2: 导入时提示"班级不存在"?
原因:
- Excel中的班级名称在系统中不存在
- 班级名称拼写错误
解决:
- 检查班级是否存在:
SELECT id, class_name FROM class WHERE class_name LIKE '%攻坚%'; - 修正Excel中的班级名称,或先创建班级
Q3: 学生同时在多个班级?
原因:
- 历史遗留数据
- 多次导入未正确处理旧班级
解决:
-- 查询有多个有效班级的学生
SELECT u.user_id, u.nick_name,
GROUP_CONCAT(c.class_name) AS classes
FROM sys_user u
INNER JOIN student_class sc ON u.user_id = sc.student_id
INNER JOIN class c ON sc.class_id = c.id
WHERE sc.status = 1 AND u.del_flag = '0'
GROUP BY u.user_id, u.nick_name
HAVING COUNT(*) > 1;
-- 手动调整:保留最新的,移除旧的
UPDATE student_class
SET status = 0
WHERE id = XXX; -- 旧记录的ID
Q4: 导入后课程分配页面看不到学生?
可能原因:
- 班级筛选条件不对
- 学生的
status字段不是0(正常) - 学生的
del_flag是2(已删除)
检查:
SELECT u.user_id, u.nick_name, u.status AS 账号状态,
u.del_flag AS 删除标志, sc.status AS 班级状态
FROM sys_user u
LEFT JOIN student_class sc ON u.user_id = sc.student_id
WHERE u.user_id = XXX; -- 具体学生ID
🔧 数据修复
修复所有status问题(推荐)
双击运行:修复所有班级status问题.bat
修复内容:
- 将所有正常学员的班级分配改为有效(status=1)
- 不影响已删除学员的记录
手动修复特定班级
-- 修复"攻坚转换班2班"
UPDATE student_class sc
INNER JOIN sys_user u ON sc.student_id = u.user_id
SET sc.status = 1
WHERE sc.class_id = 9 -- 班级ID
AND u.del_flag = '0'
AND sc.status = 0;
清理孤儿记录
-- 删除已删除学员的分配记录
DELETE sc FROM student_class sc
LEFT JOIN sys_user u ON sc.student_id = u.user_id
WHERE u.user_id IS NULL OR u.del_flag = '2';
📊 监控和维护
定期检查(建议每周一次)
# 1. 数据一致性检查
双击运行:检查班级数据一致性.bat
# 2. 课程分配统计
双击运行:统计课程分配情况.bat
数据库视图(高级)
# 创建辅助视图
mysql -u root -proot study < 创建辅助视图.sql
# 使用视图快速查询
USE study;
SELECT * FROM v_student_current_class; -- 学生当前班级
SELECT * FROM v_class_statistics; -- 班级统计
SELECT * FROM v_prison_area_statistics; -- 监区统计
🎯 最佳实践
✅ 导入前必做:
- 备份数据(
导入前数据备份.bat) - 检查数据状态(
检查班级数据一致性.bat) - 验证Excel格式和班级名称
✅ 导入后必做:
- 检查导入结果(成功数/失败数)
- 运行数据一致性检查
- 前端界面验证
✅ 遇到问题时:
- 先运行
检查班级数据一致性.bat定位问题 - 运行
修复所有班级status问题.bat修复 - 如果问题仍存在,查看日志或联系技术支持
📞 技术支持
相关文件位置:
- 备份文件:
log\backup\ - 日志文件:后台管理系统的日志目录
- 辅助脚本:项目根目录
关键数据表:
sys_user- 用户表student_class- 学员-班级关联表(重点关注status字段)class- 班级表course_assignment- 课程分配表
重要字段说明:
student_class.status:1= 有效分配(正在读)0= 无效分配(已移除)
sys_user.del_flag:0= 正常2= 已删除
sys_user.status:0= 正常1= 停用
🎉 总结
✅ 代码层面已完美解决:
- 所有新导入都会正确设置
status=1 - 手动分配班级也会正确设置
status=1 - 历史遗留数据可通过脚本一键修复
✅ 配套工具完善:
- 数据备份工具
- 一致性检查工具
- 自动修复工具
- 统计报表工具
✅ 操作流程清晰:
- 导入前:备份 → 检查 → 准备
- 导入中:选择模式 → 执行 → 监控
- 导入后:验证 → 修复(如需) → 确认
放心使用! 🚀