274 lines
7.6 KiB
Bash
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="discipline_prelim_check"
|
||
|
|
|
||
|
|
# 日志函数
|
||
|
|
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
|