
    n)ix1                       d Z ddlmZ ddlmZ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mZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z"  eddg          Z# e"e$          Z%dbdZ&dcdZ'ddd"Z(ded)Z)dfd-Z*e#+                    d.e/           e
d.d0d12           e
d.d3d4d56           e
d.d78           e
d.d98           e
d.d:8           e
d.d;8           e
d.d<8           e
d.d=8           e
d>d?8           e
d>d@8           e
d>dA8           e
d.dB8           e
dCdCD           e
dEdCdFG          fdgdW            Z,e#+                    dXe/           e
dCdCD           e
dEdCdFG          fdhd\            Z-e#+                    d]e/          did^            Z.e#+                    d_e/          djda            Z/d>S )kz&Public-first service guide query APIs.    )annotations)	AnnotatedAny)	APIRouterDependsHTTPExceptionQuery)NotFoundError)get_es_clientget_neo4j_clientget_optional_permission_context)ServiceGuideDetailResponseServiceGuideListItemServiceGuideListResponse)settings)GraphQueryService)PermissionContext)ESClient)Neo4jClient)&build_compatible_service_guide_profile)
get_loggerz/service-guideszservice-guides)prefixtagsfilter_clauseslist[dict[str, Any]]fieldstrvaluestr | bool | NonereturnNonec                    t          |t                    r3|                                }|sd S |                     d||ii           d S ||                     d||ii           d S d S )Nterm)
isinstancer   stripappend)r   r   r   
normalizeds       2D:\work\zm-rag\backend\app\api\v1\service_guide.py_append_term_filterr)      s    % [[]]
 	Fvz':;<<<vu~677777     permPermissionContext | Nonedict[str, Any]c                T    | t          j                    S |                                 S )N)r   public_es_filterbuild_es_filter)r+   s    r(   _build_acl_filterr1   '   s(    | 1333!!!r*   doc_acl_ids	list[str]boolc                <    | sdS |dS |                     |           S )NTF)has_acl_access)r2   r+   s     r(   _has_acl_accessr7   -   s-     t|u{+++r*   hitstotalintpage	page_sizer   c               <    t          |||d | D                       S )Nc                   g | ]Z}t          |d                              d|                    dd                    |d                              dd          |d                              dd          |d                              dg           |d                              dd          |d                              dd          |d                              d	g           |d                              d
g           |d                              d          |d                              d          t          |d                              dd                              \S )_source
profile_id_id doc_idmatter_namecolloquial_namesimplementation_codematter_versionhandled_org_namesregion_namesexpress_supportedreservation_supportedneeds_reviewFr@   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   )r   getr4   ).0hits     r(   
<listcomp>z%_to_list_response.<locals>.<listcomp>@   sN    
 
 
  !y>--lCGGE2<N<NOO9~))(B77	N..}bAA!$Y!3!34F!K!K$'	N$6$67Lb$Q$Q"9~112BBGG"%i."4"45H""M"M ^//CC"%i."4"45H"I"I&))n&8&89P&Q&Q!#i."4"4^U"K"KLL  
 
 
r*   )r9   r;   r<   items)r   )r8   r9   r;   r<   s       r(   _to_list_responserS   5   sB     $
 
 
 
 
	   r*   sourcefallback_profile_idr   c          	     |   t          |           \  }}|rEt                              d|                     d|          |                     dd                     t	          |                     d|          |                     dd          |                     dd          |                     dd          |          S )	N*service_guide_profile_compat_fallback_usedr@   rC   rB   )r@   rC   
scene_typeguide_version)r@   rC   rX   rY   profile)r   loggerwarningrN   r   )rT   rU   rZ   used_fallbacks       r(   _to_detail_responser^   S   s    CFKKG] 
8zz,0CDD::h++ 	 	
 	
 	

 &::l,?@@zz(B''::lB//jj"55   r*   rB   )response_modelqueryu/   关键词，匹配事项名/俗称/检索文本)defaultaliasdescriptionqFu   兼容旧参数 q)ra   rb   include_in_schemarc   u   按文档 ID 过滤)ra   rc   u   按实施编码过滤u   按基本编码过滤u   按事项类型过滤u   按受理机构过滤u   按地区过滤Nu!   按是否支持物流快递过滤u!   按是否支持预约办理过滤u!   按是否必须现场办理过滤u   按事项名称过滤   )ra   ge   d   )ra   rg   le	es_client+Annotated[ESClient, Depends(get_es_client)]MAnnotated[PermissionContext | None, Depends(get_optional_permission_context)]legacy_qrC   rF   
basic_codematter_typehandled_orgregionrJ   bool | NonerK   must_onsiterD   c                t  K   dddiig}t          |          g}|                                p|                                }|r|                    d|g dddi           |r|                    dd|ii           |r|                    dd	|ii           t          |d
|           t          |d|           t          |d|           t          |d|	           t          |d|
           t          |d|           t          |d|           |r|                    dd|ii           | j                            t          j        d||di|dz
  |z  |ddddiddddidddiigg dd           d {V }t          |t                    r|n|j
        }|                    d i                               d g           }|                    d i                               d!i           }t          |t                    r|                    d"d#          nt          |pd#          }t          ||||$          S )%Nr#   
is_currentTmulti_match)zmatter_name^4zcolloquial_names^3zimplementing_subject^2zguide_search_text^1.5best_fields)r`   fieldstyperC   rF   ro   rp   rH   rI   rJ   rK   rt   match_phraserD   r4   mustfilterrf   completeness_scoredesc_lastordermissingconfidence_score
updated_atr   rM   r`   fromsizesortr?   indexbodyr8   r9   r   r   r9   r;   r<   )r1   r%   r&   r)   rawsearchr   es_service_guide_indexr$   dictr   rN   r:   rS   )rk   r+   rd   rn   rC   rF   ro   rp   rq   rr   rJ   rK   rt   rD   r;   r<   r}   r   keywordrespr   r8   r9   total_values                           r(   list_service_guidesr   d   s     & $*L$+?"@!AD,=d,C,C+DNggii+8>>++G 
$   *	  	 	
 	
 	
  <v&'9:;;; Vv(=?R'STUUUjAAA{CCC(;[III???(;=NOOO(?AVWWW{CCC D^m[%ABCCC%%-  ,  AX*%G'L'LM#v'%J%JK01
  
 
 &        D> T4((
7$$diC7762""62..DGGFB##GR00E+5eT+B+BW%))GQ'''EJUVK	   r*   z/by-matter/{matter_id}	matter_idneo4j1Annotated[Neo4jClient, Depends(get_neo4j_client)]c                  K   t          |          }|                    | ||j        ng            d {V }|t          dd|  d          |                    d          pd                                }dd	| iig}	|r|	                    d
d|ii           |j                            t          j
        ddddiigt          |          g|	ddi|dz
  |z  |ddddiddddidddiigg dd           d {V }
t          |
t                    r|
n|
j        }|                    di                               dg           }|                    di                               di           }t          |t                    r|                    dd          nt          |pd          }t!          ||||          S ) N)
acl_tokens  zMatter '' not foundstatus_codedetailnamerB   r#   linked_matter_idsr{   rD   r4   rv   Trf   )r}   r~   shouldminimum_should_matchr   r   r   r   r   r   r   rM   r   r   r8   r9   r   r   r   )r   get_matter_cardr   r   rN   r%   r&   r   r   r   r   r1   r$   r   r   r:   rS   )r   rk   r+   r   r;   r<   graphmatterrD   should_clausesr   r   r8   r9   r   s                  r(   list_service_guides_by_matterr      sl      e$$E((&*&64??B )        F ~4Uy4U4U4UVVVV::f%%+2244K-36I95U,V+WN N~{/KLMMM%%- $|T&:;<0667,,-	  AX*%G'L'LM#v'%J%JK01
  !
 
 &                DB T4((
7$$diC7762""62..DGGFB##GR00E+5eT+B+BW%))GQ'''EJUVK	   r*   z/by-doc/{doc_id}c                  K   |j                             t          j        ddd| iidddiigt	          |          gdiddd	d
iigd           d {V }t          |t                    r|n|j        }|                    di                               dg           }|st          dd|  d          |d                             di           }t          ||d                             dd                    S )Nr4   r#   rC   rv   Tr|   rf   r   r   r   )r`   r   r   r   r8   r   zService guide for doc 'r   r   r   r?   rA   rB   rU   )r   r   r   r   r1   r$   r   r   rN   r   r^   )rC   rk   r+   r   r   r8   rT   s          r(   get_service_guide_by_docr     sM      %%- (F!34,!56  1667  "Wf$567
 
 &        D  T4((
7$$diC7762""62..D c4af4a4a4abbbb!W[[B''Fv47;;ub;Q;QRRRRr*   z/{profile_id}r@   c                  K   	 |j                             t          j        |            d {V }n(# t          $ r}t          dd|  d          |d }~ww xY wt          |t                    r|n|j        }|                    di           }t          |                    dg           |          st          dd|  d          t          ||           S )	N)r   idr   zService guide 'r   r   r?   acl_idsr   )r   rN   r   r   r
   r   r$   r   r   r7   r^   )r@   rk   r+   r   excr   rT   s          r(   get_service_guide_detailr   %  s     h]&&X-LQ[&\\\\\\\\ h h h4]j4]4]4]^^^dggh T4((
7$$diCWWY##F6::i44d;; _4]j4]4]4]^^^^v:FFFFs   ,1 
AAA)r   r   r   r   r   r   r    r!   )r+   r,   r    r-   )r2   r3   r+   r,   r    r4   )
r8   r   r9   r:   r;   r:   r<   r:   r    r   )rT   r-   rU   r   r    r   )"rk   rl   r+   rm   rd   r   rn   r   rC   r   rF   r   ro   r   rp   r   rq   r   rr   r   rJ   rs   rK   rs   rt   rs   rD   r   r;   r:   r<   r:   r    r   )r   r   rk   rl   r+   rm   r   r   r;   r:   r<   r:   r    r   )rC   r   rk   rl   r+   rm   r    r   )r@   r   rk   rl   r+   rm   r    r   )0__doc__
__future__r   typingr   r   fastapir   r   r   r	   opensearchpy.exceptionsr
   app.api.depsr   r   r   app.api.schemas.service_guider   r   r   
app.configr   app.core.graph_query_servicer   app.core.permissionr   app.infrastructure.es_clientr   app.infrastructure.neo4j_clientr   !app.schemas.service_guide_profiler   app.utils.loggerr   router__name__r[   r)   r1   r7   rS   r^   rN   r   r   r   r    r*   r(   <module>r      s   , , " " " " " " ! ! ! ! ! ! ! ! < < < < < < < < < < < < 1 1 1 1 1 1 Y Y Y Y Y Y Y Y Y Y         
        : : : : : : 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 T T T T T T ' ' ' ' ' '	+3C2D	E	E	E	H		8 8 8 8" " " ", , , ,   <   " B788 U2W:klllE"C5Vijjj%0EFFF$uR=TUUUeB4KLLLuR5LMMMuR5LMMM%0ABBB%*U4Eh%i%i%i).tIl)m)m)m$uT?bcccuR5LMMMaA&&&U2!444!\ \ \ \ 98\~ $5MNN aA&&&U2!444? ? ? ? ON?D /IJJS S S KJS: O,FGGG G G HGG G Gr*   