diff --git a/services/plan_service.py b/services/plan_service.py index 5de925332e41e8c5bb0bb6f409327bec45b25f4f..20a7e651cb825cb8a9cce407291fe94807a4be3f 100644 --- a/services/plan_service.py +++ b/services/plan_service.py @@ -69,10 +69,10 @@ async def add_tasks(data, plan_id): plan = await Plan.query_obj_one(Plan.id == plan_id) if not plan: return ERROR_UN_EXISTED_PLAN, False - tasks = ','.join(str(x) for x in data['tasks']) - plan.tasks = tasks + tasks = [str(x) for x in data['tasks']] + plan.tasks = ','.join(tasks) await plan.update() - await Task.batch_update({'plan_id': plan_id, 'plan_title': plan.plan_title}, Task.id.in_(data['tasks'])) + await Task.batch_update({'plan_id': plan_id, 'plan_title': plan.title}, Task.id.in_(data['tasks'])) return plan.to_dict(), True @@ -108,13 +108,22 @@ async def update_plan(data, plan_id, user): if 'reviewer' in data: plan.reviewer = data['reviewer'] if 'tasks' in data: + existed_tasks, update_tasks = plan.tasks.split(','), [str(task_id) for task_id in data['tasks']] + delete_tasks = [i for i in existed_tasks if i not in set(update_tasks)] + if delete_tasks: + await Task.batch_update({'plan_id': -1, 'plan_title': ''}, Task.id.in_(delete_tasks)) plan.tasks = ','.join([str(task_id) for task_id in data['tasks']]) plan.content = data['content'] plan.gmt_modified = datetime.now() plan.status = Status_EN.INIT.value plan.title = data['title'] - await plan.update() - return plan.to_dict(), True + try: + await plan.update() + return plan.to_dict(), True + # for reviewer in data['reviewers'].split(): + # await PlanReview.save(PlanReview(plan_id=result.id, reviewer=reviewer)) + except sqlalchemy.exc.IntegrityError: + return f'{data["title"]}已经存在', False async def review_plan(is_accept, plan_id, reviewer): @@ -358,3 +367,27 @@ def get_plan_template(): 'manual_task': list() } } + + +async def make_a_copy(plan_id, user_infos): + fields = [Plan.title, Plan.req_id, Plan.req_title, Plan.content, Plan.cases, Plan.tasks, Plan.reviewers, Plan.owner] + plan = await Plan.query_obj_by_fields(fields, Plan.id == plan_id) + if not plan: + return ERROR_UN_EXISTED_PLAN, False + plan_list_length = await Plan.count(Plan.title.startswith(plan['title'])) + plan['title'] = f'{plan["title"]}-副本({plan_list_length})' + new_plan = await Plan().save(plan) + if plan['tasks']: + tasks = await Task.query_dict_all(Task.id.in_(plan['tasks'].split(','))) + for task in tasks: + task['name'] = f'{task["name"]}-副本({plan_list_length})' + task['status'] = Status_EN.INIT.value + task['plan_id'] = new_plan.id + task['plan_title'] = new_plan.title + del task['id'] + del task['gmt_modified'] + del task['gmt_created'] + task_ids = await Task.batch_add(tasks) + new_plan.tasks = ','.join([str(i) for i in task_ids]) + await new_plan.update() + return new_plan.to_dict(), True diff --git a/services/task_service.py b/services/task_service.py index 2d38fd6c0c357747ec2b65cd83a911bf87c345b0..b3e5cb914056ddd253b7d20a96347f4089e67e09 100644 --- a/services/task_service.py +++ b/services/task_service.py @@ -121,6 +121,8 @@ async def modify_task(data, task_id, user): return ERROR_NO_OP_PERMISSION, False if 'name' in data: task.name = data['name'] + if 'test_type' in data: + task.test_type = data['test_type'] if 'desc' in data: task.desc = data['desc'] if 'run_method' in data: diff --git a/views/plan_view.py b/views/plan_view.py index b92f28e3441ea89647126f5d64c03132d41421ce..01b61298040c9da0308694c590f20acf3302f964 100644 --- a/views/plan_view.py +++ b/views/plan_view.py @@ -64,7 +64,7 @@ async def get_plan_task_list(_, plan_id, user_infos): @bp.post('//tasks') @read_auth async def add_task_view(request, plan_id, user_infos): - response, ok = check_args('tasks', request.json) + response, ok = check_args(['tasks'], request.json) if not ok: return response result, ok = await add_tasks(request.json, plan_id) @@ -124,3 +124,15 @@ async def run(_, plan_id, user_infos): async def check_status(_, plan_id, user_infos): await generate_plan_report(plan_id) return rsp() + + +@bp.post('/copy') +@read_auth +async def check_status(request, user_infos): + response, ok = check_args(['plan_id'], request.json) + if not ok: + return response + result, ok = await make_a_copy(request.json['plan_id'], user_infos) + if not ok: + return rsp(code=500, msg=result) + return rsp(data=result) diff --git a/views/task_view.py b/views/task_view.py index a22c984e1225a009ea1b86d0945544dceffcf275..827fe98e76bdf6d004701107ee690b4ac42a1989 100644 --- a/views/task_view.py +++ b/views/task_view.py @@ -1,11 +1,10 @@ from sanic import Blueprint -from common.enums import Task_Run_Method from common.http import rsp from services.auth_service import login_auth, read_auth from services.task_service import get_tasks, get_task_by_id, create_task, remove_task, found_cases, \ modify_task, add_run_result -from views.utils import check_args, ERROR_LACK_ARGS, ERROR_LACK_MANUAL_TASK_CONFIG +from views.utils import check_args bp = Blueprint('task', url_prefix='api/task')