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.
249 lines
9.4 KiB
249 lines
9.4 KiB
from fastapi import Request
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from exceptions.exception import ServiceException
|
|
from module_admin.dao.datastd_dao import DataStdDao
|
|
from module_admin.entity.vo.common_vo import CrudResponseModel
|
|
from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdCodeItemModel,DeleteDataStdModel
|
|
from utils.common_util import CamelCaseUtil
|
|
import uuid
|
|
class DataStdService:
|
|
"""
|
|
数据源标准服务层
|
|
"""
|
|
|
|
@classmethod
|
|
async def get_std_code_list_services(
|
|
cls, query_db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False
|
|
):
|
|
"""
|
|
获取列配置列表信息service
|
|
|
|
:param query_db: orm对象
|
|
:param query_object: 查询参数对象
|
|
:param is_page: 是否开启分页
|
|
:return: 列配置列表信息对象
|
|
"""
|
|
col_list_result = await DataStdDao.get_std_code_list(query_db, query_object, is_page)
|
|
return col_list_result
|
|
|
|
@classmethod
|
|
async def get_std_code_item_list_services(
|
|
cls, query_db: AsyncSession, query_object: DataStdCodeItemModel, is_page: bool = False
|
|
):
|
|
"""
|
|
获取行配置列表信息service
|
|
|
|
:param query_db: orm对象
|
|
:param query_object: 查询参数对象
|
|
:param is_page: 是否开启分页
|
|
:return: 行配置列表信息对象
|
|
"""
|
|
row_list_result = await DataStdDao.get_std_code_item_list(query_db, query_object, is_page)
|
|
return row_list_result
|
|
|
|
@classmethod
|
|
async def get_std_code_by_id_services(cls, query_db: AsyncSession, id: str):
|
|
"""
|
|
获取列配置详细信息service
|
|
|
|
:param query_db: orm对象
|
|
:param id: 列配置ID
|
|
:return: 列配置详细信息对象
|
|
"""
|
|
col = await DataStdDao.get_std_code_by_id(query_db, id)
|
|
if col:
|
|
result = DataStdCodeModel(**CamelCaseUtil.transform_result(col))
|
|
else:
|
|
result = DataStdCodeModel(**dict())
|
|
return result
|
|
|
|
@classmethod
|
|
async def get_std_code_item_by_id_services(cls, query_db: AsyncSession, id: str):
|
|
"""
|
|
获取行配置详细信息service
|
|
|
|
:param query_db: orm对象
|
|
:param id: 行配置ID
|
|
:return: 行配置详细信息对象
|
|
"""
|
|
row = await DataStdDao.get_std_code_item_by_id(query_db, id)
|
|
if row:
|
|
result = DataStdCodeItemModel(**CamelCaseUtil.transform_result(row))
|
|
else:
|
|
result = DataStdCodeItemModel(**dict())
|
|
return result
|
|
|
|
@classmethod
|
|
async def add_std_code_services(cls, request: Request, query_db: AsyncSession, page_object: DataStdCodeModel):
|
|
"""
|
|
新增列配置服务
|
|
|
|
:param request: Request对象
|
|
:param query_db: orm对象
|
|
:param page_object: 新增的列配置对象
|
|
:return: 新增列配置校验结果
|
|
"""
|
|
try:
|
|
# 创建新的 page_object 实例,避免修改原始对象
|
|
new_page_object = DataStdCodeModel(**page_object.model_dump(by_alias=True))
|
|
new_page_object.id = str(uuid.uuid4())
|
|
# 调用 DAO 方法插入数据
|
|
await DataStdDao.add_std_code(query_db, new_page_object)
|
|
await query_db.commit()
|
|
return CrudResponseModel(is_success=True, message='新增标准代码成功')
|
|
except Exception as e:
|
|
await query_db.rollback()
|
|
raise e
|
|
@classmethod
|
|
async def add_std_code_item_services(cls, request: Request, query_db: AsyncSession, page_object: DataStdCodeItemModel):
|
|
"""
|
|
新增列配置服务
|
|
|
|
:param request: Request对象
|
|
:param query_db: orm对象
|
|
:param page_object: 新增的列配置对象
|
|
:return: 新增列配置校验结果
|
|
"""
|
|
try:
|
|
# 创建新的 page_object 实例,避免修改原始对象
|
|
new_page_object = DataStdCodeItemModel(**page_object.model_dump(by_alias=True))
|
|
new_page_object.id = str(uuid.uuid4())
|
|
# 调用 DAO 方法插入数据
|
|
await DataStdDao.add_std_code_item(query_db, new_page_object)
|
|
await query_db.commit()
|
|
return CrudResponseModel(is_success=True, message='新增标准代码项成功')
|
|
except Exception as e:
|
|
await query_db.rollback()
|
|
raise e
|
|
|
|
|
|
@classmethod
|
|
async def code_detail_services(cls, query_db: AsyncSession, col: str):
|
|
"""
|
|
获取参数配置详细信息service
|
|
|
|
:param query_db: orm对象
|
|
:param config_id: 参数配置id
|
|
:return: 参数配置id对应的信息
|
|
"""
|
|
config = await DataStdDao.get_std_code_by_id(query_db, col)
|
|
if config:
|
|
result = DataStdCodeModel(**CamelCaseUtil.transform_result(config))
|
|
else:
|
|
result = DataStdCodeModel(**dict())
|
|
|
|
return result
|
|
@classmethod
|
|
async def code_item_detail_services(cls, query_db: AsyncSession, row_id: str):
|
|
"""
|
|
获取参数配置详细信息service
|
|
|
|
:param query_db: orm对象
|
|
:param config_id: 参数配置id
|
|
:return: 参数配置id对应的信息
|
|
"""
|
|
config = await DataStdDao.get_std_code_item_by_id(query_db, row_id)
|
|
if config:
|
|
result = DataStdCodeItemModel(**CamelCaseUtil.transform_result(config))
|
|
else:
|
|
result = DataStdCodeItemModel(**dict())
|
|
|
|
return result
|
|
@classmethod
|
|
async def edit_std_code_services(cls, request: Request, query_db: AsyncSession, page_object: DataStdCodeModel):
|
|
"""
|
|
编辑列配置服务
|
|
|
|
:param request: Request对象
|
|
:param query_db: orm对象
|
|
:param page_object: 编辑的列配置对象
|
|
:return: 编辑列配置校验结果
|
|
"""
|
|
edit_col = page_object.model_dump(exclude_unset=True)
|
|
col_info = await cls.get_std_code_by_id_services(query_db, page_object.id)
|
|
|
|
if col_info:
|
|
try:
|
|
await DataStdDao.update_std_code(query_db, edit_col)
|
|
await query_db.commit()
|
|
return CrudResponseModel(is_success=True, message='编辑标准代码成功')
|
|
except Exception as e:
|
|
await query_db.rollback()
|
|
raise e
|
|
else:
|
|
raise ServiceException(message=f'标准代码{page_object.id}不存在')
|
|
|
|
@classmethod
|
|
async def edit_std_code_item_services(cls, request: Request, query_db: AsyncSession, page_object: DataStdCodeItemModel):
|
|
"""
|
|
编辑行配置服务
|
|
:param request: Request对象
|
|
:param query_db: orm对象
|
|
:param page_object: 编辑的行配置对象
|
|
:return: 编辑行配置校验结果
|
|
"""
|
|
edit_row = page_object.model_dump(exclude_unset=True)
|
|
row_info = await cls.get_std_code_item_by_id_services(query_db, page_object.id)
|
|
if row_info:
|
|
try:
|
|
await DataStdDao.update_std_code_Item(query_db, edit_row)
|
|
await query_db.commit()
|
|
return CrudResponseModel(is_success=True, message='编辑标准代码项配置成功')
|
|
except Exception as e:
|
|
await query_db.rollback()
|
|
raise e
|
|
else:
|
|
raise ServiceException(message=f'标准代码项{page_object.id}不存在')
|
|
|
|
@classmethod
|
|
async def delete_std_code_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteDataStdModel):
|
|
"""
|
|
删除列配置服务
|
|
:param request: Request对象
|
|
:param query_db: orm对象
|
|
:param page_object: 删除列配置对象
|
|
:return: 删除列配置校验结果
|
|
"""
|
|
if page_object.ids:
|
|
col_id_list = page_object.ids.split(',')
|
|
try:
|
|
for col_id in col_id_list:
|
|
col_info = await cls.get_std_code_by_id_services(query_db, col_id)
|
|
if col_info:
|
|
# 校验不能删除的系统内置列
|
|
await DataStdDao.delete_std_code(query_db, col_id)
|
|
await query_db.commit()
|
|
|
|
|
|
return CrudResponseModel(is_success=True, message='删除列配置成功')
|
|
except Exception as e:
|
|
await query_db.rollback()
|
|
raise e
|
|
else:
|
|
raise ServiceException(message='传入列配置ID为空')
|
|
|
|
@classmethod
|
|
async def delete_std_code_item_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteDataStdModel):
|
|
"""
|
|
删除行配置服务
|
|
|
|
:param request: Request对象
|
|
:param query_db: orm对象
|
|
:param page_object: 删除行配置对象
|
|
:return: 删除行配置校验结果
|
|
"""
|
|
if page_object.ids:
|
|
row_id_list = page_object.ids.split(',')
|
|
try:
|
|
for row_id in row_id_list:
|
|
row_info = await cls.get_std_code_item_by_id_services(query_db, row_id)
|
|
if row_info:
|
|
await DataStdDao.delete_std_code_Item(query_db, row_id)
|
|
await query_db.commit()
|
|
return CrudResponseModel(is_success=True, message='删除行配置成功')
|
|
except Exception as e:
|
|
await query_db.rollback()
|
|
raise e
|
|
else:
|
|
raise ServiceException(message='传入行配置ID为空')
|
|
|
|
|