
    j                        d dl mZ d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
  G d de
          ZdddZddZddZddZe G d d                      ZdS )    )annotationsN)	dataclass)datedatetime	timedelta)AnyProtocolc                  B    e Zd ZddZddZdd
ZddZdddZdddZdS )DashboardRepositoryProtocolreturn
str | Nonec                    d S N selfs    r   /Users/bot1/Volumes/root_for_ai/AI工作区/良渚_电商数据看板_前后端分离_20260602_0257/app/service.pylatest_datez'DashboardRepositoryProtocol.latest_date
             	list[str]c                    d S r   r   r   s    r   available_datesz+DashboardRepositoryProtocol.available_dates   r   r   
start_dater   end_datelist[dict[str, Any]]c                    d S r   r   r   r   r   s      r   store_summaryz)DashboardRepositoryProtocol.store_summary   r   r   c                    d S r   r   r   s      r   trendz!DashboardRepositoryProtocol.trend   r   r      limitintc                    d S r   r   r   r   r   r#   s       r   product_rankz(DashboardRepositoryProtocol.product_rank   r   r   c                    d S r   r   r&   s       r   traffic_rankz(DashboardRepositoryProtocol.traffic_rank   r   r   N)r   r   )r   r   )r   r   r   r   r   r   )r"   )r   r   r   r   r#   r$   r   r   )	__name__
__module____qualname__r   r   r   r!   r'   r)   r   r   r   r   r   	   s^        ,,,,////ZZZZRRRRjjjjjjjjjjjjr   r   valuer   fallbackr   r   c                    | p|}|st          j                    S t          j        |d                                           S )Nz%Y-%m-%d)r   todayr   strptime)r-   r.   raws      r   parse_iso_dater3      s?    

8C z||S*--22444r   grainstrselectedtuple[date, date, str]c                   | dk    r|||                                 fS | dk    rf|t          |                                          z
  }|t          d          z   }|||                                  d|                                  fS | dk    rg|                    d          }|                    t	          j        |j        |j                  d                   }|||                    d	          fS t          d
          )Ndayweek)days   u    至 month   )r9   z%Y-%mz&grain must be one of: day, week, month)
	isoformatr   weekdayreplacecalendar
monthrangeyearr=   strftime
ValueError)r4   r6   startends       r   resolve_periodrI      s   ~~8#5#5#7#7779(*:*:*<*<====iQ''''ceoo//GGcmmooGGGG  Q ''8#6x}hn#U#UVW#XYYc8,,W5555
=
>
>>r   r   floatc                X    | | dk    rdS 	 t          |           S # t          $ r Y dS w xY w)N g        )rJ   	Exceptionr-   s    r   numberrO   '   sG    }sU||   sss    
))c                @    t          t          | pd          d          S )Nr      )roundrJ   rN   s    r   round2rS   0   s    uz""A&&&r   c                  *    e Zd ZU ded<   ddZdd
ZdS )DashboardServicer   
repositoryr   dict[str, Any]c                x    | j                                         | j                                         g ddddddS )N)r9   r:   r=   u   日u   周u   月)r   r   grainsgrain_labels)rV   r   r   r   s    r   metazDashboardService.meta8   sI    ?6688#>>@@...$)55II	
 
 	
r   r4   r5   selected_dater   c                   | j                                         }t          ||          }t          ||          \  }}}| j                             ||          }| j                             ||          }	| j                             ||d          }
| j                             ||d          }t          d |D                       }t          d |D                       }t          d |D                       }t          d |D                       }|r||z  nd}|r||z  nd}|D ]}t          |
                    d                    }t          |
                    d          p|
                    d	                    }t          |
                    d
                    }t          |          |d<   t          |          |d<   t          t          |
                    d                              |d<   |rt          ||z            nd|d<   |rt          ||z            nd|d<   |rt          ||z            nd|d<   !||                                |                                |dt          |          t          |          t          |          t          |          t          |          t          |          t          |          t          |
          d||
|dd|	idS )Nr"   c              3     K   | ];}t          |                    d           p|                    d                    V  <dS )net_payment_amountpayment_amountNrO   get.0rs     r   	<genexpr>z-DashboardService.dashboard.<locals>.<genexpr>I   sJ      ii]^&';!<!<!WFV@W@WXXiiiiiir   c              3  Z   K   | ]&}t          |                    d                     V  'dS )visitor_countNra   rc   s     r   rf   z-DashboardService.dashboard.<locals>.<genexpr>J   s6      FF!vaeeO4455FFFFFFr   c              3  Z   K   | ]&}t          |                    d                     V  'dS )page_view_countNra   rc   s     r   rf   z-DashboardService.dashboard.<locals>.<genexpr>K   s7      HHAvaee$56677HHHHHHr   c              3  Z   K   | ]&}t          |                    d                     V  'dS )payment_buyer_countNra   rc   s     r   rf   z-DashboardService.dashboard.<locals>.<genexpr>L   s7      PPA6!%%(=">">??PPPPPPr   r   rh   r_   r`   rl   rj   payment_conversion_ratecustomer_unit_pricesales_share)rG   rH   label)r_   rh   rj   rl   rm   rn   active_store_countproduct_count)storesproductstrafficr!   )r4   periodkpissectionscharts)rV   r   r3   rI   r   r!   r'   r)   sumrO   rb   rS   r?   len)r   r4   r\   latestr6   rG   rH   rp   rs   r!   rt   ru   total_salestotal_uvtotal_pvtotal_buyers
conversion	avg_orderrowuvnetbuyerss                         r   	dashboardzDashboardService.dashboard@   s   ,,..!-88*5(;;sE..uc::%%eS11?//sB??/..uc2>>iibhiiiiiFFvFFFFFHHHHHHHPPPPPPP2:AlX--
4@G[<//a	 		Q 		QC0011B!566S#''BR:S:STTCCGG$9::;;F(.sC$%#)"::C %+F377;L3M3M,N,N%O%OC!"DF-MVFRK-@-@-@AC)*AG)Nf)=)=)=QC%&>I!Pk(9!:!:!:qC  % 1 1#--//TYZZ&,[&9&9!'!1!1#)(#3#3'-l';';+1*+=+='-i'8'8&)&kk!$X	 	 $*xGTT&
 
 	
r   N)r   rW   )r4   r5   r\   r   r   rW   )r*   r+   r,   __annotations__r[   r   r   r   r   rU   rU   4   sJ         ++++
 
 
 
*
 *
 *
 *
 *
 *
r   rU   r   )r-   r   r.   r   r   r   )r4   r5   r6   r   r   r7   )r-   r   r   rJ   )r-   rJ   r   rJ   )
__future__r   rB   dataclassesr   r   r   r   typingr   r	   r   r3   rI   rO   rS   rU   r   r   r   <module>r      s-   " " " " " "  ! ! ! ! ! ! . . . . . . . . . .                k k k k k( k k k5 5 5 5 5? ? ? ?   ' ' ' ' 5
 5
 5
 5
 5
 5
 5
 5
 5
 5
r   