diff --git a/.gitignore b/.gitignore index 4ff8a32bc91d539a6af349561cc32f52a60bc88c..9a7ad5c80e55b462e859b227a675c843cb200bb2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,8 @@ home/components/nacos/run/ # 运行目录处理 target/ rename.sh -iiap-core \ No newline at end of file +iiap-core +# 忽略 logs 文件或目录 +home/bin/logs/ +home/bin/console-linux/logs/ +home/bin/console-windows/logs/ \ No newline at end of file diff --git a/home/bin/components/nacos-start.bat b/home/bin/components/nacos-start.bat new file mode 100644 index 0000000000000000000000000000000000000000..763a160c70dc5e1d5f831f2aa4f9cc945a6ac5c7 --- /dev/null +++ b/home/bin/components/nacos-start.bat @@ -0,0 +1,17 @@ +@echo off +setlocal + +REM 进入 nacos 运行目录 +cd /d %R2MO_HOME%\components\nacos\run + +REM 检查 nacos.pid 是否存在 +if exist nacos.pid ( + echo Nacos is already running. + exit /b 0 +) + +REM 启动 Nacos +echo Starting Nacos... +call bin\startup.cmd -m standalone + +endlocal diff --git a/home/bin/components/nacos-stop.bat b/home/bin/components/nacos-stop.bat new file mode 100644 index 0000000000000000000000000000000000000000..937f50475e6b804c935880df8cd7b202d73c3400 --- /dev/null +++ b/home/bin/components/nacos-stop.bat @@ -0,0 +1,11 @@ +@echo off +setlocal + +REM 进入 nacos 运行目录 +cd /d %R2MO_HOME%\components\nacos\run + +REM 停止 Nacos +echo Stopping Nacos... +call bin\shutdown.cmd -m standalone + +endlocal \ No newline at end of file diff --git a/home/bin/console-linux/.console.env b/home/bin/console-linux/.console.env new file mode 100644 index 0000000000000000000000000000000000000000..3cdd60c54a079e5a0a7e706321f5832bfb3487f3 --- /dev/null +++ b/home/bin/console-linux/.console.env @@ -0,0 +1,14 @@ +export INSTANCE_NAME="HOTEL-001" +export DB_TYPE="MYSQL" +export DB_HOST="192.168.1.5" +export DB_PASSWORD="pl,okm123YH" +export DB_APP_USER="htl" +export DB_APP_PASS="pl,okmijn123" +export Z_APP="app.micro.hotel" +export Z_HED_ENABLED="true" +export Z_SIS_STORE="/Users/lang/zero-store" +export APP_SIGMA="ENhwBAJPZuSgIAE5EDakR6yrIQbOoOPq" +export APP_ID="78fce5a2-17f3-4dac-a75c-7e751595015c" +export APP_TENANT="90510328-3a1d-4061-94ff-02fe2f002653" +export PORT_WEB="7105" +export PORT_API="7185" diff --git a/home/bin/console-linux/action-create-db-user.sh b/home/bin/console-linux/action-create-db-user.sh new file mode 100644 index 0000000000000000000000000000000000000000..30e33179299f0f07d424297083fe32e0ec1c3c02 --- /dev/null +++ b/home/bin/console-linux/action-create-db-user.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# 调用上层 mo-db(数据库备份/账号等自有流程,如需账号创建请在 mo-db-bak.sh 以外接入) + +CYAN="\033[36m"; RED="\033[31m"; GREEN="\033[32m"; RESET="\033[0m"; PREFIX="[ ${CYAN}R2MO${RESET} ]" +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +ROOT_DIR=$(cd "$SCRIPT_DIR/.." && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + +if [ -z "$INSTANCE_NAME" ] || [ -z "$DB_TYPE" ]; then + echo -e "$PREFIX ${RED}缺少 INSTANCE_NAME 或 DB_TYPE,请先执行菜单 2 录入${RESET}" + exit 1 +fi + +# 先加载实例专属环境 +if [ -z "$WORK_DIR" ]; then + echo -e "$PREFIX ${RED}缺少 WORK_DIR,请先执行菜单 1 设置${RESET}"; exit 1; fi +if [ -f "$WORK_DIR/instance/$INSTANCE_NAME/env.sh" ]; then + # shellcheck disable=SC1090 + source "$WORK_DIR/instance/$INSTANCE_NAME/env.sh" +else + echo -e "$PREFIX ${RED}未找到实例环境:$WORK_DIR/instance/$INSTANCE_NAME/env.sh${RESET}"; exit 1 +fi + +"$ROOT_DIR/mo-db" "$INSTANCE_NAME" "$DB_TYPE" +exit $? + + diff --git a/home/bin/console-linux/action-create-db.sh b/home/bin/console-linux/action-create-db.sh new file mode 100644 index 0000000000000000000000000000000000000000..f497fbafd60404434db1d0e8059fef3b8db75715 --- /dev/null +++ b/home/bin/console-linux/action-create-db.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# 调用上层 mo-dbre(数据库重建/创建) + +CYAN="\033[36m"; RED="\033[31m"; GREEN="\033[32m"; RESET="\033[0m"; PREFIX="[ ${CYAN}R2MO${RESET} ]" +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +ROOT_DIR=$(cd "$SCRIPT_DIR/.." && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + +if [ -z "$INSTANCE_NAME" ] || [ -z "$DB_TYPE" ]; then + echo -e "$PREFIX ${RED}缺少 INSTANCE_NAME 或 DB_TYPE,请先执行菜单 2 录入${RESET}" + exit 1 +fi + +# 先加载实例专属环境 +if [ -z "$WORK_DIR" ]; then + echo -e "$PREFIX ${RED}缺少 WORK_DIR,请先执行菜单 1 设置${RESET}"; exit 1; fi +if [ -f "$WORK_DIR/instance/$INSTANCE_NAME/env.sh" ]; then + # shellcheck disable=SC1090 + source "$WORK_DIR/instance/$INSTANCE_NAME/env.sh" +else + echo -e "$PREFIX ${RED}未找到实例环境:$WORK_DIR/instance/$INSTANCE_NAME/env.sh${RESET}"; exit 1 +fi + +"$ROOT_DIR/mo-dbre" "$INSTANCE_NAME" "$DB_TYPE" +exit $? + + diff --git a/home/bin/console-linux/action-import-data.sh b/home/bin/console-linux/action-import-data.sh new file mode 100644 index 0000000000000000000000000000000000000000..2a49901dedc4275a5372a4ebb465e72e8c490637 --- /dev/null +++ b/home/bin/console-linux/action-import-data.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# 调用上层 mo-data(应用数据注入) + +CYAN="\033[36m"; RED="\033[31m"; GREEN="\033[32m"; RESET="\033[0m"; PREFIX="[ ${CYAN}R2MO${RESET} ]" +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +ROOT_DIR=$(cd "$SCRIPT_DIR/.." && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + +if [ -z "$INSTANCE_NAME" ] || [ -z "$DB_TYPE" ]; then + echo -e "$PREFIX ${RED}缺少 INSTANCE_NAME 或 DB_TYPE,请先执行菜单 2 录入${RESET}" + exit 1 +fi + +# 先加载实例专属环境 +if [ -z "$WORK_DIR" ]; then + echo -e "$PREFIX ${RED}缺少 WORK_DIR,请先执行菜单 1 设置${RESET}"; exit 1; fi +if [ -f "$WORK_DIR/instance/$INSTANCE_NAME/env.sh" ]; then + # shellcheck disable=SC1090 + source "$WORK_DIR/instance/$INSTANCE_NAME/env.sh" +else + echo -e "$PREFIX ${RED}未找到实例环境:$WORK_DIR/instance/$INSTANCE_NAME/env.sh${RESET}"; exit 1 +fi + +"$ROOT_DIR/mo-data" "$INSTANCE_NAME" "$DB_TYPE" +exit $? + + diff --git a/home/bin/console-linux/action-init.sh b/home/bin/console-linux/action-init.sh new file mode 100644 index 0000000000000000000000000000000000000000..f55375e1184637babd3c2f845ad2985b302c38c7 --- /dev/null +++ b/home/bin/console-linux/action-init.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# 简短:调用上层 mo-init 执行完整初始化 + +RED="\033[31m" +GREEN="\033[32m" +CYAN="\033[36m" +RESET="\033[0m" +PREFIX="[ ${CYAN}R2MO${RESET} ]" + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +ROOT_DIR=$(cd "$SCRIPT_DIR/.." && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + +if [ ! -x "$ROOT_DIR/mo-init" ]; then + if [ -f "$ROOT_DIR/mo-init" ]; then chmod +x "$ROOT_DIR/mo-init"; else + echo -e "$PREFIX ${RED}未找到 mo-init${RESET}"; exit 1; fi +fi + +"$ROOT_DIR/mo-init" "$INSTANCE_NAME" "$DB_TYPE" +code=$? +if [ $code -eq 0 ]; then + echo -e "$PREFIX ${GREEN}初始化完成${RESET}" +else + echo -e "$PREFIX ${RED}初始化失败,退出码: $code${RESET}" +fi +exit $code + + diff --git a/home/bin/console-linux/check-mysql.sh b/home/bin/console-linux/check-mysql.sh new file mode 100644 index 0000000000000000000000000000000000000000..d5829909381afb524efde7ed0410be354e5de3b5 --- /dev/null +++ b/home/bin/console-linux/check-mysql.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash + +# 简短:检查 MySQL 连通性,使用 env.sh/.console.env 中的 DB_* 变量 + +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +CYAN="\033[36m" +RESET="\033[0m" +PREFIX="[ ${CYAN}R2MO${RESET} ]" + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + +# 尝试加载实例 env(可选) +ENV_FILE="$WORK_DIR/instance/$INSTANCE_NAME/env.sh" +if [ -f "$ENV_FILE" ]; then + # shellcheck disable=SC1090 + source "$ENV_FILE" +fi + +# 变量准备 +MYSQL_HOST="${DB_HOST:-127.0.0.1}" +MYSQL_PORT="${DB_PORT:-3306}" +MYSQL_DB="${DB_INSTANCE:-$DB_APP}" +# 若数据库名未以 DB_ 开头,则自动补齐前缀 +case "$MYSQL_DB" in + DB_*) ;; + *) MYSQL_DB="DB_${MYSQL_DB}" ;; +esac +MYSQL_USER="${DB_APP_USER}" +MYSQL_PASS="${DB_APP_PASS}" + +if ! command -v mysql >/dev/null 2>&1; then + echo -e "$PREFIX ${RED}未安装 mysql 客户端,请先安装: sudo apt install mysql-client${RESET}" + exit 1 +fi + +missing=false +[ -z "$MYSQL_HOST" ] && echo -e "$PREFIX ${RED}缺少 DB_HOST${RESET}" && missing=true +[ -z "$MYSQL_PORT" ] && echo -e "$PREFIX ${RED}缺少 DB_PORT${RESET}" && missing=true +[ -z "$MYSQL_DB" ] && echo -e "$PREFIX ${RED}缺少 DB_INSTANCE/DB_APP${RESET}" && missing=true +[ -z "$MYSQL_USER" ] && echo -e "$PREFIX ${RED}缺少 DB_APP_USER${RESET}" && missing=true +[ -z "$MYSQL_PASS" ] && echo -e "$PREFIX ${RED}缺少 DB_APP_PASS${RESET}" && missing=true +if [ "$missing" = true ]; then + exit 1 +fi + +echo -e "$PREFIX 正在检查 MySQL 连接: host=$MYSQL_HOST port=$MYSQL_PORT db=$MYSQL_DB user=$MYSQL_USER" + +# 步骤 1:先验证主机/端口/账号密码是否可用(不指定数据库) +MYSQL_PWD="$MYSQL_PASS" mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -e "SELECT 1;" >/dev/null 2>&1 +rc=$? +if [ $rc -ne 0 ]; then + echo -e "$PREFIX ${RED}无法连接到 MySQL 或账号密码不正确(未指定数据库时即失败)${RESET}" + MYSQL_PWD="$MYSQL_PASS" mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -e "SELECT 1;" 2>&1 | sed 's/\(--password=\)\S\+/\1****/g' + exit $rc +fi + +# 步骤 2:检查目标数据库是否存在 +exists=$(MYSQL_PWD="$MYSQL_PASS" mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -N -e "SHOW DATABASES LIKE '${MYSQL_DB}';" 2>/dev/null) +if [ -z "$exists" ]; then + echo -e "$PREFIX ${RED}目标数据库不存在: ${MYSQL_DB}${RESET}" + echo -e "$PREFIX 可用数据库示例:" + MYSQL_PWD="$MYSQL_PASS" mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -N -e "SHOW DATABASES;" 2>/dev/null | head -n 20 | sed 's/^/[ DB ] /' + echo -e "$PREFIX ${YELLOW}提示:Linux 上数据库名大小写敏感,请确认与 env.sh 保持一致${RESET}" + exit 2 +fi + +# 步骤 3:验证能否进入指定数据库并执行查询 +MYSQL_PWD="$MYSQL_PASS" mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -D "$MYSQL_DB" -e "SELECT 1;" >/dev/null 2>&1 +rc=$? +if [ $rc -eq 0 ]; then + echo -e "$PREFIX ${GREEN}MySQL 连接成功(数据库可访问)${RESET}" + exit 0 +else + echo -e "$PREFIX ${RED}连接 MySQL 成功,但访问数据库失败: ${MYSQL_DB}${RESET}" + MYSQL_PWD="$MYSQL_PASS" mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -D "$MYSQL_DB" -e "SELECT 1;" 2>&1 | sed 's/\(--password=\)\S\+/\1****/g' + exit $rc +fi + + diff --git a/home/bin/console-linux/create-run-AppEntry.sh b/home/bin/console-linux/create-run-AppEntry.sh new file mode 100644 index 0000000000000000000000000000000000000000..4fde853cef36dfa02fb367fd61edee292c67d892 --- /dev/null +++ b/home/bin/console-linux/create-run-AppEntry.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) + +# 重新加载环境变量文件 +if [ -f "$SCRIPT_DIR/.console.env" ]; then + source "$SCRIPT_DIR/.console.env" +fi + +# 自动探测包含 .idea 的项目根(可用 PROJECT_DIR 覆盖) +if [ -n "${PROJECT_DIR:-}" ] && [ -d "$PROJECT_DIR/.idea" ]; then + PROJECT_DIR_IN="$PROJECT_DIR" +else + # 优先从 WORK_DIR 向上查找,其次从当前目录查找 + if [ -n "${WORK_DIR:-}" ]; then + SEARCH_DIR="$WORK_DIR" + else + SEARCH_DIR="$(pwd)" + fi + PROJECT_DIR_IN="" + while [ "$SEARCH_DIR" != "/" ]; do + if [ -d "$SEARCH_DIR/.idea" ]; then PROJECT_DIR_IN="$SEARCH_DIR"; break; fi + SEARCH_DIR="$(dirname "$SEARCH_DIR")" + done + if [ -z "$PROJECT_DIR_IN" ]; then PROJECT_DIR_IN="$(pwd)"; fi +fi + +RUN_DIR="$PROJECT_DIR_IN/.idea/runConfigurations" +mkdir -p "$RUN_DIR" + +DST="$RUN_DIR/AppEntry.xml" +# 计算实际路径(IDEA 不会展开环境变量) +if [ -z "${WORK_DIR:-}" ] || [ -z "${INSTANCE_NAME:-}" ]; then + echo "[ R2MO ] 错误: 缺少 WORK_DIR 或 INSTANCE_NAME 环境变量" >&2 + echo "[ R2MO ] 请先运行菜单 1 设置 WORK_DIR,菜单 2 设置实例" >&2 + exit 1 +fi +WD_REAL="${WORK_DIR}/instance/${INSTANCE_NAME}/conf" +ENV_REAL="${WD_REAL}/.env.development" + +cat > "$DST" < + + + +XML + +echo "[ R2MO ] Created: $DST" diff --git a/home/bin/console-linux/create-run-InstLoad.sh b/home/bin/console-linux/create-run-InstLoad.sh new file mode 100644 index 0000000000000000000000000000000000000000..cecf215570e10ba0365336a04aa594c5f7e24cc2 --- /dev/null +++ b/home/bin/console-linux/create-run-InstLoad.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) + +# 重新加载环境变量文件 +if [ -f "$SCRIPT_DIR/.console.env" ]; then + source "$SCRIPT_DIR/.console.env" +fi + +# 自动探测包含 .idea 的项目根(可用 PROJECT_DIR 覆盖) +if [ -n "${PROJECT_DIR:-}" ] && [ -d "$PROJECT_DIR/.idea" ]; then + PROJECT_DIR_IN="$PROJECT_DIR" +else + if [ -n "${WORK_DIR:-}" ]; then + SEARCH_DIR="$WORK_DIR" + else + SEARCH_DIR="$(pwd)" + fi + PROJECT_DIR_IN="" + while [ "$SEARCH_DIR" != "/" ]; do + if [ -d "$SEARCH_DIR/.idea" ]; then PROJECT_DIR_IN="$SEARCH_DIR"; break; fi + SEARCH_DIR="$(dirname "$SEARCH_DIR")" + done + if [ -z "$PROJECT_DIR_IN" ]; then PROJECT_DIR_IN="$(pwd)"; fi +fi + +RUN_DIR="$PROJECT_DIR_IN/.idea/runConfigurations" +mkdir -p "$RUN_DIR" + +DST="$RUN_DIR/MenuView.xml" + +if [ -z "${WORK_DIR:-}" ] || [ -z "${INSTANCE_NAME:-}" ]; then + echo "[ R2MO ] 错误: 缺少 WORK_DIR 或 INSTANCE_NAME 环境变量" >&2 + echo "[ R2MO ] 请先运行菜单 1 设置 WORK_DIR,菜单 2 设置实例" >&2 + exit 1 +fi +WD_REAL="${WORK_DIR}/instance/${INSTANCE_NAME}/conf" +ENV_REAL="${WD_REAL}/.env.development" + +cat > "$DST" < + + + +XML + +echo "[ R2MO ] Created: $DST" + + diff --git a/home/bin/console-linux/create-run-InstMenu.sh b/home/bin/console-linux/create-run-InstMenu.sh new file mode 100644 index 0000000000000000000000000000000000000000..9bad52b62e2d2644a5064d87dc46ba851b8e649c --- /dev/null +++ b/home/bin/console-linux/create-run-InstMenu.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) + +# 重新加载环境变量文件 +if [ -f "$SCRIPT_DIR/.console.env" ]; then + source "$SCRIPT_DIR/.console.env" +fi + +# 自动探测包含 .idea 的项目根(可用 PROJECT_DIR 覆盖) +if [ -n "${PROJECT_DIR:-}" ] && [ -d "$PROJECT_DIR/.idea" ]; then + PROJECT_DIR_IN="$PROJECT_DIR" +else + if [ -n "${WORK_DIR:-}" ]; then + SEARCH_DIR="$WORK_DIR" + else + SEARCH_DIR="$(pwd)" + fi + PROJECT_DIR_IN="" + while [ "$SEARCH_DIR" != "/" ]; do + if [ -d "$SEARCH_DIR/.idea" ]; then PROJECT_DIR_IN="$SEARCH_DIR"; break; fi + SEARCH_DIR="$(dirname "$SEARCH_DIR")" + done + if [ -z "$PROJECT_DIR_IN" ]; then PROJECT_DIR_IN="$(pwd)"; fi +fi + +RUN_DIR="$PROJECT_DIR_IN/.idea/runConfigurations" +mkdir -p "$RUN_DIR" + +DST="$RUN_DIR/InstMenu.xml" + +if [ -z "${WORK_DIR:-}" ] || [ -z "${INSTANCE_NAME:-}" ]; then + echo "[ R2MO ] 错误: 缺少 WORK_DIR 或 INSTANCE_NAME 环境变量" >&2 + echo "[ R2MO ] 请先运行菜单 1 设置 WORK_DIR,菜单 2 设置实例" >&2 + exit 1 +fi +WD_REAL="${WORK_DIR}/instance/${INSTANCE_NAME}/conf" +ENV_REAL="${WD_REAL}/.env.development" + +cat > "$DST" < + + + +XML + +echo "[ R2MO ] Created: $DST" + + diff --git a/home/bin/console-linux/env-check.sh b/home/bin/console-linux/env-check.sh new file mode 100644 index 0000000000000000000000000000000000000000..1dc524627cd9204d29b8a1e34f58a0a6eb12ed04 --- /dev/null +++ b/home/bin/console-linux/env-check.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# 简短:检查 R2MO_HOME / WORK_DIR 及实例必需变量 + +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +CYAN="\033[36m" +RESET="\033[0m" +PREFIX="[ ${CYAN}R2MO${RESET} ]" + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + +fail=false + +require() { + local name="$1"; shift + local value="$1"; shift + if [ -z "$value" ]; then + echo -e "$PREFIX ${RED}缺少必需环境变量: $name${RESET}" + fail=true + else + echo -e "$PREFIX ${GREEN}OK${RESET} $name=$value" + fi +} +cd +require "R2MO_HOME" "$R2MO_HOME" +require "WORK_DIR" "$WORK_DIR" +require "INSTANCE_NAME" "$INSTANCE_NAME" +require "DB_TYPE" "$DB_TYPE" + +if [ "$fail" = true ]; then + exit 1 +fi + +echo -e "$PREFIX ${GREEN}环境检查通过${RESET}" + + diff --git a/home/bin/console-linux/env-instance.sh b/home/bin/console-linux/env-instance.sh new file mode 100644 index 0000000000000000000000000000000000000000..e167613dfc254378af77aa409b565a8258365aa5 --- /dev/null +++ b/home/bin/console-linux/env-instance.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +# 简短:录入实例名与数据库类型,并写入当前目录的 .console.env + +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +CYAN="\033[36m" +RESET="\033[0m" +PREFIX="[ ${CYAN}R2MO${RESET} ]" + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +STATE_FILE="$SCRIPT_DIR/.console.env" + +echo -en "$PREFIX 请输入实例名称: " +read instance_name +if [ -z "$instance_name" ]; then + echo -e "$PREFIX ${RED}实例名称不能为空${RESET}" + exit 1 +fi + +echo -en "$PREFIX 请输入数据库类型(MYSQL/PGSQL/TIDB/ORACLE,默认MYSQL): " +read db_type +if [ -z "$db_type" ]; then + db_type="MYSQL" +fi +cat > "$STATE_FILE" <> "$STATE_FILE" +else + echo -e "$PREFIX ${YELLOW}未找到实例环境(可选): $ENV_FILE${RESET}" +fi +echo -e "$PREFIX 可通过 'source $STATE_FILE' 在当前会话中加载" + + diff --git a/home/bin/console-linux/env-print.sh b/home/bin/console-linux/env-print.sh new file mode 100644 index 0000000000000000000000000000000000000000..4338ecaf340b070cba18843bea9782ad7604778f --- /dev/null +++ b/home/bin/console-linux/env-print.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# 简短:打印关键环境变量 + +GREEN="\033[32m" +RED="\033[31m" +CYAN="\033[36m" +RESET="\033[0m" +PREFIX="[ ${CYAN}R2MO${RESET} ]" + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +[ -f "$SCRIPT_DIR/.console.env" ] && source "$SCRIPT_DIR/.console.env" + + + # 打印 env.sh 中设置的关键环境变量(仅打印已设置的) + print_if_set() { var_name="$1"; var_value="${!var_name}"; [ -n "$var_value" ] && echo -e "[ ENV ] $var_name = ${CYAN}$var_value${RESET}"; } + echo "---------------- 已加载的环境变量 ----------------" + print_if_set INSTANCE_NAME + print_if_set WORK_DIR + print_if_set DB_TYPE + print_if_set DB_HOST + print_if_set DB_PORT + print_if_set DB_USER + print_if_set DB_PASSWORD + print_if_set DB_APP_USER + print_if_set DB_APP_PASS + print_if_set DB_APP + print_if_set DB_WF + print_if_set Z_APP + print_if_set Z_HED_ENABLED + print_if_set Z_SIS_STORE + print_if_set APP_SIGMA + print_if_set APP_ID + print_if_set APP_TENANT + print_if_set PORT_WEB + print_if_set PORT_API + echo "--------------------------------------------------" + + diff --git a/home/bin/console-linux/mo-console.sh b/home/bin/console-linux/mo-console.sh new file mode 100644 index 0000000000000000000000000000000000000000..adbaa40f684e3f291bcda6ad78bccee31baf274c --- /dev/null +++ b/home/bin/console-linux/mo-console.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash +# ======================================== +# R2MO 控制台脚本 (彩色版, 全局修正版) +# ======================================== + +# 颜色定义 +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +BLUE="\033[34m" +CYAN="\033[36m" +RESET="\033[0m" + +PREFIX="[ ${CYAN}R2MO${RESET} ]" + +# 加载已保存的环境变量 +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +if [ -f "$SCRIPT_DIR/.console.env" ]; then + echo "[ R2MO ] 加载环境变量文件: $SCRIPT_DIR/.console.env" + source "$SCRIPT_DIR/.console.env" + echo "[ R2MO ] 加载后 INSTANCE_NAME=${INSTANCE_NAME:-未设置}" +else + echo "[ R2MO ] 未找到环境变量文件: $SCRIPT_DIR/.console.env" +fi + +show_menu() { + clear + echo -e "$PREFIX ${YELLOW}========================================${RESET}" + echo -e "$PREFIX ${GREEN}R2MO 控制台菜单${RESET}" + echo -e "$PREFIX ${YELLOW}========================================${RESET}" + echo -e "$PREFIX" + echo -e "$PREFIX ${BLUE}1.${RESET} 设置环境变量 (R2MO_HOME, WORK_DIR)" + echo -e "$PREFIX ${BLUE}2.${RESET} 录入实例与数据库类型" + echo -e "$PREFIX ${BLUE}3.${RESET} 检查环境变量" + echo -e "$PREFIX ${BLUE}4.${RESET} 打印环境变量" + echo -e "$PREFIX ${BLUE}5.${RESET} MYSQL 环境变量检查 (连接测试)" + echo -e "$PREFIX ${BLUE}6.${RESET} 执行初始化程序" + echo -e "$PREFIX ${BLUE}7.${RESET} 执行数据导入" + echo -e "$PREFIX ${BLUE}8.${RESET} 生成 IDEA Run Configurations" + echo -e "$PREFIX ${BLUE}0.${RESET} 退出" + echo -e "$PREFIX ${YELLOW}========================================${RESET}" +} + +set_env() { + echo -en "$PREFIX 请输入 WORK_DIR 路径: " + read input_work + + export R2MO_HOME="$R2MO_HOME" + export WORK_DIR="$input_work" + + echo -e "$PREFIX ${GREEN}✅ 环境变量已设置${RESET}" + echo -e "$PREFIX R2MO_HOME=$R2MO_HOME" + echo -e "$PREFIX WORK_DIR=$WORK_DIR" +} + +check_env() { + "$(dirname "$0")/env-check.sh" +} + +run_init() { + "$(dirname "$0")/action-init.sh" +} + +import_data() { "$(dirname "$0")/action-import-data.sh"; } + +env_instance() { + local BASE="$(dirname "$0")" + source "$BASE/env-instance.sh" +} +env_print() { "$(dirname "$0")/env-print.sh"; } +check_mysql() { "$(dirname "$0")/check-mysql.sh"; } +gen_runconfigs() { + local BASE="$(dirname "$0")" + + # 重新加载环境变量文件 + if [ -f "$BASE/.console.env" ]; then + echo -e "$PREFIX 重新加载环境变量文件..." + source "$BASE/.console.env" + fi + + # 导出环境变量供子脚本使用 + if [ -n "${WORK_DIR:-}" ]; then + export WORK_DIR + local search_dir="$WORK_DIR" + local project_dir="" + while [ "$search_dir" != "/" ]; do + if [ -d "$search_dir/.idea" ]; then project_dir="$search_dir"; break; fi + search_dir="$(dirname "$search_dir")" + done + if [ -n "$project_dir" ]; then export PROJECT_DIR="$project_dir"; fi + fi + if [ -n "${INSTANCE_NAME:-}" ]; then + export INSTANCE_NAME + fi + + # 直接执行脚本,每个脚本会自己加载环境变量 + "$BASE/create-run-AppEntry.sh" + "$BASE/create-run-InstMenu.sh" + "$BASE/create-run-InstLoad.sh" +} + + +# 主循环 +while true; do + show_menu + echo -en "$PREFIX 请选择操作 (0-8): " + read choice + case "$choice" in + 1) set_env ;; + 2) env_instance ;; + 3) check_env ;; + 4) env_print ;; + 5) check_mysql ;; + 6) run_init ;; + 7) import_data ;; + 8) gen_runconfigs ;; + 0) echo -e "$PREFIX 👋 ${YELLOW}感谢使用 R2MO 控制台${RESET}"; exit 0 ;; + *) echo -e "$PREFIX ${RED}⚠️ 无效选项,请重新输入${RESET}" ;; + esac + echo -en "$PREFIX 按回车键继续..." + read dummy +done diff --git a/home/bin/console-windows/.console.env.bat b/home/bin/console-windows/.console.env.bat new file mode 100644 index 0000000000000000000000000000000000000000..1c7e0552aacab364b26410b1c89091a7bd6558c4 --- /dev/null +++ b/home/bin/console-windows/.console.env.bat @@ -0,0 +1,3 @@ +@echo off +set INSTANCE_NAME=HOTEL-002 +set DB_TYPE=MYSQL diff --git a/home/bin/console-windows/action-create-db-user.bat b/home/bin/console-windows/action-create-db-user.bat new file mode 100644 index 0000000000000000000000000000000000000000..60981b6bf6e35a518ef4aabdf10ce8058d054976 --- /dev/null +++ b/home/bin/console-windows/action-create-db-user.bat @@ -0,0 +1,41 @@ +@echo off +chcp 65001 >nul +set PREFIX=[ R2MO ] +call "%~dp0load-console-env.bat" 2>nul +call "%~dp0load-instance-env.bat" 2>nul + +if "%INSTANCE_NAME%"=="" ( + echo %PREFIX% 缺少 INSTANCE_NAME,请先执行菜单 2 录入 + exit /b 1 +) +if "%DB_TYPE%"=="" ( + echo %PREFIX% 缺少 DB_TYPE,请先执行菜单 2 录入 + exit /b 1 +) + +if "%WORK_DIR%"=="" ( + echo %PREFIX% 缺少 WORK_DIR,请先执行菜单 1 设置 + exit /b 1 +) + +set ROOT_DIR=%~dp0.. +set code=0 +if exist "%ROOT_DIR%\mo-db.bat" ( + call "%ROOT_DIR%\mo-db.bat" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-db.cmd" ( + call "%ROOT_DIR%\mo-db.cmd" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-db.exe" ( + "%ROOT_DIR%\mo-db.exe" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-db" ( + call "%ROOT_DIR%\mo-db" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else ( + echo %PREFIX% 未找到 mo-db + exit /b 1 +) +exit /b %code% + + diff --git a/home/bin/console-windows/action-create-db.bat b/home/bin/console-windows/action-create-db.bat new file mode 100644 index 0000000000000000000000000000000000000000..c66c1575d9904446ce2eb8f0d3b25ad270bb712e --- /dev/null +++ b/home/bin/console-windows/action-create-db.bat @@ -0,0 +1,41 @@ +@echo off +chcp 65001 >nul +set PREFIX=[ R2MO ] +call "%~dp0load-console-env.bat" 2>nul +call "%~dp0load-instance-env.bat" 2>nul + +if "%INSTANCE_NAME%"=="" ( + echo %PREFIX% 缺少 INSTANCE_NAME,请先执行菜单 2 录入 + exit /b 1 +) +if "%DB_TYPE%"=="" ( + echo %PREFIX% 缺少 DB_TYPE,请先执行菜单 2 录入 + exit /b 1 +) + +if "%WORK_DIR%"=="" ( + echo %PREFIX% 缺少 WORK_DIR,请先执行菜单 1 设置 + exit /b 1 +) + +set ROOT_DIR=%~dp0.. +set code=0 +if exist "%ROOT_DIR%\mo-dbre.bat" ( + call "%ROOT_DIR%\mo-dbre.bat" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-dbre.cmd" ( + call "%ROOT_DIR%\mo-dbre.cmd" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-dbre.exe" ( + "%ROOT_DIR%\mo-dbre.exe" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-dbre" ( + call "%ROOT_DIR%\mo-dbre" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else ( + echo %PREFIX% 未找到 mo-dbre + exit /b 1 +) +exit /b %code% + + diff --git a/home/bin/console-windows/action-import-data.bat b/home/bin/console-windows/action-import-data.bat new file mode 100644 index 0000000000000000000000000000000000000000..ffa735bc84f8cd29a8f38bc76cec41957e929933 --- /dev/null +++ b/home/bin/console-windows/action-import-data.bat @@ -0,0 +1,52 @@ +@echo off +chcp 65001 >nul +setlocal +set PREFIX=[ R2MO ] + +set "SCRIPT_DIR=%~dp0" +set "ROOT_DIR=%~dp0.." +if exist "%SCRIPT_DIR%.console.env" call "%SCRIPT_DIR%.console.env" 2>nul + +if "%INSTANCE_NAME%"=="" ( + echo %PREFIX% 缺少 INSTANCE_NAME,请先执行菜单 2 录入 + exit /b 1 +) +if "%DB_TYPE%"=="" ( + echo %PREFIX% 缺少 DB_TYPE,请先执行菜单 2 录入 + exit /b 1 +) + +if "%WORK_DIR%"=="" ( + echo %PREFIX% 缺少 WORK_DIR,请先执行菜单 1 设置 + exit /b 1 +) + +set "ENV_FILE=%WORK_DIR%\instance\%INSTANCE_NAME%\env.bat" +if exist "%ENV_FILE%" ( + call "%ENV_FILE%" +) else ( + echo %PREFIX% 未找到实例环境:%ENV_FILE% + exit /b 1 +) + +set code=0 +if exist "%ROOT_DIR%\mo-data.bat" ( + call "%ROOT_DIR%\mo-data.bat" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-data.cmd" ( + call "%ROOT_DIR%\mo-data.cmd" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-data.exe" ( + "%ROOT_DIR%\mo-data.exe" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-data" ( + call "%ROOT_DIR%\mo-data" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else ( + echo %PREFIX% 未找到 mo-data + exit /b 1 +) + +endlocal & exit /b %code% + + diff --git a/home/bin/console-windows/action-init.bat b/home/bin/console-windows/action-init.bat new file mode 100644 index 0000000000000000000000000000000000000000..8aa83bdae8009786300d5ce4714937b8a33bd479 --- /dev/null +++ b/home/bin/console-windows/action-init.bat @@ -0,0 +1,34 @@ +@echo off +chcp 65001 >nul +set PREFIX=[ R2MO ] +call "%~dp0load-console-env.bat" 2>nul +call "%~dp0load-instance-env.bat" 2>nul + +set ROOT_DIR=%~dp0.. +set code=0 + +if exist "%ROOT_DIR%\mo-init.bat" ( + call "%ROOT_DIR%\mo-init.bat" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-init.cmd" ( + call "%ROOT_DIR%\mo-init.cmd" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-init.exe" ( + "%ROOT_DIR%\mo-init.exe" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else if exist "%ROOT_DIR%\mo-init" ( + call "%ROOT_DIR%\mo-init" "%INSTANCE_NAME%" "%DB_TYPE%" + set code=%errorlevel% +) else ( + echo %PREFIX% 未找到 mo-init + exit /b 1 +) + +if %code%==0 ( + echo %PREFIX% 初始化完成 +) else ( + echo %PREFIX% 初始化失败,退出码: %code% +) +exit /b %code% + + diff --git a/home/bin/console-windows/create-run-AppEntry.bat b/home/bin/console-windows/create-run-AppEntry.bat new file mode 100644 index 0000000000000000000000000000000000000000..92da295672ef9b2b1f62e4d8c9cf6bc6eb1bb451 --- /dev/null +++ b/home/bin/console-windows/create-run-AppEntry.bat @@ -0,0 +1,118 @@ +@echo off +setlocal enabledelayedexpansion +chcp 65001 >nul + +set "SCRIPT_DIR=%~dp0" + +REM 重新加载环境变量文件 +if exist "%SCRIPT_DIR%.console.env" call "%SCRIPT_DIR%.console.env" 2>nul + +REM 自动探测包含 .idea 的项目根(可用 PROJECT_DIR 覆盖) +echo [ DEBUG ] PROJECT_DIR=%PROJECT_DIR% +if not "%PROJECT_DIR%"=="" ( + if exist "%PROJECT_DIR%\.idea" ( + set "PROJECT_DIR_IN=%PROJECT_DIR%" + echo [ DEBUG ] 使用预设 PROJECT_DIR: %PROJECT_DIR_IN% + ) else ( + goto :SEARCH_IDEA + ) +) else ( + goto :SEARCH_IDEA +) + +:SEARCH_IDEA +REM 优先从 WORK_DIR 向上查找,其次从当前目录查找 +if not "%WORK_DIR%"=="" ( + set "SEARCH_DIR=%WORK_DIR%" +) else ( + set "SEARCH_DIR=%cd%" +) +echo [ DEBUG ] 开始搜索,SEARCH_DIR=%SEARCH_DIR% +set "PROJECT_DIR_IN=" +:FIND_IDEA +echo [ DEBUG ] 检查: %SEARCH_DIR%\.idea +if exist "%SEARCH_DIR%\.idea" ( + set "PROJECT_DIR_IN=%SEARCH_DIR%" + echo [ DEBUG ] 找到 .idea: %PROJECT_DIR_IN% + goto :FOUND_IDEA +) +REM 获取父目录 +pushd "%SEARCH_DIR%" >nul 2>&1 +cd .. >nul 2>&1 +set "PARENT_DIR=%cd%" +popd >nul 2>&1 +echo [ DEBUG ] 父目录: %PARENT_DIR% +if "%PARENT_DIR%"=="%SEARCH_DIR%" goto :NOT_FOUND +set "SEARCH_DIR=%PARENT_DIR%" +goto FIND_IDEA +:FOUND_IDEA +:NOT_FOUND +if "%PROJECT_DIR_IN%"=="" ( + set "PROJECT_DIR_IN=%cd%" + echo [ DEBUG ] 未找到 .idea,使用当前目录: %PROJECT_DIR_IN% +) +echo [ DEBUG ] 最终 PROJECT_DIR_IN=%PROJECT_DIR_IN% + +if "%PROJECT_DIR_IN%"=="" ( + echo [ ERROR ] PROJECT_DIR_IN 为空,无法创建配置文件 + exit /b 1 +) + +set "RUN_DIR=%PROJECT_DIR_IN%\.idea\runConfigurations" +echo [ DEBUG ] RUN_DIR=%RUN_DIR% +if not exist "%RUN_DIR%" ( + echo [ DEBUG ] 创建目录: %RUN_DIR% + mkdir "%RUN_DIR%" +) + +set "DST=%RUN_DIR%\AppEntry.xml" + +REM 计算实际路径(IDEA 不会展开环境变量) +if "%WORK_DIR%"=="" ( + echo [ R2MO ] 错误: 缺少 WORK_DIR 环境变量 + echo [ R2MO ] 请先运行菜单 1 设置 WORK_DIR,菜单 2 设置实例 + exit /b 1 +) +if "%INSTANCE_NAME%"=="" ( + echo [ R2MO ] 错误: 缺少 INSTANCE_NAME 环境变量 + echo [ R2MO ] 请先运行菜单 1 设置 WORK_DIR,菜单 2 设置实例 + exit /b 1 +) + +set "WD_REAL=%WORK_DIR%\instance\%INSTANCE_NAME%\conf" +set "ENV_REAL=%WD_REAL%\.env.development" + +>"%DST%" echo ^ +>>"%DST%" echo ^ +>>"%DST%" echo ^