
    XjP              $       T	   d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dl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& d dl'm(Z(  e(e)          Z* e            Z+dfdede,de,de-fdZ. G d de          Z/dede-de-fdZ0dede1fdZ2dede3fdZ4e+5                    d           ee          fdefd            Z6e+5                    d           d!d! e	d!d"#           e	d!d$#           e	d!d%#           e	d!d&#           e	d!d'#           e	d!d(#           e	d!d)#           e	d!d*#          d!d!d!d!d  e	d+d,-           ee          fd.e,d!z  d/e1d!z  d0e7d!z  d1ed!z  d2ed!z  d3e7d!z  d4e1d!z  d5e7d!z  d6e7d!z  d7e1d!z  d8e,d!z  d9e7d!z  d:e7d!z  d;e7d!z  d<e,d=e,def"d>            Z8e+5                    d?           e	d@dAdBC          d! e	d!           e	d!           e	d!           e	d!          d  e	d+d,-           ee          f	dDe7d.e,d!z  d1ed!z  d2ed!z  d6e7d!z  d7e1d!z  d<e,d=e,defdE            Z9e+:                    dF           ee          fdefdG            Z;e+5                    dH           ee          fde,defdI            Z<e+5                    dJ           ee          fde,dKe,defdL            Z=e+5                    dM           ee          fde,defdN            Z>e+5                    dO           ee          fde,dPe,defdQ            Z?e+:                    dR           ee          fde,defdS            Z@e+:                    dT           ee          fde,defdU            ZAe+:                    dV           ed@           ee          fdWe/defdX            ZB G dY dZe          ZCe+D                    d[           ee          fde,d\eCdefd]            ZEe+5                    d^           ee          fde,defd_            ZFe+5                    d`           ee          fde,dae,defdb            ZGe+5                    dc           ee          fde,dde,defde            ZHd!S )g    date)Path)	APIRouterBodyDependsHTTPExceptionQuery)FileResponse)	BaseModel)funcor_)Session)settings)get_db)TaxDocumentTaxDocumentVersion)CategoryProcessor)KnowledgeBaseClient)can_apply_legal_relationis_regulation_like)is_same_legal_reference)import_to_knowledge_base_taskreprocess_from_local_taskstrip_ocr_content_task)
get_logger2   dbdoc_id	max_nodesreturnc                    ddl m} |                     t                                        t          j        k                                              }|rt          |          sg S i }g}|rt          |          |k     r|	                    d          }||v r1|                     t                                        t          j        |k                                              }|rt          |          s|||<   |j
        r|j
        D ]}	t          |	t                    r|	                    d          nd }
|
r|
|v r5|                     t                                        t          j        |
k                                              }|r%t          ||          r|                    |
           |                      |d| d                                                    }|D ]}|d         }||v r|                     t                                        t          j        |k                                              }|r%t          ||          r|                    |           |rt          |          |k     t          |          dk    rg S ddlm t)          |                                fdd	
          }fd|D             S )Nr   )textr   z>SELECT id FROM tax_documents WHERE supersedes @> '[{"doc_id": z}]'   r   c                      | j         pj        S )N)
issue_datemin)ddate_mins    B/lsinfo/ai/hellotax_ai/data_center/backend/app/api/v1/documents.py<lambda>z!_build_timeline.<locals>.<lambda>C   s    8T     T)keyreversec           	          g | ]H}|j         |j        |j        |j        |j        r|j                                        nd |j         k    dIS )N)idtitle
doc_number
doc_statusr&   
is_current)r0   r1   r2   r3   r&   	isoformat).0r(   r   s     r*   
<listcomp>z#_build_timeline.<locals>.<listcomp>D   s      Y  Y  Y  HI14!'UVUa  NO  NZ  rdqrq}  rH  rH  rJ  rJ  rJ  `d  tu  tx  |B  tB  C  C  Y  Y  Yr,   )
sqlalchemyr#   queryr   filterr0   firstr   lenpop
supersedes
isinstancedictgetr   appendexecutefetchalldatetimer   sortedvalues)r   r   r    sa_textrootfamilyqueue
current_idcurrentitemanc_idancestorrowsrow	source_idsourcesorted_docsr)   s    `               @r*   _build_timelinerV   !   s   ******88K  ''&(@AAGGIID )$// 	F(E
 (CKK)++YYq\\
((;''..{~/KLLRRTT 	099 	$z 	)* ) )/9$/E/EO(+++4 6!1!188K0077&8PQQWWYY ) 8( K K )LL(((zz''"xfp"x"x"xyyzz  D  D  F  F 	( 	(CAIF""XXk**11+.I2MNNTTVVF (267CC (Y'''/  (CKK)++0 6{{a	)))))).T.T.T.T^bcccK Y  Y  Y  Y  MX  Y  Y  Y  Yr,   c                   &    e Zd ZU ee         ed<   dS )BatchImportRequestdoc_idsN)__name__
__module____qualname__listint__annotations__ r,   r*   rX   rX   F   s"         #Yr,   rX   refsc                 ~   g }|D ]6}|                     d          s|                     d          r|                     t          j        t          j                                      t          j        |d         k                                              }|ri |d|j        i}|j        dk    rnu|                     d          r`|                     t          j                                      t          j        |d         k                                              }|dk    r!|	                    |           8|S )Nr   
source_urlobsolete)
rA   r9   r   r0   r3   r:   rc   r;   scalarrB   )r   ra   resultrrR   statuss         r*   _resolve_referencesri   I   s   F  uuX 		155#6#6 		((;>;+ABBII+J`defrdsJsttzz||C +q+(CF++>Z//UU8__ 	XXk455<<[^qQY{=Z[[bbddF##aMr,   docc                 6    | j         dk    rdS | j        pd}d|v S )NqaF z![)doc_typecontent_markdown)rj   mds     r*   _has_imagesrq   Y   s+    
|tu			#B2:r,   c                    i d| j         d| j        d| j        d| j        d| j        d| j        d| j        r| j                                        nd d| j        r| j                                        nd d	| j	        d
| j
        d| j        dt          | j                  dt          |           d| j        d| j        d| j        r| j                                        nd d| j        r| j                                        nd S )Nr0   rc   category_idr2   r1   issuing_authorityr&   effective_dateprocessing_statusr3   is_importedhas_attachments
has_imagesinterpretation_formrn   
created_at
updated_at)r0   rc   rs   r2   r1   rt   r&   r5   ru   rv   r3   rw   boolattachmentsrq   rz   rn   r{   r|   )rj   s    r*   _doc_summaryr   _   s    XD#&  X,  Xs  XXdfift  Xv}  @C  @I  X  K^  `c  `u  X  wC  cf  cq  E{  EH  ES  E]  E]  E_  E_  E_  w{  X  }M  qt  qC  OM  OR  Oa  Ok  Ok  Om  Om  Om  IM  X  Ob  dg  dy  X  {G  IL  IW  X  Yf  hk  hw  X  yJ  LP  QT  Q`  La  La  X  co  q|  }@  qA  qA  X  CX  Z]  Zq  X  s}  B	  K	  X  M	Y	  y	|	  y	G
  [	Q
  [	^	  [	i	  [	s	  [	s	  [	u	  [	u	  [	u	  M
Q
  X  S
_
  
B  
M  a
W  a
d
  a
o
  a
y
  a
y
  a
{
  a
{
  a
{
  SW  X  Xr,   z/categoriesc                 Z  K   t                      }g }|                                D ]}|                     t                                        t          j        |d         k                                              }|                    |d         |d         ||d         d           d|iS )Nr0   nametype)r0   r   countr   
categories)r   get_all_categoriesr9   r   r:   rs   r   rB   )r   category_processorr   c
real_counts        r*   get_categoriesr   b   s      *,,J2244 f fXXk**11+2IQtW2TUU[[]]
4!F)jZ[\bZcddeeee*%%r,   rm   Nu   文号精确或模糊查询)descriptionu   成文日期起始（含）u   成文日期截止（含）u   发文机关关键词u   是否有附件u:   文件状态 effective/obsolete/partially_obsolete/amendedu/   附件类型 pdf/doc/docx/xls/xlsx/wps/ppt/pptxu   正文是否含图片      )lers   rw   r2   issue_date_fromissue_date_tort   rx   r3   attachment_typery   rS   rn   region_coderz   skiplimitc                   	K   |                     t                    }| #|                    t          j        | k              }|#|                    t          j        |k              }|r6|                    t          j                            d| d                    }|r#|                    t          j        |k              }|r#|                    t          j        |k              }|r6|                    t          j                            d| d                    }|du r3|                    t          j	        
                    d                     }nR|du rN|                    t          t          j	                            d           t          j	        g k                        }|r#|                    t          j        |k              }|
#|                    t          j        |
k              }|#|                    t          j        |k              }|#|                    t          j        |k              }|#|                    t          j        |k              }|                                }s	|                    t          j                                                                        t          j                                                                                  }rfd|D             }		fd|D             }t1          |          }||||z            }n|                    t          j                                                                        t          j                                                                      |                              |                                          }|}|||d |D             dS )N%TFc                 b    g | ]+}|j         	t          fd |j         D                       )|,S )c              3   J   K   | ]}|                     d           k    V  dS r   NrA   r6   ar   s     r*   	<genexpr>z,list_documents.<locals>.<listcomp>.<genexpr>   3      <u<ubcQUU6]]o=]<u<u<u<u<u<ur,   r~   anyr6   r(   r   s     r*   r7   z"list_documents.<locals>.<listcomp>   F    vvv!q}v<u<u<u<ughgt<u<u<u9u9uvAvvvr,   c                 :    g | ]}t          |          k    |S r`   rq   r6   r(   ry   s     r*   r7   z"list_documents.<locals>.<listcomp>   )    DDD!{1~~'C'CA'C'C'Cr,   c                 ,    g | ]}t          |          S r`   r   r6   rj   s     r*   r7   z"list_documents.<locals>.<listcomp>   s"    LoLoLocf\Z]M^M^LoLoLor,   )totalr   r   items)r9   r   r:   rs   rw   r2   iliker&   rt   r~   isnotr   is_r3   rS   rn   r   rz   r   order_bydesc	nullslastr0   allr<   offsetr   )rs   rw   r2   r   r   rt   rx   r3   r   ry   rS   rn   r   rz   r   r   r   r9   r   docsfiltered_totals           ``           r*   list_documentsr   k   sh     HH[!!E[4CDD[4CDD N[399:Kj:K:K:KLLMM H[3FGG F[3}DEE \[:@@AYEVAYAYAYZZ[[$[4::4@@AA	E	!	!S!8!<!<T!B!BKD[_aDabbcc C[3zABB[2i?@@[1X=>>[4CDD&[<@SSTTKKMME 
*0~~k499;;EEGGI\I\I^I^__ccee 	wvvvvtvvvD!DDDDtDDDDTD%&~~k499;;EEGGI\I\I^I^__ffgkllrrsxyy}}#TELoLojnLoLoLopppr,   z/search.r$   u   全文关键词)
min_lengthr   qc	                   K   dd l }	t          |	                    d|                     }
|
rN|                    t                                        t          j                            |  d                    }n|                    t                                        t          t          j	                            d|  d          t          j                            d|  d          t          j
                            d|  d                              }|#|                    t          j        |k              }|r#|                    t          j        |k              }|r#|                    t          j        |k              }|                                }s|                    t          j                                                                        t          j                                                                                  }rfd|D             }fd|D             }t'          |          }||||z            }n|                    t          j                                                                        t          j                                                                      |                              |                                          }|}||||
d |D             dS )Nr   u\   [\u4e00-\u9fa5]{2,10}[〔\[\（(]\d{4}[〕\]\）)]\d+号|(?:国务院令|主席令)第\d+号r   c                 b    g | ]+}|j         	t          fd |j         D                       )|,S )c              3   J   K   | ]}|                     d           k    V  dS r   r   r   s     r*   r   z.search_documents.<locals>.<listcomp>.<genexpr>   r   r,   r   r   s     r*   r7   z$search_documents.<locals>.<listcomp>   r   r,   c                 :    g | ]}t          |          k    |S r`   r   r   s     r*   r7   z$search_documents.<locals>.<listcomp>   r   r,   c                 ,    g | ]}t          |          S r`   r   r   s     r*   r7   z$search_documents.<locals>.<listcomp>   sO      tW  tW  tW  KN  uA  BE  uF  uF  tW  tW  tWr,   )r   r   r   is_doc_number_searchr   )rer}   searchr9   r   r:   r2   r   r   r1   rt   rs   r&   r   r   r   r   r0   r   r<   r   r   )r   rs   r   r   r   ry   r   r   r   r   is_doc_numberr9   r   r   r   s       ``         r*   search_documentsr      s     III  $K  MN  O  O  P  PM l%%,,[-C-I-IQ'''-R-RSS%%,,S1B1H1HQ1R1RT_TjTpTpqyuvqyqyqyTzTz  }H  }Z  }`  }`  ai  ef  ai  ai  ai  }j  }j  .k  .k  l  l[4CDD H[3FGG F[3}DEEKKMME 
*0~~k499;;EEGGI\I\I^I^__ccee 	wvvvvtvvvD!DDDDtDDDDTD%&~~k499;;EEGGI\I\I^I^__ffgkllrrsxyy}}#TE[h  tW  tW  RV  tW  tW  tW  X  X  Xr,   z/strip-ocr-contentc                 @   K   t          j                    }d|j        dS )Nu   OCR 内容清理任务已启动)messagecelery_task_id)r   delayr0   )r   tasks     r*   strip_ocr_contentr      s$      !'))D8DGTTTr,   z	/{doc_id}c                 4  K   |                     t                                        t          j        | k                                              }|st          dd          d }d}|j        r|                     t          j        t          j                                      t          j        |j        k                                              }|r-|j        }t          |j
        |j        |j        |j                  }i d|j        d|j        d|j        d|j        d	|j        d
|j        d|j        r|j                                        nd d|j        r|j                                        nd d|j        d|j        d|j        d|j        pg dt-          |j                  dt/          |          d|j        d|j        d|j        i d|j        d|j        d|j        d|j        d|j        d|j         d|j!        d|j"        r|j"                                        nd d|j#        r|j#                                        nd d|j$        d |j        d!|d"|rd n|j
        d#|rd n|j        d$|rd n|j%        d%d d&|j&        |j'        |j(        pg tS          ||j*        pg           tW          ||           d'}|j        r|j        r	 tY                      }|-                    |j                   d {V }|rz|.                    d(          re|.                    d)          rP|d)         }	|	.                    d          |d<   |	.                    d           |d <   |	.                    d%          |d%<   n# t^          $ r Y nw xY w|S )*N     文档不存在status_codedetailFr0   rc   rs   r2   r1   rt   r&   ru   ro   content_html	file_pathr~   rx   ry   rv   content_hashrw   knowledge_doc_idrn   qa_question	qa_answerrS   r   rz   r{   r|   r3   superseded_by_doc_idsuperseded_by_titlesuperseded_by_doc_numbersuperseded_by_ext_titlesuperseded_by_source_urlversion_numberinline_images)inline_videosr>   
referencestimelinesuccessdata)0r9   r   r:   r0   r;   r	   r   r1   r2   r   r   r   rc   rs   rt   r&   r5   ru   ro   r   r   r~   r}   rq   rv   r   rw   r   rn   r   r   rS   r   rz   r{   r|   r3   r   r   r   r>   ri   r   rV   r   get_document_statusrA   	Exception)
r   r   rj   r   suppress_external_superseded_by
supersederrf   clientkb_respkb_datas
             r*   get_document_detailr      sm     
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFF&*&+#
 fXXk/1GHHOOP[P^bebzPz{{  B  B  D  D
 	f","2.EcFbdgd{  ~H  ~S  U_  Ue  /f  /f+ cdCF  cL#.  c-  cZfhkhv  cx  BE  BK  c  M`  be  bw  c  yE  eh  es  G}  GJ  GU  G_  G_  Ga  Ga  Ga  y}  c  O  sv  sE  QO  QT  Qc  Qm  Qm  Qo  Qo  Qo  KO  c  Qc  eh  ey  c  {I  KN  K[  c  ]h  jm  jw  c  yF  HK  HW  H]  []  c  _p  rv  wz  wF  rG  rG  c  IU  Wb  cf  Wg  Wg  c  i|  ~A	  ~S	  c  U	c	  e	h	  e	u	  c  w	D
  F
I
  F
U
  c  c  W
i
  k
n
  k

  c  AK  MP  MY  c  [h  jm  jy  c  {F  HK  HU  c  Wb  dg  dq  c  s@  BE  BQ  c  Sh  jm  jA  c  CO  or  o}  QG  QT  Q_  Qi  Qi  Qk  Qk  Qk  CG  c  IU  ux  uC  WM  WZ  We  Wo  Wo  Wq  Wq  Wq  IM  c  O[  ]`  ]k  c  mC  EH  E]  c  _t  vI  c  Ke  oN  gp  gk  gk  TW  Tp  c  rK  Ut  MQ  MQ  MQ  z}  zQ  c  Sm  wV  ox  os  os  \_  \x  c  zJ  LP  c  Ra  cf  ct  c  c  GJ  GX  hk  hv  h|  z|  L_  `b  dg  dr  dx  vx  Ly  Ly  GV  WY  [a  Gb  Gb  c  c  cF
 
3/ 
		(**F"66s7KLLLLLLLLG I7;;y11 Igkk&6I6I I!&/'.{{<'@'@|$18=S1T1T-.+2;;7G+H+H'( 	 	 	D	Ms   B*N 
NNz*/{doc_id}/attachments/{att_index}/download	att_indexc                   K   |                     t                                        t          j        | k                                              }|st          dd          |j        pg }|dk     s|t          |          k    rt          dd          ||         }|                    dd          }|st          dd          t          t          j                  |z  }	 |                                }n# t          $ r d	}Y nw xY w|st          dd          t          t          |          |j        d
          S )Nr   r   r   r   u   附件不存在pathrm   u'   本地文件不存在，请重新下载Fapplication/octet-stream)r   filename
media_type)r9   r   r:   r0   r;   r	   r~   r<   rA   r   r   project_rootis_fileOSErrorr   strr   )	r   r   r   rj   r~   att
local_pathabs_pathr   s	            r*   download_attachmentr      sV     
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFF/'RK1}}	S%5%5554EFFFF
i
 C$$J _4]^^^^H)**Z7H""$$    _4]^^^^S]]X]Oijjjjs   $C9 9DDz/{doc_id}/attachmentsc                    K   |                     t                                        t          j        | k                                              }|st          dd          | |j        pg dS )Nr   r   r   )r   r~   )r9   r   r:   r0   r;   r	   r~   )r   r   rj   s      r*   get_document_attachmentsr      sj      
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFFS_-BCCCr,   z#/{doc_id}/videos/{vid_index}/stream	vid_indexc                   K   |                     t                                        t          j        | k                                              }|st          dd          |j        pg }|t          |          k    rt          dd          ||                             dd          }|st          dd          t          |          
                                rt          |          nt          t          j                  |z  }|                                st          dd          |j                                        }|d	k    rd
n	|dk    rdnd}t!          t#          |          |          S )Nr   r   r   u   视频不存在r   rm   u   视频文件路径为空u   视频文件不存在z.mp4z	video/mp4z.webmz
video/webmr   r   r   )r9   r   r:   r0   r;   r	   r   r<   rA   r   is_absoluter   r   r   suffixlowerr   r   )	r   r   r   rj   videosr   r   r   r   s	            r*   stream_inline_videor      sr     
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFF$"FCKK4EFFFF	"&&vr22J P4NOOOO#'
#3#3#?#?#A#AotJtHLaGbGbeoGoH M4KLLLL_""$$F && 0 0fPWFWFWll]wJS]]zBBBBr,   z/{doc_id}/reprocessc                 B  K   |                     t                                        t          j        | k                                              }|st          dd          t          j        |           }d| |j        |j	        t          |j                  |j        dS )Nr   r   r   u   文档重处理任务已启动)r   r   rc   rs   
from_localr   )r9   r   r:   r0   r;   r	   r   r   rc   rs   r}   r   r   r   rj   r   s       r*   reprocess_documentr     s      
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFF$*622D76Y\Ygx{  yH  X\  ]`  ]m  Xn  Xn  BF  BI  J  J  Jr,   z/{doc_id}/importc                 (  K   |                     t                                        t          j        | k                                              }|st          dd          |j        rd| |j        dS t          j	        |           }d| |j        dS )Nr   r   r   u   文档已导入)r   r   r   u   文档导入任务已启动)r   r   r   )
r9   r   r:   r0   r;   r	   rw   r   r   r   r  s       r*   import_documentr    s      
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFF
 j,TWThiii(.v66D4Z^Zabbbr,   z/batch-importrequestc                 D  K   |                     t          j                                      t          j                            | j                  t          j                            d                                                    }d |D             }g }|D ]0}t          j
        |          }|                    |j                   1dt          |           dt          | j                  t          |          t          | j                  t          |          z
  |dS )NFc                     g | ]
}|d          S )r   r`   )r6   rR   s     r*   r7   z*batch_import_documents.<locals>.<listcomp>  s    222SV222r,   u"   批量导入任务已启动，共 u
    个文档)r   	requestedqueuedskipped_already_importedcelery_task_ids)r9   r   r0   r:   in_rY   rw   r   r   r   r   rB   r<   )r  r   
valid_docsvalid_doc_idsr  r   r   s          r*   batch_import_documentsr    sJ     +.))001C1CGO1T1TVaVmVqVqrwVxVxyy}}J22z222MO ( (,26::tw''''ZC<N<NZZZilmtm|i}i}  JM  N[  J\  J\  z}  ~E  ~M  zN  zN  QT  Ub  Qc  Qc  zc  xG  H  H  Hr,   c                       e Zd ZU eed<   dS )UpdateContentRequestro   N)rZ   r[   r\   r   r_   r`   r,   r*   r  r    s         r,   r  z/{doc_id}/contentbodyc                 j  K   |                     t                                        t          j        | k                                              }|st          dd          |                     t          j        t          j	                                                t          j
        | k                                              pd}|dz   }t          | ||j                  }|                    |           |j        |_        |j        rd|_        d |_        |                                 d| |d	S )
Nr   r   r   r   r$   )r   r   ro   Fu   保存成功)r   r   r   )r9   r   r:   r0   r;   r	   r   maxr   r   r   re   ro   addrw   r   commit)r   r  r   rj   last_vernew_versionversions          r*   update_document_contentr    s     
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFFxx!3!BCCDDKKL^LeioLoppwwyy~}~HQ,K {]a]rsssGFF7OOO0C
 $#IIKKK%;WWWr,   z/{doc_id}/versionsc                   K   |                     t                                        t          j        | k                                              }|st          dd          |                     t                                        t          j        | k                                  t          j	        
                                                                          }| d |D             dS )Nr   r   r   c                 n    g | ]2}|j         |j        |j        r|j                                        nd d3S )N)r0   r   r{   )r0   r   r{   r5   )r6   vs     r*   r7   z*list_document_versions.<locals>.<listcomp>5  s      +q  +q  +q  cd!$!JZ  GH  GS  k]jkjv  kA  kA  kC  kC  kC  Y]  ,^  ,^  +q  +q  +qr,   )r   versions)r9   r   r:   r0   r;   r	   r   r   r   r   r   r   )r   r   rj   r  s       r*   list_document_versionsr   /  s	     
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFFxx*++223E3LPV3VWW``as  bC  bH  bH  bJ  bJ  K  K  O  O  Q  QH  +q  +q  hp  +q  +q  +q  r  r  rr,   z#/{doc_id}/versions/{version_number}r   c                 F  K   |                     t                                        t          j        | k    t          j        |k                                              }|st          dd          | |j        |j        |j        r|j        	                                nd dS )Nr   u   版本不存在r   )r   r   ro   r{   )
r9   r   r:   r   r   r;   r	   ro   r{   r5   )r   r   r   vers       r*   get_document_versionr#  7  s      
((%
&
&
-
-.@.G6.QSeSt  yG  TG  H  H  N  N  P  PC G4EFFFF0BX[Xl  [^  [i  }s|  }K  }U  }U  }W  }W  }W  os  t  t  tr,   z/{doc_id}/images/{img_index}	img_indexc                   K   |                     t                                        t          j        | k                                              }|st          dd          |j        pg }|dk     s|t          |          k    rt          dd          ||                             dd          }|st          dd          t          t          j                  |z  }|                                st          dd	          |j                                        }d
d
dddd                    |                    d          d
          }t!          t#          |          |          S )Nr   r   r   r   u   图片不存在r   rm   u   图片路径为空u   图片文件不存在z
image/jpegz	image/pngz	image/gifz
image/webp)jpgjpegpnggifwebp.r   )r9   r   r:   r0   r;   r	   r   r<   rA   r   r   r   r   r   r   lstripr   r   )	r   r$  r   rj   imagesr   r   r   r   s	            r*   get_document_imager.  >  s     
((;


&
&{~'?
@
@
F
F
H
HC G4EFFFF$"F1}}	S[[004EFFFF	"&&vr22J J4HIIIIH)**Z7H M4KLLLL_""$$F%|KXcmyzz~~  @F  @M  @M  NQ  @R  @R  T`  a  aJS]]zBBBBr,   )r   )IrE   r   pathlibr   fastapir   r   r   r	   r
   fastapi.responsesr   pydanticr   r8   r   r   sqlalchemy.ormr   
app.configr   app.databaser   app.models.tax_datar   r   2app.services.tax_data_processor.category_processorr   5app.services.tax_data_processor.knowledge_base_clientr   0app.services.tax_data_processor.relation_builderr   r   1app.services.tax_data_processor.relation_identityr   app.tasks.processor_tasksr   r   r   common_loggingr   rZ   loggerrouterr^   r]   rV   rX   ri   r}   rq   r@   r   rA   r   r   r   r   postr   r   r   r   r   r  r  r  r  putr  r   r#  r.  r`   r,   r*   <module>rA     s               B B B B B B B B B B B B B B * * * * * *                       " " " " " "             ? ? ? ? ? ? ? ? P P P P P P U U U U U U       
 V U U U U U          & % % % % %	H			#Y #Y #Y #Y #YD #Y #Y #Y #YJ       G 4 D     [ T    Xk Xd X X X X M%,WV__ & &W & & & & B15PTmrmrsw  Fc  nd  nd  nd  CH  CH  IM  [x  Cy  Cy  Cy  V[  V[  \`  nK  VL  VL  VL  lq  lq  rv  D[  l\  l\  l\  {@  {@  AE  Sd  {e  {e  {e  ~C  ~C  DH  VR	  ~S	  ~S	  ~S	  q	v	  q	v	  w	{	  I
z
  q	{
  q	{
  q	{
  UZ  UZ  [_  mD  UE  UE  UE  ]a  x|  VZ  |@  LM  Z_  Z_  `b  gj  Zk  Zk  Zk  y@  y@  AG  yH  yH (q (qcDj (qD4K (qbehlbl (q  w{  ~B  wB (q  JN  QU  JU (q  ad  gk  ak (q  os  vz  oz (q  sv  y}  s} (q  f	i	  l	p	  f	p	 (q  IM  PT  IT (q  RU  X\  R\ (q  mp  sw  mw (q  KN  QU  KU (q  qt  w{  q{ (q  HK (q  VY (q  qx (q (q (q (qT I"'%GX"Y"Y"Ysw  W\  W\  ]a  Wb  Wb  D  D  EI  J  J  hm  hm  nr  hs  hs  MR  MR  SW  MX  MX  de  rw  rw  xz  B  rC  rC  rC  QX  QX  Y_  Q`  Q` X Xc Xhknrhr X  KO  RV  KV X  sw  z~  s~ X  ]`  cg  ]g X  AE  HL  AL X  `c X  nq X  IP X X X X8 !""(/ U U U U U #"U K7>wv  c w    2 899GNwv k kc kc kw k k k :9k( #$$<CGFOO D D3 DG D D D %$D 122GNwv C Cc Cc Cw C C C 32C" "##6=gfoo J JS Jg J J J $#J   3:76?? c c# c7 c c c ! c _=AT#YYT[T[\bTcTc H H*< HG H H H H    9      W^W^_eWfWf X X# X5I Xw X X X ! X  !!:A'&// r r r' r r r "!r 122MTWU[__ t ts tC tW t t t 32t *++FMgfoo C CS CS Cg C C C ,+C C Cr,   