start.sh 3.9 KB
#!/bin/bash

# 绿纤美业ERP工资核算服务启动脚本
# 支持Windows、Linux、CentOS等操作系统

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
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"
}

log_debug() {
    echo -e "${BLUE}[DEBUG]${NC} $1"
}

# 检查.NET 6是否安装
check_dotnet() {
    if ! command -v dotnet &> /dev/null; then
        log_error ".NET 6 未安装,请先安装 .NET 6 SDK"
        log_info "下载地址: https://dotnet.microsoft.com/download/dotnet/6.0"
        exit 1
    fi
    
    local dotnet_version=$(dotnet --version)
    log_info "检测到 .NET 版本: $dotnet_version"
    
    if [[ ! "$dotnet_version" =~ ^6\. ]]; then
        log_warn "建议使用 .NET 6.0 版本"
    fi
}

# 检查配置文件
check_config() {
    if [ ! -f "appsettings.json" ]; then
        log_error "配置文件 appsettings.json 不存在"
        exit 1
    fi
    log_info "配置文件检查通过"
}

# 创建必要目录
create_directories() {
    log_info "创建必要目录..."
    mkdir -p logs output backup
    log_info "目录创建完成"
}

# 还原NuGet包
restore_packages() {
    log_info "还原NuGet包..."
    dotnet restore
    if [ $? -eq 0 ]; then
        log_info "NuGet包还原成功"
    else
        log_error "NuGet包还原失败"
        exit 1
    fi
}

# 构建项目
build_project() {
    log_info "构建项目..."
    dotnet build -c Release
    if [ $? -eq 0 ]; then
        log_info "项目构建成功"
    else
        log_error "项目构建失败"
        exit 1
    fi
}

# 运行服务
run_service() {
    local month=${1:-$(date +%Y-%m)}
    log_info "启动工资核算服务,计算月份: $month"
    
    # 检查参数
    if [ $# -eq 0 ]; then
        log_warn "未指定计算月份,使用当前月份: $month"
        log_info "使用方法: $0 [YYYY-MM]"
        log_info "示例: $0 2024-09"
    fi
    
    # 运行服务
    dotnet run --configuration Release -- $month
}

# 显示帮助信息
show_help() {
    echo "绿纤美业ERP工资核算服务"
    echo ""
    echo "使用方法:"
    echo "  $0 [月份]             运行工资核算服务"
    echo "  $0 --help, -h         显示帮助信息"
    echo "  $0 --version, -v      显示版本信息"
    echo "  $0 --build            仅构建项目"
    echo "  $0 --clean            清理构建文件"
    echo ""
    echo "参数:"
    echo "  月份                  计算月份,格式: YYYY-MM (例如: 2024-09)"
    echo ""
    echo "示例:"
    echo "  $0 2024-09           计算2024年9月工资"
    echo "  $0                   计算当前月份工资"
    echo ""
    echo "环境要求:"
    echo "  - .NET 6.0 SDK"
    echo "  - MySQL数据库连接"
    echo "  - 网络连接"
}

# 显示版本信息
show_version() {
    echo "绿纤美业ERP工资核算服务 v1.0.0"
    echo "构建时间: $(date)"
    echo ".NET版本: $(dotnet --version)"
}

# 清理构建文件
clean_project() {
    log_info "清理构建文件..."
    dotnet clean
    rm -rf bin obj
    log_info "清理完成"
}

# 主函数
main() {
    case "${1:-}" in
        --help|-h)
            show_help
            exit 0
            ;;
        --version|-v)
            show_version
            exit 0
            ;;
        --build)
            check_dotnet
            check_config
            create_directories
            restore_packages
            build_project
            log_info "构建完成"
            exit 0
            ;;
        --clean)
            clean_project
            exit 0
            ;;
        *)
            check_dotnet
            check_config
            create_directories
            restore_packages
            build_project
            run_service "$@"
            ;;
    esac
}

# 执行主函数
main "$@"