311 lines
9.1 KiB
Markdown
311 lines
9.1 KiB
Markdown
# 学生状态变更处理脚本
|
|
|
|
本项目包含用于处理学生退学、休学、复学、毕业状态变更的自动化脚本。
|
|
|
|
## 📋 脚本说明
|
|
|
|
### 脚本文件
|
|
|
|
1. **`process_student_changes.sh`** - 处理毕业、退学、休学的状态变更
|
|
2. **`process_student_resume.sh`** - 处理复学的状态变更
|
|
3. **`control_scripts.sh`** - 脚本控制程序(启动、停止、重启)
|
|
4. **`health_check.sh`** - 服务健康检查脚本
|
|
5. **`data.conf`** - 数据库配置文件
|
|
6. **`test_data.sql`** - 测试数据脚本
|
|
7. **`optional_crontab_config.txt`** - 可选的定时任务配置(备用)
|
|
|
|
### 处理逻辑
|
|
|
|
#### 毕业/退学/休学处理 (`process_student_changes.sh`)
|
|
处理类型:`XIU_XUE`(休学), `TUI_XUE`(退学), `BI_YE`(毕业)
|
|
|
|
**执行步骤:**
|
|
1. 备份原始数据到his表
|
|
2. 更新学生学籍状态
|
|
3. 禁用用户账号
|
|
4. 处理班级干部关系(取消现任职务)
|
|
5. 处理社团成员关系(设置为已退出)
|
|
6. 处理住宿关系(退学/毕业时退宿)
|
|
7. 更新变更记录状态为已处理
|
|
|
|
#### 复学处理 (`process_student_resume.sh`)
|
|
处理类型:`FU_XUE`(复学)
|
|
|
|
**执行步骤:**
|
|
1. 备份原始数据到his表
|
|
2. 更新学生学籍状态为复学
|
|
3. 启用用户账号
|
|
4. 更新变更记录状态为已处理
|
|
|
|
## 🔧 配置说明
|
|
|
|
### data.conf 配置
|
|
|
|
```bash
|
|
# Database configuration
|
|
DB_HOST="localhost" # 数据库主机
|
|
DB_PORT="3306" # 数据库端口
|
|
DB_NAME="hzdyjs_xg" # 数据库名
|
|
DB_USER="root" # 数据库用户名
|
|
DB_PASS="password" # 数据库密码
|
|
|
|
# Script configuration
|
|
LOG_DIR="./student_status_change" # 日志目录
|
|
SCRIPT_DIR="/path/to/scripts" # 脚本目录
|
|
LOCK_FILE="${SCRIPT_DIR}/script.lock" # 锁文件
|
|
|
|
# Processing configuration
|
|
BATCH_SIZE=100 # 每次处理记录数
|
|
MAX_RETRY=3 # 最大重试次数
|
|
RETRY_DELAY=5 # 重试间隔(秒)
|
|
CYCLE_INTERVAL=600 # 循环间隔时间(秒),默认10分钟
|
|
```
|
|
|
|
## 🚀 使用方法
|
|
|
|
### 1. 配置数据库连接
|
|
|
|
编辑 `data.conf` 文件,设置正确的数据库连接信息:
|
|
|
|
```bash
|
|
DB_HOST="your_db_host"
|
|
DB_PORT="3306"
|
|
DB_NAME="hzdyjs_xg"
|
|
DB_USER="your_username"
|
|
DB_PASS="your_password"
|
|
```
|
|
|
|
### 2. 启动服务
|
|
|
|
脚本采用持续运行模式,启动后会自动循环处理:
|
|
|
|
```bash
|
|
# 启动所有服务(持续运行模式)
|
|
./control_scripts.sh startall
|
|
|
|
# 查看服务状态
|
|
./control_scripts.sh statusall
|
|
```
|
|
|
|
#### 持续运行模式说明
|
|
|
|
- **启动方式**: `./control_scripts.sh startall` 一次性启动所有服务
|
|
- **运行逻辑**: 每个脚本启动后进入while循环,持续监控和处理数据
|
|
- **处理周期**: 检查数据库 → 处理未处理记录 → 等待10分钟 → 重复循环
|
|
- **并发控制**: 通过锁文件确保同一脚本只运行一个实例
|
|
- **自动重启**: 如果脚本异常退出,可以通过控制脚本重启
|
|
|
|
### 3. 手动执行脚本(一次性)
|
|
|
|
如需手动执行单个脚本处理一次:
|
|
|
|
```bash
|
|
# 处理毕业/退学/休学(一次性执行)
|
|
./process_student_changes.sh
|
|
|
|
# 处理复学(一次性执行)
|
|
./process_student_resume.sh
|
|
```
|
|
|
|
### 4. 停止服务
|
|
|
|
```bash
|
|
# 正常停止所有服务
|
|
./control_scripts.sh stopall
|
|
|
|
# 强制停止所有服务(如果正常停止失败)
|
|
# 手动kill进程或使用系统命令
|
|
```
|
|
|
|
### 5. 健康检查
|
|
|
|
```bash
|
|
# 执行健康检查
|
|
./health_check.sh
|
|
|
|
# 执行检查并生成详细报告
|
|
./health_check.sh report
|
|
```
|
|
```
|
|
|
|
### 3. 使用控制脚本管理
|
|
|
|
```bash
|
|
# 启动指定脚本
|
|
./control_scripts.sh start changes # 启动状态变更处理脚本
|
|
./control_scripts.sh start resume # 启动复学处理脚本
|
|
|
|
# 停止指定脚本
|
|
./control_scripts.sh stop changes # 停止状态变更处理脚本
|
|
./control_scripts.sh stop resume # 停止复学处理脚本
|
|
|
|
# 重启指定脚本
|
|
./control_scripts.sh restart changes # 重启状态变更处理脚本
|
|
./control_scripts.sh restart resume # 重启复学处理脚本
|
|
|
|
# 查看脚本状态
|
|
./control_scripts.sh status changes # 查看状态变更处理脚本状态
|
|
./control_scripts.sh status resume # 查看复学处理脚本状态
|
|
|
|
# 批量操作
|
|
./control_scripts.sh startall # 启动所有脚本
|
|
./control_scripts.sh stopall # 停止所有脚本
|
|
./control_scripts.sh statusall # 查看所有脚本状态
|
|
```
|
|
|
|
## 📊 数据表说明
|
|
|
|
### 核心表
|
|
|
|
- **`xg_student_status_change`** - 学生状态变更记录表
|
|
- `process_status`: 处理状态 (0=未处理,1=已处理)
|
|
- `change_type`: 变更类型 (XIU_XUE/TUI_XUE/FU_XUE/BI_YE)
|
|
|
|
### 业务表
|
|
|
|
- **`xg_student_msg`** - 学生基本信息表
|
|
- **`sys_user`** - 系统用户表
|
|
- **`xg_class_pos_msg`** - 班级干部信息表
|
|
- **`club_member`** - 社团成员表
|
|
- **`stgl_member`** - 志愿者成员表
|
|
- **`xg_dorm_bed_student`** - 宿舍床位分配表
|
|
- **`xg_dorm_bed`** - 宿舍床位表
|
|
|
|
### 历史表
|
|
|
|
所有主表都有对应的his表用于数据备份:
|
|
- `xg_student_msg_his`
|
|
- `sys_user_his`
|
|
- `xg_class_pos_msg_his`
|
|
- `club_member_his`
|
|
- `stgl_member_his`
|
|
- `xg_dorm_bed_student_his`
|
|
|
|
## 📝 日志说明
|
|
|
|
### 日志文件位置
|
|
- 日志目录:`./student_status_change/`
|
|
- 日志格式:`process_student_changes_YYYYMMDD_HHMMSS.log`
|
|
|
|
### 日志内容
|
|
- 脚本启动/停止信息
|
|
- 数据库连接状态
|
|
- 每条记录的处理详情
|
|
- 错误信息和重试记录
|
|
- 处理结果统计
|
|
|
|
### 示例日志
|
|
```
|
|
[2025-01-01 10:00:00] [INFO] Starting student status change processing script
|
|
[2025-01-01 10:00:01] [INFO] Database connection successful
|
|
[2025-01-01 10:00:02] [INFO] Processing student change - ID: 123, Student: 20240001 (456), Type: TUI_XUE
|
|
[2025-01-01 10:00:03] [INFO] Successfully processed student change - ID: 123, Student: 20240001
|
|
[2025-01-01 10:00:03] [INFO] Processing completed - Processed: 1, Failed: 0
|
|
```
|
|
|
|
## ⚠️ 注意事项
|
|
|
|
### 安全提醒
|
|
1. **数据备份**: 脚本会自动备份数据到his表,但建议在运行前手动备份重要数据
|
|
2. **权限控制**: 确保运行脚本的用户有数据库操作权限
|
|
3. **网络安全**: 数据库密码等敏感信息请妥善保管
|
|
|
|
### 使用限制
|
|
1. **并发控制**: 同一脚本只允许一个实例运行(通过锁文件控制)
|
|
2. **批量处理**: 每次最多处理100条记录,避免数据库负载过高
|
|
3. **错误重试**: 处理失败时会自动重试,最多3次
|
|
|
|
### 监控建议
|
|
1. **日志监控**: 定期检查日志文件,关注错误信息
|
|
2. **数据库监控**: 监控数据库连接和性能
|
|
3. **业务监控**: 检查处理结果是否符合预期
|
|
4. **健康检查**: 使用 `./health_check.sh` 脚本定期检查服务状态
|
|
|
|
## 🔧 故障排除
|
|
|
|
### 常见问题
|
|
|
|
1. **数据库连接失败**
|
|
- 检查 `data.conf` 中的数据库配置
|
|
- 确认数据库服务正在运行
|
|
- 验证用户权限
|
|
|
|
2. **脚本重复运行**
|
|
- 删除对应的锁文件:`rm -f script.lock`
|
|
- 检查是否有残留进程并终止
|
|
|
|
3. **处理失败**
|
|
- 查看日志文件了解具体错误
|
|
- 检查数据库数据完整性
|
|
- 手动处理失败的记录
|
|
|
|
### 紧急停止
|
|
|
|
```bash
|
|
# 强制停止所有相关进程
|
|
pkill -f "process_student_changes.sh"
|
|
pkill -f "process_student_resume.sh"
|
|
|
|
# 清理锁文件
|
|
rm -f *.lock
|
|
rm -f pids/*.pid
|
|
```
|
|
|
|
## 📞 技术支持
|
|
|
|
如遇到问题,请:
|
|
1. 查看日志文件获取详细错误信息
|
|
2. 检查数据库连接和权限配置
|
|
3. 确认相关数据表结构是否正确
|
|
4. 联系技术支持团队
|
|
|
|
## 🔄 运行模式说明
|
|
|
|
### 持续运行模式(推荐)
|
|
|
|
脚本采用持续运行模式,启动后自动循环执行:
|
|
|
|
1. **启动脚本**: `./control_scripts.sh startall`
|
|
2. **处理逻辑**: 检查未处理的记录 → 处理业务 → 等待10分钟 → 重复
|
|
3. **停止脚本**: `./control_scripts.sh stopall`
|
|
|
|
### 可选的定时任务模式
|
|
|
|
如果需要使用crontab模式(不推荐),参考 `optional_crontab_config.txt` 文件:
|
|
|
|
```bash
|
|
# 添加定时任务(仅在特殊情况下使用)
|
|
crontab -e
|
|
# 参考配置文件内容
|
|
```
|
|
|
|
### 运行模式对比
|
|
|
|
| 特性 | 持续运行模式 | Crontab模式 |
|
|
|------|-------------|-------------|
|
|
| 启动方式 | `./control_scripts.sh startall` | crontab配置 |
|
|
| 执行频率 | 每10分钟自动 | 可自定义时间 |
|
|
| 资源占用 | 常驻进程 | 按需启动 |
|
|
| 监控便利性 | 更容易监控 | 需要额外配置 |
|
|
| 维护复杂度 | 较低 | 较高 |
|
|
|
|
**推荐使用持续运行模式**,简单可靠,易于监控管理。
|
|
|
|
## 🚀 快速开始
|
|
|
|
### 💡 使用指南
|
|
1. **配置数据库**: 编辑 `data.conf` 配置数据库连接信息
|
|
2. **启动服务**: 使用 `./control_scripts.sh startall` 启动持续运行的服务
|
|
3. **监控运行**: 使用 `./health_check.sh` 检查服务状态
|
|
4. **停止服务**: 需要时使用 `./control_scripts.sh stopall` 停止服务
|
|
|
|
### 🧪 测试步骤
|
|
1. **插入测试数据**: 执行 `test_data.sql` 插入测试记录
|
|
2. **启动服务**: `./control_scripts.sh startall`
|
|
3. **观察日志**: 查看 `./student_status_change/` 目录的日志
|
|
4. **检查结果**: 确认 `xg_student_status_change.process_status` 已更新为1
|
|
|
|
---
|
|
|
|
**最后更新**: 2025-01-01
|
|
**版本**: v1.0.0 |