1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- from django.contrib import auth
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from rest_framework import status
- from rest_framework.authtoken.models import Token
- from rest_framework.authentication import BasicAuthentication, TokenAuthentication
- from .serializers import UserRegisterSerializer
- from django.middleware.csrf import get_token
- from django.contrib.auth import login
- from api.utils import *
- from api.models import File, Mission, Plan, Result
- import requests
- import json, csv
- PLAN_FAILED = -1
- MISSION_FAILED = -2
- class RawDataTrans(APIView):
- authentication_classes = []
- permission_classes = []
- def get(self, request):
- if request.user:
- # 用户从前端发来请求
- return success("测试返回图数据")
- else:
- # 进程管理器发来请求
- # mission = Mission.objects.get(id=int(request.data.get('missionId')))
- plan = Plan.objects.get(id=int(request.data.get('planId')))
- return success("测试返回图数据")
-
- def post(self, request):
- # 处理进程反馈计算结果
- mission = Mission.objects.get(id=int(request.data.get('missionId')))
- plan = Plan.objects.get(id=int(request.data.get('planId')))
- nodes = request.data.get('nodes')
- edges = request.data.get('edges')
- progress = request.data.get('progress')
- print(request.data)
- print(mission, plan, progress)
- for param in [mission, plan, progress]:
- if param is None:
- print("结果传递参数不足")
- return failed(message="缺少结果参数")
-
- if int(progress) == 100:
- if not nodes or not edges:
- print("进度完成却没有返回结果数据")
- return failed(message="缺少结果参数")
- try:
- result = plan.own_result
- if int(progress) == 100:
- # 任务完成后需要保存结果文件
- # 读取nodes和edges,生成结果文件
- nodeFile = File(type='csv', usage='result', content='node', user=plan.user)
- nodeFile.save()
- if not nodeFile.generate(nodes) == OK:
- print("保存节点结果文件失败")
- return failed(message="保存节点结果文件失败")
- edgeFile = File(type='csv', usage='result', content='edge', user=plan.user)
- edgeFile.save()
- if not edgeFile.generate(edges) == OK:
- print("保存边结果文件失败")
- return failed(message="保存边结果文件失败")
- nodeFile.associate = edgeFile
- edgeFile.associate = nodeFile
- nodeFile.save()
- edgeFile.save()
- # 将文件与结果绑定
- result.nodeFile = nodeFile
- result.edgeFile = edgeFile
- result.progress = 100
- result.save()
- else:
- # 进度不到百分百,正在执行中,仅更新进度数值
- # 注意使用负数进度值表示单个处理失败或整个任务失败
- result.progress = int(progress)
- result.save()
- return success(message="保存结果文件成功")
- except Result.DoesNotExist:
- # 不存在结果文件,需要新建
- result = Result()
- result.plan = plan
- result.mission = mission
- result.user = plan.user
- result.progress = int(progress)
- result.save()
- return success(message="保存结果文件成功")
-
|