- 新增 scripts/dev-start.sh: 本地开发环境启动脚本,支持启动所有/核心/单个服务 - 新增 scripts/dev-stop.sh: 本地开发环境停止脚本 - 新增 scripts/dev-status.sh: 服务状态检查脚本 - 优化各模块 Controller/Service/VO/DTO 代码 - 删除过时的计划文件
324 lines
8.4 KiB
Bash
Executable File
324 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
||
# ============================================
|
||
# 本地开发环境启动脚本
|
||
# 用法: ./dev-start.sh [选项]
|
||
# 选项:
|
||
# all - 启动所有服务(默认)
|
||
# core - 启动核心服务(gateway + sys + frontend)
|
||
# gateway - 仅启动网关
|
||
# sys - 仅启动系统服务
|
||
# cust - 仅启动客户服务
|
||
# proj - 仅启动项目服务
|
||
# req - 仅启动需求服务
|
||
# exp - 仅启动支出服务
|
||
# receipt - 仅启动票据服务
|
||
# file - 仅启动文件服务
|
||
# report - 仅启动报表服务
|
||
# frontend - 仅启动前端
|
||
# help - 显示帮助信息
|
||
# ============================================
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
APP_HOME="$(dirname "$SCRIPT_DIR")"
|
||
LOG_DIR="${APP_HOME}/logs"
|
||
|
||
# 创建日志目录
|
||
mkdir -p "${LOG_DIR}"
|
||
|
||
# 服务端口配置
|
||
GATEWAY_PORT=8000
|
||
SYS_PORT=8100
|
||
CUST_PORT=8110
|
||
PROJ_PORT=8120
|
||
REQ_PORT=8130
|
||
EXP_PORT=8140
|
||
RECEIPT_PORT=8150
|
||
FILE_PORT=8600
|
||
REPORT_PORT=8700
|
||
FRONTEND_PORT=3000
|
||
|
||
# 颜色输出
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
log_info() {
|
||
echo -e "${GREEN}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_warn() {
|
||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# 检查端口是否被占用
|
||
check_port() {
|
||
local port=$1
|
||
if netstat -tlnp 2>/dev/null | grep -q ":${port} "; then
|
||
return 0 # 端口被占用
|
||
fi
|
||
return 1 # 端口空闲
|
||
}
|
||
|
||
# 通用服务启动函数
|
||
# 参数: $1=服务名, $2=模块名, $3=端口, $4=主类名
|
||
start_service() {
|
||
local name=$1
|
||
local module=$2
|
||
local port=$3
|
||
local main_class=$4
|
||
|
||
log_info "启动 ${name} 服务 (端口: ${port})..."
|
||
|
||
if check_port ${port}; then
|
||
log_warn "端口 ${port} 已被占用,跳过 ${name} 启动"
|
||
return 0
|
||
fi
|
||
|
||
cd "${APP_HOME}"
|
||
nohup mvn -pl ${module} exec:java \
|
||
-Dexec.mainClass="${main_class}" \
|
||
> "${LOG_DIR}/${name}-console.log" 2>&1 &
|
||
|
||
local pid=$!
|
||
echo ${pid} > "${LOG_DIR}/${name}.pid"
|
||
log_info "${name} 启动中... PID: ${pid}"
|
||
|
||
# 等待启动完成
|
||
sleep 3
|
||
if check_port ${port}; then
|
||
log_info "${name} 启动成功!"
|
||
else
|
||
log_warn "${name} 可能还在启动中,请检查日志: ${LOG_DIR}/${name}-console.log"
|
||
fi
|
||
}
|
||
|
||
# 启动网关服务
|
||
start_gateway() {
|
||
start_service "gateway" "fund-gateway" ${GATEWAY_PORT} "com.fundplatform.gateway.GatewayApplication"
|
||
}
|
||
|
||
# 启动系统服务
|
||
start_sys() {
|
||
start_service "sys" "fund-sys" ${SYS_PORT} "com.fundplatform.sys.SysApplication"
|
||
}
|
||
|
||
# 启动客户服务
|
||
start_cust() {
|
||
start_service "cust" "fund-cust" ${CUST_PORT} "com.fundplatform.cust.CustApplication"
|
||
}
|
||
|
||
# 启动项目服务
|
||
start_proj() {
|
||
start_service "proj" "fund-proj" ${PROJ_PORT} "com.fundplatform.proj.ProjApplication"
|
||
}
|
||
|
||
# 启动需求服务
|
||
start_req() {
|
||
start_service "req" "fund-req" ${REQ_PORT} "com.fundplatform.req.ReqApplication"
|
||
}
|
||
|
||
# 启动支出服务
|
||
start_exp() {
|
||
start_service "exp" "fund-exp" ${EXP_PORT} "com.fundplatform.exp.ExpApplication"
|
||
}
|
||
|
||
# 启动票据服务
|
||
start_receipt() {
|
||
start_service "receipt" "fund-receipt" ${RECEIPT_PORT} "com.fundplatform.receipt.ReceiptApplication"
|
||
}
|
||
|
||
# 启动文件服务
|
||
start_file() {
|
||
start_service "file" "fund-file" ${FILE_PORT} "com.fundplatform.file.FileApplication"
|
||
}
|
||
|
||
# 启动报表服务
|
||
start_report() {
|
||
start_service "report" "fund-report" ${REPORT_PORT} "com.fundplatform.report.ReportApplication"
|
||
}
|
||
|
||
# 启动前端服务
|
||
start_frontend() {
|
||
log_info "启动管理后台前端 (端口: ${FRONTEND_PORT})..."
|
||
|
||
cd "${APP_HOME}/fund-admin"
|
||
|
||
# 检查 node_modules 是否存在
|
||
if [ ! -d "node_modules" ]; then
|
||
log_info "安装前端依赖..."
|
||
npm install
|
||
fi
|
||
|
||
# 查找可用端口
|
||
local port=${FRONTEND_PORT}
|
||
while check_port ${port}; do
|
||
port=$((port + 1))
|
||
if [ ${port} -gt 3010 ]; then
|
||
log_error "无法找到可用端口 (3000-3010)"
|
||
return 1
|
||
fi
|
||
done
|
||
|
||
if [ ${port} -ne ${FRONTEND_PORT} ]; then
|
||
log_warn "端口 ${FRONTEND_PORT} 已被占用,使用端口 ${port}"
|
||
fi
|
||
|
||
nohup npm run dev -- --port ${port} --host 0.0.0.0 \
|
||
> "${LOG_DIR}/frontend-console.log" 2>&1 &
|
||
|
||
local pid=$!
|
||
echo ${pid} > "${LOG_DIR}/frontend.pid"
|
||
log_info "前端启动中... PID: ${pid}"
|
||
|
||
sleep 3
|
||
log_info "前端启动成功!访问地址: http://localhost:${port}"
|
||
}
|
||
|
||
# 启动核心服务
|
||
start_core() {
|
||
log_info "=========================================="
|
||
log_info "启动核心服务..."
|
||
log_info "=========================================="
|
||
|
||
start_gateway
|
||
start_sys
|
||
start_frontend
|
||
|
||
log_info "=========================================="
|
||
log_info "核心服务启动完成!"
|
||
log_info "=========================================="
|
||
}
|
||
|
||
# 启动所有服务
|
||
start_all() {
|
||
log_info "=========================================="
|
||
log_info "启动本地开发环境(全部服务)..."
|
||
log_info "=========================================="
|
||
|
||
# 检查 Nacos
|
||
if ! check_port 8848; then
|
||
log_warn "Nacos (端口8848) 未运行,部分服务可能启动失败"
|
||
log_warn "请先启动 Nacos 服务"
|
||
fi
|
||
|
||
# 检查 MySQL
|
||
if ! check_port 3306; then
|
||
log_warn "MySQL (端口3306) 未运行,数据库相关服务将启动失败"
|
||
log_warn "请先启动 MySQL 服务"
|
||
fi
|
||
|
||
start_gateway
|
||
start_sys
|
||
start_cust
|
||
start_proj
|
||
start_req
|
||
start_exp
|
||
start_receipt
|
||
start_file
|
||
start_report
|
||
start_frontend
|
||
|
||
log_info "=========================================="
|
||
log_info "本地开发环境启动完成!"
|
||
log_info "=========================================="
|
||
echo ""
|
||
echo "服务地址:"
|
||
echo " 网关: http://localhost:${GATEWAY_PORT}"
|
||
echo " 系统: http://localhost:${SYS_PORT}"
|
||
echo " 客户: http://localhost:${CUST_PORT}"
|
||
echo " 项目: http://localhost:${PROJ_PORT}"
|
||
echo " 需求: http://localhost:${REQ_PORT}"
|
||
echo " 支出: http://localhost:${EXP_PORT}"
|
||
echo " 票据: http://localhost:${RECEIPT_PORT}"
|
||
echo " 文件: http://localhost:${FILE_PORT}"
|
||
echo " 报表: http://localhost:${REPORT_PORT}"
|
||
echo " 前端: http://localhost:${FRONTEND_PORT} (或查看日志获取实际端口)"
|
||
echo ""
|
||
echo "日志目录: ${LOG_DIR}"
|
||
echo "停止服务: ./scripts/dev-stop.sh"
|
||
}
|
||
|
||
# 显示帮助
|
||
show_help() {
|
||
echo "用法: $0 [选项]"
|
||
echo ""
|
||
echo "选项:"
|
||
echo " all 启动所有服务(默认)"
|
||
echo " core 启动核心服务(gateway + sys + frontend)"
|
||
echo " gateway 仅启动网关服务"
|
||
echo " sys 仅启动系统服务"
|
||
echo " cust 仅启动客户服务"
|
||
echo " proj 仅启动项目服务"
|
||
echo " req 仅启动需求服务"
|
||
echo " exp 仅启动支出服务"
|
||
echo " receipt 仅启动票据服务"
|
||
echo " file 仅启动文件服务"
|
||
echo " report 仅启动报表服务"
|
||
echo " frontend 仅启动前端服务"
|
||
echo " help 显示此帮助信息"
|
||
echo ""
|
||
echo "服务端口:"
|
||
echo " gateway: ${GATEWAY_PORT} | sys: ${SYS_PORT} | cust: ${CUST_PORT}"
|
||
echo " proj: ${PROJ_PORT} | req: ${REQ_PORT} | exp: ${EXP_PORT}"
|
||
echo " receipt: ${RECEIPT_PORT} | file: ${FILE_PORT} | report: ${REPORT_PORT}"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 # 启动所有服务"
|
||
echo " $0 core # 启动核心服务(网关+系统+前端)"
|
||
echo " $0 sys cust # 启动系统和客户服务"
|
||
echo " $0 frontend # 仅启动前端"
|
||
}
|
||
|
||
# 主入口
|
||
case "$1" in
|
||
gateway)
|
||
start_gateway
|
||
;;
|
||
sys)
|
||
start_sys
|
||
;;
|
||
cust)
|
||
start_cust
|
||
;;
|
||
proj)
|
||
start_proj
|
||
;;
|
||
req)
|
||
start_req
|
||
;;
|
||
exp)
|
||
start_exp
|
||
;;
|
||
receipt)
|
||
start_receipt
|
||
;;
|
||
file)
|
||
start_file
|
||
;;
|
||
report)
|
||
start_report
|
||
;;
|
||
frontend)
|
||
start_frontend
|
||
;;
|
||
core)
|
||
start_core
|
||
;;
|
||
help|--help|-h)
|
||
show_help
|
||
;;
|
||
all|"")
|
||
start_all
|
||
;;
|
||
*)
|
||
log_error "未知选项: $1"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|