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()
|