#!/bin/bash # 员工信息表重命名数据库验证脚本 # 验证 ccdi_base_staff 表及相关配置 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 测试结果统计 TOTAL_TESTS=0 PASSED_TESTS=0 FAILED_TESTS=0 # 数据库连接配置 DB_HOST="localhost" DB_USER="root" DB_PASS="root" DB_NAME="ccdi" # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } # 测试函数 test_case() { TOTAL_TESTS=$((TOTAL_TESTS + 1)) local test_name=$1 local test_function=$2 echo -e "\n========================================" echo "测试 ${TOTAL_TESTS}: $test_name" echo "========================================" $test_function local result=$? if [ $result -eq 0 ]; then PASSED_TESTS=$((PASSED_TESTS + 1)) log_info "✓ 测试通过" else FAILED_TESTS=$((FAILED_TESTS + 1)) log_error "✗ 测试失败" fi } # 测试 1: 验证表存在 test_table_exists() { log_info "验证 ccdi_base_staff 表是否存在..." local result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM information_schema.TABLES WHERE TABLE_SCHEMA = '$DB_NAME' AND TABLE_NAME = 'ccdi_base_staff';" 2>/dev/null | tail -1) if [ "$result" = "1" ]; then log_info "表 ccdi_base_staff 存在" return 0 else log_error "表 ccdi_base_staff 不存在" return 1 fi } # 测试 2: 验证 staff_id 主键字段 test_staff_id_field() { log_info "验证 staff_id 字段存在且为主键..." local result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '$DB_NAME' AND TABLE_NAME = 'ccdi_base_staff' AND COLUMN_NAME = 'staff_id';" 2>/dev/null | tail -1) if [ "$result" = "1" ]; then log_info "staff_id 字段存在" # 验证是否为主键 local pk_result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '$DB_NAME' AND TABLE_NAME = 'ccdi_base_staff' AND COLUMN_NAME = 'staff_id' AND CONSTRAINT_NAME = 'PRIMARY';" 2>/dev/null | tail -1) if [ "$pk_result" = "1" ]; then log_info "staff_id 是主键" return 0 else log_error "staff_id 不是主键" return 1 fi else log_error "staff_id 字段不存在" return 1 fi } # 测试 3: 验证 teller_no 字段已删除 test_teller_no_removed() { log_info "验证 teller_no 字段已删除..." local result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '$DB_NAME' AND TABLE_NAME = 'ccdi_base_staff' AND COLUMN_NAME = 'teller_no';" 2>/dev/null | tail -1) if [ "$result" = "0" ]; then log_info "teller_no 字段已删除" return 0 else log_error "teller_no 字段仍然存在" return 1 fi } # 测试 4: 验证其他必需字段存在 test_required_fields() { log_info "验证必需字段存在..." local fields=("name" "dept_id" "id_card" "phone" "hire_date" "status") local all_exist=1 for field in "${fields[@]}"; do local result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '$DB_NAME' AND TABLE_NAME = 'ccdi_base_staff' AND COLUMN_NAME = '$field';" 2>/dev/null | tail -1) if [ "$result" = "1" ]; then log_info " ✓ $field 字段存在" else log_error " ✗ $field 字段不存在" all_exist=0 fi done return $all_exist } # 测试 5: 验证菜单权限已更新 test_menu_permissions() { log_info "验证菜单权限已更新为 baseStaff..." local result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM sys_menu WHERE perms LIKE 'ccdi:baseStaff:%';" 2>/dev/null | tail -1) if [ "$result" -ge 7 ]; then log_info "找到 $result 个 baseStaff 权限配置" # 列出所有权限 mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT menu_name, perms FROM sys_menu WHERE perms LIKE 'ccdi:baseStaff:%' ORDER BY menu_id;" 2>/dev/null return 0 else log_error "baseStaff 权限配置不足,期望至少 7 个,实际 $result 个" return 1 fi } # 测试 6: 验证旧权限已删除 test_old_permissions_removed() { log_info "验证旧的 employee 权限已删除..." local result=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT COUNT(*) as cnt FROM sys_menu WHERE perms LIKE 'ccdi:employee:%';" 2>/dev/null | tail -1) if [ "$result" = "0" ]; then log_info "旧的 employee 权限已全部删除" return 0 else log_warn "仍有 $result 个 employee 权限未删除" mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SELECT menu_name, perms FROM sys_menu WHERE perms LIKE 'ccdi:employee:%';" 2>/dev/null return 1 fi } # 测试 7: 显示表结构 show_table_structure() { log_info "显示 ccdi_base_staff 表结构..." mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " DESC ccdi_base_staff;" 2>/dev/null return 0 } # 测试 8: 显示索引 show_table_indexes() { log_info "显示 ccdi_base_staff 表索引..." mysql -h $DB_HOST -u $DB_USER -p$DB_PASS -D $DB_NAME -e " SHOW INDEX FROM ccdi_base_staff;" 2>/dev/null return 0 } # 主测试流程 main() { echo "==========================================" echo "员工信息表重命名 - 数据库验证" echo "==========================================" echo "数据库: $DB_NAME" echo "==========================================" # 运行测试 test_case "验证表存在" "test_table_exists" test_case "验证 staff_id 主键字段" "test_staff_id_field" test_case "验证 teller_no 字段已删除" "test_teller_no_removed" test_case "验证必需字段存在" "test_required_fields" test_case "验证菜单权限已更新" "test_menu_permissions" test_case "验证旧权限已删除" "test_old_permissions_removed" # 显示表信息 echo -e "\n==========================================" echo "表结构详情" echo "==========================================" show_table_structure echo -e "\n==========================================" echo "表索引详情" echo "==========================================" show_table_indexes # 输出测试结果 echo -e "\n==========================================" echo "测试结果汇总" echo "==========================================" echo -e "总测试数: ${TOTAL_TESTS}" echo -e "${GREEN}通过: ${PASSED_TESTS}${NC}" echo -e "${RED}失败: ${FAILED_TESTS}${NC}" echo "==========================================" if [ $FAILED_TESTS -eq 0 ]; then log_info "所有测试通过!" exit 0 else log_error "存在失败的测试" exit 1 fi } # 执行测试 main