CustomCustomerController.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import time
  2. from django.core.paginator import Paginator
  3. from django.views import View
  4. from Model.models import CustomCustomerOrderInfo, CustomCustomerDevice, UidSetModel
  5. from Object.ResponseObject import ResponseObject
  6. from Object.TokenObject import TokenObject
  7. from Service.CommonService import CommonService
  8. from Ansjer.config import LOGGER
  9. class CustomCustomerView(View):
  10. def get(self, request, *args, **kwargs):
  11. request.encoding = 'utf-8'
  12. operation = kwargs.get('operation')
  13. request_dict = request.GET
  14. return self.validation(request, request_dict, operation)
  15. def post(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. request_dict = request.POST
  19. return self.validation(request, request_dict, operation)
  20. def validation(self, request, request_dict, operation):
  21. language = request_dict.get('language', 'en')
  22. response = ResponseObject(language)
  23. tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  24. response.lang = tko.lang
  25. if tko.code != 0:
  26. return response.json(tko.code)
  27. if operation == 'getCustomCustomerList': # 查詢定制客户信息
  28. return self.get_custom_customer_list(request_dict, response)
  29. elif operation == 'addCustomCustomer': # 添加定制客户信息接口
  30. return self.add_custom_customer(request_dict, response)
  31. elif operation == 'addCustomerDevice': # 定制客户设备扫码添加接口
  32. return self.add_customer_device(request_dict, response)
  33. elif operation == 'getCustomerDeviceCount': # 查询定制客户已扫码添加设备数量接口
  34. return self.get_customer_device_count(request_dict, response)
  35. else:
  36. return response.json(414)
  37. @staticmethod
  38. def get_custom_customer_list(request_dict, response):
  39. """
  40. 查询定制客户信息
  41. :param request_dict:
  42. :param response:
  43. :return:
  44. """
  45. order_number = request_dict.get('orderNumber', None)
  46. name = request_dict.get('name', None)
  47. email = request_dict.get('email', None)
  48. page = request_dict.get('pageNo', 1)
  49. page_size = request_dict.get('pageSize', 10)
  50. try:
  51. # 初始化查询集
  52. custom_customer_qs = CustomCustomerOrderInfo.objects.all()
  53. if order_number:
  54. custom_customer_qs = custom_customer_qs.filter(order_number__icontains=order_number)
  55. if name:
  56. custom_customer_qs = custom_customer_qs.filter(name__icontains=name)
  57. if email:
  58. custom_customer_qs = custom_customer_qs.filter(email__icontains=email)
  59. paginator = Paginator(custom_customer_qs.order_by('id'), page_size)
  60. customers = paginator.page(page)
  61. customer_list = []
  62. for customer in customers.object_list:
  63. customer_list.append({
  64. 'cId': customer.id,
  65. 'orderNumber': customer.order_number,
  66. 'name': customer.name,
  67. 'email': customer.email,
  68. 'countryId': customer.country_id,
  69. 'quantity': customer.quantity,
  70. 'createdTime': customer.created_time,
  71. })
  72. # 返回分页结果
  73. data = {
  74. 'total': paginator.count,
  75. 'list': list(customer_list), # 当前页的记录列表
  76. }
  77. return response.json(0, data)
  78. except Exception as e:
  79. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  80. @staticmethod
  81. def add_custom_customer(request_dict, response):
  82. """
  83. 添加定制客户信息
  84. :param request_dict: 请求字典
  85. :param response: 响应对象
  86. :return: 响应对象
  87. """
  88. order_number = request_dict.get('orderNumber', None)
  89. name = request_dict.get('name', None)
  90. quantity = request_dict.get('quantity', None)
  91. email = request_dict.get('email', '')
  92. country_id = request_dict.get('countryId', 0)
  93. if not order_number or not name:
  94. return response.json(444, 'orderNumber、name和quantity是必要参数')
  95. custom_customer_qs = CustomCustomerOrderInfo.objects.filter(order_number=order_number)
  96. if custom_customer_qs.exists():
  97. return response.json(174, 'orderNumber重复')
  98. try:
  99. CustomCustomerOrderInfo.objects.create(
  100. order_number=order_number,
  101. name=name,
  102. email=email,
  103. country_id=country_id,
  104. quantity=quantity,
  105. created_time=int(time.time()),
  106. updated_time=int(time.time())
  107. )
  108. return response.json(0)
  109. except Exception as e:
  110. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  111. def add_customer_device(self, request_dict, response):
  112. """
  113. 定制客户设备扫码添加接口
  114. :param request_dict:
  115. :param response:
  116. :return:
  117. """
  118. # 获取并验证请求中的必要参数
  119. c_id = request_dict.get('cId')
  120. full_code = request_dict.get('QRcode', '').strip()
  121. if not c_id or not full_code:
  122. return response.json(444, "cId、QRcode")
  123. # 验证客户信息是否存在
  124. custom_customer = CustomCustomerOrderInfo.objects.filter(id=c_id).first()
  125. if not custom_customer:
  126. return response.json(173)
  127. # 创建新设备记录
  128. try:
  129. # 检查full_code的格式并提取相关字段
  130. uid, serial_number, device_type = self.process_full_code(full_code)
  131. CustomCustomerDevice.objects.create(
  132. c_id=c_id,
  133. serial_number=serial_number,
  134. uid=uid,
  135. full_code=full_code,
  136. type=device_type,
  137. created_time=int(time.time()),
  138. updated_time=int(time.time())
  139. )
  140. return response.json(0)
  141. except Exception as e:
  142. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  143. @staticmethod
  144. def process_full_code(full_code):
  145. """ 处理full_code, 返回uid和serial_number """
  146. serial_number = ""
  147. uid = ""
  148. device_type = 0
  149. if len(full_code) == 14:
  150. serial_number = full_code[:9]
  151. device_type = full_code[-4:].int(16)
  152. elif len(full_code) == 20:
  153. uid = full_code
  154. return uid, serial_number, device_type
  155. @staticmethod
  156. def get_customer_device_count(request_dict, response):
  157. """
  158. 查询定制客户已扫码添加设备数量
  159. :param request_dict:
  160. :param response:
  161. :return:
  162. """
  163. order_number = request_dict.get('orderNumber', None)
  164. name = request_dict.get('name', None)
  165. try:
  166. if not order_number and not name:
  167. # 如果没有提供 order_number 和 name,返回所有设备的总数
  168. device_count = CustomCustomerDevice.objects.count()
  169. else:
  170. # 初始查询集
  171. customer_orders_qs = CustomCustomerOrderInfo.objects.all()
  172. # 根据 order_number 或 name 过滤
  173. if order_number:
  174. customer_orders_qs = customer_orders_qs.filter(order_number=order_number)
  175. if name:
  176. customer_orders_qs = customer_orders_qs.filter(name=name)
  177. # 获取 c_id 列表
  178. c_ids = customer_orders_qs.values_list('id', flat=True)
  179. # 如果没有匹配的订单,返回设备数量为 0
  180. if not c_ids:
  181. device_count = 0
  182. else:
  183. # 根据 c_id 列表查询设备数量
  184. device_count = CustomCustomerDevice.objects.filter(c_id__in=c_ids).count()
  185. return response.json(0, {'deviceCount': device_count})
  186. except Exception as e:
  187. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))