159 lines
5.1 KiB
Python
159 lines
5.1 KiB
Python
from sqlalchemy import delete, select, update, and_, desc
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from module_admin.entity.do.sys_statistics_do import SysStatistics
|
|
from module_admin.entity.vo.sys_statistics_vo import Sys_statisticsModel, Sys_statisticsPageQueryModel
|
|
from utils.page_util import PageUtil
|
|
from datetime import datetime, date
|
|
|
|
|
|
class Sys_statisticsDao:
|
|
"""
|
|
系统统计数据模块数据库操作层
|
|
"""
|
|
|
|
|
|
@classmethod
|
|
async def get_access_control_success_rate(cls, db: AsyncSession, start_time: datetime, end_time: datetime):
|
|
stmt = (
|
|
select(SysStatistics.access_control_success_rate, SysStatistics.stat_date)
|
|
.where(
|
|
and_(
|
|
SysStatistics.stat_date >= start_time,
|
|
SysStatistics.stat_date <= end_time
|
|
)
|
|
)
|
|
.order_by(desc(SysStatistics.stat_date))
|
|
)
|
|
|
|
return (await db.execute(stmt)).mappings().all()
|
|
|
|
@classmethod
|
|
async def get_visitor_count(cls, db: AsyncSession, start_time: date, end_time: date):
|
|
stmt = (
|
|
select(SysStatistics.visitor_guide, SysStatistics.stat_date)
|
|
.where(
|
|
and_(
|
|
SysStatistics.stat_date >= start_time,
|
|
SysStatistics.stat_date <= end_time,
|
|
)
|
|
)
|
|
.order_by(desc(SysStatistics.stat_date))
|
|
)
|
|
|
|
return (await db.execute(stmt)).mappings().all()
|
|
|
|
@classmethod
|
|
async def get_statistics_data(cls, db: AsyncSession, dd: date):
|
|
stmt = (
|
|
select(SysStatistics.llm_call,SysStatistics.access_control_count, SysStatistics.visitor_guide, SysStatistics.exhibition_explanation)
|
|
.where(SysStatistics.stat_date == dd)
|
|
)
|
|
return (await db.execute(stmt)).mappings().first()
|
|
|
|
|
|
@classmethod
|
|
async def get_sys_statistics_detail_by_id(cls, db: AsyncSession, statistic_id: int):
|
|
"""
|
|
根据统计项目ID获取系统统计数据详细信息
|
|
|
|
:param db: orm对象
|
|
:param statistic_id: 统计项目ID
|
|
:return: 系统统计数据信息对象
|
|
"""
|
|
sys_statistics_info = (
|
|
(
|
|
await db.execute(
|
|
select(SysStatistics)
|
|
.where(
|
|
SysStatistics.statistic_id == statistic_id
|
|
)
|
|
)
|
|
)
|
|
.scalars()
|
|
.first()
|
|
)
|
|
|
|
return sys_statistics_info
|
|
|
|
@classmethod
|
|
async def get_sys_statistics_detail_by_info(cls, db: AsyncSession, sys_statistics: Sys_statisticsModel):
|
|
"""
|
|
根据系统统计数据参数获取系统统计数据信息
|
|
|
|
:param db: orm对象
|
|
:param sys_statistics: 系统统计数据参数对象
|
|
:return: 系统统计数据信息对象
|
|
"""
|
|
sys_statistics_info = (
|
|
(
|
|
await db.execute(
|
|
select(SysStatistics).where(
|
|
)
|
|
)
|
|
)
|
|
.scalars()
|
|
.first()
|
|
)
|
|
|
|
return sys_statistics_info
|
|
|
|
@classmethod
|
|
async def get_sys_statistics_list(cls, db: AsyncSession, query_object: Sys_statisticsPageQueryModel, is_page: bool = False):
|
|
"""
|
|
根据查询参数获取系统统计数据列表信息
|
|
|
|
:param db: orm对象
|
|
:param query_object: 查询参数对象
|
|
:param is_page: 是否开启分页
|
|
:return: 系统统计数据列表信息对象
|
|
"""
|
|
query = (
|
|
select(SysStatistics)
|
|
.where(
|
|
SysStatistics.stat_date == query_object.stat_date if query_object.stat_date else True,
|
|
)
|
|
.order_by(SysStatistics.statistic_id)
|
|
.distinct()
|
|
)
|
|
sys_statistics_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
|
|
|
return sys_statistics_list
|
|
|
|
@classmethod
|
|
async def add_sys_statistics_dao(cls, db: AsyncSession, sys_statistics: Sys_statisticsModel):
|
|
"""
|
|
新增系统统计数据数据库操作
|
|
|
|
:param db: orm对象
|
|
:param sys_statistics: 系统统计数据对象
|
|
:return:
|
|
"""
|
|
db_sys_statistics = SysStatistics(**sys_statistics.model_dump(exclude={}))
|
|
db.add(db_sys_statistics)
|
|
await db.flush()
|
|
|
|
return db_sys_statistics
|
|
|
|
@classmethod
|
|
async def edit_sys_statistics_dao(cls, db: AsyncSession, sys_statistics: dict):
|
|
"""
|
|
编辑系统统计数据数据库操作
|
|
|
|
:param db: orm对象
|
|
:param sys_statistics: 需要更新的系统统计数据字典
|
|
:return:
|
|
"""
|
|
await db.execute(update(SysStatistics), [sys_statistics])
|
|
|
|
@classmethod
|
|
async def delete_sys_statistics_dao(cls, db: AsyncSession, sys_statistics: Sys_statisticsModel):
|
|
"""
|
|
删除系统统计数据数据库操作
|
|
|
|
:param db: orm对象
|
|
:param sys_statistics: 系统统计数据对象
|
|
:return:
|
|
"""
|
|
await db.execute(delete(SysStatistics).where(SysStatistics.statistic_id.in_([sys_statistics.statistic_id])))
|
|
|