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.
235 lines
8.0 KiB
235 lines
8.0 KiB
1 month ago
|
from sqlalchemy import or_, func
|
||
|
from sqlalchemy.orm import Session,aliased
|
||
|
from sqlalchemy.sql.expression import text
|
||
|
from module_admin.entity.do.dasset_do import SysDasset
|
||
|
from module_admin.entity.vo.dasset_vo import DassetModel, DassetResponse, CrudDassetResponse
|
||
|
from utils.time_format_util import list_format_datetime
|
||
|
|
||
|
|
||
|
class DassetDao:
|
||
|
"""
|
||
|
数据资产管理模块数据库操作层
|
||
|
"""
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_by_id(cls, db: Session, dasset_id: int):
|
||
|
"""
|
||
|
根据数据资产id获取在用数据资产信息
|
||
|
:param db: orm对象
|
||
|
:param dasset_id: 数据资产id
|
||
|
:return: 在用数据资产信息对象
|
||
|
"""
|
||
|
dasset_info = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_id == dasset_id,
|
||
|
SysDasset.status == 0,
|
||
|
SysDasset.del_flag == 0) \
|
||
|
.first()
|
||
|
|
||
|
return dasset_info
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_by_id_for_list(cls, db: Session, dasset_id: int):
|
||
|
"""
|
||
|
用于获取数据资产列表的工具方法
|
||
|
:param db: orm对象
|
||
|
:param dasset_id: 数据资产id
|
||
|
:return: 数据资产id对应的信息对象
|
||
|
"""
|
||
|
dasset_info = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_id == dasset_id,
|
||
|
SysDasset.del_flag == 0) \
|
||
|
.first()
|
||
|
|
||
|
return dasset_info
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_detail_by_id(cls, db: Session, dasset_id: int):
|
||
|
"""
|
||
|
根据数据资产id获取数据资产详细信息
|
||
|
:param db: orm对象
|
||
|
:param dasset_id: 数据资产id
|
||
|
:return: 数据资产信息对象
|
||
|
"""
|
||
|
dasset_info = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_id == dasset_id,
|
||
|
SysDasset.del_flag == 0) \
|
||
|
.first()
|
||
|
|
||
|
return dasset_info
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_detail_by_info(cls, db: Session, dasset: DassetModel):
|
||
|
"""
|
||
|
根据数据资产参数获取数据资产信息
|
||
|
:param db: orm对象
|
||
|
:param dasset: 数据资产参数对象
|
||
|
:return: 数据资产信息对象
|
||
|
"""
|
||
|
dasset_info = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_parent_id == dasset.dasset_parent_id if dasset.dasset_parent_id else True,
|
||
|
SysDasset.dasset_name == dasset.dasset_name if dasset.dasset_name else True) \
|
||
|
.first()
|
||
|
|
||
|
return dasset_info
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_info_for_edit_option(cls, db: Session, dasset_info: DassetModel, data_scope_sql: str):
|
||
|
"""
|
||
|
获取数据资产编辑对应的在用数据资产列表信息
|
||
|
:param db: orm对象
|
||
|
:param dasset_info: 数据资产对象
|
||
|
:param data_scope_sql: 数据权限对应的查询sql语句
|
||
|
:return: 数据资产列表信息
|
||
|
"""
|
||
|
dasset_result = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_id != dasset_info.dasset_id,
|
||
|
SysDasset.dasset_parent_id != dasset_info.dasset_id,
|
||
|
SysDasset.del_flag == 0, SysDasset.status == 0,
|
||
|
eval(data_scope_sql)) \
|
||
|
.order_by(SysDasset.dasset_order_num) \
|
||
|
.distinct().all()
|
||
|
|
||
|
return list_format_datetime(dasset_result)
|
||
|
|
||
|
@classmethod
|
||
|
def get_children_dasset(cls, db: Session, dasset_id: int):
|
||
|
"""
|
||
|
根据数据资产id查询当前数据资产的子数据资产列表信息
|
||
|
:param db: orm对象
|
||
|
:param dasset_id: 数据资产id
|
||
|
:return: 子数据资产信息列表
|
||
|
"""
|
||
|
dasset_result = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_parent_id == dasset_id,
|
||
|
SysDasset.del_flag == 0) \
|
||
|
.all()
|
||
|
|
||
|
return list_format_datetime(dasset_result)
|
||
|
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_all_ancestors(cls, db: Session):
|
||
|
"""
|
||
|
获取所有数据资产的ancestors信息
|
||
|
:param db: orm对象
|
||
|
:return: ancestors信息列表
|
||
|
"""
|
||
|
dasset_ancestors = db.query(SysDasset.dasset_ancestors)\
|
||
|
.filter(SysDasset.del_flag == 0)\
|
||
|
.all()
|
||
|
|
||
|
return dasset_ancestors
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_list_for_tree(cls, db: Session, dasset_info: DassetModel, data_scope_sql: str):
|
||
|
"""
|
||
|
获取所有在用数据资产列表信息
|
||
|
:param db: orm对象
|
||
|
:param dasset_info: 数据资产对象
|
||
|
:param data_scope_sql: 数据权限对应的查询sql语句
|
||
|
:return: 在用数据资产列表信息
|
||
|
"""
|
||
|
dasset_result = db.query(SysDasset) \
|
||
|
.filter(SysDasset.status == 0,
|
||
|
SysDasset.del_flag == 0,
|
||
|
#SysDasset.dasset_area != '语句配置',
|
||
|
SysDasset.dasset_name.like(f'%{dasset_info.dasset_name}%') if dasset_info.dasset_name else True,
|
||
|
eval(data_scope_sql)) \
|
||
|
.order_by(SysDasset.dasset_order_num) \
|
||
|
.distinct().all()
|
||
|
|
||
|
return list_format_datetime(dasset_result)
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_list(cls, db: Session, page_object: DassetModel, data_scope_sql: str):
|
||
|
"""
|
||
|
根据查询参数获取数据资产列表信息
|
||
|
:param db: orm对象
|
||
|
:param page_object: 不分页查询参数对象
|
||
|
:param data_scope_sql: 数据权限对应的查询sql语句
|
||
|
:return: 数据资产列表信息对象
|
||
|
"""
|
||
|
dasset_result = db.query(SysDasset) \
|
||
|
.filter(SysDasset.del_flag == 0,
|
||
|
SysDasset.status == page_object.status if page_object.status else True,
|
||
|
SysDasset.dasset_name.like(f'%{page_object.dasset_name}%') if page_object.dasset_name else True,
|
||
|
eval(data_scope_sql)) \
|
||
|
.order_by(SysDasset.dasset_order_num) \
|
||
|
.distinct().all()
|
||
|
|
||
|
result = dict(
|
||
|
rows=list_format_datetime(dasset_result),
|
||
|
)
|
||
|
|
||
|
return DassetResponse(**result)
|
||
|
|
||
|
@classmethod
|
||
|
def add_dasset_dao(cls, db: Session, dasset: DassetModel):
|
||
|
"""
|
||
|
新增数据资产数据库操作
|
||
|
:param db: orm对象
|
||
|
:param dasset: 数据资产对象
|
||
|
:return: 新增校验结果
|
||
|
"""
|
||
|
db_dasset = SysDasset(**dasset.dict())
|
||
|
db.add(db_dasset)
|
||
|
db.commit()
|
||
|
db.flush()
|
||
|
|
||
|
# 构建原生SQL更新语句
|
||
|
update_sql = """
|
||
|
update sys_dasset a
|
||
|
join (
|
||
|
select row_number() over(PARTITION BY a.dasset_parent_id order by dasset_id ) as s1, a.* from sys_dasset a
|
||
|
) b on a.dasset_id = b.dasset_id
|
||
|
set a.dasset_order_num = b.s1
|
||
|
"""
|
||
|
# 执行原生SQL
|
||
|
db.execute(text(update_sql))
|
||
|
db.commit()
|
||
|
db.flush()
|
||
|
|
||
|
|
||
|
|
||
|
return db_dasset
|
||
|
|
||
|
@classmethod
|
||
|
def edit_dasset_dao(cls, db: Session, dasset: dict):
|
||
|
"""
|
||
|
编辑数据资产数据库操作
|
||
|
:param db: orm对象
|
||
|
:param dasset: 需要更新的数据资产字典
|
||
|
:return: 编辑校验结果
|
||
|
"""
|
||
|
db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_id == dasset.get('dasset_id')) \
|
||
|
.update(dasset)
|
||
|
|
||
|
@classmethod
|
||
|
def delete_dasset_dao(cls, db: Session, dasset: DassetModel):
|
||
|
"""
|
||
|
删除数据资产数据库操作
|
||
|
:param db: orm对象
|
||
|
:param dasset: 数据资产对象
|
||
|
:return: #.update({SysDasset.del_flag: '2', SysDasset.update_by: dasset.update_by, SysDasset.update_time: dasset.update_time})
|
||
|
"""
|
||
|
db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_id == dasset.dasset_id) \
|
||
|
.delete()
|
||
|
|
||
|
|
||
|
|
||
|
@classmethod
|
||
|
def get_dasset_detail_by_dname(cls, db: Session, dasset_name: str):
|
||
|
"""
|
||
|
根据数据资产名称查询当前数据资产的子数据资产列表信息
|
||
|
:param db: orm对象
|
||
|
:param dasset_id: 数据资产name
|
||
|
:return: 数据资产信息对象
|
||
|
"""
|
||
|
dasset_info = db.query(SysDasset) \
|
||
|
.filter(SysDasset.dasset_name == dasset_name,
|
||
|
SysDasset.del_flag == 0) \
|
||
|
.first()
|
||
|
|
||
|
return dasset_info
|