OrderContrller.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2018/12/6 10:53
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: OrderContrller.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. import time
  15. from django.utils.decorators import method_decorator
  16. from django.views.decorators.csrf import csrf_exempt
  17. from django.views.generic.base import View
  18. from Object.ResponseObject import ResponseObject
  19. from Object.TokenObject import TokenObject
  20. from Model.models import Order_Model, Device_Info
  21. from Service.CommonService import CommonService
  22. from Service.ModelService import ModelService
  23. '''
  24. # 获取所有设备下单信息
  25. http://192.168.136.40:8077/order/querylist?token=local&page=1&line=10
  26. '''
  27. # 设备信息添加
  28. class OrderView(View):
  29. @method_decorator(csrf_exempt)
  30. def dispatch(self, *args, **kwargs):
  31. return super(OrderView, self).dispatch(*args, **kwargs)
  32. def get(self, request, *args, **kwargs):
  33. request.encoding = 'utf-8'
  34. operation = kwargs.get('operation')
  35. return self.validation(request.GET, request, operation)
  36. def post(self, request, *args, **kwargs):
  37. request.encoding = 'utf-8'
  38. operation = kwargs.get('operation')
  39. return self.validation(request.POST, request, operation)
  40. def validation(self, request_dict, request, operation):
  41. response = ResponseObject()
  42. if operation is None:
  43. return response.json(444, 'error path')
  44. token = request_dict.get('token', None)
  45. # 设备主键uid
  46. tko = TokenObject(token)
  47. response.lang = tko.lang
  48. if tko.code != 0:
  49. return response.json(tko.code)
  50. userID = tko.userID
  51. if operation == 'querylist':
  52. return self.do_querylist(request_dict, userID, response)
  53. elif operation == 'adminDelete':
  54. return self.do_admin_delete(request_dict, userID, response)
  55. elif operation == 'adminQuery':
  56. return self.do_admin_query(request_dict, userID, response)
  57. elif operation == 'detail':
  58. return self.do_detail(request_dict, userID, response)
  59. elif operation == 'queryByStatus':
  60. return self.do_query_order_by_status(request_dict, userID, response)
  61. elif operation == 'orderDetail':
  62. return self.do_query_order_detail(request_dict, userID, response)
  63. else:
  64. return response.json(444, 'error path')
  65. def do_detail(self, request_dict, userID, response):
  66. orderID = request_dict.get('orderID', None)
  67. om_qs = Order_Model.objects.filter(userID_id=userID, orderID=orderID).values('status')
  68. if om_qs.exists():
  69. return response.json(0, {'status': om_qs[0]['status']})
  70. else:
  71. return response.json(173)
  72. def do_querylist(self, request_dict, userID, response):
  73. page = request_dict.get('page', None)
  74. line = request_dict.get('line', None)
  75. uid = request_dict.get('uid', None)
  76. if not page or not line:
  77. return response.json(444, 'page,line')
  78. page = int(page)
  79. line = int(line)
  80. omqs = Order_Model.objects.filter(userID_id=userID, status=1)
  81. # 筛选指定设备id的订单
  82. if uid:
  83. omqs.filter(UID=uid)
  84. if not omqs.exists():
  85. return response.json(173)
  86. # return response.json(10, '订单不存在')
  87. count = omqs.count()
  88. order_ql = omqs[(page - 1) * line:page * line].values("orderID", "UID", "channel", "desc", "price", "currency",
  89. "addTime",
  90. "updTime", "endTime", "paypal", "rank__day", "payType",
  91. "rank__price", "status",
  92. "rank__content", "rank__title", "rank__currency",
  93. "rank_id")
  94. order_list = list(order_ql)
  95. data = []
  96. nowTime = int(time.time())
  97. # 这里需要进行优化
  98. uid_list = []
  99. for od in order_list:
  100. uid_list.append(od['UID'])
  101. didqs = Device_Info.objects.filter(userID_id=userID, UID__in=uid_list).values('id', 'UID', 'Type')
  102. for d in order_list:
  103. if d['status'] == 0:
  104. if d['addTime'] + 3600 < nowTime:
  105. d['status'] = 3
  106. for did in didqs:
  107. if d['UID'] == did['UID']:
  108. d['did'] = did['id']
  109. d['Type'] = did['Type']
  110. data.append(d)
  111. return response.json(0, {'data': data, 'count': count})
  112. # admins ^^^^^^^^^^^^
  113. def do_admin_delete(self, request_dict, userID, response):
  114. own_perm = ModelService.check_perm(userID, 20)
  115. if own_perm is True:
  116. orderID = request_dict.get('orderID')
  117. Order_Model.objects.filter(orderID=orderID).delete()
  118. return response.json(0)
  119. else:
  120. return response.json(404)
  121. def do_admin_query(self, request_dict, userID, response):
  122. own_perm = ModelService.check_perm(userID, 20)
  123. if own_perm is True:
  124. page = request_dict.get('page', None)
  125. line = request_dict.get('line', None)
  126. uid = request_dict.get('uid', None)
  127. channel = request_dict.get('channel', None)
  128. orderID = request_dict.get('orderID', None)
  129. page = int(page)
  130. line = int(line)
  131. omqs = Order_Model.objects.filter()
  132. # 筛选指定设备id的订单
  133. if uid:
  134. omqs = omqs.filter(UID=uid)
  135. if channel:
  136. omqs = omqs.filter(channel=channel)
  137. if orderID:
  138. omqs = omqs.filter(orderID=orderID)
  139. if not omqs.exists():
  140. return response.json(0, [])
  141. count = omqs.count()
  142. order_ql = omqs[(page - 1) * line:page * line].values("orderID", "UID", "channel", "desc", "price",
  143. "currency", "addTime", "updTime", "endTime", "paypal",
  144. "payType",
  145. "rank__day",
  146. "rank__price", "status",
  147. "rank__content", "rank__title", "rank__currency",
  148. "rank_id")
  149. order_list = list(order_ql)
  150. return response.json(0, {'data': order_list, 'count': count})
  151. else:
  152. return response.json(404)
  153. def do_query_order_by_status(self, request_dict, userID, response):
  154. status = request_dict.get('status', None)
  155. page = request_dict.get('page', None)
  156. line = request_dict.get('line', None)
  157. if status and page and line:
  158. order_qs = None
  159. status = int(status)
  160. if status == -1: # 获取所有订单
  161. order_qs = Order_Model.objects.filter(userID__userID=userID)
  162. elif status == 0: # 获取【代付款】订单
  163. order_qs = Order_Model.objects.filter(userID__userID=userID, status=0)
  164. elif status == 1:
  165. order_qs = Order_Model.objects.filter(userID__userID=userID, status=1)
  166. if order_qs is None or not order_qs.exists():
  167. return response.json(0, {'data': [], 'count': 0})
  168. page = int(page)
  169. line = int(line)
  170. start = (page - 1) * line
  171. end = status + line
  172. count = order_qs.count()
  173. order_qs = order_qs[start:end].values("orderID", "UID", "channel", "desc", "price",
  174. "currency", "addTime", "payType", "rank__day", "rank__price",
  175. "status", 'channel', "rank__title", "currency")
  176. return response.json(0, {'data': list(order_qs), 'count': count})
  177. else:
  178. return response.json(444)
  179. def do_query_order_detail(self, request_dict, userID, response):
  180. orderID = request_dict.get('orderID', None)
  181. if orderID:
  182. order_qs = Order_Model.objects.filter(orderID=orderID, userID__userID=userID)
  183. if order_qs.exists():
  184. print(order_qs)
  185. order = order_qs.values("orderID", "UID", "channel", "desc", "price",
  186. "currency", "addTime", "endTime", "payType",
  187. "rank__day", "rank__price", "status", 'channel', "rank__title", "currency")[0]
  188. return response.json(0, {'data': order})
  189. else:
  190. return response.json(173)
  191. else:
  192. return response.json(444)