147 lines
5.7 KiB
Python
147 lines
5.7 KiB
Python
#!/usr/bin/env python3
|
||
import os
|
||
import sys
|
||
import django
|
||
|
||
# プロジェクト設定
|
||
sys.path.append('/app')
|
||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
|
||
django.setup()
|
||
|
||
from django.db import connection, transaction
|
||
import logging
|
||
|
||
# ログ設定
|
||
logging.basicConfig(level=logging.INFO)
|
||
logger = logging.getLogger(__name__)
|
||
|
||
def assign_zekken_numbers_to_fc_gifu():
|
||
"""FC岐阜イベント(ID:10)のチームにゼッケン番号を割り当て"""
|
||
|
||
print("=== FC岐阜イベントチームゼッケン番号割り当て ===")
|
||
|
||
with connection.cursor() as cursor:
|
||
# 1. FC岐阜イベントの現状確認
|
||
print("\n1. FC岐阜イベント(ID:10)現状確認:")
|
||
cursor.execute("""
|
||
SELECT t.id, t.team_name, t.zekken_number, t.event_id
|
||
FROM rog_team t
|
||
JOIN rog_entry e ON t.id = e.team_id
|
||
WHERE e.event_id = 10
|
||
ORDER BY t.id;
|
||
""")
|
||
fc_teams = cursor.fetchall()
|
||
|
||
print(f" FC岐阜関連チーム数: {len(fc_teams)}")
|
||
print(" 現在の状況:")
|
||
for team in fc_teams[:5]: # 最初の5件のみ表示
|
||
print(f" Team ID:{team[0]}, Name:{team[1]}, Zekken:{team[2]}, Event:{team[3]}")
|
||
|
||
# 2. ゼッケン番号が未設定のチームを特定
|
||
teams_without_zekken = [team for team in fc_teams if not team[2]]
|
||
print(f"\n ゼッケン番号未設定チーム数: {len(teams_without_zekken)}")
|
||
|
||
if not teams_without_zekken:
|
||
print(" 🎉 すべてのチームにゼッケン番号が設定済み")
|
||
return
|
||
|
||
# 3. 既存のゼッケン番号を確認(競合回避)
|
||
print("\n2. 既存ゼッケン番号確認:")
|
||
cursor.execute("""
|
||
SELECT zekken_number
|
||
FROM rog_team
|
||
WHERE zekken_number IS NOT NULL AND zekken_number != ''
|
||
ORDER BY zekken_number;
|
||
""")
|
||
existing_zekkens = [row[0] for row in cursor.fetchall()]
|
||
print(f" 既存ゼッケン番号: {existing_zekkens}")
|
||
|
||
# 4. ユーザー確認
|
||
print(f"\n3. ゼッケン番号割り当て準備:")
|
||
print(f" 対象チーム数: {len(teams_without_zekken)}")
|
||
print(f" 割り当て予定ゼッケン番号: FC001-FC{len(teams_without_zekken):03d}")
|
||
|
||
confirm = input("\n ゼッケン番号を割り当てますか? (y/N): ")
|
||
if confirm.lower() != 'y':
|
||
print(" 処理をキャンセルしました")
|
||
return
|
||
|
||
# 5. ゼッケン番号割り当て実行
|
||
print("\n4. ゼッケン番号割り当て実行:")
|
||
with transaction.atomic():
|
||
for i, team in enumerate(teams_without_zekken, 1):
|
||
team_id = team[0]
|
||
team_name = team[1]
|
||
zekken_number = f"FC{i:03d}"
|
||
|
||
cursor.execute("""
|
||
UPDATE rog_team
|
||
SET zekken_number = %s, updated_at = NOW()
|
||
WHERE id = %s;
|
||
""", [zekken_number, team_id])
|
||
|
||
print(f" Team ID:{team_id} ({team_name}) → ゼッケン番号: {zekken_number}")
|
||
|
||
print(f"\n ✅ {len(teams_without_zekken)}チームにゼッケン番号を割り当てました")
|
||
|
||
# 6. 結果確認
|
||
print("\n5. 割り当て結果確認:")
|
||
cursor.execute("""
|
||
SELECT t.id, t.team_name, t.zekken_number
|
||
FROM rog_team t
|
||
JOIN rog_entry e ON t.id = e.team_id
|
||
WHERE e.event_id = 10 AND t.zekken_number IS NOT NULL
|
||
ORDER BY t.zekken_number;
|
||
""")
|
||
updated_teams = cursor.fetchall()
|
||
|
||
print(f" ゼッケン番号付きチーム数: {len(updated_teams)}")
|
||
print(" 割り当て結果(サンプル):")
|
||
for team in updated_teams[:10]:
|
||
print(f" {team[2]}: {team[1]} (ID:{team[0]})")
|
||
|
||
# 7. 通過審査管理画面での影響確認
|
||
print("\n6. 通過審査管理画面への影響:")
|
||
print(" これで通過審査管理画面で以下が表示されるはずです:")
|
||
print(" - ALL(全参加者)")
|
||
for team in updated_teams[:5]:
|
||
print(f" - {team[2]}({team[1]})")
|
||
print(" - ...")
|
||
|
||
def reset_zekken_numbers():
|
||
"""FC岐阜イベントのゼッケン番号をリセット(テスト用)"""
|
||
print("\n=== ゼッケン番号リセット(テスト用) ===")
|
||
|
||
with connection.cursor() as cursor:
|
||
confirm = input("FC岐阜イベントのゼッケン番号をリセットしますか? (y/N): ")
|
||
if confirm.lower() != 'y':
|
||
print("リセットをキャンセルしました")
|
||
return
|
||
|
||
with transaction.atomic():
|
||
cursor.execute("""
|
||
UPDATE rog_team
|
||
SET zekken_number = NULL, updated_at = NOW()
|
||
WHERE id IN (
|
||
SELECT DISTINCT t.id
|
||
FROM rog_team t
|
||
JOIN rog_entry e ON t.id = e.team_id
|
||
WHERE e.event_id = 10
|
||
);
|
||
""")
|
||
|
||
affected_rows = cursor.rowcount
|
||
print(f"✅ {affected_rows}チームのゼッケン番号をリセットしました")
|
||
|
||
if __name__ == "__main__":
|
||
try:
|
||
import sys
|
||
if len(sys.argv) > 1 and sys.argv[1] == '--reset':
|
||
reset_zekken_numbers()
|
||
else:
|
||
assign_zekken_numbers_to_fc_gifu()
|
||
except Exception as e:
|
||
print(f"❌ エラーが発生しました: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|