
    =Wi+                     |   d Z ddlZddlZddl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 dd	lmZ dd
lmZ  ej,                  dd      Zer?ej1                  d      D  cg c]#  } | j3                         s| j3                         % c} Zng dZ ej,                  dd      j7                         dk(  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* ddl+m#Z, ddl-m#Z. ddl/m#Z0 ddl1m#Z2 ddl3m#Z4 ddl5m#Z6 ddl7m#Z8 ddl9m#Z: ddl;m#Z< ddl=m#Z> ddl?m#Z@ ddlAm#ZB ddlCm#ZD ddlEm#ZF ddlGm#ZH ddlIm#ZJ ddlKm#ZL ddlMmNZNmOZO  e         ej                  d      ZQedefd       ZR eej                  ej                  derdnderdndeR      ZUer/eUj                  e
edg dg d        eQj                  d!e        n*eUj                  e
d"gdd"gd"g        eQj                  d#       eUj                  d$      d%        ZYeUj                  d&      d'        ZZeUj                  e      d(ed)efd*       Z\eUj                  e      d(ed)efd+       Z]eUj                  e^      d(ed)e^fd,       Z_eUj                  e$ej                  -       eUj                  e&ej                  -       eUj                  e(ej                  -       eUj                  e*ej                  -       eUj                  e,ej                  -       eUj                  e.ej                  -       eUj                  e0ej                  -       eUj                  e2ej                  -       eUj                  e4ej                  -       eUj                  e6ej                  -       eUj                  e8ej                  -       eUj                  e:ej                  d.z   d/g0       eUj                  e<ej                  -       eUj                  e>       eUj                  e@       eUj                  eB       eUj                  eD       eUj                  eFej                  -       eUj                  eHej                  -       eUj                  eJej                  -       eUj                  eLej                  -       	 ddlZej                  j                   ej                         d1      Zeej                  j                  ee      rHeUj                  ej                   d2 eee3      d14       eQj                  d5ej                   d2       neQj                  d6ee        ekd8k(  r4ddllZl elj                  d9d:d;dej                  j7                         <       yyc c} w # e^$ rZieQj                  d7ei        Y dZi[i]dZi[iww xY w)=u   
FastAPI 应用主入口
    N)asynccontextmanager)FastAPIRequest)CORSMiddleware)JSONResponse)StaticFiles)RequestValidationError)HTTPException)settingsCORS_ORIGINS ,)zhttp://localhost:3000zhttp://localhost:5173zhttp://127.0.0.1:3000zhttp://127.0.0.1:5173ENVdevelopment
production)setup_logging)init_dbclose_db)router)start_schedulerstop_schedulerzapp.mainappc                D  K   t         j                  d       	 t                d{    t         j                  d       t                d{    t         j                  d       d t         j                  d       	 t	                d{    t         j                  d       t                d{    t         j                  d       y7 7 7 E7  # t        $ r"}t         j                  d|        Y d}~yd}~ww xY w# t         j                  d       	 t	                d{  7   t         j                  d       t                d{  7   t         j                  d       w # t        $ r"}t         j                  d|        Y d}~w d}~ww xY wxY ww)	u   应用生命周期管理z#Starting Order Processing System...NzDatabase initializeduM   Unified scheduler started (Import → Products Master → Procurement Orders)z(Shutting down Order Processing System...zUnified scheduler stoppedzDatabase connections closedzError during shutdown: )loggerinfor   r   r   r   	Exceptionerror)r   es     Q   /Users/jinjunqian/PycharmProjects/订单处理新版/ordersys/backend/app/main.pylifespanr    B   sD     KK56#8i*+ cd 	 	>?	8 """KK34 *KK56= 	 	   #   	8LL21#677	8! 	>?	8 """KK34 *KK56 	8LL21#677	8s   F D C&D CD ,F C C&C 6C7C F D D C C 	D"C?:F ?DF FE/+D.,'E/EE/.F/	F8FFFFF u-   基于 FastAPI 的现代化订单处理系统/docsz/redoc)titleversiondescriptiondocs_url	redoc_urlr    T)GETPOSTPUTDELETEPATCH)zContent-TypeAuthorizationzX-Requested-With)allow_originsallow_credentialsallow_methodsallow_headersz-CORS configured for production with origins: *z3CORS configured for development (allow all origins)/c                  T   K   dt         j                   t         j                  ddS w)u	   根路径zWelcome to r!   )messager#   docsr   PROJECT_NAMEVERSION     r   rootr;      s/      !!6!6 78## s   &(z/healthc                  N   K   dt         j                  t         j                  dS w)u   健康检查healthy)statusservicer#   r6   r9   r:   r   health_checkr@      s'      ((## s   #%requestexcc           
      n  K   t        t        j                               dd }t        j	                  d| d|j
                   d|j                   d| j                          t        r*|j
                  dk\  rt        |j
                  d|d	d
      S t        |j
                  d|j                  i      S w)u8   HTTP 异常处理 - 生产环境隐藏详细错误信息N   [z] HTTP z:  -      服务器内部错误#   请联系管理员并提供错误IDdetailerror_idr4   status_codecontentrK   )
struuiduuid4r   warningrN   rK   urlIS_PRODUCTIONr   rA   rB   rL   s      r   http_exception_handlerrW      s      4::< !$H NNQxj'83::,c'++WX C/1$@
 	
 OO3::& s   B3B5c                   K   t        t        j                               dd }t        j	                  d| d|j                          d| j                          t        rt        dd|d	      S t        dd
|j                         i	      S w)u   请求验证异常处理NrD   rE   z] Validation error: rF   i  u   请求参数验证失败)rK   rL   rM   rK   )	rP   rQ   rR   r   rS   errorsrT   rU   r   rV   s      r   validation_exception_handlerrZ      s      4::< !$H NNQxj 4SZZ\N#gkk]ST 4$
 	
 3::<( s   B
Bc           	        K   t        t        j                               dd }t        j	                  d| d| d       t
        rt        dd|d	d
      S t        ddt        |      |t        |      j                  d      S w)u3   全局异常处理 - 捕获所有未处理的异常NrD   rE   z] Unhandled exception: T)exc_inforG   rH   rI   rJ   rM   zInternal server error)rK   r   rL   type)	rP   rQ   rR   r   r   rU   r   r]   __name__rV   s      r   global_exception_handlerr_      s      4::< !$H LL1XJ5cU;dLK 1$@
 	
 -X I&&	
 s   BB)prefixz/pdfu	   PDF导出)r`   tagsimagesz/static/images)	directory)namez#Static images directory mounted at zImages directory not found: zFailed to mount static files: __main__zapp.main:appz0.0.0.0i@  )hostportreload	log_level)o__doc__osloggingrQ   
contextlibr   fastapir   r   fastapi.middleware.corsr   fastapi.responsesr   fastapi.staticfilesr   fastapi.exceptionsr	   starlette.exceptionsr
   StarletteHTTPExceptionapp.core.configr   getenv_cors_origins_envsplitstripr   lowerrU   app.core.loggingr   app.core.databaser   r   app.routers.auth_routerr   auth_routerapp.routers.import_routerimport_routerapp.routers.normalized_routernormalized_routerapp.routers.product_routerproduct_routerapp.routers.procurement_routerprocurement_router!app.routers.procurement_router_v2procurement_router_v2"app.routers.products_master_routerproducts_master_router$app.routers.procurement_confirmationprocurement_confirmation_routerapp.routers.offset_managementoffset_management_routerapp.routers.monitoringmonitoring_routerapp.routers.audit_loggingaudit_logging_routerapp.routers.pdf_exportpdf_export_routerapp.routers.progress_routerprogress_routerapp.routers.sync_routersync_routerapp.routers.shipping_routershipping_routerapp.routers.shop_report_routershop_report_routerapp.routers.new_shipping_routernew_shipping_routerapp.routers.brand_config_routerbrand_config_router app.routers.cloud_storage_routercloud_storage_router app.routers.system_config_routersystem_config_router)app.routers.inventory_registration_routerinventory_registration_routerapp.workers.schedulerr   r   	getLoggerr   r    r7   r8   r   add_middlewarer   getr;   r@   exception_handlerrW   rZ   r   r_   include_routerAPI_V1_PREFIXpathjoingetcwd
images_direxistsmountrS   r   r   r^   uvicornrun	LOG_LEVEL)origins   0r   <module>r      s   
   * $ 2 * + 5 H $
 BIInb1 1B1H1H1M`1MvQWQ]Q]Q_FLLN1M`LL 		%/557<G * / 9 = E ? G M O Z L > D > A 9 A G I I K K ] A 			:	& (8 (8 (8Z 


?"T#d "?K   KK?~NO eee   KKEF     -.' 8N  /0 -. >T  /. y!G )  "@   ;x'='=  >   =)?)?  @   $X-C-C  D   >(*@*@  A   %h.D.D  E   (1G1G  H   )(2H2H  I   28;Q;Q  R   +H4J4J  K   $X-C-C  D   '0F0F  G   $X-C-Cf-LT_S`  a   ?8+A+A  B   ;    ? #   % &   & '   &x/E/E  F   '0F0F  G   '0F0F  G   09O9O  P	7ibiik84J	ww~~j!		X++,N;[S]=^em	n9(:P:P9QQ_`a5j\BC
 zGKK$$**, i a`  7
LL1!5667s%   )V?V3B&V V;V66V;