246 lines
7.3 KiB
Bash
246 lines
7.3 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# ============================================================
|
|||
|
|
# 应用管理模块 - 数据库检查与导入脚本
|
|||
|
|
# 功能:检查表是否存在,如不存在则导入
|
|||
|
|
# 作者:pangu
|
|||
|
|
# 日期:2026-02-04
|
|||
|
|
# ============================================================
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
# 颜色定义
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
# 数据库配置(从 application-dev.yml 读取)
|
|||
|
|
DB_HOST="${DB_HOST:-8.148.25.55}"
|
|||
|
|
DB_PORT="${DB_PORT:-3306}"
|
|||
|
|
DB_NAME="${DB_NAME:-pguser-db}"
|
|||
|
|
DB_USER="${DB_USER:-root}"
|
|||
|
|
DB_PASS="${DB_PASS}"
|
|||
|
|
|
|||
|
|
# SQL 文件路径
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|||
|
|
TABLES_SQL="${SCRIPT_DIR}/pangu_tables.sql"
|
|||
|
|
MENU_SQL="${SCRIPT_DIR}/pangu_menu.sql"
|
|||
|
|
API_DICT_SQL="${SCRIPT_DIR}/open_api_dict_data.sql"
|
|||
|
|
|
|||
|
|
# 打印函数
|
|||
|
|
print_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|||
|
|
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
|||
|
|
print_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|||
|
|
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|||
|
|
|
|||
|
|
# 显示帮助
|
|||
|
|
show_help() {
|
|||
|
|
echo "用法: ./check_and_import.sh [选项]"
|
|||
|
|
echo ""
|
|||
|
|
echo "选项:"
|
|||
|
|
echo " -h, --host 数据库主机 (默认: 8.148.25.55)"
|
|||
|
|
echo " -P, --port 数据库端口 (默认: 3306)"
|
|||
|
|
echo " -d, --database 数据库名称 (默认: pguser-db)"
|
|||
|
|
echo " -u, --user 数据库用户 (默认: root)"
|
|||
|
|
echo " -p, --password 数据库密码 (必填)"
|
|||
|
|
echo " --help 显示帮助信息"
|
|||
|
|
echo ""
|
|||
|
|
echo "示例:"
|
|||
|
|
echo " ./check_and_import.sh -p your_password"
|
|||
|
|
echo " ./check_and_import.sh -h localhost -u root -p 123456"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 检查 MySQL 客户端
|
|||
|
|
check_mysql_client() {
|
|||
|
|
if ! command -v mysql &> /dev/null; then
|
|||
|
|
print_error "未找到 mysql 客户端,请先安装 MySQL"
|
|||
|
|
print_info "macOS 安装: brew install mysql-client"
|
|||
|
|
print_info "Ubuntu 安装: sudo apt-get install mysql-client"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 检查表是否存在
|
|||
|
|
check_table_exists() {
|
|||
|
|
local table_name=$1
|
|||
|
|
local result=$(mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" -se "SHOW TABLES LIKE '${table_name}';" 2>/dev/null)
|
|||
|
|
if [ -n "$result" ]; then
|
|||
|
|
return 0 # 表存在
|
|||
|
|
else
|
|||
|
|
return 1 # 表不存在
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 检查菜单是否存在
|
|||
|
|
check_menu_exists() {
|
|||
|
|
local menu_id=$1
|
|||
|
|
local result=$(mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" -se "SELECT COUNT(*) FROM sys_menu WHERE menu_id=${menu_id};" 2>/dev/null)
|
|||
|
|
if [ "$result" -gt 0 ]; then
|
|||
|
|
return 0 # 菜单存在
|
|||
|
|
else
|
|||
|
|
return 1 # 菜单不存在
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 导入 SQL 文件
|
|||
|
|
import_sql() {
|
|||
|
|
local sql_file=$1
|
|||
|
|
local description=$2
|
|||
|
|
|
|||
|
|
print_info "正在导入: ${description}"
|
|||
|
|
if mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" < "${sql_file}" 2>/dev/null; then
|
|||
|
|
print_success "导入成功: ${description}"
|
|||
|
|
return 0
|
|||
|
|
else
|
|||
|
|
print_error "导入失败: ${description}"
|
|||
|
|
return 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主逻辑
|
|||
|
|
main() {
|
|||
|
|
# 解析参数
|
|||
|
|
while [[ $# -gt 0 ]]; do
|
|||
|
|
case $1 in
|
|||
|
|
-h|--host)
|
|||
|
|
DB_HOST="$2"
|
|||
|
|
shift 2
|
|||
|
|
;;
|
|||
|
|
-P|--port)
|
|||
|
|
DB_PORT="$2"
|
|||
|
|
shift 2
|
|||
|
|
;;
|
|||
|
|
-d|--database)
|
|||
|
|
DB_NAME="$2"
|
|||
|
|
shift 2
|
|||
|
|
;;
|
|||
|
|
-u|--user)
|
|||
|
|
DB_USER="$2"
|
|||
|
|
shift 2
|
|||
|
|
;;
|
|||
|
|
-p|--password)
|
|||
|
|
DB_PASS="$2"
|
|||
|
|
shift 2
|
|||
|
|
;;
|
|||
|
|
--help)
|
|||
|
|
show_help
|
|||
|
|
exit 0
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
print_error "未知选项: $1"
|
|||
|
|
show_help
|
|||
|
|
exit 1
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# 检查密码
|
|||
|
|
if [ -z "$DB_PASS" ]; then
|
|||
|
|
print_error "请提供数据库密码 (-p 或 --password)"
|
|||
|
|
show_help
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 检查 MySQL 客户端
|
|||
|
|
check_mysql_client
|
|||
|
|
|
|||
|
|
echo "========================================"
|
|||
|
|
echo " 应用管理模块 - 数据库检查与导入"
|
|||
|
|
echo "========================================"
|
|||
|
|
echo "数据库: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
|
|||
|
|
echo "用户: ${DB_USER}"
|
|||
|
|
echo "========================================"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 测试数据库连接
|
|||
|
|
print_info "测试数据库连接..."
|
|||
|
|
if ! mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" -e "SELECT 1;" &> /dev/null; then
|
|||
|
|
print_error "数据库连接失败,请检查配置"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
print_success "数据库连接成功"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 1. 检查表结构
|
|||
|
|
print_info "【步骤 1】检查表结构"
|
|||
|
|
echo "----------------------------------------"
|
|||
|
|
|
|||
|
|
tables=("pg_application" "pg_api_dict" "pg_app_api")
|
|||
|
|
tables_missing=false
|
|||
|
|
|
|||
|
|
for table in "${tables[@]}"; do
|
|||
|
|
if check_table_exists "$table"; then
|
|||
|
|
print_success "✓ 表 ${table} 已存在"
|
|||
|
|
else
|
|||
|
|
print_warn "✗ 表 ${table} 不存在"
|
|||
|
|
tables_missing=true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
if [ "$tables_missing" = true ]; then
|
|||
|
|
echo ""
|
|||
|
|
print_warn "检测到缺失的表,开始导入表结构..."
|
|||
|
|
import_sql "${TABLES_SQL}" "表结构 (pangu_tables.sql)"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 2. 检查菜单数据
|
|||
|
|
print_info "【步骤 2】检查菜单数据"
|
|||
|
|
echo "----------------------------------------"
|
|||
|
|
|
|||
|
|
if check_menu_exists "2300"; then
|
|||
|
|
print_success "✓ 应用管理菜单已存在 (menu_id=2300)"
|
|||
|
|
else
|
|||
|
|
print_warn "✗ 应用管理菜单不存在"
|
|||
|
|
echo ""
|
|||
|
|
print_warn "开始导入菜单数据..."
|
|||
|
|
import_sql "${MENU_SQL}" "菜单数据 (pangu_menu.sql)"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 3. 检查 API 字典数据
|
|||
|
|
print_info "【步骤 3】检查 API 字典数据"
|
|||
|
|
echo "----------------------------------------"
|
|||
|
|
|
|||
|
|
if check_table_exists "pg_api_dict"; then
|
|||
|
|
api_count=$(mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" -se "SELECT COUNT(*) FROM pg_api_dict WHERE api_code='OPEN_STUDENT_LIST';" 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ "$api_count" -gt 0 ]; then
|
|||
|
|
print_success "✓ API 字典数据已存在 (OPEN_STUDENT_LIST)"
|
|||
|
|
else
|
|||
|
|
print_warn "✗ API 字典数据不存在"
|
|||
|
|
echo ""
|
|||
|
|
print_warn "开始导入 API 字典数据..."
|
|||
|
|
import_sql "${API_DICT_SQL}" "API 字典数据 (open_api_dict_data.sql)"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
print_warn "表 pg_api_dict 不存在,跳过数据检查"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "========================================"
|
|||
|
|
print_success "检查完成!"
|
|||
|
|
echo "========================================"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 显示验证 SQL
|
|||
|
|
print_info "【验证命令】"
|
|||
|
|
echo "-- 查看应用管理表"
|
|||
|
|
echo "SELECT COUNT(*) FROM pg_application;"
|
|||
|
|
echo "SELECT COUNT(*) FROM pg_api_dict;"
|
|||
|
|
echo "SELECT COUNT(*) FROM pg_app_api;"
|
|||
|
|
echo ""
|
|||
|
|
echo "-- 查看应用管理菜单"
|
|||
|
|
echo "SELECT menu_id, menu_name, perms FROM sys_menu WHERE menu_id >= 2300 AND menu_id < 2400;"
|
|||
|
|
echo ""
|
|||
|
|
echo "-- 查看 API 字典"
|
|||
|
|
echo "SELECT * FROM pg_api_dict;"
|
|||
|
|
echo ""
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 执行主函数
|
|||
|
|
main "$@"
|