SerialNumberCheckController.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : SerialNumberCheckController.py
  4. @Time : 2024/6/20 13:33
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import time
  10. from django.http import QueryDict
  11. from django.views import View
  12. from Ansjer.config import LOGGER
  13. from Model.models import SerialNumberCheckLog
  14. from Object.ResponseObject import ResponseObject
  15. class SerialNumberView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.GET, request, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.POST, request, operation)
  24. def delete(self, request, *args, **kwargs):
  25. request.encoding = 'utf-8'
  26. operation = kwargs.get('operation')
  27. delete = QueryDict(request.body)
  28. if not delete:
  29. delete = request.GET
  30. return self.validation(delete, request, operation)
  31. def put(self, request, *args, **kwargs):
  32. request.encoding = 'utf-8'
  33. operation = kwargs.get('operation')
  34. put = QueryDict(request.body)
  35. return self.validation(put, request, operation)
  36. def validation(self, request_dict, request, operation):
  37. response = ResponseObject('cn')
  38. if operation == 'serialNumberCheck':
  39. return self.save_serial_number_log(request_dict, response)
  40. @classmethod
  41. def save_serial_number_log(cls, request_dict, response):
  42. """
  43. 保存APP扫码工具排查序列号重复日志
  44. @param request_dict: 序列号、手机型号、类型
  45. @param response: 响应类
  46. @return:
  47. """
  48. serial_no = request_dict.get("serialNo", None)
  49. phone_model = request_dict.get("phoneModel", None)
  50. if not serial_no:
  51. return response.json(444)
  52. p_type = int(request_dict.get('type', 0))
  53. n_time = int(time.time())
  54. try:
  55. dict_type = {'1': '三乡总装', '2': '三乡包装', '3': '三乡返工', '4': '三乡管理', '5': '珠海翻新', '6': '珠海管理'}
  56. first_serial = serial_no[:6]
  57. # 查询当前工位是否扫过序列号
  58. first_serial_qs = SerialNumberCheckLog.objects.filter(serial_number=first_serial)
  59. # 工位类型,1:三乡总装,2:三乡包装,3:三乡返工,4:三乡管理,5:珠海翻新,6:珠海管理
  60. if p_type == 4 or p_type == 6:
  61. first_serial_qs = first_serial_qs.filter(type__in=[2, 5]) if p_type == 6 \
  62. else first_serial_qs.exclude(type=5)
  63. first_serial_qs = first_serial_qs.order_by('type', '-created_time')
  64. if not first_serial_qs.exists():
  65. return response.json(173)
  66. logs = []
  67. # 管理分类可查询当前序列号扫码记录
  68. for item in first_serial_qs:
  69. log_dict = {'fullSerialNumber': item.full_serial_number, 'count': item.count, 'type': item.type,
  70. 'createdTime': item.created_time, 'stationName': dict_type[str(item.type)],
  71. 'phoneModel': item.phone_model}
  72. logs.append(log_dict)
  73. result = {'logs': logs}
  74. return response.json(0, result)
  75. first_serial_qs = first_serial_qs.filter(type=p_type)
  76. if first_serial_qs.exists():
  77. # APP扫码工具记录+1
  78. params = {'serial_number': first_serial, 'created_time': n_time,
  79. 'full_serial_number': serial_no, 'type': p_type, 'phone_model': phone_model}
  80. SerialNumberCheckLog.objects.create(**params)
  81. # 返回当前序列号数据结构
  82. log_dict = {'fullSerialNumber': first_serial_qs[0].full_serial_number,
  83. 'count': first_serial_qs[0].count, 'type': first_serial_qs[0].type,
  84. 'createdTime': first_serial_qs[0].created_time,
  85. 'stationName': dict_type[str(first_serial_qs[0].type)],
  86. 'phoneModel': first_serial_qs[0].phone_model}
  87. result = {'logs': [log_dict]}
  88. return response.json(174, result)
  89. else:
  90. params = {'serial_number': first_serial, 'created_time': n_time,
  91. 'full_serial_number': serial_no, 'type': p_type, 'phone_model': phone_model}
  92. SerialNumberCheckLog.objects.create(**params)
  93. # 珠海翻新查询三乡包装扫码记录超过2次则提示异常
  94. if p_type == 5:
  95. s_qs = SerialNumberCheckLog.objects.filter(serial_number=first_serial, type=2)
  96. if s_qs.count() >= 2:
  97. # 返回当前序列号数据结构
  98. log_dict = {'fullSerialNumber': s_qs[0].full_serial_number,
  99. 'count': s_qs[0].count, 'type': s_qs[0].type,
  100. 'createdTime': s_qs[0].created_time,
  101. 'stationName': dict_type[str(s_qs[0].type)],
  102. 'phoneModel': s_qs[0].phone_model}
  103. result = {'logs': [log_dict]}
  104. return response.json(174, result)
  105. return response.json(0)
  106. except Exception as e:
  107. LOGGER.error('APP扫码工具保存日志异常:errLine:{}, errMsg:{}'
  108. .format(e.__traceback__.tb_lineno, repr(e)))
  109. return response.json(5)