api_rawDataTrans.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. PLAN_FAILED = -1
  15. MISSION_FAILED = -2
  16. class RawDataTrans(APIView):
  17. authentication_classes = []
  18. permission_classes = []
  19. def get(self, request):
  20. if request.user:
  21. # 用户从前端发来请求
  22. return success("测试返回图数据")
  23. else:
  24. # 进程管理器发来请求
  25. # mission = Mission.objects.get(id=int(request.data.get('missionId')))
  26. plan = Plan.objects.get(id=int(request.data.get('planId')))
  27. return success("测试返回图数据")
  28. def post(self, request):
  29. # 处理进程反馈计算结果
  30. mission = Mission.objects.get(id=int(request.data.get('missionId')))
  31. plan = Plan.objects.get(id=int(request.data.get('planId')))
  32. nodes = request.data.get('nodes')
  33. edges = request.data.get('edges')
  34. progress = request.data.get('progress')
  35. print(request.data)
  36. print(mission, plan, progress)
  37. for param in [mission, plan, progress]:
  38. if param is None:
  39. print("结果传递参数不足")
  40. return failed(message="缺少结果参数")
  41. if int(progress) == 100:
  42. if not nodes or not edges:
  43. print("进度完成却没有返回结果数据")
  44. return failed(message="缺少结果参数")
  45. try:
  46. result = plan.own_result
  47. if int(progress) == 100:
  48. # 任务完成后需要保存结果文件
  49. # 读取nodes和edges,生成结果文件
  50. nodeFile = File(type='csv', usage='result', content='node', user=plan.user)
  51. nodeFile.save()
  52. if not nodeFile.generate(nodes) == OK:
  53. print("保存节点结果文件失败")
  54. return failed(message="保存节点结果文件失败")
  55. edgeFile = File(type='csv', usage='result', content='edge', user=plan.user)
  56. edgeFile.save()
  57. if not edgeFile.generate(edges) == OK:
  58. print("保存边结果文件失败")
  59. return failed(message="保存边结果文件失败")
  60. nodeFile.associate = edgeFile
  61. edgeFile.associate = nodeFile
  62. nodeFile.save()
  63. edgeFile.save()
  64. # 将文件与结果绑定
  65. result.nodeFile = nodeFile
  66. result.edgeFile = edgeFile
  67. result.progress = 100
  68. result.save()
  69. else:
  70. # 进度不到百分百,正在执行中,仅更新进度数值
  71. # 注意使用负数进度值表示单个处理失败或整个任务失败
  72. result.progress = int(progress)
  73. result.save()
  74. return success(message="保存结果文件成功")
  75. except Result.DoesNotExist:
  76. # 不存在结果文件,需要新建
  77. result = Result()
  78. result.plan = plan
  79. result.mission = mission
  80. result.user = plan.user
  81. result.progress = int(progress)
  82. result.save()
  83. return success(message="保存结果文件成功")