api_results.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.contrib import auth
  2. from rest_framework.views import APIView
  3. from rest_framework.response import Response
  4. from rest_framework import status
  5. from rest_framework.authtoken.models import Token
  6. from rest_framework.authentication import BasicAuthentication, TokenAuthentication
  7. from .serializers import UserRegisterSerializer
  8. from django.middleware.csrf import get_token
  9. from django.contrib.auth import login
  10. from api.utils import *
  11. from api.models import File, Mission, Plan, Result
  12. import requests
  13. import json, csv
  14. class Results(APIView):
  15. def get(self, request):
  16. user = request.user
  17. try:
  18. missionJson = json.loads(request.GET.get('mission'))
  19. print(missionJson)
  20. mission = Mission.objects.get(id=missionJson['id'])
  21. if not mission in user.own_missions.all():
  22. return failed(message="无该任务访问权限")
  23. except Mission.DoesNotExist:
  24. return failed(message="任务不存在")
  25. resultsData = []
  26. # 待办:是否需要在此处检测任务完成与否?在rowDataTrans中也有检测,仅当后台scheduler没有反馈正确结果时才需要用到该处的检测
  27. missionCompleted = True
  28. for plan in mission.own_plans.all():
  29. try:
  30. if not plan.parent:
  31. # 根节点不是实际的plan,没有result
  32. continue
  33. result = plan.own_result
  34. if not result.progress == 100:
  35. missionCompleted = False
  36. resultsData.append({
  37. 'planId': plan.id,
  38. 'progress': result.progress,
  39. 'resultId': result.id,
  40. })
  41. except Result.DoesNotExist:
  42. # 存在没有结果的plan,mission仍未结束
  43. missionCompleted = False
  44. resultsData.append({
  45. 'planId': plan.id,
  46. 'progress': 0,
  47. 'resultId': 0,
  48. })
  49. # 任务下属Plan已全部完成
  50. if missionCompleted:
  51. mission.state = 'done'
  52. mission.save()
  53. resultsData.append({
  54. 'missionId': mission.id,
  55. 'status': mission.state,
  56. })
  57. return success(data=resultsData)