You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

207 lines
8.6 KiB

from sqlalchemy import and_, or_, desc, func
from sqlalchemy.orm import Session
from module_admin.entity.do.vecset_do import SysVecset
from module_admin.entity.do.dasset_do import SysDasset
from module_admin.entity.vo.vecset_vo import VecsetModel, CurrentVecsetInfo, VecsetQueryModel
from utils.time_format_util import object_format_datetime, list_format_datetime, format_datetime_dict_list
from datetime import datetime, time
from typing import Union, List
class VecsetDao:
"""
数据智能语句配置模块数据库操作层
"""
@classmethod
def get_vecset_by_name(cls, db: Session, stab_name: str):
"""
根据字段名获取字段信息
:param db: orm对象
:param stab_name: 表名称
:return: 当前表名称信息对象
"""
query_vecset_info = db.query(SysVecset) \
.filter(SysVecset.status == 0, SysVecset.del_flag == 0, SysVecset.stab_name == stab_name) \
.order_by(desc(SysVecset.create_time)).distinct().first()
return query_vecset_info
@classmethod
def get_vecset_by_info(cls, db: Session, vecset: VecsetModel):
"""
根据字段参数获取字段信息
:param db: orm对象
:param vecset: 表名称参数
:return: 当前表名称参数的表名称信息对象
"""
query_vecset_info = db.query(SysVecset) \
.filter(SysVecset.del_flag == 0,
SysVecset.onum == vecset.onum) \
.order_by(desc(SysVecset.create_time)).distinct().first()
return query_vecset_info
@classmethod
def get_vecset_by_id(cls, db: Session, onum: int):
"""
根据onum获取字段信息
:param db: orm对象
:param onum: 序号id
:return: 当前onum的信息对象
"""
query_vecset_basic_info = db.query(SysVecset) \
.filter(SysVecset.status == 0, SysVecset.del_flag == 0, SysVecset.onum == onum) \
.distinct().first()
query_vecset_dasset_info = db.query(SysDasset).select_from(SysVecset) \
.filter( SysVecset.status == 0, SysVecset.del_flag == 0, SysVecset.onum == onum) \
.join(SysDasset, and_(SysVecset.dasset_id == SysDasset.dasset_id, SysDasset.status == 0, SysDasset.del_flag == 0)) \
.distinct().first()
results = dict(
vecset_basic_info=object_format_datetime(query_vecset_basic_info),
vecset_dasset_info=object_format_datetime(query_vecset_dasset_info)
)
return CurrentVecsetInfo(**results)
@classmethod
def get_vecset_detail_by_id(cls, db: Session, onum: int):
"""
根据onum获取字段详细信息
:param db: orm对象
:param onum: 序号id
:return: 当前onum的信息对象
"""
query_vecset_basic_info = db.query(SysVecset) \
.filter(SysVecset.del_flag == 0, SysVecset.onum == onum) \
.distinct().first()
query_vecset_dasset_info = db.query(SysDasset).select_from(SysVecset) \
.filter(SysVecset.del_flag == 0, SysVecset.onum == onum) \
.join(SysDasset, and_(SysVecset.dasset_id == SysDasset.dasset_id, SysDasset.status == 0, SysDasset.del_flag == 0)) \
.distinct().first()
results = dict(
vecset_basic_info=object_format_datetime(query_vecset_basic_info),
vecset_dasset_info=object_format_datetime(query_vecset_dasset_info)
)
return CurrentVecsetInfo(**results)
@classmethod
def get_vecset_list(cls, db: Session, query_object: VecsetQueryModel, data_scope_sql: str):
"""
根据查询参数获取字段列表信息
:param db: orm对象
:param query_object: 查询参数对象
:param data_scope_sql: 数据权限对应的查询sql语句
:return: 字段列表信息对象
"""
vecset_list = db.query(SysVecset, SysDasset) \
.filter(SysVecset.del_flag == 0,
or_(SysVecset.dasset_id == query_object.dasset_id, SysVecset.dasset_id.in_(
db.query(SysDasset.dasset_id).filter(func.find_in_set(query_object.dasset_id, SysDasset.dasset_ancestors))
)) if query_object.dasset_id else True,
SysVecset.stab_name.like(f'%{query_object.stab_name}%') if query_object.stab_name else True,
SysVecset.squery.like(f'%{query_object.squery}%') if query_object.squery else True,
SysVecset.sanal_plan.like(f'%{query_object.sanal_plan}%') if query_object.sanal_plan else True,
SysVecset.sintnt_term.like(f'%{query_object.sintnt_term}%') if query_object.sintnt_term else True,
SysVecset.ssql.like(f'%{query_object.ssql}%') if query_object.ssql else True,
SysVecset.sim_thrsh.like(f'%{query_object.sim_thrsh}%') if query_object.sim_thrsh else True,
SysVecset.status == query_object.status if query_object.status else True,
SysVecset.create_time.between(
datetime.combine(datetime.strptime(query_object.create_time_start, '%Y-%m-%d'), time(00, 00, 00)),
datetime.combine(datetime.strptime(query_object.create_time_end, '%Y-%m-%d'), time(23, 59, 59)))
if query_object.create_time_start and query_object.create_time_end else True,
eval(data_scope_sql)
) \
.outerjoin(SysDasset, and_(SysVecset.dasset_id == SysDasset.dasset_id, SysDasset.status == 0, SysDasset.del_flag == 0)) \
.distinct().all()
result_list: List[Union[dict, None]] = []
if vecset_list:
for item in vecset_list:
obj = dict(
onum=item[0].onum,
dasset_id=item[0].dasset_id,
dasset_name=item[1].dasset_name if item[1] else '',
stab_name=item[0].stab_name,
squery=item[0].squery,
sanal_plan=item[0].sanal_plan,
sintnt_term=item[0].sintnt_term,
ssql=item[0].ssql,
sim_thrsh=item[0].sim_thrsh,
status=item[0].status,
del_flag=item[0].del_flag,
create_by=item[0].create_by,
create_time=item[0].create_time,
update_by=item[0].update_by,
update_time=item[0].update_time,
remark=item[0].remark
)
result_list.append(obj)
return format_datetime_dict_list(result_list)
@classmethod
def add_vecset_dao(cls, db: Session, vecset: VecsetModel):
"""
新增字段数据库操作
:param db: orm对象
:param vecset: 字段对象
:return: 新增校验结果
"""
db_vecset = SysVecset(**vecset.dict())
db.add(db_vecset)
db.flush()
return db_vecset
@classmethod
def edit_vecset_dao(cls, db: Session, vecset: dict):
"""
编辑字段数据库操作
:param db: orm对象
:param vecset: 需要更新的字段字典
:return: 编辑校验结果
"""
db.query(SysVecset) \
.filter(SysVecset.squery == vecset.get('squery')) \
.update(vecset)
@classmethod
def delete_vecset_dao(cls, db: Session, vecset: VecsetModel):
"""
删除字段数据库操作
:param db: orm对象
:param vecset: 字段对象
:return:
"""
db.query(SysVecset) \
.filter(SysVecset.onum == vecset.onum) \
.update({SysVecset.del_flag: '2', SysVecset.update_by: vecset.update_by, SysVecset.update_time: vecset.update_time})
@classmethod
def get_vecset_dasset_info(cls, db: Session, dasset_id: int):
dasset_basic_info = db.query(SysDasset) \
.filter(SysDasset.dasset_id == dasset_id,
SysDasset.status == 0,
SysDasset.del_flag == 0 ) \
.first()
return dasset_basic_info
@classmethod
def get_vecset_by_info_imp(cls, db: Session, vecset: VecsetModel):
"""
根据字段参数获取字段信息
:param db: orm对象
:param vecset: 表名称参数
:return: 当前表名称参数的表名称信息对象
"""
query_vecset_info_imp = db.query(SysVecset) \
.filter(SysVecset.del_flag == 0,
SysVecset.squery == vecset.squery) \
.order_by(desc(SysVecset.create_time)).distinct().first()
return query_vecset_info_imp