Поправили функцию для возвращения номера

This commit is contained in:
MpakobecEx 2026-05-27 23:46:34 +05:00
parent 80d446443c
commit f43caa7489
1 changed files with 19 additions and 9 deletions

View File

@ -50,29 +50,39 @@ def add_record(record_type: str, phone: str = None, qr_code: str = None, qr_data
def get_random_record(): def get_random_record():
"""Возвращает случайную запись""" """Возвращает случайную запись из тех, у кого минимальный usage_count (с ограничением выборки)"""
with sqlite3.connect(DB_NAME) as conn: with sqlite3.connect(DB_NAME) as conn:
conn.row_factory = sqlite3.Row conn.row_factory = sqlite3.Row
# Общее количество записей
total_count = conn.execute("SELECT COUNT(*) as count FROM records").fetchone()["count"] total_count = conn.execute("SELECT COUNT(*) as count FROM records").fetchone()["count"]
if total_count == 0:
return None
# Определяем лимит для выборки
if total_count <= 50: if total_count <= 50:
limit = 10 limit = 10
else: else:
limit = max(10, min(50, int(total_count * 0.2))) limit = max(10, min(50, int(total_count * 0.2)))
oldest = conn.execute(""" # Находим минимальный usage_count
SELECT *, COALESCE(used_at, created_at) as sort_date min_usage = conn.execute("SELECT MIN(usage_count) as min_usage FROM records").fetchone()["min_usage"]
FROM records
ORDER BY sort_date ASC
LIMIT ?
""", (limit,)).fetchall()
if not oldest: # Берём записи с минимальным usage_count, но не больше limit
candidates = conn.execute("""
SELECT * FROM records
WHERE usage_count = ?
LIMIT ?
""", (min_usage, limit)).fetchall()
if not candidates:
return None return None
selected = random.choice(oldest) # Из них выбираем случайную
selected = random.choice(candidates)
# Обновляем счётчик и дату использования
conn.execute(""" conn.execute("""
UPDATE records SET usage_count = usage_count + 1, used_at = ? UPDATE records SET usage_count = usage_count + 1, used_at = ?
WHERE id = ? WHERE id = ?