fundplatform/scripts/dev-start.sh
zhangjf cc6577b3df feat: 新增本地开发启动脚本及各模块代码优化
- 新增 scripts/dev-start.sh: 本地开发环境启动脚本,支持启动所有/核心/单个服务
- 新增 scripts/dev-stop.sh: 本地开发环境停止脚本
- 新增 scripts/dev-status.sh: 服务状态检查脚本
- 优化各模块 Controller/Service/VO/DTO 代码
- 删除过时的计划文件
2026-03-02 22:46:31 +08:00

324 lines
8.4 KiB
Bash
Executable File
Raw Permalink 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
# ============================================
# 本地开发环境启动脚本
# 用法: ./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