elder-yudao-pro/deploy/local/initialize-health.ps1

34 lines
4.8 KiB
PowerShell
Raw Permalink Normal View History

param([string]$SecretsFile = (Join-Path $PSScriptRoot 'secrets.psd1'))
. (Join-Path $PSScriptRoot 'common.ps1')
$healthSettings = Read-LocalSettings $SecretsFile
$databaseName = $healthSettings.DatabaseName
# 只操作已有的独立本地数据库,基础 system/infra 应已经初始化。
Invoke-LocalMySql $healthSettings 'SELECT 1 FROM system_users LIMIT 1;' $databaseName | Out-Null
$memberExists = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME='member_user';")[0]
if ($memberExists -gt 0) {
$uniqueIndex = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME='member_user' AND INDEX_NAME='uk_member_mobile_tenant' AND NON_UNIQUE=0;")[0]
if ($uniqueIndex -ne 2) {
throw 'Existing member_user lacks the verified tenant/mobile unique index. Review duplicates and the existing schema before adding it; this initializer will not rewrite an existing table.'
}
}
foreach ($fileName in @('V000__member_schema.sql', 'V001__health_identity.sql', 'V002__health_menu.sql', 'V003__health_elderly_basic_info.sql', 'V004__health_elderly_social_info.sql', 'V005__health_collection_draft.sql', 'V006__health_social_support.sql', 'V007__health_elderly_collection_remaining.sql')) {
$sqlPath = Join-Path $repoPath "mysql_script/health/$fileName"
$sql = Get-Content -LiteralPath $sqlPath -Raw -Encoding UTF8
if ($sql -match '(?im)^\s*(DROP\s|TRUNCATE\s|DELETE\s|UPDATE\s|ALTER\s|USE\s|CREATE\s+DATABASE\s)') {
throw "Unexpected destructive or modifying statement in $fileName. Review it before applying."
}
$sourcePath = $sqlPath.Replace('\', '/')
Invoke-LocalMySql $healthSettings "SOURCE $sourcePath;" $databaseName | Out-Null
Write-Output "Applied $fileName (existing rows preserved)."
}
Invoke-LocalMySql $healthSettings "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME LIKE 'health_%' ORDER BY table_name;" $databaseName
$healthTableCount = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME IN ('health_identity','health_elderly_profile','health_volunteer_profile','health_family_relation');")[0]
$healthPermissionCount = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM system_menu WHERE permission IN ('health:identity:query','health:identity:create','health:identity:update','health:identity:audit','health:identity:update-status','health:family-relation:query','health:family-relation:create','health:family-relation:review','health:family-relation:revoke') AND deleted=b'0';" $databaseName)[0]
$basicInfoColumnCount = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='$databaseName' AND ((TABLE_NAME='health_identity' AND COLUMN_NAME IN ('id_card','ethnicity','has_wechat')) OR (TABLE_NAME='health_elderly_profile' AND COLUMN_NAME IN ('collection_step','special_case')));")[0]
$socialColumnCount = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME='health_elderly_profile' AND COLUMN_NAME IN ('marital_status','native_place','residence_area','residence_address','residence_type','living_status','household_type','education_level','occupation','elderly_university');")[0]
$supportTableCount = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME IN ('health_collection_draft','health_region_altitude','health_elderly_spouse');")[0]
$remainingColumnCount = [int]@(Invoke-LocalMySql $healthSettings "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='$databaseName' AND TABLE_NAME='health_elderly_profile' AND COLUMN_NAME IN ('insurance_type','income_range','medical_insurance_number','care_level','disabled','disability_type','disability_reason','chronic_disease_status','chronic_diseases','father_alive','mother_alive','father_death_reason','mother_death_reason','father_death_reason_detail','mother_death_reason_detail','emergency_contacts','collector_id','collector_type','collect_time','collection_completed_time','consent_confirmed','consent_confirm_time','consent_collector_id');")[0]
if ($healthTableCount -ne 4 -or $healthPermissionCount -ne 9 -or $basicInfoColumnCount -ne 5 -or $socialColumnCount -ne 10 -or $supportTableCount -ne 3 -or $remainingColumnCount -ne 23) { throw "Health schema or menus were not initialized completely (step-one: $basicInfoColumnCount, step-two: $socialColumnCount, support tables: $supportTableCount, remaining collection columns: $remainingColumnCount)." }
Write-Output 'Health schema and menus are ready. Reload Maven and restart your IDEA backend/frontend to load the new code.'