o
    bŸiÆ%  ã                   @   s$  d dl Z d dlmZmZ d dlmZ d dlZd dlZd dl	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZdd„ Zeƒ Zejeeeeedd	Ze d
ee¡ dd„ Zdd„ Z dd„ Z!dd„ Z"d dd„Z#dd„ Z$dd„ Z%dd„ Z&dd„ Z'e(dkrdZ)e!e)ƒ dS dS )!é    N)Ú	CosConfigÚCosS3Client)ÚCosServiceError)ÚDecimalÚROUND_HALF_UP)
Ú	SECRET_IDÚ
SECRET_KEYÚREGIONÚBUCKETÚ
MYSQL_HOSTÚ
MYSQL_PORTÚ
MYSQL_USERÚMYSQL_PASSWORDÚMYSQL_DBÚ	OCR_MODELc                  C   sr   t  ¡ } |  t j¡ | jr| jdd… D ]}|  |¡ qt jddd}t  ¡ }| t j¡ | 	|¡ |  
|¡ | S )u6   é…ç½®æ—¥å¿—ç³»ç»Ÿï¼ŒåŒæ—¶è¾“å‡ºåˆ°æ–‡ä»¶å’ŒæŽ§åˆ¶å°NzP%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)sz%Y-%m-%d %H:%M:%S)Údatefmt)ÚloggingÚ	getLoggerÚsetLevelÚDEBUGÚhandlersÚremoveHandlerÚ	FormatterÚStreamHandlerÚINFOÚsetFormatterÚ
addHandler)ÚloggerÚhandlerÚ	formatterZconsole_handler© r    ú4/home/project/hydrological_data_analyse/src/utils.pyÚsetup_logging   s   þ

r"   Zutf8mb4)ÚhostÚportÚuserÚpasswordZdatabaseÚcharsetu9   MySQLæ•°æ®åº“è¿žæŽ¥å·²å»ºç«‹ï¼Œä¸»æœº: %s, æ•°æ®åº“: %sc	                 C   s$  t  d|¡ zzQtjdd t ¡ (}	d}
| |||||t|||f
}|	 |
|¡}t  d|¡ |	 |
|¡ W d  ƒ n1 s=w   Y  t 	¡  t  d|¡ W W t 
¡  t  d¡ dS  ty‡ } z#t jd	t|ƒdd
 ddl}| ¡  W Y d}~W t 
¡  t  d¡ dS d}~ww t 
¡  t  d¡ w )u  
    å°†OCRä»»åŠ¡æ•°æ®æ’å…¥MySQLæ•°æ®åº“çš„ç‹¬ç«‹å‡½æ•°

    å‚æ•°:
        file_id: æ–‡ä»¶ID
        filename: æ–‡ä»¶å
        cos_url_full: æ–‡ä»¶åœ¨COSä¸­çš„å®Œæ•´URL
        ocr_json_result: OCRè¯†åˆ«ç»“æžœ(JSONæ ¼å¼)
        file_size: æ–‡ä»¶å¤§å°
        task_status: ä»»åŠ¡çŠ¶æ€
        ocr_cost_time: OCRå¤„ç†è€—æ—¶
        input_tokens: è¾“å…¥tokenæ•°
        output_tokens: è¾“å‡ºtokenæ•°
    u'   å¼€å§‹å°†æ•°æ®æ’å…¥MySQLæ•°æ®åº“: %sT)Z	reconnecta   
            INSERT INTO ocr_task 
            (file_id, file_name, file_storage_url, ocr_json_result, file_size, task_status, ocr_engine, ocr_cost_time, input_tokens, output_tokens) 
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            u   æ‰§è¡Œçš„SQLè¯­å¥: %sNu$   æ•°æ®æˆåŠŸæ’å…¥MySQLæ•°æ®åº“: %su   æ•°æ®åº“è¿žæŽ¥å·²å…³é—­u   MySQLæ’å…¥é”™è¯¯: %s)Úexc_infor   F)r   ÚinfoÚdb_connectionZpingÚcursorr   ZmogrifyÚdebugÚexecuteZcommitÚcloseÚ	ExceptionÚerrorÚstrÚ	tracebackÚ	print_exc)Úfile_idÚfilenameÚcos_url_fullÚocr_json_resultÚ	file_sizeÚtask_statusÚocr_cost_timeÚinput_tokensÚoutput_tokensr+   ZsqlÚparamsZ
actual_sqlÚer2   r    r    r!   Úinsert_into_mysql8   sH   
öéö€ö	r?   c              
   C   s   t tttd}t|ƒ}z|jt| | dd¡dd}|d r W dS W dS  ty5 } zW Y d }~dS d }~w t	yG } zW Y d }~dS d }~ww )N)ZRegionZSecretIdZ	SecretKeyú\ú/F)ÚBucketZLocalFilePathZKeyZ	EnableMD5ÚETagT)
r   r	   r   r   r   Úupload_filer
   Úreplacer   r/   )Úlocal_file_pathZcos_file_pathÚconfigÚclientÚresponser>   r    r    r!   Úupload_image_to_cosv   s&   
ü€€ÿrJ   c           	      C   s†   d}d}dd„ t  | ¡D ƒ}t|ƒ}t|ƒD ]*\}}t j | |¡}d|› }td|› d|› ƒ t||ƒ}|r<|d7 }q|d7 }qd S )Nr   c                 S   s   g | ]}|  ¡  d ¡r|‘qS ))z.jpgz.jpegz.png)ÚlowerÚendswith)Ú.0Úfr    r    r!   Ú
<listcomp>‘   s    z1ruiwen_upload_image_directory.<locals>.<listcomp>zimages/ruiwen/u   æ­£åœ¨ä¸Šä¼ : z -> é   )ÚosÚlistdirÚsortedÚ	enumerateÚpathÚjoinÚprintrJ   )	Z	input_dirZsuccess_countZ
fail_countÚfilesÚidxÚfileZ
local_pathÚcos_pathÚsuccessr    r    r!   Úruiwen_upload_image_directory   s   



÷r]   c                 C   s˜   t  | ¡s	| dkr| S t| ƒ}t t |¡¡}d| }t| | dƒ| }t|tƒr@t|ƒdk r@t	t
|ƒƒ}t|jt	dƒtdƒ}|t|ƒkrJt|ƒS |S )uÜ   
    å°†æ•°å€¼ä¿ç•™ä¸‰ä½æœ‰æ•ˆæ•°å­—ï¼Œå¹¶å››èˆäº”å…¥ã€‚
    å‚æ•°:
        x (int/float): è¾“å…¥æ•°å€¼
    è¿”å›ž:
        int æˆ– float: ä¿ç•™ä¸‰ä½æœ‰æ•ˆæ•°å­—åŽçš„ç»“æžœã€‚ä¿è¯å°æ•°ç‚¹åŽæœ€å¤šä¸‰ä½ã€‚
    r   é
   é   rP   z0.001)Úrounding)ÚpdZisnaÚabsÚmathÚfloorÚlog10ÚroundÚ
isinstanceÚfloatr   r1   Úquantizer   Úint)ÚxZabs_xÚexpZscaleZroundedZdecimal_valuer    r    r!   Úretain_three_significant_digitsŸ   s   rm   éç  c                 C   sP   | dv rdS | dv rdS | dkr&|d dkr|d dks"|d	 dkr$d
S dS dS )u   èŽ·å–æŒ‡å®šæœˆä»½çš„å¤©æ•°)rP   é   é   é   é   r^   é   é   )é   é   é	   é   é   r_   ru   r   éd   i  é   é   Nr    )ÚmonthÚyearr    r    r!   Úget_days_in_month»   s   $ûr   c                 C   sF   | j \}}dddddddddddœ
}| | jd¡}|| | }t|ƒS )u¬   
    è®¡ç®—PIL Imageå¯¹è±¡åœ¨å†…å­˜ä¸­å ç”¨çš„å­—èŠ‚å¤§å°ã€‚
    
    å‚æ•°:
        img: PIL.Imageå¯¹è±¡
        
    è¿”å›ž:
        int: å›¾åƒå ç”¨çš„å­—èŠ‚æ•°
    g      À?rP   ro   ru   )
Ú1ÚLÚPZRGBZRGBAZCMYKZLABZHSVÚIÚF)ÚsizeÚgetÚmoderj   )ZimgÚwidthÚheightZmode_to_bppZbytes_per_pixelZmemory_sizer    r    r!   Úget_image_memory_sizeÉ   s   

örŠ   c                 C   s(   | d dkrdd„ | D ƒS dgt | ƒ S )uT   
    å°†è¯¯å·®è¡Œä¸­ç»å¯¹å€¼å¤§äºŽ0.001çš„å•å…ƒæ ¼èƒŒæ™¯è‰²è®¾ç½®ä¸ºæµ…é»„è‰²
    õ   æ—¥æœŸõ   è¯¯å·®c                 S   s*   g | ]}t |tƒst|ƒd krdnd‘qS )gü©ñÒMbP?zbackground-color: #FFFACDÚ )rg   r1   rb   )rM   rk   r    r    r!   rO   ï   s   * z)highlight_high_scores.<locals>.<listcomp>r   )Úlen)Úrowr    r    r!   Úhighlight_high_scoresé   s   r   c                 C   sD   t | tƒrtj| dd} |  ¡  d¡ dd¡ dd¡} t | ¡}|S )NF)Úensure_asciiú`ú(r   ú))rg   ÚdictÚjsonÚdumpsÚstriprE   Úloads)Zjson_strÚjson_resr    r    r!   Újson_formatô   s
   

r›   c                 C   s>  t  d|¡ tƒ }g }d}t|  ¡ ƒD ]A\}\}}t|d ƒ}|d }	|	d |… }	t|	ƒ|k r?|	d g|t|	ƒ   }
|
||< n|	||< | |d ¡ t  d||t|	ƒ¡ qt	 
|¡}tddƒ|_| ¡  t¡|jd< ||jd	< |jd |jd	   d
¡|jd< |jdd}|jjtdd}|j|ddd t  d||j¡ |S )Nu+   å¼€å§‹å°†JSONæ•°æ®è½¬æ¢ä¸ºExcelæ–‡ä»¶: %srt   rP   ÚdataZavgu.   å¤„ç†æœˆä»½: %s, å¤©æ•°: %d, æ•°æ®é•¿åº¦: %dé    u   è®¡ç®—å¹³å‡å€¼u   åŽŸå¹³å‡å€¼ro   rŒ   r‹   )Únames)ZaxisZopenpyxlF)ZengineÚindexu-   Excelæ–‡ä»¶ç”ŸæˆæˆåŠŸ: %s, æ•°æ®å½¢çŠ¶: %s)r   r)   r•   rT   Úitemsr   rŽ   Úappendr,   ra   Z	DataFrameÚrangerŸ   ÚmeanZapplyrm   Úlocrf   Zreset_indexÚstyler   Zto_excelÚshape)rš   Z
excel_pathÚdata_detailZavg_dataZmax_daysÚjÚ
month_namerœ   Z
right_daysZmonth_valuesZpadded_valuesZdfZ	styled_dfr    r    r!   Újson_to_excelý   s0   


 rª   Ú__main__z/D:\project\hydrological_data_analyse/input/test)rn   )*rQ   Z
qcloud_cosr   r   Zqcloud_cos.cos_exceptionr   Úpandasra   rc   Údecimalr   r   Úvarr   r   r	   r
   r   r   r   r   r   r   r–   r   Zpymysqlr"   r   Úconnectr*   r)   r?   rJ   r]   rm   r   rŠ   r   r›   rª   Ú__name__Z
image_pathr    r    r    r!   Ú<module>   sD    0ú	>
 	!þ