Files
effekt-interface/app/api/service/planService.py
2026-05-11 14:29:16 +08:00

55 lines
2.2 KiB
Python

# encoding: UTF-8
from ..dao.planDao import PlanDao
from ..model.planModel import PlanCase, TestPlan
class PlanService(object):
"""测试计划域 Service 层,封装计划统计等业务能力。"""
@staticmethod
def create(session, model_cls, add_info):
return PlanDao.create(session, model_cls, add_info)
@staticmethod
def batch_create(session, model_cls, batch_info_list):
return PlanDao.batch_create(session, model_cls, batch_info_list)
@staticmethod
def update_by_id(session, model_cls, obj_id, update_info, soft_delete=True):
return PlanDao.update_by_id(session, model_cls, obj_id, update_info, soft_delete)
@staticmethod
def get_by_id(session, model_cls, obj_id, soft_delete=True):
return PlanDao.get_by_id(session, model_cls, obj_id, soft_delete)
@staticmethod
def list_by_filters(session, model_cls, filter_list, page_num=1, page_size=20, order_column=None, asc=False):
return PlanDao.list_by_filters(session, model_cls, filter_list, int(page_num), int(page_size), order_column, asc)
@staticmethod
def delete_by_id(session, model_cls, obj_id):
return PlanDao.delete_by_id(session, model_cls, obj_id)
@staticmethod
def plan_stats(session, plan_id):
return PlanDao.plan_stats(session, plan_id)
@staticmethod
def refresh_plan_status(session, plan_id):
total = session.query(PlanCase).filter(PlanCase.plan_id == int(plan_id)).count()
if total == 0:
return
unexecuted_count = session.query(PlanCase).filter(PlanCase.plan_id == int(plan_id), PlanCase.status == 0).count()
failed_count = session.query(PlanCase).filter(PlanCase.plan_id == int(plan_id), PlanCase.status.in_([2, 3])).count()
plan = PlanDao.get_by_id(session, TestPlan, plan_id)
if not plan or plan.status == 3:
return
if unexecuted_count == 0:
new_status = 4 if failed_count == 0 else 2
elif unexecuted_count < total:
new_status = 1
else:
new_status = plan.status
if new_status != plan.status:
PlanDao.update_by_id(session, TestPlan, plan_id, {'status': new_status})