o
    i5                     @   s0  d Z ddlmZmZmZmZmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZ ddlZddlmZmZmZ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mZm Z m!Z!m"Z"m#Z#m$Z$ ee%Z&ed
 e&_'e	 Z(e()e& de(_*dd eD Z+da,g a-e(j.dd Z/e&0ddd Z1e&0ddd Z2e&j0ddgddd Z3e&0dedd Z4e&0ddd  Z5e&0d!ed"d# Z6e&j0d$dgded%d& Z7e&0d'd(d) Z8e%d*kre  e9d+d,  e9d-ed.  d- e9d/ed0  d1ed2   e9d3 e9d, d+ e&j:ed0 ed2 dd4 dS dS )5u  
珠海燃气保税业务监管系统
功能：
- OPC读取8个罐体液位/密度/温度/流量
- 三类权限管理
- 罐体管道可视化
- 多种报警源（液位高低/温度/密度/流量不平衡）
- 短信报警，超标锁定业务
- 支持分组多人接收报警
    )Flaskrender_templatejsonifyrequestredirecturl_for)LoginManager
login_userlogin_requiredcurrent_userlogout_user)datetimeN)SYSTEMTANKSPIPESALERT)Userdefault_usersROLES)get_latest_datastart
opc_reader)send_level_diff_alertcheck_daily_flow_balancesend_alertsshould_check_alertcheck_level_alertscheck_temperature_alertcheck_density_alert
secret_keyloginc                 C   s   i | ]}|j |qS  )id).0ur!   r!   /root/zhuhai-gas-opc/app.py
<dictcomp>*   s    r&   Fc                 C   s   t t| S )N)users_dbgetint)user_idr!   r!   r%   	load_user0   s   r+   /c                   C   s   t dtd ttdS )u0   主页可视化 - 开发阶段免登录直接看z
index.htmlname)system_nametankspipes)r   r   r   r   r!   r!   r!   r%   index4   s
   r1   z/loginc                  C   s   t jd} t jd}| r9|r9d}t D ]}|j| kr!|} nq|r3||r3t| tt	dS t
dddS tjrBtt	dS t
dS )u	   登录页usernamepasswordNr1   z
login.html   用户名或密码错误)error)r   argsr(   r'   valuesr2   check_passwordr	   r   r   r   r   is_authenticated)r2   r3   userr$   r!   r!   r%   r    <   s    
z
/api/loginPOST)methodsc                  C   s   t  } | d}| d}td|  d }t D ]}|j|kr&|} nq|d u r9td|  tdddS ||sLtd|  tdddS t	| td	|  td
|
 tddS )Nr2   r3   u   登录尝试: u   用户不存在: Fr4   successmessageu   密码错误: u   登录成功: Tr1   )r>   r:   r   )r   get_jsonr(   printr'   r7   r2   r   r8   r	   to_dictr   )datar2   r3   r:   r$   r!   r!   r%   	api_loginS   s.   



rD   z/api/logoutc                   C   s   t   tdtddS )NTr    )r>   r   )r   r   r   r!   r!   r!   r%   logoutq   s   rE   z/api/data/currentc                     s  t  } | di | dt  | dd| dttdd d}td	 rt r|d rg }|d 	 D ]e\}}t
| t fd
dtD d}|sMq6td d	 rg|ddurgt ||d }|| td d	 r|ddurt ||d }|| td d	 r|ddurt ||d }|| q6td d	 rt|d t}	||	 t|dkrt| |D ]'\}
}|
|t  d}t| td|
 d|  d|
v sd|
v rdaqt|S )u   获取最新数据rC   last_update	connectedFr5   N)rC   rF   rG   r5   business_lockedalarm_historyenabledc                 3   s     | ]}|d   kr|V  qdS )r"   Nr!   )r#   ttank_idr!   r%   	<genexpr>   s    z#api_current_data.<locals>.<genexpr>leveltemperaturedensity
daily_flowr   )typecontenttimeu   触发报警: [z] diffT)r   r(   r   now	isoformatrI   rJ   r   r   itemsr)   nextr   r   extendr   r   r   lenr   appendrA   r   )rC   result
all_alertstank_id_str	tank_datatank_configlevel_alertstemp_alertsdens_alertsflow_alerts
alert_typerU   
alarm_infor!   rM   r%   api_current_dataw   sR   









rj   z/api/diff/checkc                  C   s   t  } g }| dstg tdS | d  D ]F\}}|d}|d u r%qdd l}|dd}td d }||kr]|||t	
  d tt|| td||t	
  d	 d
aqt|ttd d dS )NrC   )alertslockedrP   r   
   diff_threshold_default)rN   rW   rV   
level_diff)rT   rN   rW   rV   T)rk   rl   	threshold)r   r(   r   rI   rZ   randomuniformr   r^   r   rX   rY   r   r)   rJ   )rC   rk   rN   rb   rP   rq   rW   rp   r!   r!   r%   
check_diff   s>   




rs   z/api/business/unlockc                   C   s*   t dstdddS datdddS )NapproveFu   无权限解锁r=   Tu   业务已解锁)r   has_permissionr   rI   r!   r!   r!   r%   unlock_business   s   
rv   z/api/report/diffc                  C   s6   t  } t  | d ttttdd  d}t|S )NrC   rH   )generated_atrC   rI   alarm_countrecent_alarms)r   r   rX   rY   rI   r]   rJ   r   )rC   reportr!   r!   r%   diff_report   s   

r{   __main__
z2================================================== r-   u    访问地址: http://host:portu    默认账号: admin / admin123)r   r   debug);__doc__flaskr   r   r   r   r   r   flask_loginr   r	   r
   r   r   r   jsonconfigr   r   r   r   models.userr   r   r   services.opc_readerr   r   r   services.sms_alertr   r   r   r   r   r   r   __name__appr   login_managerinit_app
login_viewr'   rI   rJ   user_loaderr+   router1   r    rD   rE   rj   rs   rv   r{   rA   runr!   r!   r!   r%   <module>   sf    $







;%


