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.
236 lines
9.7 KiB
236 lines
9.7 KiB
1 month ago
|
from sqlalchemy import and_, or_, desc, func
|
||
|
from sqlalchemy.orm import Session
|
||
|
from module_admin.entity.do.sscf_do import SysSscf
|
||
|
from module_admin.entity.do.dasset_do import SysDasset
|
||
|
from module_admin.entity.vo.sscf_vo import SscfModel, CurrentSscfInfo, SscfQueryModel
|
||
|
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 SscfDao:
|
||
|
"""
|
||
|
短句配置模块数据库操作层
|
||
|
"""
|
||
|
|
||
|
@classmethod
|
||
|
def get_sscf_by_name(cls, db: Session, onum: int):
|
||
|
"""
|
||
|
根据字段名获取字段信息
|
||
|
:param db: orm对象
|
||
|
:param onum: 序号id
|
||
|
:return: 当前表名称信息对象
|
||
|
"""
|
||
|
query_sscf_info = db.query(SysSscf) \
|
||
|
.filter(SysSscf.status == 0, SysSscf.del_flag == 0, SysSscf.onum == onum) \
|
||
|
.order_by(desc(SysSscf.create_time)).distinct().first()
|
||
|
|
||
|
return query_sscf_info
|
||
|
|
||
|
@classmethod
|
||
|
def get_sscf_by_info(cls, db: Session, sscf: SscfModel):
|
||
|
"""
|
||
|
根据字段参数获取字段信息
|
||
|
:param db: orm对象
|
||
|
:param sscf: 表名称参数
|
||
|
:return: 当前表名称参数的表名称信息对象
|
||
|
"""
|
||
|
query_sscf_info = db.query(SysSscf) \
|
||
|
.filter(SysSscf.del_flag == 0,
|
||
|
SysSscf.onum == sscf.onum) \
|
||
|
.order_by(desc(SysSscf.create_time)).distinct().first()
|
||
|
|
||
|
return query_sscf_info
|
||
|
|
||
|
@classmethod
|
||
|
def get_sscf_by_id(cls, db: Session, onum: int):
|
||
|
"""
|
||
|
根据onum获取字段信息
|
||
|
:param db: orm对象
|
||
|
:param onum: 序号id
|
||
|
:return: 当前onum的信息对象
|
||
|
"""
|
||
|
query_sscf_basic_info = db.query(SysSscf) \
|
||
|
.filter(SysSscf.status == 0, SysSscf.del_flag == 0, SysSscf.onum == onum) \
|
||
|
.distinct().first()
|
||
|
query_sscf_dasset_info = db.query(SysDasset).select_from(SysSscf) \
|
||
|
.filter( SysSscf.status == 0, SysSscf.del_flag == 0, SysSscf.onum == onum) \
|
||
|
.join(SysDasset, and_(SysSscf.dasset_id == SysDasset.dasset_id, SysDasset.status == 0, SysDasset.del_flag == 0)) \
|
||
|
.distinct().first()
|
||
|
|
||
|
results = dict(
|
||
|
sscf_basic_info=object_format_datetime(query_sscf_basic_info),
|
||
|
sscf_dasset_info=object_format_datetime(query_sscf_dasset_info)
|
||
|
)
|
||
|
|
||
|
return CurrentSscfInfo(**results)
|
||
|
|
||
|
@classmethod
|
||
|
def get_sscf_detail_by_id(cls, db: Session, onum: int):
|
||
|
"""
|
||
|
根据onum获取字段详细信息
|
||
|
:param db: orm对象
|
||
|
:param onum: 序号id
|
||
|
:return: 当前onum的信息对象
|
||
|
"""
|
||
|
query_sscf_basic_info = db.query(SysSscf) \
|
||
|
.filter(SysSscf.del_flag == 0, SysSscf.onum == onum) \
|
||
|
.distinct().first()
|
||
|
query_sscf_dasset_info = db.query(SysDasset).select_from(SysSscf) \
|
||
|
.filter(SysSscf.del_flag == 0, SysSscf.onum == onum) \
|
||
|
.join(SysDasset, and_(SysSscf.dasset_id == SysDasset.dasset_id, SysDasset.status == 0, SysDasset.del_flag == 0)) \
|
||
|
.distinct().first()
|
||
|
|
||
|
results = dict(
|
||
|
sscf_basic_info=object_format_datetime(query_sscf_basic_info),
|
||
|
sscf_dasset_info=object_format_datetime(query_sscf_dasset_info)
|
||
|
)
|
||
|
return CurrentSscfInfo(**results)
|
||
|
|
||
|
@classmethod
|
||
|
def get_sscf_list(cls, db: Session, query_object: SscfQueryModel, data_scope_sql: str):
|
||
|
"""
|
||
|
根据查询参数获取字段列表信息
|
||
|
:param db: orm对象
|
||
|
:param query_object: 查询参数对象
|
||
|
:param data_scope_sql: 数据权限对应的查询sql语句
|
||
|
:return: 字段列表信息对象
|
||
|
"""
|
||
|
|
||
|
sscf_list = db.query(SysSscf, SysDasset) \
|
||
|
.filter(SysSscf.del_flag == 0,
|
||
|
or_(SysSscf.dasset_id == query_object.dasset_id, SysSscf.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,
|
||
|
SysSscf.onum.like(f'%{query_object.onum}%') if query_object.onum else True,
|
||
|
#SysSscf.keywords.like(f'%{query_object.keywords}%') if query_object.keywords else True,
|
||
|
SysSscf.keyword.like(f'%{query_object.keyword}%') if query_object.keyword else True,
|
||
|
SysSscf.algorithm.like(f'%{query_object.algorithm}%') if query_object.algorithm else True,
|
||
|
SysSscf.order.like(f'%{query_object.order}%') if query_object.order else True,
|
||
|
SysSscf.whole_sentence.like(f'%{query_object.whole_sentence}%') if query_object.whole_sentence else True,
|
||
|
SysSscf.type.like(f'%{query_object.type}%') if query_object.type else True,
|
||
|
SysSscf.supp_expl.like(f'%{query_object.supp_expl}%') if query_object.supp_expl else True,
|
||
|
SysSscf.status == query_object.status if query_object.status else True,
|
||
|
SysSscf.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_(SysSscf.dasset_id == SysDasset.dasset_id, SysDasset.status == 0, SysDasset.del_flag == 0)) \
|
||
|
.distinct().all()
|
||
|
|
||
|
result_list: List[Union[dict, None]] = []
|
||
|
if sscf_list:
|
||
|
for item in sscf_list:
|
||
|
obj = dict(
|
||
|
onum=item[0].onum,
|
||
|
dasset_id=item[0].dasset_id,
|
||
|
dasset_name=item[1].dasset_name if item[1] else '',
|
||
|
#keywords=item[0].keywords,
|
||
|
keyword=item[0].keyword,
|
||
|
algorithm=item[0].algorithm,
|
||
|
order=item[0].order,
|
||
|
whole_sentence=item[0].whole_sentence,
|
||
|
type=item[0].type,
|
||
|
supp_expl=item[0].supp_expl,
|
||
|
# bak1=item[0].bak1,
|
||
|
# bak2=item[0].bak2,
|
||
|
# bak3=item[0].bak3,
|
||
|
# bak4=item[0].bak4,
|
||
|
# bak5=item[0].bak5,
|
||
|
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
|
||
|
)
|
||
|
result_list.append(obj)
|
||
|
return format_datetime_dict_list(result_list)
|
||
|
|
||
|
@classmethod
|
||
|
def add_sscf_dao(cls, db: Session, sscf: SscfModel):
|
||
|
"""
|
||
|
新增字段数据库操作
|
||
|
:param db: orm对象
|
||
|
:param sscf: 字段对象
|
||
|
:return: 新增校验结果
|
||
|
"""
|
||
|
db_sscf = SysSscf(**sscf.dict())
|
||
|
db.add(db_sscf)
|
||
|
db.commit()
|
||
|
db.flush()
|
||
|
# 假设 SysSscf 是一个模型类,并且它有 name1, name2, name3 这三个字段
|
||
|
db.query(SysSscf) \
|
||
|
.update({SysSscf.keywords: func.concat('{"keyword": ["',SysSscf.keyword,'"], "algorithm": "',SysSscf.algorithm,'", "order": "',SysSscf.order,'", "whole_sentence": "',SysSscf.whole_sentence,'"}')})
|
||
|
|
||
|
return db_sscf
|
||
|
|
||
|
@classmethod
|
||
|
def edit_sscf_dao(cls, db: Session, sscf: dict):
|
||
|
"""
|
||
|
编辑字段数据库操作
|
||
|
:param db: orm对象
|
||
|
:param sscf: 需要更新的字段字典
|
||
|
:return: 编辑校验结果
|
||
|
"""
|
||
|
db.query(SysSscf) \
|
||
|
.filter(SysSscf.keyword == sscf.get('keyword')) \
|
||
|
.update(sscf)
|
||
|
|
||
|
|
||
|
|
||
|
# 假设 SysSscf 是一个模型类,并且它有 name1, name2, name3 这三个字段
|
||
|
db.query(SysSscf) \
|
||
|
.filter(SysSscf.keyword == sscf.get('keyword')) \
|
||
|
.update({SysSscf.keywords: func.concat('{"keyword": ["',SysSscf.keyword,'"], "algorithm": "',SysSscf.algorithm,'", "order": "',SysSscf.order,'", "whole_sentence": "',SysSscf.whole_sentence,'"}')})
|
||
|
#.update({SysSscf.keywords: func.concat(SysSscf.keyword, SysSscf.algorithm,SysSscf.order, SysSscf.whole_sentence)})
|
||
|
|
||
|
db.query(SysSscf) \
|
||
|
.filter(SysSscf.onum == sscf.get('onum')) \
|
||
|
.update(sscf)
|
||
|
|
||
|
|
||
|
@classmethod
|
||
|
def delete_sscf_dao(cls, db: Session, sscf: SscfModel):
|
||
|
"""
|
||
|
删除字段数据库操作
|
||
|
:param db: orm对象
|
||
|
:param sscf: 字段对象
|
||
|
:return:
|
||
|
"""
|
||
|
db.query(SysSscf) \
|
||
|
.filter(SysSscf.onum == sscf.onum) \
|
||
|
.delete()
|
||
|
#.update({SysSscf.del_flag: '2', SysSscf.update_by: sscf.update_by, SysSscf.update_time: sscf.update_time})
|
||
|
|
||
|
|
||
|
|
||
|
@classmethod
|
||
|
def get_sscf_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_sscf_by_info_imp(cls, db: Session, sscf: SscfModel):
|
||
|
"""
|
||
|
根据字段参数获取字段信息
|
||
|
:param db: orm对象
|
||
|
:param sscf: 表名称参数
|
||
|
:return: 当前表名称参数的表名称信息对象
|
||
|
"""
|
||
|
query_sscf_info_imp = db.query(SysSscf) \
|
||
|
.filter(SysSscf.del_flag == 0,
|
||
|
SysSscf.keyword == sscf.keyword) \
|
||
|
.order_by(desc(SysSscf.create_time)).distinct().first()
|
||
|
|
||
|
return query_sscf_info_imp
|