
    j                        d dl mZmZ d dlmZ d dlmZmZ dedede	fdZ
dedefd	Zdefd
Zdee         fdZ	 	 ddededee         fdZddedee         fdZdee         fdZdee         fdZdee         fdZdS )    )build_age_exists_clauseget_age_filter_threshold)logger)	query_all	query_oneschematablereturnc                     d}	 t          t          || |d                    S # t          $ r"}t          j        d| ||           Y d }~dS d }~ww xY w)Nz
        SELECT 1 AS exists
        FROM information_schema.tables
        WHERE table_schema = %(s)s
          AND table_name = %(t)s
        LIMIT 1
    )stz-Distribution table probe failed for %s.%s: %sF)boolr   	Exceptionr   warning)r   r	   sqlexcs       Q/home/longshao/multi-rider-rag/modules/dashboard/services/distribution_service.py_table_existsr      ss    CIce#<#<==>>>   FPUWZ[[[uuuuus   $ 
AAA
age_clausec                     d|  dS )Nz
        SELECT a."ajxx_ay" AS label,
               COUNT(DISTINCT a."ajxx_ajbh") AS value
        FROM "ywdata"."zq_zfba_ajxx" a
        WHERE a."ajxx_ay" IS NOT NULL
          zO
        GROUP BY a."ajxx_ay"
        ORDER BY value DESC
        LIMIT 10
     )r   s    r   _case_type_sqlr      s     	
 	 	 	 	    c                     t                      dk    rt          t          d                    ddS t          t          t          dd                              } | r| ddS t          t          d                    ddS )Nr    F)itemsdegradedaxT)r   r   r   r   )rowss    r   get_case_type_distributionr!   "   s    !!Q&&">"#5#566EJJJ^$;C$E$EFFGGD 25111~b1122EEEr   c                  $    d} t          |           S )Nz
        SELECT risk_level AS label, COUNT(*) AS value
        FROM "jcgkzx_monitor"."wcnr_score"
        WHERE risk_level IS NOT NULL
        GROUP BY risk_level
        ORDER BY value DESC
    r   r   s    r   get_risk_level_distributionr%   ,       C S>>r   
risk_count
   metriclimitc                 ^    | dk    rd}t          |d|i          S d}t          |d|i          S )N
case_counta-  
            SELECT a."ajxx_cbdw_mc" AS label,
                   COUNT(DISTINCT a."ajxx_ajbh") AS value
            FROM "ywdata"."zq_zfba_ajxx" a
            WHERE a."ajxx_cbdw_mc" IS NOT NULL
            GROUP BY a."ajxx_cbdw_mc"
            ORDER BY value DESC
            LIMIT %(limit)s
        r*   az  
        SELECT
            p.ssfj AS label,
            COUNT(*) AS value
        FROM "jcgkzx_monitor"."wcnr_score" s
        JOIN "jcgkzx_monitor"."wcnr_target_pool" p ON p.zjhm = s.zjhm
        WHERE s.total_score >= 60
          AND p.ssfj IS NOT NULL
          AND BTRIM(p.ssfj) <> ''
        GROUP BY p.ssfj
        ORDER BY value DESC, label
        LIMIT %(limit)s
    r#   )r)   r*   r   s      r   get_area_distributionr-   7   sK      w.///C S7E*+++r   c                 R    | dk    rd}t          |          S d}t          |          S )Nr,   a  
            SELECT sfz."yxx" AS label,
                   COUNT(DISTINCT a."ajxx_ajbh") AS value
            FROM "ywdata"."zq_zfba_ajxx" a
            JOIN "ywdata"."zq_zfba_xyrxx" x
              ON x."ajxx_join_ajxx_ajbh" = a."ajxx_ajbh"
            JOIN "ywdata"."zq_zfba_wcnr_sfzxx" sfz
              ON sfz."sfzhm" = x."xyrxx_sfzh"
            WHERE sfz."yxx" IS NOT NULL
            GROUP BY sfz."yxx"
            ORDER BY value DESC
            LIMIT 10
        ac  
        SELECT sfz."yxx" AS label,
               COUNT(DISTINCT s.zjhm) AS value
        FROM "jcgkzx_monitor"."wcnr_score" s
        JOIN "ywdata"."zq_zfba_wcnr_sfzxx" sfz
          ON sfz."sfzhm" = s.zjhm
        WHERE s.total_score >= 60
          AND sfz."yxx" IS NOT NULL
        GROUP BY sfz."yxx"
        ORDER BY value DESC
        LIMIT 10
    r#   )r)   r   s     r   get_school_rankingr/   W   s7     ~~C S>>r   c                      d} t          |           }|r|S t          j        dt          |                     d}t          |          S )Nu  
        SELECT
            CASE
                WHEN EXTRACT(YEAR FROM AGE(CURRENT_DATE, csrq::DATE)) < 14 THEN '14岁以下'
                WHEN EXTRACT(YEAR FROM AGE(CURRENT_DATE, csrq::DATE)) < 16 THEN '14-16岁'
                ELSE '16-18岁'
            END AS label,
            COUNT(*) AS value
        FROM "jcgkzx_monitor"."wcnr_target_pool"
        WHERE csrq IS NOT NULL AND LENGTH(csrq) >= 8
        GROUP BY label
        ORDER BY label
    z=Age distribution fallback triggered, primary returned %d rowsu   
        SELECT
            CASE
                WHEN EXTRACT(YEAR FROM AGE(CURRENT_DATE, TO_DATE(SUBSTR(zjhm, 7, 8), 'YYYYMMDD'))) < 14 THEN '14岁以下'
                WHEN EXTRACT(YEAR FROM AGE(CURRENT_DATE, TO_DATE(SUBSTR(zjhm, 7, 8), 'YYYYMMDD'))) < 16 THEN '14-16岁'
                ELSE '16-18岁'
            END AS label,
            COUNT(*) AS value
        FROM "jcgkzx_monitor"."wcnr_target_pool"
        WHERE LENGTH(zjhm) >= 14
          AND SUBSTR(zjhm, 7, 8) ~ '^[0-9]{8}$'
        GROUP BY label
        ORDER BY label
    )r   r   infolen)r   r    fallback_sqls      r   get_age_distributionr4   w   sW    C S>>D 
KOQTUYQZQZ[[[L \"""r   c                  $    d} t          |           S )Nu   
        SELECT
            CASE WHEN xb = '男' THEN '男' WHEN xb = '女' THEN '女' ELSE '未知' END AS label,
            COUNT(*) AS value
        FROM "jcgkzx_monitor"."wcnr_target_pool"
        GROUP BY label
    r#   r$   s    r   get_gender_distributionr6      r&   r   c                  $    d} t          |           S )Nz
        SELECT source_type AS label, COUNT(*) AS value
        FROM "jcgkzx_monitor"."wcnr_target_pool"
        GROUP BY source_type
        ORDER BY value DESC
    r#   r$   s    r   get_source_distributionr8      s    C S>>r   N)r'   r(   )r'   )shared.age_filterr   r   shared.config.configr   shared.db.kingbaser   r   strr   r   r   dictr!   listr%   intr-   r/   r4   r6   r8   r   r   r   <module>r@      s   O O O O O O O O ' ' ' ' ' ' 3 3 3 3 3 3 3 3# c d    
s 
s 
 
 
 
FD F F F FT$Z     , ,,, 
$Z, , , ,@ s d4j    @!#d4j !# !# !# !#Hd    d      r   