views.py 8.3 KB

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