o
    |h8                    @   s   d Z ddlmZmZm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mZ ddlmZmZ dd	lmZ d
d Zdd Ze
jddgddd Zdd Zdd ZdS )uU   
상태평가표 데이터 생성 API (개선된 condition_evaluation 모듈 사용)
    )requestjsonifysessionN   )api_bp)get_db_connectionclean_dataframe_data)get_meta_keywords_by_meta_idget_meta)convert_component_name_to_key!get_source_by_meta_id_and_keyword)#generate_condition_evaluation_pivotc                 C   s   g }|  di }| D ]5\}}| di }| D ]&\}}||| d| d| d| d| d| dd	}|| qq|sJtd
 d S t|}	t|	jdd |	jdd}
tdddd}|	|
 W d    n1 stw   Y  td d S )N   교량받침	positionscrack_width_1dcrack_width_2dcrack_ratio_1dcrack_ratio_2ddamage_quantitiescondition_grade)sub_namepositionr   r   r   r   r   r   u1   교량받침 positions 데이터가 없습니다.Findexbearing_positions_table.mdwutf-8encoding;   bearing_positions_table.md 파일로 저장되었습니다.
getitemsappendprintpd	DataFrame	to_stringto_markdownopenwrite)component_datarowsbearing_groupr   sub_datar   pos_namepos_datarowdfmd_tablef r5   B/home/skpark/git/infrasmart_work/infrasmart/api/evaluation_data.pyprint_bearing_positions_table   s4   

r7   c           	   
   C   s   |  di }g }| D ]%\}}|| d| d| d| d| d| dd}|| q|s:td	 d S t|}t|jd
d |jd
d}tdddd}|	| W d    n1 sdw   Y  td d S )Nr   r   r   r   r   r   r   )r   r   r   r   r   r   r   u$   positions 데이터가 없습니다.Fr   r   r   r   r   r   r    )	r+   r   r,   r/   r0   r1   r2   r3   r4   r5   r5   r6   print_bearing_table7   s,   	
r8   z/generate_evaluation_dataPOST)methodsc               
   C   sD  zqdt vrtddidfW S t } | d}| d}|s'tddidfW S t }| }|d	|t d f | }|sGtdd
idfW S |d }t	|t
rUt|}t|}t|}t|}|  |  td|dW S  ty }	 z$tdt
|	  ddl}
|
  tddt
|	 idfW  Y d}	~	S d}	~	ww )u   
    부재별 집계표 데이터를 기반으로 상태평가표 데이터를 생성합니다.
    개선된 condition_evaluation 모듈을 사용하여 1방향/2방향 균열 분류를 적용합니다.
    user_iderroru   로그인이 필요합니다.i  filenamecomponent_typeu   파일명이 필요합니다.i  zISELECT file_data FROM uploaded_files WHERE filename = %s AND user_id = %su"   파일을 찾을 수 없습니다.i  r   T)successdatau*   상태평가 데이터 생성 중 오류: Nu@   상태평가 데이터 생성 중 오류가 발생했습니다: i  )r   r   r   get_jsonr!   r   cursorexecutefetchone
isinstancestrjsonloadsr%   r&   r   convert_to_api_formatclose	Exceptionr$   	traceback	print_exc)r@   r=   r>   conncurresult	file_datar2   evaluation_dataerL   r5   r5   r6   generate_evaluation_dataW   sH   






&rT   c                 C   s(   | dkrdS | dk rdS | dk rdS dS )u.   손상물량에 따른 상태 텍스트 반환r   -   u   소요
   u   중요u   심각r5   )quantityr5   r5   r6   get_damage_condition_text   s   rY   c           K         s  t d td}g g g g g g g g g g g d}i }|D ]9}zt d| d t| |}|||< W q tyS } zt d| d|  dd	l}|  W Y d	}~qd	}~ww t| |D ].}zt d
| d ||i }|dkryt d| d | D 
]\ }t d   t	 }	|	rbt d|	  |d  D 
]\}
}t d|
  |di }|dd}|dd}|

 |dd|dd|d|dd|dd |||d	}|	dkrd v ptdd |dg D }|rSt d |
 d! g }g }g }g }d}d"}|dg D ]}|d#d$ |d%d$}|d&d}t d' d(| d)|  |dkrtfd*dd+D rR||7 }t d,|  qd-|v sad-v sad.v rs||d#d$ t d/  qtfd0dd1D r||d#d$ t d2  qtfd3dd4D rtfd5dd6D s||d#d$ t d7  qtfd8dd9D r||d#d$ t d:  q||7 }t d;|  q|dkr|| d" nd}|||rd<tt|nd=|rd<tt|nd=|rd<tt|nd=|r)d<tt|nd=||||||d> t d?t| d@t| dAt| dBt| dC|dDdE 	n |dFd}|dGd}|dHd}d"}|||dkru|| d" nd|dkr|| d" nd|dkr|| d" nd|||dI n|	dJkrt dK|
 d! g }g }g }g }d}d"}|dg D ]}|d#d$ |d%d$}|d&d}t d' d(| d)|  |dkrtfdLdd+D r||7 }t d,|  qd-|v sd-v sd.v r||d#d$ t d/  qtfdMdd1D r6||d#d$ t d2  qtfdNdd4D r`tfdOdd6D s`||d#d$ t d7  qtfdPdd9D r~||d#d$ t d:  q||7 }t d;|  q|dkr|| d" nd}|||rd<tt|nd=|rd<tt|nd=|rd<tt|nd=|rd<tt|nd=||||||d> t dQt| d@t| dAt| dBt| dC|dDdE n[|	dRkrYt dS|
 d! g }g }g }g }d}d"}|dg D ]}|d#d$ |d%d$}|d&d}t d' d(| d)|  |dkrtfdTdd+D rX||7 }t d,|  qd-|v sgd-v sgd.v ry||d#d$ t d/  qtfdUdd1D r||d#d$ t d2  qtfdVdd4D rtfdWdd6D s||d#d$ t d7  qtfdXdd9D r||d#d$ t d:  q||7 }t d;|  q|dkr|| d" nd}|||rd<tt|nd=|rd<tt|nd=|r"d<tt|nd=|r/d<tt|nd=||||||d> t dYt| d@t| dAt| dBt| dC|dDdE n|	dZv r|dGd}|dFd}|dHd}|| }d"}||t|dd|ddd=|| d" || d" |||d[ n|	d\krg }d} g }!t d]|
 d! |dg D ]}|d#d$|d%d$}|d&d}t d^ d(| d)|  td_}"tfd`d|"D r|vr| t da  qd-| v sd- v rhtfdbddcD r<|ddpd}#|ddp!d}$t|#|$}%t| |%} t dd|% de|# df|$ dg q|ddpDd}#|ddpMd}$t|#|$}%t| |%} t dh|% de|# df|$ dg qtfdiddcD sy|djv r|!vr|!vr|! t dk  q|!vr|! q|rd<|}&nd=}&|!rd<|!}'nd=}'t dl|& dm|  dn|'  ||&| dkr| nd|'do n|	dpkr*|dqd|dHd }(g })|d D ]}|d% djv r|d#d$}*|*r|*|)vr|)|* q|)rd<|)nd=}+|t|dd|dd|+d=d=|(|)dr n)|	dskrt dt|
 d! t du|  |dGd}|dHd}t|ttfsTd}t|ttfs^d}d},|| },t dv| dw| dx|,  d"}-||-|dkr||- d" nd|dkr||- d" nd|,dkr|,|- d" nd||dy t dz| d{|  n|	d|k	r|t d}|
 d! t du|  g }.d}/g }0|dst d~|
 d ne|dg D ]]}|d#d$ |d%d$}|d&d}1t d' d(| d)|1  tfdddD sdv sdv rK|1dkrKdv s%dv r8|0vr6|0 t d  q܈|.vrI|. t d  qdv r|1dkrd-v s_d-|v r|ddpgd}#|ddppd}$t|#|$}%t|/|%}/t d|% de|# df|$ dg q|0 qdv sdv r|1dkrd-v sd-|v r|ddpd}#|ddpd}$t|#|$}%t|/|%}/t dd|% de|# df|$ dg q|0d qd-|v 	r|1dk	r|ddpd}#|ddpd}$t|#|$}%t|/|%}/t dh|% de|# df|$ dg qdv	r9d-v	r9d-|v	r9|1dk	r9tfdddD 	s9|0 q|.	rHd<tt|.}&nd=}&|/dk	rQ|/nd=}2|0	r_d<tt|0nd=}3t d|& dm|2 dn|3  ||&|2|3|.|0|0d n|	dk
r7|dGd}4|dd}5|dd}6|5}7|6}8|4|7 |8 },d}9g }:| D ]g\}}d|v 
r| D ]X\ }d v 	sd v 
r	|d  D ]B\};}|;|
k
r|dg D ]1}|d#d$|d&d}|dk
rtfdddD 
r|:v
r|: t d  	qՐ	qƐ	q	q|:
rd<|:}9nd}9d"}|||,dk
r(|,| d" ndd|9|4|5|6|7|8|:d
 n|	dkrSg }<g }=d}>|dg D ]}|d#d$dv 
r^dv 
r^d}> n
qHt d|
 d! |dg D ]}|d#d$|d&d}t d' d)|  |dkr|>
rtfdddD 
rd}?|?|=v
r|=|? t d|?  
qntfdddD 
rΈ|<v
r|< t d  
qntfdddD 
r|=v
r|= t d  
qndFv r|=vr|= t d  
qn|=vr|= t d  
qn|<r d<|<nd=}@|=r*d<|=nd=}A|<|= }B|Br8d<|Bnd=}Ct d|@ d|A d|C  ||@|A|C|<|=|>d ||	 | t d|  qq}W qZ ty } zt d| d|  dd	l}|  W Y d	}~qZd	}~ww tdd}D| D ]}E||E sR|Ed|krRt d|E  |DD ]}F|Fddd	ddd}G|Edkr|Gd"dddd n|EdJkr|Gd"d=d=d=d=dd nt|EdRkr|Gd"d=d=d=d=dd nb|EdZv r|Gd"dd=ddd nQ|Edpkr|Gdd=d=d=d nA|Ed\kr|Gd=dd=do n2|Edkr'|Gd"dddd n"|Edkr9|Gd=d=d=g g dd n|EdskrI|Gd"ddddd ||E |G qqt d |S )uJ   개선된 condition_evaluation 모듈의 결과를 API 형식으로 변환u   API 변환 시작...iAB )slabgirder	crossbeamabutmentpier
foundationbearingexpansionJointpavementdrainagerailingzPre-processing z...z
Component z pre-processing error: r   NzProcessing r   z!Processing bearing positions for z  Component: z    API Key: r   z      Position: r   crack_length_1dcrack_length_2dr   r   r   r   r   a)	span_idr   r   r   r   gradeoriginal_crack_length_1doriginal_crack_length_2doriginal_damage_quantitiesrZ      강c                 s   s     | ]}d | ddv V  qdS )rm   original_desc N)r!   ).0damager5   r5   r6   	<genexpr>   s    z(convert_to_api_format.<locals>.<genexpr>damagesz*        Processing steel slab damages for :d   rn   ro   typerX   z          Damage: z, Type: z, Quantity: c                 3       | ]}| v V  qd S Nr5   rp   keywordrn   r5   r6   rr         )   도장   부식   녹rust	corrosionz/            -> Added to surface_deterioration: u   균열crackz)            -> Added to component_crack: c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   )u   변형u   파단u   굴곡u   좌굴u   처짐deformationz.            -> Added to deformation_fracture: c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   )   볼트u   너트u   앵커boltnutanchorc                 3   rw   rx   r5   rp   corr_keywordr{   r5   r6   rr     r|   )r~   r   r}   z(            -> Added to bolt_loosening: c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   )u   용접u   결함weldz%            -> Added to weld_defect: z7            -> Added to surface_deterioration (other): z, rU   )inspection_areacomponent_crackdeformation_fracturebolt_looseningweld_defectsurface_deterioration_ratio#original_surface_deterioration_areacomponent_crack_damagesdeformation_fracture_damagesbolt_loosening_damagesweld_defect_damagesz#        Steel slab result - Crack: z, Deformation: z, Bolt: z, Weld: z, Surface: z.2f%u   누수u   표면손상   철근부식)r   
leak_ratiosurface_damage_ratiorebar_corrosion_ratiooriginal_leak_quantity original_surface_damage_quantity!original_rebar_corrosion_quantityr[   z,        Processing steel girder damages for c                 3   rw   rx   r5   ry   r{   r5   r6   rr   a  r|   c                 3   rw   rx   r5   ry   r{   r5   r6   rr   k  r|   c                 3   rw   rx   r5   ry   r{   r5   r6   rr   p  r|   c                 3   rw   rx   r5   r   r{   r5   r6   rr   p  r|   c                 3   rw   rx   r5   ry   r{   r5   r6   rr   u  r|   z%        Steel girder result - Crack: r\   z/        Processing steel crossbeam damages for c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   c                 3   rw   rx   r5   r   r{   r5   r6   rr     r|   c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   z(        Steel crossbeam result - Crack: )r]   r^   )r   crack_widthr   r   r   r   r   r   r`   z'        Processing bearing damages for zDamage: iFB c                 3       | ]	}|   v V  qd S rx   lowerry   r{   r5   r6   rr   
      z(            -> Added to body_condition: c                 3   r   rx   r   ry   r{   r5   r6   rr     r   )   콘크리트   몰탈u   받침콘크리트u   받침몰탈z%            -> Concrete crack width: z (1d: z, 2d: )z$            -> General crack width: c                 3   r   rx   r   ry   r{   r5   r6   rr   "  r   )   단면손상r   z(            -> Added to section_damage: z        Bearing result - Body: z, Crack width: z, Section damage: )body_conditionr   section_damager_   r   )r   damage_conditionerosion
settlement"original_damage_condition_quantitydamage_condition_descriptionsrd   z'        Processing railing damages for z          Position data: u   표면손상: u   , 철근부식: u   , 총 손상량: )lengthr   r   total_damage_quantityr   r   z)        Railing result - Surface damage: z, Rebar corrosion: ra   z/        Processing expansion joint damages for z&          No damage data for position z, leaving emptyc                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   )u   유간	   이물질u   본체r~   u	   고무재u	   이음부r   u   신축이음u   이음장치u	   차수판u   차수z<            -> Added to footer_section_damages (waterstop): z&            -> Added to body_damages: u	   후타재z#            -> Footer crack width: r   r   u   후타재 단면손상c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   z'        Expansion joint result - Body: )r   footer_crackr   body_damagesfooter_crack_damagesfooter_section_damagesrb   u   양호u   배수u	   배수구c                 3   rw   rx   r5   ry   r{   r5   r6   rr     r|   )   막힘   퇴적r      적치zC            -> Added to pavement drainage from drainage component: )
r   damage_ratiotraffic_conditiondrainage_conditionoriginal_damage_ratio_quantity original_crack_ratio_quantity_1d original_crack_ratio_quantity_2dadjusted_crack_ratio_1dadjusted_crack_ratio_2ddrainage_damagesrc   Fr   Tz(        Processing drainage damages for c                 3   rw   rx   r5   ry   r{   r5   r6   rr   8  r|   )u   토사퇴적r   r   r   u   배수불량z1            -> Added to pipe_damages (modified): c                 3   rw   rx   r5   ry   r{   r5   r6   rr   =  r|   )u	   배출구u   출구u	   토출구z(            -> Added to outlet_damages: c                 3   rw   rx   r5   ry   r{   r5   r6   rr   A  r|   )u   관로u	   파이프u   관z&            -> Added to pipe_damages: z-            -> Added to pipe_damages (leak): z.            -> Added to pipe_damages (other): z"        Drainage result - Outlet: z, Pipe: z, All: )outlet_conditionpipe_conditionr   outlet_damagespipe_damagesis_blocked_spanz        Added span data: z processing error: i u   기본부재zSetting default data for )rh   r   r   r   r   ri   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   u   API 변환 완료)r$   r
   r   rK   rL   rM   r7   r!   r"   r   upperr   anyr#   updatejoinlistsetlenmaxr	   rE   intfloatr   keysmapping)Kr2   component_filtersapi_dataall_evaluation_resultsfilter_nameevaluation_resultrS   rL   r+   api_keyr   r0   r   re   rf   	span_datais_steel_slabr   r   r   r   surface_deterioration_arear   rq   damage_typedamage_quantityr   leak_quantitysurface_damage_quantityrebar_corrosion_quantitytotal_surface_damagebody_condition_damagesconcrete_crack_widthconcrete_section_damagescorrosion_keywordsr   r   r   r   concrete_damage_textdamage_condition_quantityr   descdamage_condition_textr   r   r   footer_crack_widthr   rX   r   footer_damagedamage_ratio_quantitycrack_ratio_quantity_1dcrack_ratio_quantity_2dr   r   r   r   posr   r   r   modified_descr   r   all_damagesr   default_spanscomponent_keyspan	base_datakeyvaluerailing_keywordsr5   )component_namern   r6   rI      s  





"
0>

0>

0>







 

 "

















 

 

 








"















          %


















	rI   )__doc__flaskr   r   r   pandasr%   rG   rero   r   utils.commonr   r   r	   r
   r   r   utils.condition_evaluationr   r7   r8   routerT   rY   rI   r5   r5   r5   r6   <module>   s       
8