48 lines
2.2 KiB
Python
48 lines
2.2 KiB
Python
# encoding: UTF-8
|
|
from .baseCrudController import BaseCrudController
|
|
from ..model.planModel import TestPlan
|
|
from ..model.reportModel import Report
|
|
from ..service.reportService import ReportService
|
|
|
|
|
|
class ReportController(BaseCrudController):
|
|
"""测试报告相关接口控制器。"""
|
|
|
|
def report_list(self):
|
|
"""分页查询报告列表,可按产品、项目、计划过滤。"""
|
|
filters = []
|
|
product_id = self._get(self.req_data, 'productId', 'product_id')
|
|
if product_id:
|
|
filters.append(Report.product_id == int(product_id))
|
|
project_id = self._get(self.req_data, 'projectId', 'project_id')
|
|
if project_id:
|
|
filters.append(Report.project_id == int(project_id))
|
|
plan_id = self._get(self.req_data, 'planId', 'plan_id')
|
|
if plan_id:
|
|
filters.append(Report.plan_id == int(plan_id))
|
|
items, total = ReportService.list_by_filters(self.session, Report, filters, self._get(self.req_data, 'pageNo', default=1), self._get(self.req_data, 'pageSize', default=20), Report.generated_time)
|
|
result_list = []
|
|
for item in items:
|
|
item_dict = self.serialize(item)
|
|
plan = self.session.query(TestPlan).filter(TestPlan.id == item.plan_id).first()
|
|
item_dict['plan_name'] = plan.name if plan else None
|
|
result_list.append(item_dict)
|
|
return {'list': result_list, 'total': total}
|
|
|
|
def report_detail(self):
|
|
"""查询报告详情,返回 summary 和 HTML content。"""
|
|
report_id = self._get(self.req_data, 'reportId', 'report_id', 'id')
|
|
if not report_id:
|
|
return {}, 'reportId 为必传参数'
|
|
item = ReportService.get_by_id(self.session, Report, report_id)
|
|
if not item:
|
|
return {}, '未查询到对应报告!'
|
|
return self.serialize(item), ''
|
|
|
|
def report_generate(self):
|
|
"""同步生成报告:聚合计划执行数据并落库。"""
|
|
plan_id = self._get(self.req_data, 'planId', 'plan_id')
|
|
if not plan_id:
|
|
return 0, 'planId 为必传参数'
|
|
return ReportService.generate_report(self.session, plan_id, self._get(self.req_data, 'generatedBy', 'generated_by'))
|