from decorator.singleton import singleton
|
from db.db_conn import db_conn
|
from db.models.tables import SiteLatestTime
|
from utils.date_utils import DateUtils
|
from datetime import datetime
|
from enumeration.enum_site_status import EnumSiteStatus
|
|
|
@singleton
|
class SiteLatestTimeRepository(object):
|
"""站点数据最新时刻相关数据库操作"""
|
|
def __init__(self) -> None:
|
pass
|
|
def query_all(self) -> list:
|
"""查询全部"""
|
return db_conn.query_sql(lambda session: session.query(SiteLatestTime).all(), new_session=True)
|
|
def refresh_site_status(self):
|
"""根据当前数据表中的数据最新时刻刷新运行状态"""
|
|
def f(session):
|
datas = session.query(SiteLatestTime).all()
|
for d in datas:
|
self.update_site_status(d, d.latest_time)
|
session.commit()
|
return db_conn.query_sql(f, new_session=True)
|
|
def update_site_status(self, obj: SiteLatestTime, time) -> SiteLatestTime:
|
"""
|
更新站点最新时刻及状态
|
状态:上线(0)、停运(1)和下线(2)
|
"""
|
diff_days = DateUtils.time_distance(time, datetime.now())
|
if diff_days < 0:
|
return obj
|
|
if diff_days <= 3:
|
status = EnumSiteStatus.Online.value
|
elif diff_days <= 7:
|
status = EnumSiteStatus.Stop.value
|
else:
|
status = EnumSiteStatus.Offline.value
|
obj.latest_time = DateUtils.time_check(time)
|
obj.device_status = status
|
return obj
|
|
def query_by_site_status(self, status: int) -> list:
|
"""根据站点状态获取最新时刻表"""
|
|
def f(session):
|
return session.query(SiteLatestTime).filter_by(device_status=status).all()
|
return db_conn.query_sql(f, new_session=True)
|