CustomCustomerController.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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', 'cn')
  20. response = ResponseObject(language)
  21. if operation == 'getCustomCustomer': # APP查詢定制客户信息
  22. return self.get_custom_customer(request_dict, response)
  23. elif operation == 'addCustomerDevice': # 定制客户设备扫码添加接口
  24. return self.add_customer_device(request_dict, response)
  25. elif operation == 'getCustomerDeviceCount': # 查询定制客户已扫码添加设备数量接口
  26. return self.get_customer_device_count(request_dict, response)
  27. else:
  28. return response.json(414)
  29. @staticmethod
  30. def get_custom_customer(request_dict, response):
  31. """
  32. APP查询定制客户信息
  33. :param request_dict:
  34. :param response:
  35. :return:
  36. """
  37. order_number = request_dict.get('orderNumber', None)
  38. if not order_number:
  39. return response.json(444)
  40. try:
  41. custom_customer = CustomCustomerOrderInfo.objects.filter(order_number=order_number).first()
  42. if not custom_customer:
  43. return response.json(173)
  44. device_count = CustomCustomerDevice.objects.filter(c_id=custom_customer.id).count()
  45. custom_customer_data = {
  46. 'cid': custom_customer.id,
  47. 'quantity': custom_customer.quantity,
  48. 'existsDeviceCount': device_count,
  49. 'unexistsDeviceCount': custom_customer.quantity - device_count
  50. }
  51. return response.json(0, custom_customer_data)
  52. except Exception as e:
  53. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  54. def add_customer_device(self, request_dict, response):
  55. """
  56. 定制客户设备扫码添加接口
  57. :param request_dict:
  58. :param response:
  59. :return:
  60. """
  61. # 获取并验证请求中的必要参数
  62. c_id = request_dict.get('cid')
  63. full_code = request_dict.get('QRcode', '').strip()
  64. if not c_id or not full_code:
  65. return response.json(444, "cId、QRcode")
  66. # 验证客户信息是否存在
  67. custom_customer = CustomCustomerOrderInfo.objects.filter(id=c_id).first()
  68. if not custom_customer:
  69. return response.json(173)
  70. custom_customer_device_qs = CustomCustomerDevice.objects.filter(full_code=full_code)
  71. if custom_customer_device_qs.exists():
  72. return response.json(174)
  73. # 创建新设备记录
  74. try:
  75. # 检查full_code的格式并提取相关字段
  76. uid, serial_number, device_type = self.process_full_code(full_code)
  77. CustomCustomerDevice.objects.create(
  78. c_id=c_id,
  79. serial_number=serial_number,
  80. uid=uid,
  81. full_code=full_code,
  82. type=device_type,
  83. created_time=int(time.time()),
  84. updated_time=int(time.time())
  85. )
  86. device_count = CustomCustomerDevice.objects.filter(c_id=c_id).count()
  87. return response.json(0, {
  88. 'existsDeviceCount': device_count,
  89. 'unexistsDeviceCount': custom_customer.quantity - device_count
  90. })
  91. except Exception as e:
  92. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  93. @staticmethod
  94. def process_full_code(full_code):
  95. """ 处理full_code, 返回uid和serial_number """
  96. serial_number = ""
  97. uid = ""
  98. device_type = 0
  99. if len(full_code) == 14:
  100. serial_number = full_code[:9]
  101. device_type = int(full_code[-4:], 16)
  102. elif len(full_code) == 20:
  103. uid = full_code
  104. return uid, serial_number, device_type
  105. @staticmethod
  106. def get_customer_device_count(request_dict, response):
  107. """
  108. 查询定制客户已扫码添加设备数量
  109. :param request_dict:
  110. :param response:
  111. :return:
  112. """
  113. order_number = request_dict.get('orderNumber', None)
  114. name = request_dict.get('name', None)
  115. try:
  116. if not order_number and not name:
  117. # 如果没有提供 order_number 和 name,返回所有设备的总数
  118. device_count = CustomCustomerDevice.objects.count()
  119. else:
  120. # 初始查询集
  121. customer_orders_qs = CustomCustomerOrderInfo.objects.all()
  122. # 根据 order_number 或 name 过滤
  123. if order_number:
  124. customer_orders_qs = customer_orders_qs.filter(order_number=order_number)
  125. if name:
  126. customer_orders_qs = customer_orders_qs.filter(name=name)
  127. # 获取 c_id 列表
  128. c_ids = customer_orders_qs.values_list('id', flat=True)
  129. # 如果没有匹配的订单,返回设备数量为 0
  130. if not c_ids:
  131. device_count = 0
  132. else:
  133. # 根据 c_id 列表查询设备数量
  134. device_count = CustomCustomerDevice.objects.filter(c_id__in=c_ids).count()
  135. return response.json(0, {'deviceCount': device_count})
  136. except Exception as e:
  137. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))