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
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()
|