data_service.py 2.27 KB
"""
数据获取服务
从 MySQL 数据库查询库销比等数据
"""

import logging
from typing import List, Optional
from datetime import date
from decimal import Decimal

from .db import get_connection
from ..models import PartRatio

logger = logging.getLogger(__name__)


class DataService:
    """数据服务"""

    def __init__(self):
        self._conn = None

    def _get_connection(self):
        """获取数据库连接"""
        if self._conn is None or not self._conn.is_connected():
            self._conn = get_connection()
        return self._conn

    def close(self):
        """关闭连接"""
        if self._conn and self._conn.is_connected():
            self._conn.close()
            self._conn = None



    def get_dealer_groupings(self, group_id: int) -> List[dict]:
        """
        获取商家组合列表
        
        Returns:
            [{"id": 1, "name": "商家组合A", "dealer_ids": [1, 2, 3]}]
        """
        conn = self._get_connection()
        cursor = conn.cursor(dictionary=True)

        try:
            sql = """
                SELECT id, region_name as name, auth_dealers
                FROM artificial_region_dealer
                WHERE group_id = %s
            """
            cursor.execute(sql, [group_id])
            rows = cursor.fetchall()

            result = []
            for row in rows:
                dealer_ids = []
                if row.get("auth_dealers"):
                    try:
                        import json
                        dealers = json.loads(row["auth_dealers"])
                        if isinstance(dealers, list):
                            if dealers and isinstance(dealers[0], dict):
                                dealer_ids = [d.get("dealerId") for d in dealers if d.get("dealerId")]
                            else:
                                dealer_ids = [int(d) for d in dealers if d]
                    except:
                        pass
                result.append({
                    "id": row["id"],
                    "name": row["name"],
                    "dealer_ids": dealer_ids,
                })

            logger.info(f"查询商家组合: group_id={group_id}, count={len(result)}")
            return result

        finally:
            cursor.close()