403 lines
9.0 KiB
Markdown
403 lines
9.0 KiB
Markdown
# 📚 用户导入和课程分配操作指南
|
||
|
||
> 最后更新:2025-12-11
|
||
> 目的:确保用户导入和课程分配数据一致性
|
||
|
||
---
|
||
|
||
## 📋 目录
|
||
|
||
1. [导入前准备](#导入前准备)
|
||
2. [执行导入](#执行导入)
|
||
3. [导入后验证](#导入后验证)
|
||
4. [常见问题](#常见问题)
|
||
5. [数据修复](#数据修复)
|
||
|
||
---
|
||
|
||
## 🔧 导入前准备
|
||
|
||
### 第一步:数据备份(必须!)
|
||
|
||
```bash
|
||
# 运行备份脚本
|
||
双击运行:导入前数据备份.bat
|
||
```
|
||
|
||
**备份内容:**
|
||
- `sys_user` - 用户表
|
||
- `student_class` - 班级关联表
|
||
- `class` - 班级表
|
||
|
||
**备份位置:** `log\backup\backup_YYYYMMDD_HHMMSS\`
|
||
|
||
---
|
||
|
||
### 第二步:检查当前数据状态
|
||
|
||
```bash
|
||
# 运行检查脚本
|
||
双击运行:检查班级数据一致性.bat
|
||
```
|
||
|
||
**检查项目:**
|
||
1. ✅ 各班级学生数量(有效 vs 总数)
|
||
2. ✅ 存在问题的班级
|
||
3. ✅ 学生重复分配情况
|
||
4. ✅ 孤儿记录(已删除学生的分配记录)
|
||
|
||
**如果检查发现问题:**
|
||
```bash
|
||
# 先修复现有数据
|
||
双击运行:修复所有班级status问题.bat
|
||
```
|
||
|
||
---
|
||
|
||
### 第三步:准备导入文件
|
||
|
||
**Excel格式要求:**
|
||
|
||
| 信息编号 | 罪犯姓名 | 监狱 | 监区 | 性别 | 民族 | 文化程度 | 罪名 | 刑期 | 刑期起日 | 刑期止日 | 入监日期 | 班级名称 | 学员状态 |
|
||
|---------|---------|-----|------|------|------|---------|------|------|---------|---------|---------|---------|---------|
|
||
| 101 | 张三 | 某监狱 | 一监区 | 男 | 汉族 | 初中 | 盗窃 | 3年 | 2023-01-01 | 2026-01-01 | 2023-01-01 | 攻坚转换班2班 | 在押 |
|
||
|
||
**⚠️ 重要字段说明:**
|
||
|
||
1. **信息编号**:必填,纯数字,作为用户ID
|
||
2. **罪犯姓名**:必填
|
||
3. **监区**:必填
|
||
4. **班级名称**:
|
||
- 可选
|
||
- 如果填写,必须是系统中已存在的班级名称
|
||
- 如果班级不存在,导入会失败
|
||
5. **学员状态**:可选,默认为"在押"
|
||
|
||
**班级名称验证:**
|
||
```sql
|
||
-- 查询所有可用班级
|
||
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:数据库直接导入
|
||
|
||
⚠️ **不推荐**,仅用于紧急情况或批量修复。
|
||
|
||
```sql
|
||
-- 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. 记录成功数、更新数、失败数
|
||
|
||
**命令行检查:**
|
||
```bash
|
||
# 运行检查脚本
|
||
双击运行:检查班级数据一致性.bat
|
||
```
|
||
|
||
---
|
||
|
||
### 第二步:验证关键数据
|
||
|
||
```bash
|
||
# 运行统计脚本
|
||
双击运行:统计课程分配情况.bat
|
||
```
|
||
|
||
**验证要点:**
|
||
1. ✅ 各班级学生数是否正确
|
||
2. ✅ 学生管理显示人数 = 课程分配显示人数
|
||
3. ✅ 监区筛选结果准确
|
||
4. ✅ 没有学生同时在多个有效班级(status=1)
|
||
|
||
---
|
||
|
||
### 第三步:前端界面验证
|
||
|
||
**学生管理页面:**
|
||
```
|
||
筛选条件:一监区 + 攻坚转换班2班
|
||
预期结果:显示所有该班级的学生(12人或14人等)
|
||
```
|
||
|
||
**课程分配页面:**
|
||
```
|
||
选择课程 → 选择监区:一监区 → 选择班级:攻坚转换班2班
|
||
预期结果:显示的学生数与学生管理页面一致
|
||
```
|
||
|
||
**⚠️ 如果不一致:**
|
||
```bash
|
||
# 运行修复脚本
|
||
双击运行:修复所有班级status问题.bat
|
||
```
|
||
|
||
---
|
||
|
||
## ❓ 常见问题
|
||
|
||
### Q1: 导入后人数不一致怎么办?
|
||
|
||
**症状:**
|
||
- 学生管理筛选:12人
|
||
- 课程分配显示:14人
|
||
|
||
**原因:**
|
||
- 存在 `status=0` 的无效分配记录
|
||
- 学生管理只统计 `status=1`
|
||
- 课程分配可能统计了所有记录
|
||
|
||
**解决:**
|
||
```bash
|
||
双击运行:修复所有班级status问题.bat
|
||
```
|
||
|
||
---
|
||
|
||
### Q2: 导入时提示"班级不存在"?
|
||
|
||
**原因:**
|
||
- Excel中的班级名称在系统中不存在
|
||
- 班级名称拼写错误
|
||
|
||
**解决:**
|
||
1. 检查班级是否存在:
|
||
```sql
|
||
SELECT id, class_name FROM class
|
||
WHERE class_name LIKE '%攻坚%';
|
||
```
|
||
2. 修正Excel中的班级名称,或先创建班级
|
||
|
||
---
|
||
|
||
### Q3: 学生同时在多个班级?
|
||
|
||
**原因:**
|
||
- 历史遗留数据
|
||
- 多次导入未正确处理旧班级
|
||
|
||
**解决:**
|
||
```sql
|
||
-- 查询有多个有效班级的学生
|
||
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_flag` 是 `2`(已删除)
|
||
|
||
**检查:**
|
||
```sql
|
||
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问题(推荐)
|
||
|
||
```bash
|
||
双击运行:修复所有班级status问题.bat
|
||
```
|
||
|
||
**修复内容:**
|
||
- 将所有正常学员的班级分配改为有效(status=1)
|
||
- 不影响已删除学员的记录
|
||
|
||
---
|
||
|
||
### 手动修复特定班级
|
||
|
||
```sql
|
||
-- 修复"攻坚转换班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;
|
||
```
|
||
|
||
---
|
||
|
||
### 清理孤儿记录
|
||
|
||
```sql
|
||
-- 删除已删除学员的分配记录
|
||
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';
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 监控和维护
|
||
|
||
### 定期检查(建议每周一次)
|
||
|
||
```bash
|
||
# 1. 数据一致性检查
|
||
双击运行:检查班级数据一致性.bat
|
||
|
||
# 2. 课程分配统计
|
||
双击运行:统计课程分配情况.bat
|
||
```
|
||
|
||
### 数据库视图(高级)
|
||
|
||
```bash
|
||
# 创建辅助视图
|
||
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`
|
||
- 历史遗留数据可通过脚本一键修复
|
||
|
||
✅ **配套工具完善**:
|
||
- 数据备份工具
|
||
- 一致性检查工具
|
||
- 自动修复工具
|
||
- 统计报表工具
|
||
|
||
✅ **操作流程清晰**:
|
||
- 导入前:备份 → 检查 → 准备
|
||
- 导入中:选择模式 → 执行 → 监控
|
||
- 导入后:验证 → 修复(如需) → 确认
|
||
|
||
**放心使用!** 🚀
|