pangu-user-platform/backend/pangu-modules/pangu-business/sql/check_and_import.sh

246 lines
7.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"