CustomCustomerController.py 6.8 KB

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