Files
effekt-interface/app/api/service/reportService.py
2026-05-07 19:21:19 +08:00

47 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# encoding: UTF-8
from ..dao.planDao import PlanDao
from ..dao.projectDao import ProjectDao
from ..dao.reportDao import ReportDao
from ..model.planModel import TestPlan
from ..model.reportModel import Report
class ReportService(object):
@staticmethod
def create(session, model_cls, add_info):
return ReportDao.create(session, model_cls, add_info)
@staticmethod
def get_by_id(session, model_cls, obj_id):
return ReportDao.get_by_id(session, model_cls, obj_id)
@staticmethod
def list_by_filters(session, model_cls, filter_list, page_num=1, page_size=20, order_column=None, asc=False):
return ReportDao.list_by_filters(session, model_cls, filter_list, int(page_num), int(page_size), order_column, asc)
@staticmethod
def generate_report(session, plan_id, generated_by=None):
plan = PlanDao.get_by_id(session, TestPlan, plan_id)
if not plan:
return 0, '未查询到对应计划!'
project = ProjectDao.get_by_id(session, ProjectDao.project_model(), plan.project_id)
if not project:
return 0, '未查询到对应项目!'
# 复用计划统计,保证计划详情和报告中的指标口径一致。
stats = PlanDao.plan_stats(session, plan_id)
# MVP 阶段先生成简单 HTML后续可替换为模板渲染器。
content = '<html><body><h1>{}</h1><p>总用例:{}</p><p>通过率:{}%</p></body></html>'.format(
plan.name, stats['total_cases'], stats['pass_rate']
)
add_info = {
'plan_id': int(plan_id),
'project_id': plan.project_id,
'product_id': project.product_id,
'name': '{}_报告'.format(plan.name),
'report_type': 1,
'summary': stats,
'content': content,
'generated_by': generated_by
}
return ReportDao.create(session, Report, add_info)