views.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. from rest_framework import status
  2. from rest_framework import viewsets
  3. from rest_framework.response import Response
  4. from rest_framework.decorators import action
  5. from rest_framework.serializers import ValidationError
  6. import requests
  7. import json
  8. from .serializers import PlatSimInfoSerializer
  9. from .models import PlatSimInfo
  10. from utils.paginations import CustomPagination
  11. from utils.utils import get_equip_list, Get_SIM_info
  12. # Create your views here.
  13. class PlatformIOTCardViewSet(viewsets.ModelViewSet):
  14. serializer_class = PlatSimInfoSerializer
  15. pagination_class = CustomPagination
  16. queryset = PlatSimInfo.objects.all().order_by("expiry_date")
  17. @action(methods=['get'], detail=False, url_path='get_device_type', url_name='get_device_type')
  18. def get_device_type(self, request, *args, **kwargs):
  19. queryset = PlatSimInfo.objects.raw("SELECT id,device_type FROM plat_sim_info GROUP BY device_type;")
  20. data = []
  21. for i in queryset:
  22. data.append(i.device_type)
  23. return Response(data)
  24. def list(self, request, *args, **kwargs):
  25. device_type = request.query_params.get("device_type")
  26. deviceId = request.query_params.get("deviceId")
  27. simId = request.query_params.get("simId")
  28. expire_start_time = request.query_params.get("expire_start_time")
  29. expire_end_time = request.query_params.get("expire_end_time")
  30. queryset = self.get_queryset()
  31. if device_type:
  32. queryset = queryset.filter(device_type=device_type)
  33. if deviceId:
  34. if len(deviceId.strip()) < 4:
  35. raise ValidationError("设备号长度不能小于4位")
  36. queryset = queryset.filter(deviceId__icontains=deviceId.strip())
  37. if simId:
  38. if len(simId.strip()) < 4:
  39. raise ValidationError("物联网卡号长度不能小于4位")
  40. queryset = queryset.filter(simId__icontains=simId.strip())
  41. if expire_start_time:
  42. queryset = queryset.filter(expiry_date__range=(expire_start_time, expire_end_time))
  43. page = self.paginate_queryset(queryset)
  44. serializer = self.get_serializer(page, many=True)
  45. return self.get_paginated_response(serializer.data)
  46. def create(self, request, *args, **kwargs):
  47. device_id = request.data.get("device_id").strip()
  48. simId = request.data.get("simId").strip()
  49. if len(simId) > 20 or len(simId) < 19:
  50. raise ValidationError("物联网卡长度介于19-20位")
  51. if self.get_queryset().filter(simId=simId).exists():
  52. raise ValidationError("该物联网卡号已存在,请核查!")
  53. if self.get_queryset().filter(deviceId=device_id, input_type=2).exists():
  54. raise ValidationError("该设备已存在手动录入物联网卡,请核查!")
  55. device_info_list = get_equip_list(
  56. d_id=device_id,
  57. isfullId=1
  58. )
  59. if device_info_list:
  60. device_info = device_info_list[0]
  61. device_type = device_info["device_type"]
  62. platform = device_info["plat"]
  63. else:
  64. device_type = ""
  65. platform = ""
  66. if device_type not in ["测报灯", "孢子仪"]:
  67. raise ValidationError("不支持该类型设备手动录入物联网卡!")
  68. if platform == "四情平台":
  69. platformid = 1
  70. res = requests.post(url="http://www.yfzhwlw.com/equip_simiccid", data={"e_id": device_id, "iccid": simId})
  71. if res.text != "0":
  72. raise ValidationError("对应平台添加异常!")
  73. elif platform == "大数据平台":
  74. platformid = 2
  75. res = requests.post(url="http://8.136.98.49:8002/api/api_gateway?method=forecast.send_control.device_sim",
  76. data={"device_id": device_id, "iccid": simId, "type": "change"})
  77. res_json = json.loads(res.text)
  78. if res_json["message"] != "":
  79. raise ValidationError("对应平台添加异常!")
  80. else:
  81. raise ValidationError("平台不存在该设备ID,请核查!")
  82. sim_operators, account_status, active_date, data_plan, data_usage, data_balance, expiry_date = Get_SIM_info(
  83. simId).get_sim_info()
  84. request_data = {
  85. "simId": simId,
  86. "sim_operators": sim_operators,
  87. "input_type": 2,
  88. "deviceId": device_id,
  89. "device_type": device_type,
  90. "platform": platformid,
  91. "account_status": account_status,
  92. "active_date": active_date,
  93. "data_plan": data_plan,
  94. "data_usage": data_usage,
  95. "data_balance": data_balance,
  96. "expiry_date": expiry_date
  97. }
  98. serializer = self.get_serializer(data=request_data)
  99. serializer.is_valid(raise_exception=True)
  100. self.perform_create(serializer)
  101. headers = self.get_success_headers(serializer.data)
  102. return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
  103. def update(self, request, pk, *args, **kwargs):
  104. req = request.data.get("req")
  105. instance = self.get_object()
  106. if req == "upgrade":
  107. iccid = instance.simId
  108. sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = Get_SIM_info(iccid).get_sim_info()
  109. update_data = {
  110. "sim_operators" : sim_operators,
  111. "account_status" : account_status,
  112. "active_date" : active_date,
  113. "data_plan" : data_plan,
  114. "data_usage" : data_usage,
  115. "data_balance" : data_balance,
  116. "expiry_date" : expiry_date
  117. }
  118. elif req == "change":
  119. if instance.input_type == 1:
  120. raise ValidationError("设备录入物联网卡禁止更改")
  121. simId = request.POST.get("simId").strip()
  122. if len(simId) > 20 or len(simId) < 19:
  123. raise ValidationError("物联网卡长度介于19-20位")
  124. if self.get_queryset().filter(simId=simId).exists():
  125. raise ValidationError("预更改卡号已存在")
  126. platform = instance.platform
  127. device_id = instance.deviceId
  128. if platform == 1:
  129. res = requests.post(url="http://www.yfzhwlw.com/equip_simiccid",data={"e_id":device_id,"iccid":simId})
  130. if res.text != "0":
  131. raise ValidationError("对应平台更换异常")
  132. else:
  133. res = requests.post(url="http://8.136.98.49:8002/api/api_gateway?method=forecast.send_control.device_sim",
  134. data={"device_id": device_id,"iccid": simId,"type": "change"})
  135. res_json = json.loads(res.text)
  136. if res_json["message"] != "":
  137. raise ValidationError("对应平台更换异常")
  138. sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = Get_SIM_info(simId).get_sim_info()
  139. update_data = {
  140. "simId": simId,
  141. "sim_operators" : sim_operators,
  142. "account_status" : account_status,
  143. "active_date" : active_date,
  144. "data_plan" : data_plan,
  145. "data_usage" : data_usage,
  146. "data_balance" : data_balance,
  147. "expiry_date" : expiry_date
  148. }
  149. else:
  150. raise ValidationError("未识别req参数")
  151. serializer = self.get_serializer(instance, data=update_data, partial=True)
  152. serializer.is_valid(raise_exception=True)
  153. self.perform_update(serializer)
  154. return Response(serializer.data)