Files
hzdyjs/用户信息同步统一身份认证/verify_sync.sh
T
“wuzhen”andCursor 334bd8742e feat: 新增统一身份认证用户数据定时同步脚本
将校园系统部门、教职工、学生数据同步到认证中间库6张标准表,支持 MySQL 本地测试与 Oracle 生产目标库配置。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-24 10:01:16 +08:00

82 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# ===========================================
# 统一身份认证同步结果校验脚本
# ===========================================
set -euo pipefail
export LANG=C
export LC_ALL=C
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="${SCRIPT_DIR}/data.conf"
[[ -f "$CONFIG_FILE" ]] || { echo "配置文件未找到"; exit 1; }
source "$CONFIG_FILE"
mysql_q() {
python3 "${SCRIPT_DIR}/db_helper.py" \
--host "$1" --port "$2" --user "$3" --password "$4" --database "$5" \
scalar "$6" 2>/dev/null
}
echo "========== 统一身份认证同步校验 =========="
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
# 源库统计
SRC_DEPT=$(mysql_q "$SOURCE_DB_HOST" "$SOURCE_DB_PORT" "$SOURCE_DB_USER" "$SOURCE_DB_PASS" "$SOURCE_DB_NAME" "SELECT COUNT(*) FROM sys_dept;")
SRC_TEACHER=$(mysql_q "$SOURCE_DB_HOST" "$SOURCE_DB_PORT" "$SOURCE_DB_USER" "$SOURCE_DB_PASS" "$SOURCE_DB_NAME" "SELECT COUNT(*) FROM sys_user WHERE account_type='1';")
SRC_STUDENT=$(mysql_q "$SOURCE_DB_HOST" "$SOURCE_DB_PORT" "$SOURCE_DB_USER" "$SOURCE_DB_PASS" "$SOURCE_DB_NAME" "SELECT COUNT(*) FROM xg_student_msg WHERE deleted=0;")
echo "[源库] sys_dept: ${SRC_DEPT}"
echo "[源库] sys_user(教职工): ${SRC_TEACHER}"
echo "[源库] xg_student_msg(有效): ${SRC_STUDENT}"
echo ""
if [[ "$TARGET_DB_TYPE" == "mysql" ]]; then
TGT_DEPT=$(mysql_q "$TARGET_DB_HOST" "$TARGET_DB_PORT" "$TARGET_DB_USER" "$TARGET_DB_PASS" "$TARGET_DB_NAME" "SELECT COUNT(*) FROM GXXX_YXSDWJBSJZL;")
TGT_TEACHER=$(mysql_q "$TARGET_DB_HOST" "$TARGET_DB_PORT" "$TARGET_DB_USER" "$TARGET_DB_PASS" "$TARGET_DB_NAME" "SELECT COUNT(*) FROM GXJG_JZGJCSJZLB;")
TGT_TEACHER_TX=$(mysql_q "$TARGET_DB_HOST" "$TARGET_DB_PORT" "$TARGET_DB_USER" "$TARGET_DB_PASS" "$TARGET_DB_NAME" "SELECT COUNT(*) FROM GXJG_GRTXFSZL;")
TGT_STUDENT=$(mysql_q "$TARGET_DB_HOST" "$TARGET_DB_PORT" "$TARGET_DB_USER" "$TARGET_DB_PASS" "$TARGET_DB_NAME" "SELECT COUNT(*) FROM GXXS_XSJBSJZL;")
TGT_STUDENT_TX=$(mysql_q "$TARGET_DB_HOST" "$TARGET_DB_PORT" "$TARGET_DB_USER" "$TARGET_DB_PASS" "$TARGET_DB_NAME" "SELECT COUNT(*) FROM GXXS_GRTXZL;")
TGT_ERR=$(mysql_q "$TARGET_DB_HOST" "$TARGET_DB_PORT" "$TARGET_DB_USER" "$TARGET_DB_PASS" "$TARGET_DB_NAME" "SELECT COUNT(*) FROM ZFTAL_XTGL_ERRLOG;")
echo "[目标库] GXXX_YXSDWJBSJZL: ${TGT_DEPT}"
echo "[目标库] GXJG_JZGJCSJZLB: ${TGT_TEACHER}"
echo "[目标库] GXJG_GRTXFSZL: ${TGT_TEACHER_TX}"
echo "[目标库] GXXS_XSJBSJZL: ${TGT_STUDENT}"
echo "[目标库] GXXS_GRTXZL: ${TGT_STUDENT_TX}"
echo "[目标库] ZFTAL_XTGL_ERRLOG: ${TGT_ERR}"
echo ""
# 抽样对比
echo "---------- 抽样数据对比 ----------"
python3 "${SCRIPT_DIR}/db_helper.py" \
--host "$TARGET_DB_HOST" --port "$TARGET_DB_PORT" \
--user "$TARGET_DB_USER" --password "$TARGET_DB_PASS" --database "$TARGET_DB_NAME" \
query "SELECT gh, xm, dwh, scbz FROM GXJG_JZGJCSJZLB LIMIT 3" 2>/dev/null
python3 "${SCRIPT_DIR}/db_helper.py" \
--host "$TARGET_DB_HOST" --port "$TARGET_DB_PORT" \
--user "$TARGET_DB_USER" --password "$TARGET_DB_PASS" --database "$TARGET_DB_NAME" \
query "SELECT xh, xm, dwh, szbh, scbz FROM GXXS_XSJBSJZL LIMIT 3" 2>/dev/null
echo ""
# 简单一致性检查
PASS=true
[[ "$TGT_DEPT" -ge 1 ]] || { echo "WARN: 部门同步数量为0"; PASS=false; }
[[ "$TGT_TEACHER" -ge 1 ]] || { echo "WARN: 教职工同步数量为0"; PASS=false; }
[[ "$TGT_STUDENT" -ge 1 ]] || { echo "WARN: 学生同步数量为0"; PASS=false; }
[[ "$TGT_TEACHER" == "$TGT_TEACHER_TX" ]] || echo "WARN: 教职工基础表与通讯表数量不一致"
[[ "$TGT_STUDENT" == "$TGT_STUDENT_TX" ]] || echo "WARN: 学生基础表与通讯表数量不一致"
if [[ "$PASS" == true ]]; then
echo "校验结果: 通过(基础数据已写入)"
exit 0
else
echo "校验结果: 未通过"
exit 1
fi
else
echo "目标库为 Oracle,请使用 sqlplus 手动校验目标表记录数"
exit 0
fi