guoyu/用户导入操作指南.md
2025-12-11 23:28:07 +08:00

9.0 KiB
Raw Blame History

📚 用户导入和课程分配操作指南

最后更新2025-12-11 目的:确保用户导入和课程分配数据一致性


📋 目录

  1. 导入前准备
  2. 执行导入
  3. 导入后验证
  4. 常见问题
  5. 数据修复

🔧 导入前准备

第一步:数据备份(必须!)

# 运行备份脚本
双击运行:导入前数据备份.bat

备份内容:

  • sys_user - 用户表
  • student_class - 班级关联表
  • class - 班级表

备份位置: log\backup\backup_YYYYMMDD_HHMMSS\


第二步:检查当前数据状态

# 运行检查脚本
双击运行:检查班级数据一致性.bat

检查项目:

  1. 各班级学生数量(有效 vs 总数)
  2. 存在问题的班级
  3. 学生重复分配情况
  4. 孤儿记录(已删除学生的分配记录)

如果检查发现问题:

# 先修复现有数据
双击运行修复所有班级status问题.bat

第三步:准备导入文件

Excel格式要求

信息编号 罪犯姓名 监狱 监区 性别 民族 文化程度 罪名 刑期 刑期起日 刑期止日 入监日期 班级名称 学员状态
101 张三 某监狱 一监区 汉族 初中 盗窃 3年 2023-01-01 2026-01-01 2023-01-01 攻坚转换班2班 在押

⚠️ 重要字段说明:

  1. 信息编号必填纯数字作为用户ID
  2. 罪犯姓名:必填
  3. 监区:必填
  4. 班级名称
    • 可选
    • 如果填写,必须是系统中已存在的班级名称
    • 如果班级不存在,导入会失败
  5. 学员状态:可选,默认为"在押"

班级名称验证:

-- 查询所有可用班级
SELECT id, class_name, prison_area 
FROM class 
ORDER BY class_name;

📥 执行导入

方式1后台管理系统导入推荐

  1. 登录后台管理系统
  2. 进入 学生管理 页面
  3. 点击 导入 按钮
  4. 选择Excel文件
  5. 选择导入模式:
    • 不更新:只导入新用户,跳过已存在的
    • 覆盖更新:更新已存在的用户信息

导入逻辑:

  • 根据 信息编号 判断用户是否存在
  • 新用户:创建用户 → 分配角色 → 分配班级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
  );

导入后验证

第一步:检查导入结果

后台管理系统:

  1. 查看导入任务结果
  2. 记录成功数、更新数、失败数

命令行检查:

# 运行检查脚本
双击运行:检查班级数据一致性.bat

第二步:验证关键数据

# 运行统计脚本
双击运行:统计课程分配情况.bat

验证要点:

  1. 各班级学生数是否正确
  2. 学生管理显示人数 = 课程分配显示人数
  3. 监区筛选结果准确
  4. 没有学生同时在多个有效班级status=1

第三步:前端界面验证

学生管理页面:

筛选条件:一监区 + 攻坚转换班2班
预期结果显示所有该班级的学生12人或14人等

课程分配页面:

选择课程 → 选择监区:一监区 → 选择班级攻坚转换班2班
预期结果:显示的学生数与学生管理页面一致

⚠️ 如果不一致:

# 运行修复脚本
双击运行修复所有班级status问题.bat

常见问题

Q1: 导入后人数不一致怎么办?

症状:

  • 学生管理筛选12人
  • 课程分配显示14人

原因:

  • 存在 status=0 的无效分配记录
  • 学生管理只统计 status=1
  • 课程分配可能统计了所有记录

解决:

双击运行修复所有班级status问题.bat

Q2: 导入时提示"班级不存在"

原因:

  • Excel中的班级名称在系统中不存在
  • 班级名称拼写错误

解决:

  1. 检查班级是否存在:
    SELECT id, class_name FROM class 
    WHERE class_name LIKE '%攻坚%';
    
  2. 修正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: 导入后课程分配页面看不到学生?

可能原因:

  1. 班级筛选条件不对
  2. 学生的 status 字段不是 0(正常)
  3. 学生的 del_flag2(已删除)

检查:

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; -- 监区统计

🎯 最佳实践

导入前必做:

  1. 备份数据(导入前数据备份.bat
  2. 检查数据状态(检查班级数据一致性.bat
  3. 验证Excel格式和班级名称

导入后必做:

  1. 检查导入结果(成功数/失败数)
  2. 运行数据一致性检查
  3. 前端界面验证

遇到问题时:

  1. 先运行 检查班级数据一致性.bat 定位问题
  2. 运行 修复所有班级status问题.bat 修复
  3. 如果问题仍存在,查看日志或联系技术支持

📞 技术支持

相关文件位置:

  • 备份文件: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
  • 历史遗留数据可通过脚本一键修复

配套工具完善

  • 数据备份工具
  • 一致性检查工具
  • 自动修复工具
  • 统计报表工具

操作流程清晰

  • 导入前:备份 → 检查 → 准备
  • 导入中:选择模式 → 执行 → 监控
  • 导入后:验证 → 修复(如需) → 确认

放心使用! 🚀