views.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. from django.core.files.storage import default_storage
  2. from django.shortcuts import get_object_or_404
  3. import json
  4. # Create your views here.
  5. from django.http import HttpResponse, JsonResponse, Http404
  6. from django.views.decorators.http import require_http_methods
  7. from django.views.decorators.csrf import csrf_exempt
  8. from order.models import Order as Order_models
  9. from order.tasks import get_AUC
  10. from user.models import User as User_models
  11. from django.utils import timezone
  12. from django.db.models import Q
  13. from django.core.paginator import Paginator, EmptyPage
  14. from files.tasks import del_one_file
  15. from files.models import Files as Files_models
  16. import re
  17. from json.decoder import JSONDecodeError
  18. from admin_site.utils import setError, setSuccess, char_2_datetime
  19. import os
  20. # 获取订单详情
  21. @csrf_exempt
  22. @require_http_methods(["POST", "GET"])
  23. def info(request):
  24. body = json.loads(request.body)
  25. print(32, body)
  26. if body.get('id') == None:
  27. return HttpResponse(setError("改订单不存在!"))
  28. try:
  29. order = Order_models.objects.get(id=body['id'])
  30. except Order_models.DoesNotExist:
  31. return JsonResponse(setError("Order not found"))
  32. def get_txt_data(name):
  33. base_path = 'Rdata/' + str(order.id) + '/'
  34. txt_data = []
  35. # 从文本文件中读取列表
  36. with open(f'{base_path}{name}.txt', 'r') as f:
  37. txt_data = [int(line.strip()) for line in f]
  38. # print(txt_data) # 输出 [1, 2, 3, 4]
  39. return txt_data
  40. # 将订单信息转换为字典形式
  41. order_dict = {
  42. "id": order.id,
  43. "user_id": order.user_id,
  44. "name": order.name,
  45. "desc": order.desc,
  46. "source": order.source,
  47. "start_time": order.start_time,
  48. "end_time": order.end_time,
  49. "run_time": order.run_time,
  50. "status": order.status,
  51. "create_time": order.create_time,
  52. "update_time": order.update_time,
  53. "DL_GRS": "http://localhost:8000/order/img/"+ str(order.id) +"/DL_GRS.png",
  54. "DL_GRS_list": get_txt_data('DL_GRS'),
  55. "DL_GRS_prob_pre": "http://localhost:8000/order/img/"+ str(order.id) +"/DL_GRS_prob_pre.png",
  56. "OR_GRS": "http://localhost:8000/order/img/"+ str(order.id) +"/OR_GRS.png",
  57. "OR_GRS_list": get_txt_data('OR_GRS'),
  58. "OR_GRS_prob_pre": "http://localhost:8000/order/img/"+ str(order.id) +"/OR_GRS_prob_pre.png",
  59. "SC_GRS": "http://localhost:8000/order/img/"+ str(order.id) +"/SC_GRS.png",
  60. "SC_GRS_list": get_txt_data('SC_GRS'),
  61. "SC_GRS_prob_pre": "http://localhost:8000/order/img/"+ str(order.id) +"/SC_GRS_prob_pre.png",
  62. "t_alt_count": "http://localhost:8000/order/img/"+ str(order.id) +"/t_alt_count.png",
  63. "t_depth": "http://localhost:8000/order/img/"+ str(order.id) +"/t_depth.png",
  64. "t_ref_count": "http://localhost:8000/order/img/"+ str(order.id) +"/t_ref_count.png",
  65. "Variant_Type": "http://localhost:8000/order/img/"+ str(order.id) +"/Variant_Type.png",
  66. }
  67. # 返回 JSON 格式的响应
  68. return JsonResponse(setSuccess(msg='成功', data=order_dict))
  69. @csrf_exempt
  70. @require_http_methods(["POST", "GET"])
  71. def img(request):
  72. pattern = r'/order/img/(\d+)/(\w+\.\w+)'
  73. match = re.search(pattern, request.path)
  74. order_id = ''
  75. img_filename = ''
  76. if match:
  77. order_id = match.group(1)
  78. img_filename = match.group(2)
  79. else:
  80. print("No match found.")
  81. file_path = 'Rdata/' + order_id + '/' + img_filename
  82. print('file_path', file_path)
  83. try:
  84. with default_storage.open(file_path, 'rb') as f:
  85. response = HttpResponse(f.read(), content_type='image/png')
  86. response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
  87. return response
  88. except:
  89. raise Http404
  90. @csrf_exempt
  91. @require_http_methods(["POST"])
  92. def add(request):
  93. # get_AUC(94)
  94. # return JsonResponse(setSuccess(msg='更新成功', data=True))
  95. body = json.loads(request.body)
  96. params = {
  97. 'name': body.get('name', None),
  98. 'source': body.get('source', None),
  99. 'desc': body.get('desc', None),
  100. 'user_id': body.get('user_id', None),
  101. }
  102. fileListID = body.get('fileListID', [])
  103. fileListID2 = body.get('fileListID2', [])
  104. if body.get('isRunNow', 'false') == 'false':
  105. params.setdefault('run_time', char_2_datetime(body['runTime']))
  106. else:
  107. params.setdefault('run_time', timezone.now())
  108. # 创建订单
  109. order_add = Order_models(**params)
  110. order_add.save()
  111. # 定义文件删除程序
  112. del_file_time = body.get('delTime', None)
  113. print(del_file_time)
  114. if len(fileListID) > 0:
  115. files_id = fileListID[0]
  116. file_params = {
  117. 'user_id': body.get('user_id', None),
  118. 'order_id': order_add.id,
  119. }
  120. if del_file_time != None and del_file_time != '':
  121. file_params.setdefault('delete_time', del_file_time)
  122. print(file_params)
  123. Files_models.objects.filter(id=files_id).update(**file_params)
  124. if del_file_time != None and del_file_time != '':
  125. # 定义定时删除任务
  126. del_one_file.apply_async(args=[files_id], eta=char_2_datetime(del_file_time))
  127. if len(fileListID2) > 0:
  128. files_id = fileListID2[0]
  129. file_params = {
  130. 'user_id': body.get('user_id', None),
  131. 'order_id': order_add.id,
  132. }
  133. if del_file_time != None and del_file_time != '':
  134. file_params.setdefault('delete_time', del_file_time)
  135. Files_models.objects.filter(id=files_id).update(**file_params)
  136. if del_file_time != None and del_file_time != '':
  137. # 定义定时删除任务
  138. del_one_file.apply_async(args=[files_id], eta=char_2_datetime(del_file_time))
  139. # 如果不是立即执行订单,就设置指定的执行时间
  140. if body.get('isRunNow', 'false') == 'false':
  141. # 运行定时任务
  142. get_AUC.apply_async(args=[order_add.id], eta=char_2_datetime(body['runTime']))
  143. else:
  144. # 如果是立即执行订单,就执行异步任务
  145. get_AUC.delay(order_id=order_add.id)
  146. return JsonResponse(setSuccess(msg='更新成功', data=True))
  147. @csrf_exempt
  148. @require_http_methods(["POST"])
  149. def update(request):
  150. return JsonResponse(setSuccess(msg='更新成功', data=True))
  151. @csrf_exempt
  152. @require_http_methods(["POST"])
  153. def list(request):
  154. try:
  155. body = json.loads(request.body)
  156. token = body.get('token')
  157. page = body.get('page', 1)
  158. page_size = body.get('pageSize', 10)
  159. keyword = body.get('keyword', '')
  160. except (JSONDecodeError, KeyError) as e:
  161. return JsonResponse(setError(str(e)))
  162. data_list = Order_models.objects.filter(is_delete=0)
  163. if keyword:
  164. query = Q(name__icontains=keyword)
  165. data_list = data_list.filter(query)
  166. try:
  167. user_info = User_models.objects.get(token=token)
  168. is_root = user_info.type == 'root'
  169. if not is_root:
  170. data_list = data_list.filter(user_id=user_info.id)
  171. except User_models.DoesNotExist:
  172. return JsonResponse(setError('User not found'))
  173. data_list = data_list.order_by('-create_time')
  174. paginator = Paginator(data_list, page_size)
  175. try:
  176. data = paginator.page(page)
  177. except EmptyPage:
  178. return JsonResponse(setError('Page out of range'))
  179. total_count = paginator.count # 获取数据总数
  180. data_json = {
  181. 'has_previous': data.has_previous(),
  182. 'has_next': data.has_next(),
  183. 'number': data.number,
  184. 'total_count': total_count,
  185. 'num_pages': paginator.num_pages,
  186. 'list': [{'id': item.id, 'create_time': item.create_time, 'update_time': item.update_time,
  187. 'start_time': item.start_time, 'desc': item.desc, 'name': item.name, 'source': item.source,
  188. 'run_time': item.run_time, 'status': item.status, } for item in data]
  189. }
  190. return JsonResponse(setSuccess(msg='更新成功', data=data_json))
  191. # 创建订单
  192. @csrf_exempt
  193. @require_http_methods(["POST"])
  194. def create_order(request):
  195. body = request.POST.dict()
  196. if body['id'] == None or body['id'] == '':
  197. return JsonResponse(setError("用户不存在"))
  198. body.setdefault('is_sick', body['isSick'])
  199. return JsonResponse(setSuccess(msg='更新成功', data=True))
  200. @csrf_exempt
  201. @require_http_methods(["POST"])
  202. def delete(request):
  203. body = json.loads(request.body)
  204. if body['id'] == None or body['id'] == '':
  205. return JsonResponse(setError("订单不存在"))
  206. order = get_object_or_404(Order_models, id=body['id'])
  207. print(order)
  208. params = {
  209. "is_delete": 1
  210. }
  211. files = Files_models.objects.filter(order_id=order.id)
  212. for item in files:
  213. os.remove(str(item.file_path))
  214. Files_models.objects.filter(order_id=order.id).update(**params)
  215. Order_models.objects.filter(id=order.id).update(**params)
  216. # order.delete()
  217. return JsonResponse(setSuccess(msg='更新成功', data=True))