
    Xj*                        d dl m Z  d dlmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ  ee          Z e            Ze                    d	e
           ee           ee
          fdedede	fd            Ze                     d	e!e         
           ed           ed           ed           ed           ed d            eddd           ee          fde"dz  de"dz  de"dz  de#dz  de#de#defd            Z$e                    de!e         
           ee           ee
          fdedede	fd            Z%e                    de
           ee           ee
          fdedede	fd             Z&e                     d!e
           ed           ed           ed           ed           ed           ee          fd"e"dz  d#e"dz  d$e#dz  de"dz  de"dz  defd%            Z'e                     d&e
           ee          fd'e#defd(            Z(e)                    d)e
           ee           ee
          fd'e#d*e#dede	fd+            Z*e)                    d,e
           ee           ee
          fd'e#d-edede	fd.            Z+e                    d/e
           ee           ee
          fd'e#d0edede	fd1            Z,e                    d2           ed3           ed4           ee           ee
          fd5e!e#         d6e#d7e"dede	f
d8            Z-e                    d9           ed3           ed4           ee           ee
          fd'e#d6e#d7e"dede	f
d:            Z.e                    d;e
           ee           ee
          fd'e#d<edede	fd=            Z/dS )>    )datetime)	APIRouterDependsHTTPExceptionQuery)Session)Userget_current_user)get_db)	AnnotationCreateBatchAssignResponseBatchReviewRequestReviewAnalyticsResponse
TaskCreateTaskResponse
TaskReview
TaskUpdateWorkloadAssignRequest)get_annotation_task_manager)
get_logger/)response_modeltaskdbcurrent_userc                 &  K   t          |          }|                    | j        | j        | j        | j        | j        | j        | j        |j	        | j
        	  	        }t                              |d                                       d           |S )N)	titledescriptioncontent	task_typeprioritydeadlineassigned_to
created_bymetadataid)task_idzTask created)r   create_taskr   r   r   r    r!   r"   r#   r&   	meta_dataloggerbindinfo)r   r   r   managerresults        B/lsinfo/ai/hellotax_ai/training_center/backend/app/api/v1/tasks.pyr(   r(      s      )"--G  tzt?OY]Yequq  KO  KX  cg  cp  ~B  ~N  [g  [j  uy  uC   D  DF
KKtK%%**>:::M    N)ge2         )r1   lestatusr    r!   r#   skiplimitc                   
K   ddl m} t          |          
|r
                    ||           S |                    |                              |j                   }| r|                    |j        | k              }|r|                    |j        |k              }|r|                    |j	        |k              }|
                    |j	                                        |j                                                                      |                              |                                          }	
fd|	D             S )Nr   AnnotationTaskc                 :    g | ]}                     |          S  )_task_to_dict).0r   r-   s     r/   
<listcomp>zlist_tasks.<locals>.<listcomp>0   s'    :::DG!!$'':::r0   )
app.modelsr;   r   get_tasks_by_expertqueryfilter
is_deletedr6   r    r!   order_bydesc
created_atoffsetr8   all)r6   r    r!   r#   r7   r8   r   r;   rC   tasksr-   s             @r/   
list_tasksrL   "   sD     )))))))"--G @**;???HH^$$++0I,IJJE >^2f<== D^5BCC B^4@AANN>27799>;T;Y;Y;[;[\\ccdhiioopuvvzz||E::::E::::r0   z/batch-reviewrequestc                    K   t          |          }	 |                    | j        | j        | j        | j        |j                  S # t          $ r$}t          dt          |                    d d }~ww xY w)N)task_idsquality_scorefeedbackapprovedreviewed_by  status_codedetail)
r   batch_reviewrO   rP   rQ   rR   r&   
ValueErrorr   strrM   r   r   r-   es        r/   batch_review_tasksr]   2   s      )"--GF##W-=WMbmtm}  IP  IY  gs  gv#  w  w  	w F F FCFF;;;EFs   2A 
A4A//A4z/assign-by-workloadc                    K   t          |          }	 |                    | j        | j        |j                  S # t
          $ r$}t          dt          |                    d d }~ww xY w)N)rO   reviewer_idsassigned_byrT   rU   )r   assign_by_workloadrO   r_   r&   rY   r   rZ   r[   s        r/   ra   ra   :   s      )"--GF))73CRYRf  uA  uD)  E  E  	E F F FCFF;;;EFs   &: 
A(A##A(z/review-analytics
start_timeend_timerS   c                   K   t          |          }	 | rt          j        |           nd }|rt          j        |          nd }n1# t          $ r$}	t	          dt          |	                    d d }	~	ww xY w|                    |||||          S )NrT   rU   )rb   rc   rS   r    r!   )r   r   fromisoformatrY   r   rZ   get_review_analytics)
rb   rc   rS   r    r!   r   r-   start_dtend_dtr\   s
             r/   review_analyticsri   B   s      )"--GF9CM8)*5555=G'1114 F F FCFF;;;EF''8fZeqz  FN'  O  O  Os   0A 
A2A--A2z
/{task_id}r'   c                   K   ddl m} |                    |                              |j        | k    |j                                                   }|st          dd          t          |          }|	                    |          S )Nr   r:     Task not foundrU   )
rA   r;   rC   rD   r&   rE   firstr   r   r>   )r'   r   r;   r   r-   s        r/   get_taskrn   L   s      ))))))88N##**>+<+G^MfIfggmmooD F4DEEEE)"--G  &&&r0   z/{task_id}/assign	expert_idc                    K   t          |          }	 |                    | ||j                  S # t          $ r$}t	          dt          |                    d d }~ww xY w)Nr`   rk   rU   )r   assign_taskr&   rY   r   rZ   )r'   ro   r   r   r-   r\   s         r/   rr   rr   U   st      )"--GF""7I<?"SSS F F FCFF;;;EFs   0 
AAAz/{task_id}/statusupdatec                 D  K   t          |          }	 |j        "|                    | |j        |j                   |j        rVt
                              | |j                                      d           |                    | |j        |j                  S |j	        ddl
m} |                    |                              |j        | k    |j                                                   }|st!          d|  d          |j	        |_	        |                                 |                    |           |                    |          S |                    | |j        |j                  S # t           $ r$}t)          d	t+          |          
          d d }~ww xY w)Nrq   )r'   r6   zTask status changed)
updated_byr   r:   zTask z
 not foundrk   rU   )r   r#   rr   r&   r6   r*   r+   r,   update_statusr!   rA   r;   rC   rD   rE   rm   rY   commitrefreshr>   r   rZ   )r'   rs   r   r   r-   r;   r   r\   s           r/   update_task_statusry   ]   s     )"--GF));YYY= 	]KKK>>CCDYZZZ((&-LO(\\\?&11111188N++22>3D3OUcUnQnoouuwwD > !<!<!<!<==="ODMIIKKKJJt((...$$Wfm$XXX F F FCFF;;;EFs%   BE1 B5E1 !E1 1
F;FFz/{task_id}/submit
annotationc                    K   t          |          }	 |                    | |j        |j                  S # t          $ r$}t          dt          |                    d d }~ww xY w)N)submitted_byrk   rU   )r   submit_annotationannotation_datar&   rY   r   rZ   )r'   rz   r   r   r-   r\   s         r/   r}   r}   s   sy      )"--GF((*2L[g[j(kkk F F FCFF;;;EFs   !5 
A#AA#z/batch-import-to-dataset.trainrO   
dataset_idsplitc                   K   dd l }ddlm}m}m} |                    |                              |j        |k                                              }	|	st          dd          |                    |                              |j        
                    |           |j         |j        dk    |j                                                  }
d |                    |j                                      |j        |k    |j        
                    |                                                     D             }g g }}|
D ]}|j        |v r|                    |j                   & |||                    |j        d	          |j        ||j        |j        |j        d
          }|                    |           |                    |j                   |r|	xj        t3          |          z  c_        |dk    r|	xj        t3          |          z  c_        nG|dk    r|	xj        t3          |          z  c_        n#|dk    r|	xj        t3          |          z  c_        |                                 t<                              |t3          |          t3          |                                         d           ||	j!        |t3          |          t3          |          ||dS )Nr   r;   DatasetSampleTrainingDatasetrk   Dataset not foundrU   reviewedc                     h | ]	}|j         
S r=   )source_task_id)r?   rows     r/   	<setcomp>z*batch_import_to_dataset.<locals>.<setcomp>   s-      @  @  @+  @  @  @r0   Fensure_asciirP   
task_titler   r   labelr   r   r)   r   
validationtest)r   imported_countskipped_countz!Batch import to dataset completed)r   dataset_namer   r   r   imported_task_idsskipped_task_ids)"jsonrA   r;   r   r   rC   rD   r&   rm   r   in_rE   r6   rR   rJ   r   r   appenddumpsr~   r    rP   r   addtotal_sampleslentrain_samplesvalidation_samplestest_samplesrw   r*   r+   r,   name)rO   r   r   r   r   _jsonr;   r   r   datasetrK   existing_task_idsimportedskippedr   samples                   r/   batch_import_to_datasetr   {   s     IIIIIIIIIIhh''../AZ/OPPVVXXG I4GHHHHHH^$$++N,=,A,A(,K,KQ_QjMjlz  mB  FP  mP  R`  Ri  j  j  n  n  p  pE @  @rxx@\7]7]7d7dere}  BL  fL  N[  Nj  Nn  Nn  ow  Nx  Nx  8y  8y  8}  8}  8  8  @  @  @RgH ! !7'''NN47###*ekk$J^mrk>s>s{  |J  RW  hl  ho  MQ  M_  os  oy  {z  {z  {  {  {
v     X.G!!S]]2!!!l""&&#h--7&&&f__  CMM1  
		
KK:c(mmSVW^S_S_K``ee  gJ  K  K  K$glUfijrfsfs  GJ  KR  GS  GS  jr  HO  P  P  Pr0   z/{task_id}/import-to-datasetc           
      r  K   ddl m}m}m} |                    |                              |j        | k    |j                                                   }|st          dd          |j
        dk    rt          dd          |j        st          dd	          |                    |                              |j        |k                                              }	|	st          dd
          |                    |                              |j        |k    |j        | k                                              }
|
rt          dd          dd l} |||                    |j        d          |j        || |j        |j        d          }|                    |           |	xj        dz  c_        |dk    r|	xj        dz  c_        n-|dk    r|	xj        dz  c_        n|dk    r|	xj        dz  c_        |                                 |                    |           |j        ||	j        || dS )Nr   r   rk   rl   rU   r   rT   u;   只有已审核（reviewed）的任务才能导入数据集u0   只有审核通过的任务才能导入数据集r   i  u   该任务已导入此数据集Fr   r   r   r3   r   r   r   )	sample_idr   r   r   r'   )rA   r;   r   r   rC   rD   r&   rE   rm   r   r6   rR   r   r   r   r   r~   r    rP   r   r   r   r   r   r   rw   rx   r   )r'   r   r   r   r   r;   r   r   r   r   alreadyr   r   s                r/   import_task_to_datasetr      s     IIIIIIIIII88N##**>+<+G^MfIfggmmooD F4DEEEE{j  4qrrrr= h4fgggghh''../AZ/OPPVVXXG I4GHHHHhh}%%,,]-E-SUbUqu|U|}}  D  D  F  FG V4TUUUU]j%++dFZin+:o:ow{  xF  NS  dk  IM  I[  ko  ku  wv  wv  w  w  wFFF6NNNQ"	,		""a'"""	&!IIKKKJJv*glejw~r0   z/{task_id}/reviewreviewc                    K   t          |          }	 |                    | |j        |j        |j        |j                  S # t          $ r$}t          dt          |                    d d }~ww xY w)N)r'   rP   rQ   rS   rR   rk   rU   )	r   
add_reviewrP   rQ   r&   rR   rY   r   rZ   )r'   r   r   r   r-   r\   s         r/   review_annotationr      s      )"--GF!!'AU`f`o  ~J  ~M  X^  Xg!  h  h  	h F F FCFF;;;EFs   -A 
A/A**A/)0r   fastapir   r   r   r   sqlalchemy.ormr   app.api.depsr	   r
   app.core.databaser   app.schemasr   r   r   r   r   r   r   r   r   $app.services.annotation_task_managerr   common_loggingr   __name__r*   routerpostr(   getlistrZ   intrL   r]   ra   ri   rn   putrr   ry   r}   r   r   r   r=   r0   r/   <module>r      s-	         < < < < < < < < < < < < " " " " " " / / / / / / / / $ $ $ $ $ $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 M L L L L L % % % % % %	H			S..4;GFOOX_X_`pXqXq  J G SW    /. C\ 233(-d55QU;;mrmrswmxmx  SX  SX  Y]  S^  S^  jo  jo  pq  vw  jx  jx  jx  EJ  EJ  KM  RS  X[  E\  E\  E\  jq  jq  rx  jy  jy ; ;S4Z ;d
 ;behlbl ;  HK  NR  HR ;  fi ;  AD ;  bi ; ; ; 43; _T,-?@@FMgfoojqjq  sC  kD  kD F F&8 Fg Fei F F F A@F "3FGGIPQWmtmt  vF  nG  nG F F&; F Fhl F F F HGF 0GHH27%++TYTYZ^T_T_y~y~  @D  zE  zE  ]b  ]b  cg  ]h  ]h  D  D  EI  J  J  X_  X_  `f  Xg  Xg O OsTz Ot Onqtxnx O  RU  X\  R\ O  tw  z~  t~ O  PW O O O IHO L66-4WV__ ' 'C 'W ' ' ' 76' ==@Gdkdkl|d}d} F Fs Fs F F_c F F F >=F ==KR7SY??ovov  xH  pI  pI F Fc F: F7 Fjn F F F >=F*  >>T[T[\bTcTcxx  AQ  yR  yR F FS F6F FG Fsw F F F ?>F '((GLuSzz^c^cdk^l^l  {B  {B  CI  {J  {J  _f  _f  gw  _x  _x P PDI P3 PZ] Pry P  Z^ P P P )(P: +,,?DuSzzV[V[\cVdVdryry  {A  sB  sB  W^  W^  _o  Wp  Wp @ @# @3 @RU @jq @  RV @ @ @ -,@:  >>JQ'RX//nunu  wG  oH  oH F FS F* F' Fim F F F ?>F F Fr0   