提交
This commit is contained in:
1 parent
ff1228873c
commit
34a843e790
23 files changed
+1541
-718
No files matched your search
@@ -12,7 +12,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CONFIG_FILE="${SCRIPT_DIR}/data.conf"
|
||||
|
||||
if [[ ! -f "$CONFIG_FILE" ]]; then
|
||||
echo "Error: Configuration file $CONFIG_FILE not found!"
|
||||
echo "错误:配置文件 $CONFIG_FILE 未找到!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -43,13 +43,13 @@ error_exit() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check if script is already running
|
||||
# 检查脚本是否已在运行
|
||||
if [[ -f "$LOCK_FILE" ]]; then
|
||||
if kill -0 $(cat "$LOCK_FILE") 2>/dev/null; then
|
||||
log "INFO" "Script is already running (PID: $(cat "$LOCK_FILE"))"
|
||||
log "INFO" "脚本已在运行 (PID: $(cat "$LOCK_FILE"))"
|
||||
exit 1
|
||||
else
|
||||
log "WARN" "Removing stale lock file"
|
||||
log "WARN" "删除过期的锁定文件"
|
||||
rm -f "$LOCK_FILE"
|
||||
fi
|
||||
fi
|
||||
@@ -57,10 +57,10 @@ fi
|
||||
# Create lock file
|
||||
echo $$ > "$LOCK_FILE"
|
||||
|
||||
# Cleanup function
|
||||
# 清理函数
|
||||
cleanup() {
|
||||
[[ -f "$LOCK_FILE" ]] && rm -f "$LOCK_FILE"
|
||||
log "INFO" "Script execution completed"
|
||||
log "INFO" "脚本执行完成"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
@@ -74,8 +74,8 @@ execute_sql() {
|
||||
local exit_code=$?
|
||||
|
||||
if [[ $exit_code -ne 0 ]]; then
|
||||
log "ERROR" "SQL execution failed: $sql"
|
||||
log "ERROR" "MySQL error: $result"
|
||||
log "ERROR" "SQL执行失败: $sql"
|
||||
log "ERROR" "MySQL错误: $result"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -90,74 +90,75 @@ process_student_resume() {
|
||||
local change_type="$4"
|
||||
local operator_id="${5:-1}"
|
||||
|
||||
log "INFO" "Processing student resume - ID: $record_id, Student: $student_no ($student_id), Type: $change_type"
|
||||
log "INFO" "正在处理学生复学 - ID: $record_id, 学生: $student_no ($student_id), 类型: $change_type"
|
||||
|
||||
# Start transaction
|
||||
local transaction_sql="
|
||||
START TRANSACTION;
|
||||
|
||||
-- 1. Backup original data to his tables
|
||||
INSERT INTO xg_student_msg_his SELECT * FROM xg_student_msg WHERE id = $student_id;
|
||||
INSERT INTO sys_user_his SELECT * FROM sys_user WHERE user_id = $student_id;
|
||||
-- 1. Backup original data to his tables (ignore if already exists)
|
||||
INSERT IGNORE INTO xg_student_msg_his SELECT * FROM xg_student_msg WHERE id = '$student_id';
|
||||
INSERT IGNORE INTO sys_user_his SELECT * FROM sys_user WHERE user_id = '$student_id';
|
||||
|
||||
-- 2. Update student status to resume (复学)
|
||||
UPDATE xg_student_msg SET
|
||||
student_status = '3',
|
||||
update_by = $operator_id,
|
||||
student_status = '1',
|
||||
update_by = '$operator_id',
|
||||
update_time = NOW()
|
||||
WHERE id = $student_id;
|
||||
WHERE id = '$student_id';
|
||||
|
||||
-- 3. Enable user account
|
||||
UPDATE sys_user SET
|
||||
status = '0',
|
||||
update_by = $operator_id,
|
||||
update_by = '$operator_id',
|
||||
update_time = NOW()
|
||||
WHERE user_id = $student_id AND account_type = '2';
|
||||
WHERE user_id = '$student_id' AND account_type = '2';
|
||||
|
||||
-- 4. Update change record status
|
||||
UPDATE xg_student_status_change SET
|
||||
process_status = 1,
|
||||
update_by = $operator_id,
|
||||
update_by = '$operator_id',
|
||||
update_time = NOW()
|
||||
WHERE id = $record_id;
|
||||
WHERE id = '$record_id';
|
||||
|
||||
COMMIT;
|
||||
"
|
||||
|
||||
# Execute transaction
|
||||
# 执行事务
|
||||
if execute_sql "$transaction_sql"; then
|
||||
log "INFO" "Successfully processed student resume - ID: $record_id, Student: $student_no"
|
||||
log "INFO" "成功处理学生复学 - ID: $record_id, 学生: $student_no"
|
||||
return 0
|
||||
else
|
||||
log "ERROR" "Failed to process student resume - ID: $record_id, Student: $student_no"
|
||||
log "ERROR" "处理学生复学失败 - ID: $record_id, 学生: $student_no"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main function
|
||||
main() {
|
||||
log "INFO" "Starting student resume processing daemon"
|
||||
log "INFO" "Processing type: FU_XUE(复学)"
|
||||
log "INFO" "Running in continuous mode with 10-minute intervals"
|
||||
log "INFO" "启动学生复学处理守护进程"
|
||||
log "INFO" "处理类型: FU_XUE(复学)"
|
||||
log "INFO" "以连续模式运行,间隔10分钟"
|
||||
|
||||
# Test database connection
|
||||
log "INFO" "Testing database connection..."
|
||||
# 测试数据库连接
|
||||
log "INFO" "正在测试数据库连接..."
|
||||
if ! execute_sql "SELECT 1;" >/dev/null 2>&1; then
|
||||
error_exit "Database connection failed"
|
||||
error_exit "数据库连接失败"
|
||||
fi
|
||||
log "INFO" "Database connection successful"
|
||||
log "INFO" "数据库连接成功"
|
||||
|
||||
# Main processing loop
|
||||
while true; do
|
||||
log "INFO" "Starting new resume processing cycle"
|
||||
log "INFO" "开始新的复学处理周期"
|
||||
|
||||
# Get unprocessed records
|
||||
# 获取未处理的记录
|
||||
local query_sql="
|
||||
SELECT id, student_id, student_no, change_type, operator_id
|
||||
FROM xg_student_status_change
|
||||
WHERE process_status = 0
|
||||
AND change_type = 'FU_XUE'
|
||||
AND deleted = 0
|
||||
AND effective_date <= NOW()
|
||||
ORDER BY create_time ASC
|
||||
LIMIT $BATCH_SIZE;
|
||||
"
|
||||
@@ -165,15 +166,15 @@ main() {
|
||||
local records
|
||||
records=$(execute_sql "$query_sql")
|
||||
|
||||
# Check if there are records to process
|
||||
# 检查是否有记录需要处理
|
||||
local record_count
|
||||
record_count=$(echo "$records" | wc -l)
|
||||
|
||||
if [[ $record_count -le 1 ]]; then
|
||||
log "INFO" "No unprocessed resume records found, waiting..."
|
||||
log "INFO" "未找到未处理的复学记录,正在等待..."
|
||||
else
|
||||
# Remove header line
|
||||
records=$(echo "$records" | tail -n +2)
|
||||
# 移除标题行和可能的警告信息
|
||||
records=$(echo "$records" | grep -v "mysql:" | grep -v "id\t" | grep -v "^$")
|
||||
|
||||
local processed_count=0
|
||||
local failed_count=0
|
||||
@@ -193,7 +194,7 @@ main() {
|
||||
else
|
||||
((retry_count++))
|
||||
if [[ $retry_count -lt $MAX_RETRY ]]; then
|
||||
log "WARN" "Processing failed, retrying in $RETRY_DELAY seconds... (attempt $retry_count/$MAX_RETRY)"
|
||||
log "WARN" "处理失败,$RETRY_DELAY 秒后重试... (尝试 $retry_count/$MAX_RETRY)"
|
||||
sleep $RETRY_DELAY
|
||||
fi
|
||||
fi
|
||||
@@ -201,16 +202,16 @@ main() {
|
||||
|
||||
if [[ $success == false ]]; then
|
||||
((failed_count++))
|
||||
log "ERROR" "Failed to process record after $MAX_RETRY attempts - ID: $record_id"
|
||||
log "ERROR" "$MAX_RETRY 次尝试后仍处理失败 - ID: $record_id"
|
||||
fi
|
||||
|
||||
done <<< "$records"
|
||||
|
||||
log "INFO" "Resume processing cycle completed - Processed: $processed_count, Failed: $failed_count"
|
||||
log "INFO" "复学处理周期完成 - 已处理: $processed_count, 失败: $failed_count"
|
||||
fi
|
||||
|
||||
# Wait for configured interval before next cycle
|
||||
log "INFO" "Waiting $CYCLE_INTERVAL seconds before next resume processing cycle..."
|
||||
# 等待配置的间隔时间后开始下一个周期
|
||||
log "INFO" "等待 $CYCLE_INTERVAL 秒后开始下一个复学处理周期..."
|
||||
sleep $CYCLE_INTERVAL
|
||||
done
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user