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.

224 lines
8.1 KiB

1 month ago
from sqlalchemy import or_, func
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import text
from module_admin.entity.do.dscatalog_do import SysDscatalog
from module_admin.entity.vo.dscatalog_vo import DscatalogModel, DscatalogResponse, CrudDscatalogResponse
from utils.time_format_util import list_format_datetime
class DscatalogDao:
"""
数据标准管理模块数据库操作层
"""
@classmethod
def get_dscatalog_by_id(cls, db: Session, dscatalog_id: int):
"""
根据数据标准id获取在用数据标准信息
:param db: orm对象
:param dscatalog_id: 数据标准id
:return: 在用数据标准信息对象
"""
dscatalog_info = db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_id == dscatalog_id,
SysDscatalog.status == 0,
SysDscatalog.del_flag == 0) \
.first()
return dscatalog_info
@classmethod
def get_dscatalog_by_id_for_list(cls, db: Session, dscatalog_id: int):
"""
用于获取数据标准列表的工具方法
:param db: orm对象
:param dscatalog_id: 数据标准id
:return: 数据标准id对应的信息对象
"""
dscatalog_info = db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_id == dscatalog_id,
SysDscatalog.del_flag == 0) \
.first()
return dscatalog_info
@classmethod
def get_dscatalog_detail_by_id(cls, db: Session, dscatalog_id: int):
"""
根据数据标准id获取数据标准详细信息
:param db: orm对象
:param dscatalog_id: 数据标准id
:return: 数据标准信息对象
"""
dscatalog_info = db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_id == dscatalog_id,
SysDscatalog.del_flag == 0) \
.first()
return dscatalog_info
@classmethod
def get_dscatalog_detail_by_info(cls, db: Session, dscatalog: DscatalogModel):
"""
根据数据标准参数获取数据标准信息
:param db: orm对象
:param dscatalog: 数据标准参数对象
:return: 数据标准信息对象
"""
dscatalog_info = db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_parent_id == dscatalog.dscatalog_parent_id if dscatalog.dscatalog_parent_id else True,
SysDscatalog.dscatalog_name == dscatalog.dscatalog_name if dscatalog.dscatalog_name else True) \
.first()
return dscatalog_info
@classmethod
def get_dscatalog_info_for_edit_option(cls, db: Session, dscatalog_info: DscatalogModel, data_scope_sql: str):
"""
获取数据标准编辑对应的在用数据标准列表信息
:param db: orm对象
:param dscatalog_info: 数据标准对象
:param data_scope_sql: 数据权限对应的查询sql语句
:return: 数据标准列表信息
"""
dscatalog_result = db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_id != dscatalog_info.dscatalog_id,
SysDscatalog.dscatalog_parent_id != dscatalog_info.dscatalog_id,
SysDscatalog.del_flag == 0, SysDscatalog.status == 0,
eval(data_scope_sql)) \
.order_by(SysDscatalog.dscatalog_order_num) \
.distinct().all()
return list_format_datetime(dscatalog_result)
@classmethod
def get_children_dscatalog(cls, db: Session, dscatalog_id: int):
"""
根据数据标准id查询当前数据标准的子数据标准列表信息
:param db: orm对象
:param dscatalog_id: 数据标准id
:return: 子数据标准信息列表
"""
dscatalog_result = db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_parent_id == dscatalog_id,
SysDscatalog.del_flag == 0) \
.all()
return list_format_datetime(dscatalog_result)
@classmethod
def get_dscatalog_all_ancestors(cls, db: Session):
"""
获取所有数据标准的ancestors信息
:param db: orm对象
:return: ancestors信息列表
"""
dscatalog_ancestors = db.query(SysDscatalog.dscatalog_ancestors)\
.filter(SysDscatalog.del_flag == 0)\
.all()
return dscatalog_ancestors
@classmethod
def get_dscatalog_list_for_tree(cls, db: Session, dscatalog_info: DscatalogModel, data_scope_sql: str):
"""
获取所有在用数据标准列表信息
:param db: orm对象
:param dscatalog_info: 数据标准对象
:param data_scope_sql: 数据权限对应的查询sql语句
:return: 在用数据标准列表信息
"""
dscatalog_result = db.query(SysDscatalog) \
.filter(SysDscatalog.status == 0,
SysDscatalog.del_flag == 0,
#SysDscatalog.dscatalog_area != '语句配置',
SysDscatalog.dscatalog_name.like(f'%{dscatalog_info.dscatalog_name}%') if dscatalog_info.dscatalog_name else True,
eval(data_scope_sql)) \
.order_by(SysDscatalog.dscatalog_order_num) \
.distinct().all()
return list_format_datetime(dscatalog_result)
@classmethod
def get_dscatalog_list(cls, db: Session, page_object: DscatalogModel, data_scope_sql: str):
"""
根据查询参数获取数据标准列表信息
:param db: orm对象
:param page_object: 不分页查询参数对象
:param data_scope_sql: 数据权限对应的查询sql语句
:return: 数据标准列表信息对象
"""
dscatalog_result = db.query(SysDscatalog) \
.filter(SysDscatalog.del_flag == 0,
SysDscatalog.status == page_object.status if page_object.status else True,
SysDscatalog.dscatalog_name.like(f'%{page_object.dscatalog_name}%') if page_object.dscatalog_name else True,
eval(data_scope_sql)) \
.order_by(SysDscatalog.dscatalog_order_num) \
.distinct().all()
result = dict(
rows=list_format_datetime(dscatalog_result),
)
return DscatalogResponse(**result)
@classmethod
def add_dscatalog_dao(cls, db: Session, dscatalog: DscatalogModel):
"""
新增数据标准数据库操作
:param db: orm对象
:param dscatalog: 数据标准对象
:return: 新增校验结果
"""
db_dscatalog = SysDscatalog(**dscatalog.dict())
db.add(db_dscatalog)
db.commit()
db.flush()
# 构建原生SQL更新语句
update_sql = """
update sys_dscatalog a
join (
select
row_number() over(PARTITION BY a.dscatalog_parent_id order by a.dscatalog_id ) as s1,
LENGTH(dscatalog_ancestors) - LENGTH(REPLACE(dscatalog_ancestors, ',', '')) + 1 as s2,
a.* from sys_dscatalog a
) b on a.dscatalog_id = b.dscatalog_id
set a.dscatalog_order_num = b.s1,
a.dscatalog_area = concat(b.s2,'')
"""
# 执行原生SQL
db.execute(text(update_sql))
db.commit()
db.flush()
return db_dscatalog
@classmethod
def edit_dscatalog_dao(cls, db: Session, dscatalog: dict):
"""
编辑数据标准数据库操作
:param db: orm对象
:param dscatalog: 需要更新的数据标准字典
:return: 编辑校验结果
"""
db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_id == dscatalog.get('dscatalog_id')) \
.update(dscatalog)
@classmethod
def delete_dscatalog_dao(cls, db: Session, dscatalog: DscatalogModel):
"""
删除数据标准数据库操作
:param db: orm对象
:param dscatalog: 数据标准对象
:return:
#.update({SysDscatalog.del_flag: '2', SysDscatalog.update_by: dscatalog.update_by, SysDscatalog.update_time: dscatalog.update_time})
"""
db.query(SysDscatalog) \
.filter(SysDscatalog.dscatalog_id == dscatalog.dscatalog_id) \
.delete()