planview.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import datetime
  2. from rest_framework.response import Response
  3. from rest_framework.views import APIView
  4. from django.http import HttpResponse
  5. from TestLaboratory.settings import PLAN_ROOT, HTTP_HEAD
  6. from apps.log.models import get_log, gen_log
  7. from apps.plan.models import TestPlan
  8. from apps.file.models import FileManager
  9. from utils.util_add_id import get_id
  10. from utils.util_file.util_fileio import write_file
  11. class PlanView(APIView):
  12. # 登录权限验证
  13. authentication_classes = []
  14. # view plan
  15. @staticmethod
  16. def get(request, plan_id, *args, **kwargs):
  17. plan = TestPlan.objects.filter(id=plan_id, delete=False)
  18. if not plan:
  19. return HttpResponse(status=404, content='测试计划不存在')
  20. plan = plan[0]
  21. plan_sids = plan.statement_file.split('&&')
  22. file_names = []
  23. file_urls = []
  24. if plan_sids[0]:
  25. for statement_id in plan_sids:
  26. statement = FileManager.objects.get(id=statement_id)
  27. file_urls.append(PLAN_ROOT + statement.path)
  28. file_names.append(statement.path.split('/')[-1])
  29. tasks_info = []
  30. tasks = plan.testtask_set.filter(delete=False)
  31. if tasks:
  32. for task in tasks:
  33. tasks_info.append({
  34. 'id': task.id,
  35. 'title': task.title,
  36. 'description': task.description,
  37. 'state': task.state,
  38. 'create_time': task.create_time,
  39. 'update_time': task.update_time
  40. })
  41. executor, action, method = get_log(request)
  42. gen_log(action, "测试计划", plan.title, method, executor)
  43. return Response({
  44. 'software_id': plan.software.id,
  45. 'software_name': plan.software.name,
  46. 'version': plan.version,
  47. 'creator_id': plan.creator.id,
  48. 'creator': plan.creator.username,
  49. 'id': plan.id,
  50. 'title': plan.title,
  51. 'description': plan.description,
  52. 'state': plan.state,
  53. 'tasks': tasks_info,
  54. 'create_time': plan.create_time,
  55. 'update_time': plan.update_time,
  56. 'statements': [{'file_id': file_sid, 'name': file_name, 'url': HTTP_HEAD + file_url} for file_sid, file_name
  57. , file_url in zip(plan_sids, file_names, file_urls)]
  58. })
  59. # edit plan_list
  60. @staticmethod
  61. def put(request, plan_id, *args, **kwargs):
  62. title = request.POST.get('title')
  63. state = request.POST.get('state')
  64. description = request.POST.get('description')
  65. files = request.FILES.getlist('files')
  66. plan = TestPlan.objects.filter(id=plan_id, delete=False)
  67. if not plan:
  68. return HttpResponse(status=404, content='测试计划已删除或不存在')
  69. plan = plan[0]
  70. plan.title = title
  71. plan.state = state
  72. plan.description = description
  73. fids = ''
  74. for file in files:
  75. create_time = update_time = datetime.datetime.now()
  76. try:
  77. write_file(file, PLAN_ROOT + "/" + plan_id + "/" + str(create_time))
  78. except:
  79. return HttpResponse(status=500, content="文件上传失败")
  80. id_file = get_id(FileManager, "TestLaboratory_V1_File_1")
  81. try:
  82. file_new = FileManager.objects.create(id=id_file, category="plan_statement",
  83. path=plan_id + "/" + str(create_time) + "/" + file.name,
  84. create_time=create_time,
  85. update_time=update_time)
  86. except:
  87. return HttpResponse(status=500, content="文件路径写入数据库失败")
  88. fids += id_file + '&&'
  89. fids = fids[:-2]
  90. plan_sids = plan.statement_file.split('&&')
  91. for statement_id in plan_sids:
  92. statement = FileManager.objects.get(id=statement_id)
  93. statement.delete = True
  94. statement.save()
  95. plan.statement_file = fids
  96. plan.save()
  97. executor, action, method = get_log(request)
  98. gen_log(action, "测试计划", plan.title, method, executor)
  99. return HttpResponse("编辑已保存")
  100. # delete plan_list
  101. @staticmethod
  102. def delete(request, plan_id, *args, **kwargs):
  103. plan = TestPlan.objects.filter(id=plan_id, delete=False)
  104. if not plan:
  105. return HttpResponse(status=404, content='测试计划已删除或不存在')
  106. plan = plan[0]
  107. plan_sids = plan.statement_file.split('&&')
  108. if plan_sids[0]:
  109. for statement_id in plan_sids:
  110. statement = FileManager.objects.get(id=statement_id)
  111. statement.delete = True
  112. statement.save()
  113. plan.delete = True
  114. plan.save()
  115. executor, action, method = get_log(request)
  116. gen_log(action, "测试计划", plan.title, method, executor)
  117. return HttpResponse("删除完成")