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

37 lines
4.1 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
set -euo pipefail
# shellcheck disable=SC1091
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
SQL_DIR="$REPO_DIR/mysql_script/health"
[[ -d "$SQL_DIR" ]] || { echo "缺少健康模块 SQL 目录: $SQL_DIR" >&2; exit 1; }
mysql_query "$ELDER_DB_NAME" 'SELECT 1 FROM system_users LIMIT 1;' >/dev/null
member_exists="$(mysql_query information_schema "SELECT COUNT(*) FROM TABLES WHERE TABLE_SCHEMA='$ELDER_DB_NAME' AND TABLE_NAME='member_user';")"
if [[ "$member_exists" != "0" ]]; then
unique_index="$(mysql_query information_schema "SELECT COUNT(*) FROM STATISTICS WHERE TABLE_SCHEMA='$ELDER_DB_NAME' AND TABLE_NAME='member_user' AND INDEX_NAME='uk_member_mobile_tenant' AND NON_UNIQUE=0;")"
if [[ "$unique_index" != "2" ]]; then
echo '现有 member_user 缺少租户/手机号唯一索引,已停止以避免改写既有表结构。' >&2
exit 1
fi
fi
for file 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; do
mysql_bin="${MYSQL_BIN:-$(command -v mysql)}"
MYSQL_PWD="$ELDER_DB_PASSWORD" "$mysql_bin" --protocol=TCP --host="$ELDER_DB_HOST" --port="$ELDER_DB_PORT" \
--user="$ELDER_DB_USER" --default-character-set=utf8mb4 "$ELDER_DB_NAME" < "$SQL_DIR/$file"
echo "已应用 $file"
done
health_table_count="$(mysql_query information_schema "SELECT COUNT(*) FROM TABLES WHERE TABLE_SCHEMA='$ELDER_DB_NAME' AND TABLE_NAME IN ('health_identity','health_elderly_profile','health_volunteer_profile','health_family_relation');")"
health_permission_count="$(mysql_query "$ELDER_DB_NAME" "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';")"
basic_info_column_count="$(mysql_query information_schema "SELECT COUNT(*) FROM COLUMNS WHERE TABLE_SCHEMA='$ELDER_DB_NAME' 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')));")"
social_column_count="$(mysql_query information_schema "SELECT COUNT(*) FROM COLUMNS WHERE TABLE_SCHEMA='$ELDER_DB_NAME' 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');")"
support_table_count="$(mysql_query information_schema "SELECT COUNT(*) FROM TABLES WHERE TABLE_SCHEMA='$ELDER_DB_NAME' AND TABLE_NAME IN ('health_collection_draft','health_region_altitude','health_elderly_spouse');")"
remaining_column_count="$(mysql_query information_schema "SELECT COUNT(*) FROM COLUMNS WHERE TABLE_SCHEMA='$ELDER_DB_NAME' 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');")"
if [[ "$health_table_count" != "4" || "$health_permission_count" != "9" || "$basic_info_column_count" != "5" || "$social_column_count" != "10" || "$support_table_count" != "3" || "$remaining_column_count" != "23" ]]; then
echo "健康模块初始化校验失败:表=$health_table_count,权限=$health_permission_count,步骤一字段=$basic_info_column_count,后续采集字段=$remaining_column_count。" >&2
exit 1
fi
echo "健康模块数据库已就绪:7 张业务表,9 个权限,完整七步采集和草稿保存已就绪。"