Files
aiform_dev/backend/app/services/policy_service.py
AI Assistant 8b0bd156bb fix: Перезапуск платформы - исправлены зависимости и TypeScript ошибки
- Исправлены TypeScript ошибки в Step3Payment.tsx (типизация, неиспользуемые импорты)
- Добавлены недостающие зависимости: aiomysql, pymysql, python-multipart
- Обновлен requirements.txt с актуальными версиями
- Добавлены новые API endpoints: policy check, file upload
- Добавлен policy_service для работы с MySQL
- Все сервисы успешно запущены и работают
- Обновлен SESSION_LOG с документацией процесса
2025-10-24 20:27:10 +03:00

90 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Policy Service - Проверка полисов в MySQL БД
"""
import aiomysql
from typing import Optional, Dict, Any
from ..config import settings
import logging
logger = logging.getLogger(__name__)
class PolicyService:
"""Сервис для проверки полисов ERV"""
def __init__(self):
self.pool: Optional[aiomysql.Pool] = None
async def connect(self):
"""Подключение к MySQL БД с полисами"""
try:
# Используем credentials из .env через settings
self.pool = await aiomysql.create_pool(
host=settings.mysql_host,
port=settings.mysql_port,
user=settings.mysql_user,
password=settings.mysql_password,
db=settings.mysql_db,
autocommit=True,
minsize=1,
maxsize=5
)
logger.info(f"✅ MySQL Policy DB connected: {settings.mysql_host}/{settings.mysql_db}")
except Exception as e:
logger.error(f"❌ MySQL Policy DB connection error: {e}")
raise
async def check_policy(self, voucher: str, inn: Optional[str] = None) -> Optional[Dict[str, Any]]:
"""
Проверить полис в БД
Args:
voucher: Номер полиса
inn: ИНН (опционально)
Returns:
Dict с данными полиса или None если не найден
"""
if not self.pool:
await self.connect()
try:
async with self.pool.acquire() as conn:
async with conn.cursor(aiomysql.DictCursor) as cursor:
# Базовый запрос
query = "SELECT * FROM erv_vouchers WHERE voucher = %s"
params = [voucher]
# Если указан ИНН, добавляем проверку
if inn:
query += " AND inn = %s"
params.append(inn)
query += " LIMIT 1"
await cursor.execute(query, params)
result = await cursor.fetchone()
if result:
logger.info(f"✅ Policy found: {voucher}")
return dict(result)
else:
logger.warning(f"⚠️ Policy not found: {voucher}")
return None
except Exception as e:
logger.error(f"Error checking policy: {e}")
return None
async def close(self):
"""Закрыть пул подключений"""
if self.pool:
self.pool.close()
await self.pool.wait_closed()
logger.info("MySQL Policy DB pool closed")
# Глобальный экземпляр
policy_service = PolicyService()