ETest-Vue-FastAPI/ruoyi-fastapi-backend/module_admin/system/service/test_item_service.py

194 lines
7.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from config.constant import CommonConstant
from exceptions.exception import ServiceException
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.system.dao.test_item_dao import Test_itemDao
from module_admin.system.dao.test_form_dao import TestFormDao
from module_admin.system.entity.vo.test_item_vo import DeleteTest_itemModel, Test_itemModel, Test_itemPageQueryModel
from utils.common_util import CamelCaseUtil
from utils.excel_util import ExcelUtil
class Test_itemService:
"""
测试单元模块服务层
"""
@classmethod
async def get_test_item_list_services(
cls, query_db: AsyncSession, query_object: Test_itemPageQueryModel, is_page: bool = False
):
"""
获取测试单元列表信息service
:param query_db: orm对象
:param query_object: 查询参数对象
:param is_page: 是否开启分页
:return: 测试单元列表信息对象
"""
test_item_list_result = await Test_itemDao.get_test_item_list(query_db, query_object, is_page)
# 如果是分页结果处理rows如果是列表直接处理
if isinstance(test_item_list_result, dict) and 'rows' in test_item_list_result:
rows = test_item_list_result['rows']
for item in rows:
await cls._enrich_form_data(query_db, item)
test_item_list_result['rows'] = rows
elif isinstance(test_item_list_result, list):
for item in test_item_list_result:
await cls._enrich_form_data(query_db, item)
return test_item_list_result
@classmethod
async def _enrich_form_data(cls, query_db: AsyncSession, item: dict):
"""
根据表单模板ID动态获取最新的表单JSON数据
:param query_db: orm对象
:param item: 测试单元数据字典
"""
# 获取测试条件表单模板
condition_form_id = item.get('conditionFormId') or item.get('condition_form_id')
if condition_form_id:
form = await TestFormDao.get_by_id(query_db, condition_form_id)
if form:
item['conditionJson'] = form.form_json
item['condition_form_name'] = form.name
# 获取测试结果表单模板
result_form_id = item.get('resultFormId') or item.get('result_form_id')
if result_form_id:
form = await TestFormDao.get_by_id(query_db, result_form_id)
if form:
item['configJson'] = form.form_json
item['result_form_name'] = form.name
@classmethod
async def add_test_item_services(cls, query_db: AsyncSession, page_object: Test_itemModel):
"""
新增测试单元信息service
:param query_db: orm对象
:param page_object: 新增测试单元对象
:return: 新增测试单元校验结果
"""
try:
await Test_itemDao.add_test_item_dao(query_db, 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 edit_test_item_services(cls, query_db: AsyncSession, page_object: Test_itemModel):
"""
编辑测试单元信息service
:param query_db: orm对象
:param page_object: 编辑测试单元对象
:return: 编辑测试单元校验结果
"""
edit_test_item = page_object.model_dump(
exclude_unset=True,
exclude={'test_category_name', 'eut_type_name'}
)
test_item_info = await cls.test_item_detail_services(query_db, page_object.id)
if test_item_info.id:
try:
await Test_itemDao.edit_test_item_dao(query_db, edit_test_item)
await query_db.commit()
return CrudResponseModel(is_success=True, message='更新成功')
except Exception as e:
await query_db.rollback()
raise e
else:
raise ServiceException(message='测试单元不存在')
@classmethod
async def delete_test_item_services(cls, query_db: AsyncSession, page_object: DeleteTest_itemModel):
"""
删除测试单元信息service
:param query_db: orm对象
:param page_object: 删除测试单元对象
:return: 删除测试单元校验结果
"""
if page_object.ids:
id_list = page_object.ids.split(',')
try:
for id in id_list:
await Test_itemDao.delete_test_item_dao(query_db, Test_itemModel(id=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 test_item_detail_services(cls, query_db: AsyncSession, id: int):
"""
获取测试单元详细信息service
:param query_db: orm对象
:param id: ID
:return: ID对应的信息
"""
test_item = await Test_itemDao.get_test_item_detail_by_id(query_db, id=id)
if test_item:
result = Test_itemModel(**CamelCaseUtil.transform_result(test_item))
# 动态获取最新的表单模板数据
await cls._enrich_form_data_for_model(query_db, result)
else:
result = Test_itemModel(**dict())
return result
@classmethod
async def _enrich_form_data_for_model(cls, query_db: AsyncSession, model: Test_itemModel):
"""
根据表单模板ID动态获取最新的表单JSON数据用于Model对象
:param query_db: orm对象
:param model: 测试单元Model对象
"""
# 获取测试条件表单模板
if model.condition_form_id:
form = await TestFormDao.get_by_id(query_db, model.condition_form_id)
if form:
model.condition_json = form.form_json
model.condition_form_name = form.name
# 获取测试结果表单模板
if model.result_form_id:
form = await TestFormDao.get_by_id(query_db, model.result_form_id)
if form:
model.config_json = form.form_json
model.result_form_name = form.name
@staticmethod
async def export_test_item_list_services(test_item_list: List):
"""
导出测试单元信息service
:param test_item_list: 测试单元信息列表
:return: 测试单元信息对应excel的二进制数据
"""
# 创建一个映射字典,将英文键映射到中文键
mapping_dict = {
'id': 'ID',
'name': '名称',
'testCategoryName': '测试类别',
'eutTypeName': '产品类别',
'configJson': '模板JSON',
'memo': '备注说明',
}
binary_data = ExcelUtil.export_list2excel(test_item_list, mapping_dict)
return binary_data