Files
qnc-server-v3/deploy/script/gen_models.ps1

132 lines
4.5 KiB
PowerShell
Raw Normal View History

2025-12-13 17:44:18 +08:00
# 设置输出编码为UTF-8
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
chcp.com 65001 | Out-Null
# 目录配置
$OUTPUT_DIR = "./model"
$TARGET_DIR = "../../app/main/model"
$HOME_DIR = Join-Path $PSScriptRoot "..\template"
# 表名列表
$tables = @(
# ============================================
# 新代理系统表
# ============================================
# "admin_api",
# "admin_dict_data",
# "admin_dict_type",
# "admin_menu",
# "admin_promotion_link",
# "admin_promotion_link_stats_history",
# "admin_promotion_link_stats_total",
# "admin_promotion_order",
# "admin_role",
# "admin_role_api",
# "admin_role_menu",
# "admin_user",
# "admin_user_role",
# "agent",
# "agent_commission",
"agent_config"
# "agent_freeze_task",
# "agent_invite_code",
# "agent_invite_code_usage",
# "agent_link",
# "agent_order",
# "agent_product_config",
# "agent_real_name",
# "agent_rebate",
# "agent_relation",
# "agent_short_link",
# "agent_upgrade",
# "agent_wallet",
# "agent_withdrawal",
# "agent_withdrawal_tax",
# "authorization_document",
# "example",
# "feature",
# "global_notifications",
# "order",
# "order_refund",
# "product",
# "product_feature",
# "query",
# "query_cleanup_config",
# "query_cleanup_detail",
# "query_cleanup_log",
# "user",
# "user_auth"
)
# 为每个表生成模型
foreach ($table in $tables) {
Write-Host "正在生成表: $table" -ForegroundColor Green
goctl model mysql datasource -url="qnc:5vg67b3UNHu8@tcp(127.0.0.1:21001)/qnc" -table="$table" -dir="./model" --home="$HOME_DIR" -cache=true --style=goZero
# 移动生成的文件到目标目录
if (Test-Path $OUTPUT_DIR) {
$sourceFiles = Get-ChildItem -Path $OUTPUT_DIR -File
foreach ($file in $sourceFiles) {
$fileName = $file.Name
$targetPath = Join-Path $TARGET_DIR $fileName
$sourcePath = $file.FullName
# 检查文件类型并决定是否移动
$shouldMove = $false
$shouldOverwrite = $false
if ($fileName -eq "vars.go") {
# vars.go: 如果目标目录不存在才移动
if (-not (Test-Path $targetPath)) {
$shouldMove = $true
Write-Host " 移动 $fileName (vars.go 不存在于目标目录)" -ForegroundColor Yellow
}
else {
Write-Host " 跳过 $fileName (vars.go 已存在于目标目录,防止覆盖)" -ForegroundColor Cyan
}
}
elseif ($fileName -match "_gen\.go$") {
# 带 _gen 后缀的文件: 直接覆盖
$shouldMove = $true
$shouldOverwrite = $true
Write-Host " 移动 $fileName (覆盖 _gen 文件)" -ForegroundColor Yellow
}
else {
# 不带 _gen 后缀的文件: 如果目标目录不存在才移动
if (-not (Test-Path $targetPath)) {
$shouldMove = $true
Write-Host " 移动 $fileName (非 _gen 文件不存在于目标目录)" -ForegroundColor Yellow
}
else {
Write-Host " 跳过 $fileName (非 _gen 文件已存在于目标目录,防止覆盖)" -ForegroundColor Cyan
}
}
# 执行移动操作
if ($shouldMove) {
# 确保目标目录存在
if (-not (Test-Path $TARGET_DIR)) {
New-Item -ItemType Directory -Path $TARGET_DIR -Force | Out-Null
}
# 如果目标文件存在且需要覆盖,先删除
if ($shouldOverwrite -and (Test-Path $targetPath)) {
Remove-Item -Path $targetPath -Force
}
# 移动文件
Move-Item -Path $sourcePath -Destination $targetPath -Force
Write-Host " ✓ 已移动到: $targetPath" -ForegroundColor Green
}
}
}
}
Write-Host ""
Write-Host '所有模型文件生成并移动完成!' -ForegroundColor Green
if (Test-Path $OUTPUT_DIR) {
Get-ChildItem -Path $OUTPUT_DIR -File | Remove-Item -Force
}