Files
ccdi/test_base_staff_db_fixed.sh
2026-02-09 14:28:25 +08:00

274 lines
7.6 KiB
Bash

#!/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