Browse Source

Merge branch 'master' of http://192.168.136.99:3000/servers/ASJServer into cheng

 Conflicts:
	AdminController/AiServeController.py
	AdminController/DeviceManagementController.py
	AdminController/LogManagementController.py
	AdminController/ServeManagementController.py
	AdminController/UnicomManageController.py
	AdminController/UserManageController.py
	AdminController/VersionManagementController.py
	AdminController/dataSystemManagement/HomeDataController.py
	AdminController/dataSystemManagement/ServiceDataController.py
	Ansjer/cn_config/config_test.py
	Ansjer/cn_config/formal_settings.py
	Ansjer/eur_config/config_formal.py
	Ansjer/eur_config/formal_settings.py
	Ansjer/server_urls/loocam_url.py
	Ansjer/urls.py
	Controller/AWS/KVSController.py
	Controller/AiController.py
	Controller/AlgorithmShop/AlgorithmShopController.py
	Controller/AppAccountManagement.py
	Controller/CloudStorage.py
	Controller/CloudTransfer.py
	Controller/CloudVod.py
	Controller/Cron/CronTaskController.py
	Controller/DetectController.py
	Controller/DetectControllerV2.py
	Controller/EquipmentManager.py
	Controller/EquipmentManagerV3.py
	Controller/FeedBack.py
	Controller/PaymentCycle.py
	Controller/RegionController.py
	Controller/SensorGateway/GatewayDeviceController.py
	Controller/SensorGateway/SmartSceneController.py
	Controller/SensorGateway/SmartSocketController.py
	Controller/SerialNumberController.py
	Controller/ShadowController.py
	Controller/SysMsg.py
	Controller/TestApi.py
	Controller/UnicomCombo/UnicomComboController.py
	Controller/UnicomCombo/WXTechController.py
	Controller/UserController.py
	Controller/UserDevice/UserDeviceShareController.py
	Controller/UserManger.py
	Model/models.py
	Object/AWS/AmazonS3Util.py
	Object/UnicomObject.py
	Object/WXTechObject.py
	Service/CommonService.py
	requirements.txt
keiSenFront 2 years ago
parent
commit
1969c6f123
49 changed files with 1573 additions and 2244 deletions
  1. 13 48
      AdminController/AiServeController.py
  2. 60 35
      AdminController/DeviceManagementController.py
  3. 7 7
      AdminController/LogManagementController.py
  4. 9 4
      AdminController/ServeManagementController.py
  5. 148 29
      AdminController/UnicomManageController.py
  6. 13 13
      AdminController/UserManageController.py
  7. 81 93
      AdminController/VersionManagementController.py
  8. 38 38
      AdminController/dataSystemManagement/HomeDataController.py
  9. 18 24
      AdminController/dataSystemManagement/ServiceDataController.py
  10. 2 2
      Ansjer/cn_config/config_test.py
  11. 2 2
      Ansjer/cn_config/formal_settings.py
  12. 2 2
      Ansjer/eur_config/config_formal.py
  13. 2 2
      Ansjer/eur_config/formal_settings.py
  14. 1 3
      Ansjer/server_urls/loocam_url.py
  15. 327 226
      Ansjer/urls.py
  16. 3 3
      Controller/AWS/KVSController.py
  17. 18 17
      Controller/AiController.py
  18. 2 2
      Controller/AlgorithmShop/AlgorithmShopController.py
  19. 1 1
      Controller/AppAccountManagement.py
  20. 73 408
      Controller/CloudStorage.py
  21. 3 3
      Controller/CloudTransfer.py
  22. 6 24
      Controller/CloudVod.py
  23. 67 231
      Controller/Cron/CronTaskController.py
  24. 4 3
      Controller/DetectController.py
  25. 18 43
      Controller/DetectControllerV2.py
  26. 40 43
      Controller/EquipmentManager.py
  27. 10 26
      Controller/EquipmentManagerV3.py
  28. 6 6
      Controller/FeedBack.py
  29. 32 53
      Controller/PaymentCycle.py
  30. 0 2
      Controller/RegionController.py
  31. 63 144
      Controller/SensorGateway/GatewayDeviceController.py
  32. 54 90
      Controller/SensorGateway/SmartSceneController.py
  33. 7 7
      Controller/SensorGateway/SmartSocketController.py
  34. 56 0
      Controller/SensorGateway/SubDeviceController.py
  35. 125 24
      Controller/SerialNumberController.py
  36. 15 14
      Controller/ShadowController.py
  37. 3 11
      Controller/SysMsg.py
  38. 83 119
      Controller/TestApi.py
  39. 41 21
      Controller/UnicomCombo/UnicomComboController.py
  40. 47 22
      Controller/UnicomCombo/WXTechController.py
  41. 25 50
      Controller/UserController.py
  42. 2 2
      Controller/UserDevice/UserDeviceShareController.py
  43. 4 13
      Controller/UserManger.py
  44. 12 201
      Model/models.py
  45. 0 94
      Object/AWS/AmazonS3Util.py
  46. 17 13
      Object/UnicomObject.py
  47. 9 0
      Object/WXTechObject.py
  48. 4 26
      Service/CommonService.py
  49. BIN
      requirements.txt

+ 13 - 48
AdminController/AiServeController.py

@@ -5,7 +5,7 @@ import time
 from django.db.models import F
 from django.db.models import F
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Model.models import Lang, AiStoreMeal, AiService, Order_Model, Device_User, CountryModel, UidSetModel, Device_Info
+from Model.models import Lang, AiStoreMeal, AiService, Order_Model, Device_User, CountryModel, UidSetModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -123,7 +123,7 @@ class AiServeView(View):
                 0, {'list': ai_meal_list, 'total': total})
                 0, {'list': ai_meal_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def addOrEditAiStoreMeal(self, request_dict, response):
     def addOrEditAiStoreMeal(self, request_dict, response):
         # 添加/编辑套餐
         # 添加/编辑套餐
@@ -169,7 +169,7 @@ class AiServeView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteAiStoreMeal(self, request_dict, response):
     def deleteAiStoreMeal(self, request_dict, response):
         # 删除ai套餐
         # 删除ai套餐
@@ -182,7 +182,7 @@ class AiServeView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAiMealLanguage(self, request_dict, response):
     def getAiMealLanguage(self, request_dict, response):
         # 获取ai套餐语言
         # 获取ai套餐语言
@@ -228,7 +228,7 @@ class AiServeView(View):
                 0, {'list': ai_meal_lang_list, 'total': total})
                 0, {'list': ai_meal_lang_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def addOrEditAiMealLanguage(self, request_dict, response):
     def addOrEditAiMealLanguage(self, request_dict, response):
         # 添加/编辑套餐语言
         # 添加/编辑套餐语言
@@ -270,8 +270,7 @@ class AiServeView(View):
                         lang=lang,
                         lang=lang,
                         title=title,
                         title=title,
                         content=content,
                         content=content,
-                        discount_content=discount_content,
-                        type=1)
+                        discount_content=discount_content)
                     lang_obj = Lang.objects.filter(
                     lang_obj = Lang.objects.filter(
                         lang=lang,
                         lang=lang,
                         title=title,
                         title=title,
@@ -281,7 +280,7 @@ class AiServeView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteAiMealLanguage(self, request_dict, response):
     def deleteAiMealLanguage(self, request_dict, response):
         # 删除套餐语言
         # 删除套餐语言
@@ -300,13 +299,12 @@ class AiServeView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getDeviceAiMealList(self, request_dict, response):
     def getDeviceAiMealList(self, request_dict, response):
         pageNo = request_dict.get('pageNo', None)
         pageNo = request_dict.get('pageNo', None)
         pageSize = request_dict.get('pageSize', None)
         pageSize = request_dict.get('pageSize', None)
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
-        serialNumber = request_dict.get('serialNumber', None)
         if not all([pageNo, pageSize]):
         if not all([pageNo, pageSize]):
             return response.json(444)
             return response.json(444)
 
 
@@ -316,10 +314,6 @@ class AiServeView(View):
             ai_service_qs = AiService.objects.all()
             ai_service_qs = AiService.objects.all()
             if uid:
             if uid:
                 ai_service_qs = ai_service_qs.filter(uid__contains=uid)
                 ai_service_qs = ai_service_qs.filter(uid__contains=uid)
-            if serialNumber:
-                device_info_qs = Device_Info.objects.filter(serial_number=serialNumber).values('UID')
-                uid = device_info_qs[0]['UID'] if device_info_qs.exists() else 'N/A'
-                ai_service_qs = ai_service_qs.filter(uid__icontains=uid)
 
 
             if not ai_service_qs.exists():
             if not ai_service_qs.exists():
                 return response.json(0, [])
                 return response.json(0, [])
@@ -337,30 +331,11 @@ class AiServeView(View):
                 'addTime',
                 'addTime',
                 'updTime', 'user_name').order_by('-addTime')
                 'updTime', 'user_name').order_by('-addTime')
             ai_service_qs = ai_service_qs[(page - 1) * line:page * line]
             ai_service_qs = ai_service_qs[(page - 1) * line:page * line]
-            ai_service_list = []
-            for ai_service in ai_service_qs:
-                data = {
-                    'id': ai_service['id'],
-                    'uid': ai_service['uid'],
-                    'channel': ai_service['channel'],
-                    'use_status': ai_service['use_status'],
-                    'detect_status': ai_service['detect_status'],
-                    'detect_group': ai_service['detect_group'],
-                    'endTime': ai_service['endTime'],
-                    'addTime': ai_service['addTime'],
-                    'updTime': ai_service['updTime'],
-                    'user_name': ai_service['user_name'],
-                    'serial_number': 'N/A'
-                }
-                device_info_qs = Device_Info.objects.filter(UID=ai_service['uid']).values('serial_number')
-                if device_info_qs.exists():
-                    data['serial_number'] = device_info_qs[0]['serial_number'] if device_info_qs[0]['serial_number'] else 'N/A'
-                ai_service_list.append(data)
             return response.json(
             return response.json(
-                0, {'list': ai_service_list, 'total': count})
+                0, {'list': list(ai_service_qs), 'total': count})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAiUserList(self, request_dict, response):
     def getAiUserList(self, request_dict, response):
         username = request_dict.get('username', None)
         username = request_dict.get('username', None)
@@ -369,7 +344,6 @@ class AiServeView(View):
         payType = request_dict.get('payType', None)
         payType = request_dict.get('payType', None)
         status = request_dict.get('status', None)
         status = request_dict.get('status', None)
         use_status = request_dict.get('use_status', None)
         use_status = request_dict.get('use_status', None)
-        serialNumber = request_dict.get('serialNumber', None)
         addTimeRange = request_dict.getlist('addTimeRange[]', None)
         addTimeRange = request_dict.getlist('addTimeRange[]', None)
 
 
         pageNo = request_dict.get('pageNo', None)
         pageNo = request_dict.get('pageNo', None)
@@ -382,7 +356,7 @@ class AiServeView(View):
         try:
         try:
             order_qs = Order_Model.objects.filter(
             order_qs = Order_Model.objects.filter(
                 order_type=1).order_by('-addTime')
                 order_type=1).order_by('-addTime')
-            if username or NickName or uid or payType or status or use_status or addTimeRange or serialNumber:
+            if username or NickName or uid or payType or status or use_status or addTimeRange:
                 if username:
                 if username:
                     order_qs = order_qs.filter(
                     order_qs = order_qs.filter(
                         userID__username__contains=username)
                         userID__username__contains=username)
@@ -397,10 +371,6 @@ class AiServeView(View):
                     order_qs = order_qs.filter(status=status)
                     order_qs = order_qs.filter(status=status)
                 if use_status:
                 if use_status:
                     order_qs = order_qs.filter(use_status=use_status)
                     order_qs = order_qs.filter(use_status=use_status)
-                if serialNumber:
-                    device_info_qs = Device_Info.objects.filter(serial_number=serialNumber).values('UID')
-                    uid = device_info_qs[0]['UID'] if device_info_qs.exists() else 'N/A'
-                    order_qs = order_qs.filter(UID=uid)
                 if addTimeRange:
                 if addTimeRange:
                     addStartTime, addEndTime = int(
                     addStartTime, addEndTime = int(
                         addTimeRange[0][:-3]), int(addTimeRange[1][:-3])
                         addTimeRange[0][:-3]), int(addTimeRange[1][:-3])
@@ -460,17 +430,12 @@ class AiServeView(View):
                 if ai_service_qs.exists():
                 if ai_service_qs.exists():
                     data_dict['endTime'] = ai_service_qs[0]['endTime']
                     data_dict['endTime'] = ai_service_qs[0]['endTime']
                     data_dict['use_status'] = ai_service_qs[0]['use_status']
                     data_dict['use_status'] = ai_service_qs[0]['use_status']
-                data_dict['serial_number'] = 'N/A'
-                device_info_qs = Device_Info.objects.filter(UID=order['UID']).values('serial_number')
-                if device_info_qs.exists():
-                    data_dict['serial_number'] = device_info_qs[0]['serial_number'] if device_info_qs[0][
-                        'serial_number'] else 'N/A'
                 data_list.append(data_dict)
                 data_list.append(data_dict)
             return response.json(
             return response.json(
                 0, {'list': data_list, 'total': count})
                 0, {'list': data_list, 'total': count})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_device_country(ip):
     def get_device_country(ip):
@@ -537,4 +502,4 @@ class AiServeView(View):
             return response.json(0, {'list': list_data})
             return response.json(0, {'list': list_data})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 60 - 35
AdminController/DeviceManagementController.py

@@ -3,6 +3,7 @@
 import json
 import json
 import operator
 import operator
 import time
 import time
+from bisect import bisect_left
 
 
 import oss2
 import oss2
 from django.db import transaction
 from django.db import transaction
@@ -122,7 +123,7 @@ class DeviceManagement(View):
                 if UID:
                 if UID:
                     device_info_qs = Device_Info.objects.filter(UID__icontains=UID)
                     device_info_qs = Device_Info.objects.filter(UID__icontains=UID)
                 if serialNumber:
                 if serialNumber:
-                    device_info_qs = Device_Info.objects.filter(serial_number__icontains=serialNumber)
+                    device_info_qs = Device_Info.objects.filter(serial_number__icontains=serialNumber[:9])
                 if NickName:
                 if NickName:
                     device_info_qs = Device_Info.objects.filter(NickName__icontains=NickName)
                     device_info_qs = Device_Info.objects.filter(NickName__icontains=NickName)
                 if username:
                 if username:
@@ -161,17 +162,14 @@ class DeviceManagement(View):
                             device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
                             device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
                         uid_set_qs = UidSetModel.objects.filter(
                         uid_set_qs = UidSetModel.objects.filter(
                             uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip', 'version',
                             uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip', 'version',
-                                                                                      'is_ai', 'is_human', 'cloud_vod',
-                                                                                      'ucode', 'device_type')
+                                                                                      'is_ai', 'is_human', 'cloud_vod')
                         if uid_set_qs.exists():
                         if uid_set_qs.exists():
                             isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
                             isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
                             isHuman = '是' if uid_set_qs[0]['is_human'] else '否'
                             isHuman = '是' if uid_set_qs[0]['is_human'] else '否'
-                            cloud_vod = CommonService.is_cloud_device(uid_set_qs[0]['ucode'],
-                                                                      uid_set_qs[0]['device_type'])
-                            if cloud_vod:
-                                cloud_vod = '支持'
-                            else:
+                            if uid_set_qs[0]['cloud_vod'] == 2:
                                 cloud_vod = '不支持'
                                 cloud_vod = '不支持'
+                            else:
+                                cloud_vod = '支持'
                             if uid_set_qs[0]['is_ai'] == 2:
                             if uid_set_qs[0]['is_ai'] == 2:
                                 isAI = '不支持'
                                 isAI = '不支持'
                             elif uid_set_qs[0]['is_ai'] == 1:
                             elif uid_set_qs[0]['is_ai'] == 1:
@@ -201,7 +199,7 @@ class DeviceManagement(View):
             return response.json(0, {'list': device_info_list, 'total': total})
             return response.json(0, {'list': device_info_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 根据id删除设备
     # 根据id删除设备
     def deleteDevice(self, request_dict, response):
     def deleteDevice(self, request_dict, response):
@@ -222,7 +220,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 重置设备主用户
     # 重置设备主用户
     def resetPrimaryUser(self, request, request_dict, response):
     def resetPrimaryUser(self, request, request_dict, response):
@@ -246,7 +244,7 @@ class DeviceManagement(View):
             Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
             Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 重置设备云存
     # 重置设备云存
     def resetVod(self, request, request_dict, response):
     def resetVod(self, request, request_dict, response):
@@ -271,9 +269,7 @@ class DeviceManagement(View):
                 # 删除和更新设备云存相关数据
                 # 删除和更新设备云存相关数据
                 UID_Bucket.objects.filter(uid=uid).delete()
                 UID_Bucket.objects.filter(uid=uid).delete()
                 Unused_Uid_Meal.objects.filter(uid=uid).delete()
                 Unused_Uid_Meal.objects.filter(uid=uid).delete()
-                AiService.objects.filter(uid=uid).delete()
                 Order_Model.objects.filter(UID=uid, order_type=0).delete()
                 Order_Model.objects.filter(UID=uid, order_type=0).delete()
-                Order_Model.objects.filter(UID=uid, order_type=1).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 # 删除vod_hls分表数据
                 # 删除vod_hls分表数据
@@ -284,7 +280,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def reset_ai(request, request_dict, response):
     def reset_ai(request, request_dict, response):
@@ -312,7 +308,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 获取设备类型数据
     # 获取设备类型数据
     def getDeviceTypeList(self, request_dict, response):
     def getDeviceTypeList(self, request_dict, response):
@@ -346,7 +342,7 @@ class DeviceManagement(View):
             return response.json(0, {'list': device_type_list, 'total': total})
             return response.json(0, {'list': device_type_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 删除设备类型
     # 删除设备类型
     def deleteDeviceType(self, request_dict, response):
     def deleteDeviceType(self, request_dict, response):
@@ -358,7 +354,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 添加设备类型
     # 添加设备类型
     def addDeviceType(self, request, request_dict, response):
     def addDeviceType(self, request, request_dict, response):
@@ -386,7 +382,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def del_device_data(request_dict, response):
     def del_device_data(request_dict, response):
@@ -413,6 +409,7 @@ class DeviceManagement(View):
                 # 根据删除项删除相关数据
                 # 根据删除项删除相关数据
                 if '设备信息数据' in delDataOptions:
                 if '设备信息数据' in delDataOptions:
                     Device_Info.objects.filter(UID__in=uidList).delete()
                     Device_Info.objects.filter(UID__in=uidList).delete()
+                    UidPushModel.objects.filter(uid_set__uid__in=uidList).delete()
                 if '设备配置数据' in delDataOptions:
                 if '设备配置数据' in delDataOptions:
                     UidSetModel.objects.filter(uid__in=uidList).delete()
                     UidSetModel.objects.filter(uid__in=uidList).delete()
                 if '设备推送数据' in delDataOptions:
                 if '设备推送数据' in delDataOptions:
@@ -512,7 +509,7 @@ class DeviceManagement(View):
             return response.json(0, {'list': app_device_type_list, 'total': total})
             return response.json(0, {'list': app_device_type_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_app_bundle_id_list(response):
     def get_app_bundle_id_list(response):
@@ -522,7 +519,7 @@ class DeviceManagement(View):
             return response.json(0, {'list': appBundleIdList})
             return response.json(0, {'list': appBundleIdList})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def edit_app_device_type(request_dict, response):
     def edit_app_device_type(request_dict, response):
@@ -547,7 +544,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def delete_app_device_type(request_dict, response):
     def delete_app_device_type(request_dict, response):
@@ -562,7 +559,7 @@ class DeviceManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def reset_all(request, request_dict, response):
     def reset_all(request, request_dict, response):
@@ -580,7 +577,6 @@ class DeviceManagement(View):
                 UID_Bucket.objects.filter(uid=uid).delete()
                 UID_Bucket.objects.filter(uid=uid).delete()
                 Unused_Uid_Meal.objects.filter(uid=uid).delete()
                 Unused_Uid_Meal.objects.filter(uid=uid).delete()
                 Order_Model.objects.filter(UID=uid, order_type=0).delete()
                 Order_Model.objects.filter(UID=uid, order_type=0).delete()
-                Order_Model.objects.filter(UID=uid, order_type=1).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 # 删除vod_hls分表数据
                 # 删除vod_hls分表数据
@@ -700,11 +696,35 @@ class DeviceManagement(View):
             #  判断版本是否存在, 不存在则获取输入版本范围内最接近的输入版本
             #  判断版本是否存在, 不存在则获取输入版本范围内最接近的输入版本
             version_number_list = []
             version_number_list = []
             app_bundle_list = []
             app_bundle_list = []
+            id_list = []
             for version in app_bundle_qs:
             for version in app_bundle_qs:
                 version = version['app_device_type__app_version_number_id']
                 version = version['app_device_type__app_version_number_id']
-                version_parts = list(map(int, version.split('.')))
-                if version_parts <= version_number:
-                    version_number_list.append(version)
+                # 必须是版本号
+                if len(version) > 3:
+                    version_parts = list(map(int, version.split('.')))
+                    if version_parts <= version_number:
+                        version_number_list.append(version)
+                else:
+                    id_list.append(int(version))
+            # app_device_type__app_version_number_id为AppVersionNumber的主键时
+            version_list = []
+            if len(version_number_list) == 0:
+                version_qs = AppVersionNumber.objects.filter(
+                    id__in=id_list).values('version_number').distinct()
+                for version in version_qs:
+                    version_qs = AppVersionNumber.objects.filter(version_number=version['version_number'],
+                                                                 app_bundle__app_bundle_id=app_bundle_id).values('id')
+                    if not version_qs.exists():
+                        continue
+                    version_number_data = {
+                        version_qs[0]['id']: version['version_number']
+                    }
+                    version_list.append(version_number_data)
+                for version in version_list:
+                    for k, v in version.items():
+                        version_parts = list(map(int, v.split('.')))
+                        if version_parts <= version_number:
+                            version_number_list.append(k)
             # 版本号对应的设备信息图标
             # 版本号对应的设备信息图标
             for version_number in version_number_list:
             for version_number in version_number_list:
                 app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
                 app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
@@ -718,17 +738,22 @@ class DeviceManagement(View):
                                                                                               'name', 'sort',
                                                                                               'name', 'sort',
                                                                                               'app_device_type__app_version_number_id')
                                                                                               'app_device_type__app_version_number_id')
                 for app_bundle in app_bundle_qs:
                 for app_bundle in app_bundle_qs:
-                    app_bundle_list.append({
-                        'model': app_bundle['model'],
-                        'type': app_bundle['type'],
-                        'icon': app_bundle['icon'],
-                        'name': app_bundle['name'],
-                        'sort': app_bundle['sort'],
-                        'app_device_type__app_version_number_id': app_bundle['app_device_type__app_version_number_id'],
-                    })
+                    device_type = any(item['type'] == app_bundle['type'] for item in app_bundle_list)
+                    if device_type:
+                        break
+                    else:
+                        app_bundle_list.append({
+                            'model': app_bundle['model'],
+                            'type': app_bundle['type'],
+                            'icon': app_bundle['icon'],
+                            'name': app_bundle['name'],
+                            'sort': app_bundle['sort'],
+                            'app_device_type__app_version_number_id': app_bundle[
+                                'app_device_type__app_version_number_id'],
+                        })
+            # 去重
             dvr_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 1]
             dvr_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 1]
             ipc_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 2]
             ipc_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 2]
-            print(dvr_list, ipc_list)
             res = {
             res = {
                 'deviceDvr': sorted(dvr_list, key=operator.itemgetter('sort')),
                 'deviceDvr': sorted(dvr_list, key=operator.itemgetter('sort')),
                 'deviceIpc': sorted(ipc_list, key=operator.itemgetter('sort')),
                 'deviceIpc': sorted(ipc_list, key=operator.itemgetter('sort')),

+ 7 - 7
AdminController/LogManagementController.py

@@ -100,7 +100,7 @@ class LogManagementView(View):
                 0, {'list': qs_list, 'total': count})
                 0, {'list': qs_list, 'total': count})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getDeviceIotInfoList(self, request_dict, response):
     def getDeviceIotInfoList(self, request_dict, response):
         serial_number = request_dict.get('serial_number', None)
         serial_number = request_dict.get('serial_number', None)
@@ -153,7 +153,7 @@ class LogManagementView(View):
                 0, {'list': iot_device_info_list, 'total': total})
                 0, {'list': iot_device_info_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     # 通用发布MQTT通知
     # 通用发布MQTT通知
     @staticmethod
     @staticmethod
@@ -171,7 +171,7 @@ class LogManagementView(View):
                 return response.json(10044)
                 return response.json(10044)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAccessLogList(self, request_dict, response):
     def getAccessLogList(self, request_dict, response):
         user = request_dict.get('user', None)
         user = request_dict.get('user', None)
@@ -210,7 +210,7 @@ class LogManagementView(View):
             return response.json(0, {'list': access_log_list, 'total': total})
             return response.json(0, {'list': access_log_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getDeviceLogList(self, request_dict, response):
     def getDeviceLogList(self, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
@@ -266,7 +266,7 @@ class LogManagementView(View):
             return response.json(0, {'list': device_log_list, 'total': total})
             return response.json(0, {'list': device_log_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getOperationLogList(self, request_dict, response):
     def getOperationLogList(self, request_dict, response):
         operation = request_dict.get('operation', None)
         operation = request_dict.get('operation', None)
@@ -295,7 +295,7 @@ class LogManagementView(View):
                 0, {'list': log_list, 'total': count})
                 0, {'list': log_list, 'total': count})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppLogList(self, request_dict, response):
     def getAppLogList(self, request_dict, response):
         """
         """
@@ -351,4 +351,4 @@ class LogManagementView(View):
             return response.json(0, {'list': app_log_list, 'total': count})
             return response.json(0, {'list': app_log_list, 'total': count})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 9 - 4
AdminController/ServeManagementController.py

@@ -20,7 +20,7 @@ from Controller.Cron.CronTaskController import CronUpdateDataView
 from Controller.UnicomCombo.UnicomComboTaskController import UnicomComboTaskView
 from Controller.UnicomCombo.UnicomComboTaskController import UnicomComboTaskView
 from Model.models import VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
 from Model.models import VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
     UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal, \
     UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal, \
-    Device_Info, DeviceTypeModel, UnicomComboOrderInfo, AiService
+    Device_Info, DeviceTypeModel, UnicomComboOrderInfo, AiService, CountryModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Object.UnicomObject import UnicomObjeect
 from Object.UnicomObject import UnicomObjeect
@@ -728,10 +728,15 @@ class serveManagement(View):
             order_ql = omqs.values("orderID", "UID", "userID__username", "userID__NickName", "channel", "desc", "price",
             order_ql = omqs.values("orderID", "UID", "userID__username", "userID__NickName", "channel", "desc", "price",
                                    "refunded_amount", "currency", "addTime", "updTime", "paypal", "payType",
                                    "refunded_amount", "currency", "addTime", "updTime", "paypal", "payType",
                                    "rank__day", "rank__price", "status", "order_type", "paymentID", "trade_no",
                                    "rank__day", "rank__price", "status", "order_type", "paymentID", "trade_no",
-                                   "payTime")
+                                   "payTime", "userID__region_country")
             order_ql = order_ql.order_by('-addTime')  # 根据CDK创建时间降序排序
             order_ql = order_ql.order_by('-addTime')  # 根据CDK创建时间降序排序
             order_ql = order_ql[(page - 1) * line:page * line]
             order_ql = order_ql[(page - 1) * line:page * line]
             for order in order_ql:
             for order in order_ql:
+                # 查询国家信息
+                country = 'N/A'
+                country_qs = CountryModel.objects.filter(id=order['userID__region_country']).values('country_name')
+                if country_qs.exists():
+                    country = country_qs[0]['country_name']
                 serialNumber = CommonService.query_serial_with_uid(order['UID'])
                 serialNumber = CommonService.query_serial_with_uid(order['UID'])
                 data = {
                 data = {
                     'orderID': order['orderID'],
                     'orderID': order['orderID'],
@@ -752,7 +757,8 @@ class serveManagement(View):
                     'status': order['status'],
                     'status': order['status'],
                     'order_type': order['order_type'],
                     'order_type': order['order_type'],
                     'payTime': order['payTime'] if order['payTime'] else 'N/A',
                     'payTime': order['payTime'] if order['payTime'] else 'N/A',
-                    'serialNumber': 'N/A' if serialNumber == order['UID'] else serialNumber
+                    'serialNumber': 'N/A' if serialNumber == order['UID'] else serialNumber,
+                    'country': country
                 }
                 }
                 #  订单显示(或不显示)停用/退款功能
                 #  订单显示(或不显示)停用/退款功能
                 if order['order_type'] == 0 or order['order_type'] == 1:  # 云存
                 if order['order_type'] == 0 or order['order_type'] == 1:  # 云存
@@ -976,7 +982,6 @@ class serveManagement(View):
                 eq.delete()
                 eq.delete()
                 Order_Model.objects.filter(uid_bucket_id=bid).delete()
                 Order_Model.objects.filter(uid_bucket_id=bid).delete()
                 ubq.delete()
                 ubq.delete()
-                AiService.objects.filter(uid=ubq[0].uid).delete()
                 return response.json(0)
                 return response.json(0)
             else:
             else:
                 return response.json(10007)
                 return response.json(10007)

+ 148 - 29
AdminController/UnicomManageController.py

@@ -4,24 +4,29 @@
 # @Email   : Guanhailogn@asj6.wecom.work
 # @Email   : Guanhailogn@asj6.wecom.work
 # @File    : UnicomManageController.py
 # @File    : UnicomManageController.py
 # @Software: PyCharm
 # @Software: PyCharm
+import datetime
 import hashlib
 import hashlib
 import json
 import json
 import time
 import time
 import uuid
 import uuid
-from Ansjer.config import CONFIG_INFO
+from decimal import Decimal
+
 import openpyxl
 import openpyxl
 import requests
 import requests
 from django.db import transaction, connection
 from django.db import transaction, connection
 from django.http import HttpResponse
 from django.http import HttpResponse
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
+from Ansjer.config import CONFIG_INFO
 from Ansjer.config import LOGGER
 from Ansjer.config import LOGGER
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrderInfo, Device_User, Order_Model, \
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrderInfo, Device_User, Order_Model, \
     ExchangeCode, UnicomFlowPush, SysMsgModel, UnicomComboExperienceHistory, LogModel
     ExchangeCode, UnicomFlowPush, SysMsgModel, UnicomComboExperienceHistory, LogModel
+from Object.Enums.WXOperatorEnum import WXOperatorEnum
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Object.UnicomObject import UnicomObjeect
 from Object.UnicomObject import UnicomObjeect
+from Object.WXTechObject import WXTechObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 
 
 
 
@@ -82,6 +87,8 @@ class UnicomManageControllerView(View):
                 return self.create_package_cdk(request_dict, response)
                 return self.create_package_cdk(request_dict, response)
             elif operation == 'resetCardPackage':
             elif operation == 'resetCardPackage':
                 return self.reset_card_package(request, request_dict, response)
                 return self.reset_card_package(request, request_dict, response)
+            elif operation == 'getPackageDetails':
+                return self.get_package_details(request_dict, response)
             else:
             else:
                 return response.json(404)
                 return response.json(404)
 
 
@@ -95,8 +102,14 @@ class UnicomManageControllerView(View):
             now_time = int(time.time())
             now_time = int(time.time())
             if device_info_qs.exists():  # 首先查询SIM卡绑定信息是否存在
             if device_info_qs.exists():  # 首先查询SIM卡绑定信息是否存在
                 iccid = device_info_qs.first().iccid
                 iccid = device_info_qs.first().iccid
-                if device_info_qs.first().card_type == 1:
-                    return response.json(0)
+                if device_info_qs.first().card_type == 1:  # 五兴电信
+                    data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
+                    wx_tech = WXTechObject()
+                    res = wx_tech.delete_card_package(**data)
+                    if res['code'] == '0':
+                        UnicomComboExperienceHistory.objects.filter(iccid=iccid).delete()
+                        return response.json(0)
+                    return response.json(176)
                 flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_number)
                 flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_number)
                 if flow_push_qs.exists():  # 删除流量预警推送
                 if flow_push_qs.exists():  # 删除流量预警推送
                     flow_push_qs.delete()
                     flow_push_qs.delete()
@@ -111,7 +124,7 @@ class UnicomManageControllerView(View):
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 if combo_experience_history_qs.exists():
                 if combo_experience_history_qs.exists():
                     combo_experience_history_qs.delete()
                     combo_experience_history_qs.delete()
-                UnicomObjeect().change_device_to_activate(iccid)
+                UnicomObjeect().change_device_to_disable(iccid)  # 重置流量停用设备
                 ip = CommonService.get_ip_address(request)
                 ip = CommonService.get_ip_address(request)
                 describe = '重置4G流量序列号{},iccid:{}'.format(serial_number, iccid)
                 describe = '重置4G流量序列号{},iccid:{}'.format(serial_number, iccid)
                 cls.generate_card_package_order(iccid, serial_number)
                 cls.generate_card_package_order(iccid, serial_number)
@@ -220,16 +233,11 @@ class UnicomManageControllerView(View):
             unicom_device_qs = unicom_device_qs[(page - 1) * line:page * line]
             unicom_device_qs = unicom_device_qs[(page - 1) * line:page * line]
             list_data = []
             list_data = []
             for unicom_device in unicom_device_qs:
             for unicom_device in unicom_device_qs:
-                data = {
-                    'iccid': unicom_device.iccid,
-                    'serialNo': unicom_device.serial_no,
-                    'userID': unicom_device.user_id,
-                    'cardType': unicom_device.card_type,
-                    'status': unicom_device.status,
-                    'mainCard': unicom_device.main_card,
-                    'createdTime': unicom_device.created_time,
-                    'updatedTime': unicom_device.updated_time
-                }
+                data = {'iccid': unicom_device.iccid, 'serialNo': unicom_device.serial_no,
+                        'userID': unicom_device.user_id, 'cardType': unicom_device.card_type,
+                        'status': unicom_device.status, 'mainCard': unicom_device.main_card,
+                        'createdTime': unicom_device.created_time, 'updatedTime': unicom_device.updated_time,
+                        'cardStatus': self.get_device_status_by_iccid(unicom_device.iccid, unicom_device.card_type)}
                 device_user_qs = Device_User.objects.filter(userID=unicom_device.user_id).values('username', 'NickName',
                 device_user_qs = Device_User.objects.filter(userID=unicom_device.user_id).values('username', 'NickName',
                                                                                                  'phone')
                                                                                                  'phone')
                 data['userName'] = device_user_qs[0]['username'] if device_user_qs.exists() else ''
                 data['userName'] = device_user_qs[0]['username'] if device_user_qs.exists() else ''
@@ -249,8 +257,7 @@ class UnicomManageControllerView(View):
         """
         """
         sql = 'SELECT '
         sql = 'SELECT '
         sql += 'du.username,du.phone,o.UID as uid,o.`status`,udi.serial_no as serialNo,o.orderID,o.`desc`, '
         sql += 'du.username,du.phone,o.UID as uid,o.`status`,udi.serial_no as serialNo,o.orderID,o.`desc`, '
-        sql += 'o.price,uo.next_month_activate as nextActivate,uo.iccid,uo.`status` as useStatus, ' \
-               'uo.`flow_total_usage` as flowTotal, '
+        sql += 'o.price,uo.next_month_activate as nextActivate,uo.iccid,uo.`status` as useStatus,uo.`flow_total_usage`,'
         sql += 'uo.updated_time as upTime, uo.activation_time as acTime,uo.expire_time as epTime '
         sql += 'uo.updated_time as upTime, uo.activation_time as acTime,uo.expire_time as epTime '
         sql += 'FROM orders o '
         sql += 'FROM orders o '
         sql += 'LEFT JOIN unicom_combo_order_info uo ON o.orderID = uo.order_id '
         sql += 'LEFT JOIN unicom_combo_order_info uo ON o.orderID = uo.order_id '
@@ -299,15 +306,7 @@ class UnicomManageControllerView(View):
             col_names = [desc[0] for desc in cursor.description]
             col_names = [desc[0] for desc in cursor.description]
             for item in data_obj:
             for item in data_obj:
                 order_dict = dict(zip(col_names, item))
                 order_dict = dict(zip(col_names, item))
-                if order_dict['status'] == 1:
-                    total_flow = UnicomObjeect.current_sim_traffic_usage_details(order_dict['iccid'])  # 4G总值
-                    flow_total_usage = order_dict['flowTotal']  # 激活时当月已用流量
-                    if flow_total_usage == '':  # 判断数值是否为空
-                        flow_total_usage = 0
-                    flow_total_usage = float(flow_total_usage)
-                    order_dict['using_total'] = total_flow - flow_total_usage
-                else:
-                    order_dict['using_total'] = 0
+                order_dict['using_total'] = 0
                 result_list.append(order_dict)
                 result_list.append(order_dict)
             return response.json(0, {'orderList': result_list, 'total': total})
             return response.json(0, {'orderList': result_list, 'total': total})
         except Exception as e:
         except Exception as e:
@@ -697,7 +696,7 @@ class UnicomManageControllerView(View):
             combo = combo_qs.first()
             combo = combo_qs.first()
             exchange_code_list = []
             exchange_code_list = []
             now_time = int(time.time())
             now_time = int(time.time())
-            if combo.combo_type == 3:
+            if combo.combo_type == 3:  # 五兴电信
                 for i in range(int(quantity)):
                 for i in range(int(quantity)):
                     # 10位兑换码 后面两位为标识代表五兴电信
                     # 10位兑换码 后面两位为标识代表五兴电信
                     code = cls.generate_code() + 'WD'
                     code = cls.generate_code() + 'WD'
@@ -706,10 +705,19 @@ class UnicomManageControllerView(View):
                                                            expire_time=0,
                                                            expire_time=0,
                                                            created_time=now_time,
                                                            created_time=now_time,
                                                            updated_time=now_time))
                                                            updated_time=now_time))
-                if exchange_code_list:
-                    ExchangeCode.objects.bulk_create(exchange_code_list)
+            elif combo.combo_type == 0:  # 珠海联通
+                for i in range(int(quantity)):
+                    # 10位兑换码 后面两位为标识代表五兴电信
+                    code = cls.generate_code() + 'ZL'
+                    exchange_code_list.append(ExchangeCode(code=code, status=False, is_down=0,
+                                                           package_type=0, package_id=combo.id,
+                                                           expire_time=0,
+                                                           created_time=now_time,
+                                                           updated_time=now_time))
+            if exchange_code_list:
+                ExchangeCode.objects.bulk_create(exchange_code_list)
                 return response.json(0)
                 return response.json(0)
-            return response.json(0)
+            return response.json(178)
         except Exception as e:
         except Exception as e:
             LOGGER.info('*****UnicomManageController.create_package_cdk:errLine:{}, errMsg:{}'
             LOGGER.info('*****UnicomManageController.create_package_cdk:errLine:{}, errMsg:{}'
                         .format(e.__traceback__.tb_lineno, repr(e)))
                         .format(e.__traceback__.tb_lineno, repr(e)))
@@ -726,3 +734,114 @@ class UnicomManageControllerView(View):
         # 取哈希值的前8位,并将其转换为大写字母
         # 取哈希值的前8位,并将其转换为大写字母
         code = sha1.hexdigest()[:8].upper()
         code = sha1.hexdigest()[:8].upper()
         return code
         return code
+
+    @classmethod
+    def get_package_details(cls, request_dict, response):
+        """
+        根据序列号获取套餐包列表
+        """
+        serial_number = request_dict.get('serialNumber', None)
+        if not serial_number:
+            return response.json(444)
+        ud_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number) \
+            .values('iccid', 'card_type')
+        package_list = []
+        if not ud_qs.exists():
+            return response.json(0, {'packageList': package_list})
+        iccid = ud_qs[0]['iccid']
+        card_type = ud_qs[0]['card_type']
+        if card_type == 0:
+            o_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid) \
+                .values('status', 'flow_total_usage', 'flow_exceed', 'activation_time', 'expire_time',
+                        'combo__combo_name', 'combo__flow_total', 'updated_time') \
+                .order_by('created_time')
+            if not o_qs:
+                return response.json(0, {'packageList': package_list})
+            return response.json(0, {'package_list': cls.get_unicom_package_list(iccid, o_qs)})
+        if card_type == 1:
+            data = {'iccid': iccid, 'operator': 3}
+            return response.json(0, {'package_list': cls.get_wx_package_list(**data)})
+
+    @staticmethod
+    def get_unicom_package_list(iccid, o_qs):
+        package_list = []
+        unicom_api = UnicomObjeect()
+        for i, item in enumerate(o_qs):
+            package_status = item['status']
+            flow_total = item['combo__flow_total']
+            flow_total_usage = float(unicom_api.get_flow_usage_total(iccid))
+            activate_flow = float(item['flow_total_usage']) if item['flow_total_usage'] else 0
+            used = 0
+            if package_status == 1:
+                used = flow_total_usage - activate_flow  # 已用流量
+            elif package_status == 2:
+                index = i + 1
+                if index < len(o_qs) and o_qs[index]['flow_total_usage']:
+                    package_used_flow = float(o_qs[i + 1]['flow_total_usage'])
+                    used = package_used_flow - activate_flow
+                else:
+                    used = flow_total_usage - activate_flow
+            status_dict = {0: "待使用", 1: "使用中", 2: "已失效"}
+            status = status_dict.get(item['status'])
+            package_list.append({
+                'packageName': item['combo__combo_name'],
+                'status': status,
+                'flowTotal': flow_total,
+                'used': Decimal(used).quantize(Decimal('0.00')),
+                'activationTime': datetime.datetime.fromtimestamp(item['activation_time']).strftime(
+                    '%Y-%m-%d %H:%M:%S'),
+                'expireTime': datetime.datetime.fromtimestamp(item['expire_time']).strftime('%Y-%m-%d %H:%M:%S'),
+                'updatedTime': datetime.datetime.fromtimestamp(item['updated_time']).strftime('%Y-%m-%d %H:%M:%S')
+            })
+        return package_list
+
+    @staticmethod
+    def get_wx_package_list(**data):
+        """
+        获取五兴套餐订购记录
+        @param data: iccid,operator
+        @return: 订购记录结果
+        """
+        try:
+            package_list = []
+            wx_tech = WXTechObject()
+            result = wx_tech.get_package_order_record(**data)
+            if not result:
+                return package_list
+            status_dict = {0: "待使用", 1: "使用中", 2: "已完成", 3: "已退订", 4: "已失效", 5: "已删除"}
+            for item in result['data']:
+                used_flow = float(item['flowTotal']) - float(item['flowRemain'])
+                package_list.append({
+                    'packageName': item['packageName'],
+                    'status': status_dict.get(int(item['state'])),
+                    'flowTotal': item['flowTotal'],
+                    'used': Decimal(used_flow).quantize(Decimal('0.00')),
+                    'activationTime': item['startDate'],
+                    'expireTime': item['endDate'],
+                    'updatedTime': ''
+                })
+            return package_list
+        except Exception as e:
+            print(repr(e))
+            return []
+
+    @staticmethod
+    def get_device_status_by_iccid(iccid, card_type):
+        try:
+            re_data = {'iccid': iccid}
+            if card_type == 0:
+                status_dict = {1: '已激活', 2: '可激活', 3: '已停用', 4: '已失效', 5: '可测试', 6: '库存', 7: '已更换', 8: '已清除'}
+                result = UnicomObjeect().query_device_status(**re_data)
+                res_dict = UnicomObjeect().get_text_dict(result)
+                return status_dict.get(int(res_dict['data']['status']), 'N/A')
+            elif card_type == 1:
+                status_dict = {1: '库存', 2: '可激活', 3: '已激活', 4: '已停用', 5: '已失效', 6: '强制停机'}
+                data = {'iccid': iccid, 'operator': 3}
+                wx_tech = WXTechObject()
+                result = wx_tech.get_cards_info(**data)
+                return status_dict.get(int(result['data']['cardStatusCode']), 'N/A')
+            else:
+                return 'N/A'
+        except Exception as e:
+            print(repr(e))
+            return 'N/A'

+ 13 - 13
AdminController/UserManageController.py

@@ -383,7 +383,7 @@ class UserManagement(View):
             return response.json(0, {'list': user_list, 'total': total})
             return response.json(0, {'list': user_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def AddOrEditAccount(self, userID, request_dict, response):
     def AddOrEditAccount(self, userID, request_dict, response):
         """
         """
@@ -450,7 +450,7 @@ class UserManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def doDelete(self, request_dict, response):
     def doDelete(self, request_dict, response):
         userID = request_dict.get('userID', '')
         userID = request_dict.get('userID', '')
@@ -461,7 +461,7 @@ class UserManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def resetPassword(self, request_dict, response):
     def resetPassword(self, request_dict, response):
         userID = request_dict.get('userID', None)
         userID = request_dict.get('userID', None)
@@ -476,7 +476,7 @@ class UserManagement(View):
                 return response.json(177)
                 return response.json(177)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getFeedbackList(self, request_dict, response):
     def getFeedbackList(self, request_dict, response):
         """
         """
@@ -550,7 +550,7 @@ class UserManagement(View):
             return response.json(0, {'list': feed_back_list, 'total': total})
             return response.json(0, {'list': feed_back_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def replyFeedBack(self, request_dict, response):
     def replyFeedBack(self, request_dict, response):
         feedBackID = request_dict.get('feedBackID', None)
         feedBackID = request_dict.get('feedBackID', None)
@@ -572,7 +572,7 @@ class UserManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def sendSysMsgToUser(self, request_dict, response):
     def sendSysMsgToUser(self, request_dict, response):
         """
         """
@@ -595,7 +595,7 @@ class UserManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteFeedBack(self, request_dict, response):
     def deleteFeedBack(self, request_dict, response):
         feedBackID = request_dict.get('feedBackID', None)
         feedBackID = request_dict.get('feedBackID', None)
@@ -609,7 +609,7 @@ class UserManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getSysMessageList(self, request_dict, response):
     def getSysMessageList(self, request_dict, response):
         # 功能群发查询
         # 功能群发查询
@@ -632,7 +632,7 @@ class UserManagement(View):
             return response.json(0, {'list': list(sys_mass_qs), 'total': total})
             return response.json(0, {'list': list(sys_mass_qs), 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppDataList(self, request_dict, response):
     def getAppDataList(self, request_dict, response):
         print('request_dict: ', request_dict)
         print('request_dict: ', request_dict)
@@ -653,7 +653,7 @@ class UserManagement(View):
             return response.json(0, {'appBundleId_list': appBundleId_list})
             return response.json(0, {'appBundleId_list': appBundleId_list})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def sendSysMessage(self, request_dict, response):
     def sendSysMessage(self, request_dict, response):
         print('request_dict: ', request_dict)
         print('request_dict: ', request_dict)
@@ -694,7 +694,7 @@ class UserManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def collectFeedBack(self, request_dict, response):
     def collectFeedBack(self, request_dict, response):
         """收藏或取消收藏用户反馈信息"""
         """收藏或取消收藏用户反馈信息"""
@@ -817,7 +817,7 @@ class UserManagement(View):
                 return response.json(177)
                 return response.json(177)
         except Exception as e:
         except Exception as e:
             print('修改状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             print('修改状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getDeviceSuperPassword(self, request_dict, response):
     def getDeviceSuperPassword(self, request_dict, response):
         """
         """
@@ -863,7 +863,7 @@ class UserManagement(View):
             return response.json(0, {'list': list(device_super_password_qs), 'count': count})
             return response.json(0, {'list': list(device_super_password_qs), 'count': count})
         except Exception as e:
         except Exception as e:
             print('查询异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             print('查询异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteInformation(self, request_dict, response):
     def deleteInformation(self, request_dict, response):
         """
         """

+ 81 - 93
AdminController/VersionManagementController.py

@@ -3,13 +3,11 @@
 import os
 import os
 import hashlib
 import hashlib
 import time
 import time
-import math
 
 
 import boto3
 import boto3
 import botocore
 import botocore
 from django.db import transaction
 from django.db import transaction
 from django.views.generic.base import View
 from django.views.generic.base import View
-from Ansjer.config import LOGGER
 
 
 from Ansjer.config import BASE_DIR, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
 from Ansjer.config import BASE_DIR, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
@@ -103,7 +101,7 @@ class VersionManagement(View):
             return response.json(0, {'list': equipment_version_list, 'total': total})
             return response.json(0, {'list': equipment_version_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def upLoadFile(self, request, request_dict, response):
     def upLoadFile(self, request, request_dict, response):
         file = request.FILES.get('file', None)
         file = request.FILES.get('file', None)
@@ -115,68 +113,64 @@ class VersionManagement(View):
         resolutionRatio = request_dict.get('resolutionRatio', '')
         resolutionRatio = request_dict.get('resolutionRatio', '')
         Description = request_dict.get('Description', '')
         Description = request_dict.get('Description', '')
         status = request_dict.get('status', 0)
         status = request_dict.get('status', 0)
-        isPopup = request_dict.get('isPopup', 0)
 
 
         if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
         if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
             return response.json(444)
             return response.json(444)
 
 
         try:
         try:
-            with transaction.atomic():
-                nowTime = CommonService.timestamp_to_str(timestamp=int(time.time()))
-                channel = int(channel)
-                resolutionRatio = int(resolutionRatio)
-                status = int(status)
-                isPopup = int(isPopup)
-                # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
-                # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
-                # V1.7.2.36C11680X30411F000600000150001Z,软件版本:1.7.2,设备规格名称:36C11680X30411F000600000150001Z
-                file_name = str(file)  # 文件名
-                # .img和.tar.gz文件
-                file_type_index = file_name.find('.img')
+            nowTime = CommonService.timestamp_to_str(timestamp=int(time.time()))
+            channel = int(channel)
+            resolutionRatio = int(resolutionRatio)
+            status = int(status)
+            # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
+            # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
+            # V1.7.2.36C11680X30411F000600000150001Z,软件版本:1.7.2,设备规格名称:36C11680X30411F000600000150001Z
+            file_name = str(file)  # 文件名
+            # .img和.tar.gz文件
+            file_type_index = file_name.find('.img')
+            if file_type_index == -1:
+                file_type_index = file_name.find('.tar')
                 if file_type_index == -1:
                 if file_type_index == -1:
-                    file_type_index = file_name.find('.tar')
-                    if file_type_index == -1:
-                        return response.json(903)
-                version = file_name[:file_type_index]  # 设备版本
-                version_index = version.rindex('.')
-                softwareVersion = version[1:version_index]  # 软件版本
-                code = version[version_index + 1:]  # 设备规格名称
-                chipModelList2Code = code[:4]  # 主芯片
-                type = code[8:10]  # 设备机型
-                companyCode = code[-1:]  # 公司代码
-                fileSize = file.size
-                filePath = '/'.join(('static/otapack', mci, lang, file_name))
-                file_data = file.read()
-                fileMd5 = hashlib.md5(file_data).hexdigest()
-                data_dict = {'mci': mci, 'lang': lang, 'ESN': ESN, 'max_ver': max_ver, 'channel': channel,
-                             'resolutionRatio': resolutionRatio, 'Description': Description, 'status': status,
-                             'is_popup': isPopup, 'version': version, 'softwareVersion': softwareVersion, 'code': code,
-                             'chipModelList2Code': chipModelList2Code, 'type': type, 'companyCode': companyCode,
-                             'fileSize': fileSize, 'filePath': filePath, 'fileMd5': fileMd5, 'update_time': nowTime}
-                # Equipment_Version表创建或更新数据
-                equipment_version_qs = Equipment_Version.objects.filter(code=code, lang=lang)
-                if not equipment_version_qs.exists():
-                    Equipment_Version.objects.create(eid=CommonService.getUserID(getUser=False, setOTAID=True),
-                                                     **data_dict)
-                else:
-                    equipment_version_qs.update(**data_dict)
-
-                # 上传文件到服务器
-                upload_path = '/'.join((BASE_DIR, 'static/otapack', mci, lang)).replace('\\', '/') + '/'
-                if not os.path.exists(upload_path):  # 上传目录不存在则创建
-                    os.makedirs(upload_path)
-                # 文件上传
-                full_name = upload_path + file_name
-                if os.path.exists(full_name):  # 删除同名文件
-                    os.remove(full_name)
-                with open(full_name, 'wb+') as write_file:
-                    for chunk in file.chunks():
-                        write_file.write(chunk)
-                LOGGER.info('versionManagement/upLoadFile成功上传{}'.format(file_name))
-                return response.json(0)
+                    return response.json(903)
+            version = file_name[:file_type_index]  # 设备版本
+            version_index = version.rindex('.')
+            softwareVersion = version[1:version_index]  # 软件版本
+            code = version[version_index + 1:]  # 设备规格名称
+            chipModelList2Code = code[:4]  # 主芯片
+            type = code[8:10]  # 设备机型
+            companyCode = code[-1:]  # 公司代码
+            fileSize = file.size
+            filePath = '/'.join(('static/otapack', mci, lang, file_name))
+            file_data = file.read()
+            fileMd5 = hashlib.md5(file_data).hexdigest()
+            data_dict = {'mci': mci, 'lang': lang, 'ESN': ESN, 'max_ver': max_ver, 'channel': channel,
+                         'resolutionRatio': resolutionRatio, 'Description': Description, 'status': status,
+                         'version': version, 'softwareVersion': softwareVersion, 'code': code,
+                         'chipModelList2Code': chipModelList2Code, 'type': type, 'companyCode': companyCode,
+                         'fileSize': fileSize, 'filePath': filePath, 'fileMd5': fileMd5, 'update_time': nowTime}
+            # Equipment_Version表创建或更新数据
+            equipment_version_qs = Equipment_Version.objects.filter(code=code, lang=lang)
+            if not equipment_version_qs.exists():
+                Equipment_Version.objects.create(eid=CommonService.getUserID(getUser=False, setOTAID=True),
+                                                 **data_dict)
+            else:
+                equipment_version_qs.update(**data_dict)
+
+            # 上传文件到服务器
+            upload_path = '/'.join((BASE_DIR, 'static/otapack', mci, lang)).replace('\\', '/') + '/'
+            if not os.path.exists(upload_path):  # 上传目录不存在则创建
+                os.makedirs(upload_path)
+            # 文件上传
+            full_name = upload_path + file_name
+            if os.path.exists(full_name):   # 删除同名文件
+                os.remove(full_name)
+            with open(full_name, 'wb+') as write_file:
+                for chunk in file.chunks():
+                    write_file.write(chunk)
+            return response.json(0)
         except Exception as e:
         except Exception as e:
-            LOGGER.info('versionManagement/upLoadFile接口异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            print(e)
+            return response.json(500, repr(e))
 
 
     def editVersionInformation(self, request_dict, response):
     def editVersionInformation(self, request_dict, response):
         eid = request_dict.get('eid', None)
         eid = request_dict.get('eid', None)
@@ -200,7 +194,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteEquipmentVersion(self, request_dict, response):
     def deleteEquipmentVersion(self, request_dict, response):
         eid = request_dict.get('eid', None)
         eid = request_dict.get('eid', None)
@@ -219,7 +213,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppVersionList(self, request_dict, response):
     def getAppVersionList(self, request_dict, response):
         app_type = request_dict.get('app_type', None)
         app_type = request_dict.get('app_type', None)
@@ -255,7 +249,7 @@ class VersionManagement(View):
             return response.json(0, {'list': app_info_list, 'total': total})
             return response.json(0, {'list': app_info_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def addOrEditAppInfo(self, request_dict, response):
     def addOrEditAppInfo(self, request_dict, response):
         id = request_dict.get('id', None)
         id = request_dict.get('id', None)
@@ -273,9 +267,9 @@ class VersionManagement(View):
             data_dict = {'appName': appName, 'appBundleId': appBundleId, 'bundleVersion': bundleVersion,
             data_dict = {'appName': appName, 'appBundleId': appBundleId, 'bundleVersion': bundleVersion,
                          'newAppversion': newAppversion, 'minAppversion': minAppversion, 'content': content,
                          'newAppversion': newAppversion, 'minAppversion': minAppversion, 'content': content,
                          'app_type': app_type, 'downloadLink': downloadLink}
                          'app_type': app_type, 'downloadLink': downloadLink}
-            if not id:  # 添加
+            if not id:      # 添加
                 App_Info.objects.create(**data_dict)
                 App_Info.objects.create(**data_dict)
-            else:  # 编辑
+            else:           # 编辑
                 app_info_qs = App_Info.objects.filter(id=id)
                 app_info_qs = App_Info.objects.filter(id=id)
                 if not app_info_qs.exists():
                 if not app_info_qs.exists():
                     return response.json(173)
                     return response.json(173)
@@ -283,7 +277,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteAppVersion(self, request_dict, response):
     def deleteAppVersion(self, request_dict, response):
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
@@ -297,7 +291,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppSet(self, request_dict, response):
     def getAppSet(self, request_dict, response):
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
@@ -320,7 +314,7 @@ class VersionManagement(View):
                 return response.json(0)
                 return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def editAppSet(self, request_dict, response):
     def editAppSet(self, request_dict, response):
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
@@ -334,7 +328,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppRecordList_1(self, request_dict, response):
     def getAppRecordList_1(self, request_dict, response):
         app_type = request_dict.get('app_type', 'IOS')
         app_type = request_dict.get('app_type', 'IOS')
@@ -355,15 +349,13 @@ class VersionManagement(View):
                     app_type = 2
                     app_type = 2
                 else:
                 else:
                     app_type = 3
                     app_type = 3
-            app_colophon_qs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list(
-                'app_id__appBundleId', flat=True).distinct()
+            app_colophon_qs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list('app_id__appBundleId', flat=True).distinct()
             if not app_colophon_qs.exists():
             if not app_colophon_qs.exists():
                 return response.json(173)
                 return response.json(173)
             total = app_colophon_qs.count()
             total = app_colophon_qs.count()
             app_colophon_list = list(app_colophon_qs[(page - 1) * line:page * line])
             app_colophon_list = list(app_colophon_qs[(page - 1) * line:page * line])
-            app_info_qs = App_Colophon.objects.filter(app_id__appBundleId__in=app_colophon_list). \
-                values("id", "lang", "newApp_version", "content", "version_time", "app_id__appBundleId",
-                       "app_id__appName", "app_id__app_type")
+            app_info_qs = App_Colophon.objects.filter(app_id__appBundleId__in=app_colophon_list).\
+                values("id", "lang", "newApp_version", "content","version_time", "app_id__appBundleId", "app_id__appName", "app_id__app_type")
             app_info_list = list(app_info_qs)
             app_info_list = list(app_info_qs)
             data_dict = {}
             data_dict = {}
             # 组装数据
             # 组装数据
@@ -385,7 +377,7 @@ class VersionManagement(View):
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppRecordList(self, request_dict, response):
     def getAppRecordList(self, request_dict, response):
         app_type = request_dict.get('appType', 'IOS')
         app_type = request_dict.get('appType', 'IOS')
@@ -407,18 +399,16 @@ class VersionManagement(View):
                 app_type = 2
                 app_type = 2
             else:
             else:
                 app_type = 3
                 app_type = 3
-            app_colophon_qs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list(
-                'app_id__appBundleId', flat=True).distinct()
+            app_colophon_qs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list('app_id__appBundleId', flat=True).distinct()
             if not app_colophon_qs.exists():
             if not app_colophon_qs.exists():
                 return response.json(173)
                 return response.json(173)
             total = app_colophon_qs.count()
             total = app_colophon_qs.count()
             app_colophon_list = list(app_colophon_qs[(page - 1) * line:page * line])
             app_colophon_list = list(app_colophon_qs[(page - 1) * line:page * line])
-            app_info_qs = App_Colophon.objects.filter(app_id__appBundleId__in=app_colophon_list). \
-                values("id", "lang", "newApp_version", "content", "version_time", "app_id__appBundleId",
-                       "app_id__appName", "app_id__app_type")
+            app_info_qs = App_Colophon.objects.filter(app_id__appBundleId__in=app_colophon_list).\
+                values("id", "lang", "newApp_version", "content", "version_time", "app_id__appBundleId", "app_id__appName", "app_id__app_type")
             app_info_list = list(app_info_qs)
             app_info_list = list(app_info_qs)
-            app_record_list = []  # 响应的app record数据
-            appBundleId_list = []  # 记录已添加过的appBundleId
+            app_record_list = []    # 响应的app record数据
+            appBundleId_list = []   # 记录已添加过的appBundleId
             # 组装数据
             # 组装数据
             for app_info in app_info_list:
             for app_info in app_info_list:
                 version = app_info['lang'] + app_info['newApp_version']
                 version = app_info['lang'] + app_info['newApp_version']
@@ -438,8 +428,7 @@ class VersionManagement(View):
                     if queryVersion and queryVersion == version and queryAppBundleId == app_info['app_id__appBundleId']:
                     if queryVersion and queryVersion == version and queryAppBundleId == app_info['app_id__appBundleId']:
                         app_record_dict['id'] = app_info['id']
                         app_record_dict['id'] = app_info['id']
                         app_record_dict['content'] = app_info['content']
                         app_record_dict['content'] = app_info['content']
-                        app_record_dict['version_time'] = time.strftime("%Y-%m-%d",
-                                                                        time.localtime(app_info['version_time']))
+                        app_record_dict['version_time'] = time.strftime("%Y-%m-%d", time.localtime(app_info['version_time']))
 
 
                     app_record_list.append(app_record_dict)
                     app_record_list.append(app_record_dict)
                 else:
                 else:
@@ -450,8 +439,7 @@ class VersionManagement(View):
                         # app_record_list里对应字典插入值
                         # app_record_list里对应字典插入值
                         app_record_list[index]['id'] = app_info['id']
                         app_record_list[index]['id'] = app_info['id']
                         app_record_list[index]['content'] = app_info['content']
                         app_record_list[index]['content'] = app_info['content']
-                        app_record_list[index]['version_time'] = time.strftime("%Y-%m-%d",
-                                                                               time.localtime(app_info['version_time']))
+                        app_record_list[index]['version_time'] = time.strftime("%Y-%m-%d", time.localtime(app_info['version_time']))
                         app_record_list[index]['version'] = version
                         app_record_list[index]['version'] = version
                         app_record_list[index]['newApp_version_list'].insert(0, newApp_version_list)
                         app_record_list[index]['newApp_version_list'].insert(0, newApp_version_list)
                     else:
                     else:
@@ -464,7 +452,7 @@ class VersionManagement(View):
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getAppBundleIdList(self, request_dict, response):
     def getAppBundleIdList(self, request_dict, response):
         print('request_dict:', request_dict)
         print('request_dict:', request_dict)
@@ -482,7 +470,7 @@ class VersionManagement(View):
             return response.json(0, {'appBundleIdList': appBundleIdList})
             return response.json(0, {'appBundleIdList': appBundleIdList})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def addOrEditAppRecord(self, request_dict, response):
     def addOrEditAppRecord(self, request_dict, response):
         print('request_dict:', request_dict)
         print('request_dict:', request_dict)
@@ -499,13 +487,13 @@ class VersionManagement(View):
 
 
         try:
         try:
             version_time = int(time.mktime(time.strptime(version_time, '%Y-%m-%d')))  # 字符串转时间戳
             version_time = int(time.mktime(time.strptime(version_time, '%Y-%m-%d')))  # 字符串转时间戳
-            if app_colophon_id:  # 编辑
+            if app_colophon_id:     # 编辑
                 # 编辑获取的版本信息前两位为语言
                 # 编辑获取的版本信息前两位为语言
                 lang = newApp_version[:2]
                 lang = newApp_version[:2]
                 newApp_version = newApp_version[2:]
                 newApp_version = newApp_version[2:]
                 App_Colophon.objects.filter(id=app_colophon_id).update(lang=lang, newApp_version=newApp_version,
                 App_Colophon.objects.filter(id=app_colophon_id).update(lang=lang, newApp_version=newApp_version,
                                                                        content=content, version_time=version_time)
                                                                        content=content, version_time=version_time)
-            else:  # 添加
+            else:   # 添加
                 app_info_qs = App_Info.objects.filter(appBundleId=appBundleId).values('id')
                 app_info_qs = App_Info.objects.filter(appBundleId=appBundleId).values('id')
                 if not app_info_qs.exists():
                 if not app_info_qs.exists():
                     return response.json(173)
                     return response.json(173)
@@ -527,7 +515,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deleteAppRecord(self, request_dict, response):
     def deleteAppRecord(self, request_dict, response):
         print('request_dict:', request_dict)
         print('request_dict:', request_dict)
@@ -543,7 +531,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def getPcInfoList(self, request_dict, response):
     def getPcInfoList(self, request_dict, response):
         print('request_dict:', request_dict)
         print('request_dict:', request_dict)
@@ -569,7 +557,7 @@ class VersionManagement(View):
             return response.json(0, {'list': pc_info_list, 'total': total})
             return response.json(0, {'list': pc_info_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def editPcVersion(self, request_dict, response):
     def editPcVersion(self, request_dict, response):
         pc_info_id = request_dict.get('id', None)
         pc_info_id = request_dict.get('id', None)
@@ -613,7 +601,7 @@ class VersionManagement(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def deletePcInfo(self, request_dict, response):
     def deletePcInfo(self, request_dict, response):
         print('request_dict:', request_dict)
         print('request_dict:', request_dict)
@@ -642,4 +630,4 @@ class VersionManagement(View):
                 return response.json(0)
                 return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 38 - 38
AdminController/dataSystemManagement/HomeDataController.py

@@ -130,7 +130,7 @@ class HomeDataView(View):
                 usd_total = round(usd_total + temp_total.get('USD', 0), 2)
                 usd_total = round(usd_total + temp_total.get('USD', 0), 2)
             order_total = {'cnyTotal': cny_total, 'usdTotal': usd_total}
             order_total = {'cnyTotal': cny_total, 'usdTotal': usd_total}
             # 昨日云存订单销售额
             # 昨日云存订单销售额
-            vod_order_total = order_qs.filter(service_type__in=[0, 1])
+            vod_order_total = order_qs.filter(service_type=0)
             vod_cny_total = 0
             vod_cny_total = 0
             vod_usd_total = 0
             vod_usd_total = 0
             for item in vod_order_total:
             for item in vod_order_total:
@@ -138,17 +138,17 @@ class HomeDataView(View):
                 vod_cny_total = round(vod_cny_total + temp_total.get('CNY', 0), 2)
                 vod_cny_total = round(vod_cny_total + temp_total.get('CNY', 0), 2)
                 vod_usd_total = round(vod_usd_total + temp_total.get('USD', 0), 2)
                 vod_usd_total = round(vod_usd_total + temp_total.get('USD', 0), 2)
             vod_order_total = {'cnyTotal': vod_cny_total, 'usdTotal': vod_usd_total}
             vod_order_total = {'cnyTotal': vod_cny_total, 'usdTotal': vod_usd_total}
-            # 昨日云盘订单销售额
-            icloud_order_total = order_qs.filter(service_type=4)
-            icloud_cny_total = 0
-            icloud_usd_total = 0
-            for item in icloud_order_total:
+            # 昨日AI订单销售额
+            ai_order_total = order_qs.filter(service_type=1)
+            ai_cny_total = 0
+            ai_usd_total = 0
+            for item in ai_order_total:
                 temp_total = eval(item['total'])
                 temp_total = eval(item['total'])
-                icloud_cny_total = round(icloud_cny_total + temp_total.get('CNY', 0), 2)
-                icloud_usd_total = round(icloud_usd_total + temp_total.get('USD', 0), 2)
-            icloud_order_total = {'cnyTotal': icloud_cny_total, 'usdTotal': icloud_usd_total}
+                ai_cny_total = round(ai_cny_total + temp_total.get('CNY', 0), 2)
+                ai_usd_total = round(ai_usd_total + temp_total.get('USD', 0), 2)
+            ai_order_total = {'cnyTotal': ai_cny_total, 'usdTotal': ai_usd_total}
             # 昨日联通订单销售额
             # 昨日联通订单销售额
-            unicom_order_total = order_qs.filter(service_type__in=[2, 3])
+            unicom_order_total = order_qs.filter(service_type=2)
             unicom_cny_total = 0
             unicom_cny_total = 0
             unicom_usd_total = 0
             unicom_usd_total = 0
             for item in unicom_order_total:
             for item in unicom_order_total:
@@ -166,7 +166,7 @@ class HomeDataView(View):
                 usd_all_total = round(usd_all_total + temp_total.get('USD', 0), 2)
                 usd_all_total = round(usd_all_total + temp_total.get('USD', 0), 2)
             order_all_total = {'cnyTotal': cny_all_total, 'usdTotal': usd_all_total}
             order_all_total = {'cnyTotal': cny_all_total, 'usdTotal': usd_all_total}
             # 所有云存订单销售额
             # 所有云存订单销售额
-            vod_order_all_total = order_all_qs.filter(service_type__in=[0, 1])
+            vod_order_all_total = order_all_qs.filter(service_type=0)
             vod_cny_all_total = 0
             vod_cny_all_total = 0
             vod_usd_all_total = 0
             vod_usd_all_total = 0
             for item in vod_order_all_total:
             for item in vod_order_all_total:
@@ -174,15 +174,15 @@ class HomeDataView(View):
                 vod_cny_all_total = round(vod_cny_all_total + temp_total.get('CNY', 0), 2)
                 vod_cny_all_total = round(vod_cny_all_total + temp_total.get('CNY', 0), 2)
                 vod_usd_all_total = round(vod_usd_all_total + temp_total.get('USD', 0), 2)
                 vod_usd_all_total = round(vod_usd_all_total + temp_total.get('USD', 0), 2)
             vod_order_all_total = {'cnyTotal': vod_cny_all_total, 'usdTotal': vod_usd_all_total}
             vod_order_all_total = {'cnyTotal': vod_cny_all_total, 'usdTotal': vod_usd_all_total}
-            # 所有云盘订单销售额
-            icloud_order_all_total = order_all_qs.filter(service_type=4)
-            icloud_cny_all_total = 0
-            icloud_usd_all_total = 0
-            for item in icloud_order_all_total:
+            # 所有AI订单销售额
+            ai_order_all_total = order_all_qs.filter(service_type=1)
+            ai_cny_all_total = 0
+            ai_usd_all_total = 0
+            for item in ai_order_all_total:
                 temp_total = eval(item['total'])
                 temp_total = eval(item['total'])
-                icloud_cny_all_total = round(icloud_cny_all_total + temp_total.get('CNY', 0), 2)
-                icloud_usd_all_total = round(icloud_usd_all_total + temp_total.get('USD', 0), 2)
-            icloud_order_all_total = {'cnyTotal': icloud_cny_all_total, 'usdTotal': icloud_usd_all_total}
+                ai_cny_all_total = round(ai_cny_all_total + temp_total.get('CNY', 0), 2)
+                ai_usd_all_total = round(ai_usd_all_total + temp_total.get('USD', 0), 2)
+            ai_order_all_total = {'cnyTotal': ai_cny_all_total, 'usdTotal': ai_usd_all_total}
             # 所有联通订单销售额
             # 所有联通订单销售额
             unicom_order_all_total = order_all_qs.filter(service_type=2)
             unicom_order_all_total = order_all_qs.filter(service_type=2)
             unicom_cny_all_total = 0
             unicom_cny_all_total = 0
@@ -201,18 +201,18 @@ class HomeDataView(View):
                 'deviceAllCount': device_all_count,
                 'deviceAllCount': device_all_count,
                 'orderTotal': order_total,
                 'orderTotal': order_total,
                 'vodOrderTotal': vod_order_total,
                 'vodOrderTotal': vod_order_total,
-                'icloudOrderTotal': icloud_order_total,
+                'aiOrderTotal': ai_order_total,
                 'unicomOrderTotal': unicom_order_total,
                 'unicomOrderTotal': unicom_order_total,
                 'orderAllTotal': order_all_total,
                 'orderAllTotal': order_all_total,
                 'vodOrderAllTotal': vod_order_all_total,
                 'vodOrderAllTotal': vod_order_all_total,
-                'icloudOrderAllTotal': icloud_order_all_total,
+                'aiOrderAllTotal': ai_order_all_total,
                 'unicomOrderAllTotal': unicom_order_all_total,
                 'unicomOrderAllTotal': unicom_order_all_total,
                 'userIncreaseRegion': user_increase_region_list,
                 'userIncreaseRegion': user_increase_region_list,
                 'userAllRegion': user_all_region_list
                 'userAllRegion': user_all_region_list
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_sales_volume_data(cls, request_dict, response):
     def query_sales_volume_data(cls, request_dict, response):
@@ -254,7 +254,7 @@ class HomeDataView(View):
                 order_list.append(res)
                 order_list.append(res)
             return response.json(0, order_list)
             return response.json(0, order_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_global_all_data(cls, request, request_dict, response):
     def query_global_all_data(cls, request, request_dict, response):
@@ -278,11 +278,11 @@ class HomeDataView(View):
             device_all_count = 0
             device_all_count = 0
             order_total = {'cnyTotal': 0, 'usdTotal': 0}
             order_total = {'cnyTotal': 0, 'usdTotal': 0}
             vod_order_total = {'cnyTotal': 0, 'usdTotal': 0}
             vod_order_total = {'cnyTotal': 0, 'usdTotal': 0}
-            icloud_order_total = {'cnyTotal': 0, 'usdTotal': 0}
+            ai_order_total = {'cnyTotal': 0, 'usdTotal': 0}
             unicom_order_total = {'cnyTotal': 0, 'usdTotal': 0}
             unicom_order_total = {'cnyTotal': 0, 'usdTotal': 0}
             order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
             order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
             vod_order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
             vod_order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
-            icloud_order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
+            ai_order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
             unicom_order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
             unicom_order_all_total = {'cnyTotal': 0, 'usdTotal': 0}
             user_increase_temp_list = []
             user_increase_temp_list = []
             user_increase_list = []
             user_increase_list = []
@@ -309,10 +309,10 @@ class HomeDataView(View):
                         vod_order_total['cnyTotal'] + result['result']['vodOrderTotal']['cnyTotal'], 2)
                         vod_order_total['cnyTotal'] + result['result']['vodOrderTotal']['cnyTotal'], 2)
                     vod_order_total['usdTotal'] = round(
                     vod_order_total['usdTotal'] = round(
                         vod_order_total['usdTotal'] + result['result']['vodOrderTotal']['usdTotal'], 2)
                         vod_order_total['usdTotal'] + result['result']['vodOrderTotal']['usdTotal'], 2)
-                    icloud_order_total['cnyTotal'] = round(
-                        icloud_order_total['cnyTotal'] + result['result']['icloudOrderTotal']['cnyTotal'], 2)
-                    icloud_order_total['usdTotal'] = round(
-                        icloud_order_total['usdTotal'] + result['result']['icloudOrderTotal']['usdTotal'], 2)
+                    ai_order_total['cnyTotal'] = round(
+                        ai_order_total['cnyTotal'] + result['result']['aiOrderTotal']['cnyTotal'], 2)
+                    ai_order_total['usdTotal'] = round(
+                        ai_order_total['usdTotal'] + result['result']['aiOrderTotal']['usdTotal'], 2)
                     unicom_order_total['cnyTotal'] = round(
                     unicom_order_total['cnyTotal'] = round(
                         unicom_order_total['cnyTotal'] + result['result']['unicomOrderTotal']['cnyTotal'], 2)
                         unicom_order_total['cnyTotal'] + result['result']['unicomOrderTotal']['cnyTotal'], 2)
                     unicom_order_total['usdTotal'] = round(
                     unicom_order_total['usdTotal'] = round(
@@ -325,10 +325,10 @@ class HomeDataView(View):
                         vod_order_all_total['cnyTotal'] + result['result']['vodOrderAllTotal']['cnyTotal'], 2)
                         vod_order_all_total['cnyTotal'] + result['result']['vodOrderAllTotal']['cnyTotal'], 2)
                     vod_order_all_total['usdTotal'] = round(
                     vod_order_all_total['usdTotal'] = round(
                         vod_order_all_total['usdTotal'] + result['result']['vodOrderAllTotal']['usdTotal'], 2)
                         vod_order_all_total['usdTotal'] + result['result']['vodOrderAllTotal']['usdTotal'], 2)
-                    icloud_order_all_total['cnyTotal'] = round(
-                        icloud_order_all_total['cnyTotal'] + result['result']['icloudOrderAllTotal']['cnyTotal'], 2)
-                    icloud_order_all_total['usdTotal'] = round(
-                        icloud_order_all_total['usdTotal'] + result['result']['icloudOrderAllTotal']['usdTotal'], 2)
+                    ai_order_all_total['cnyTotal'] = round(
+                        ai_order_all_total['cnyTotal'] + result['result']['aiOrderAllTotal']['cnyTotal'], 2)
+                    ai_order_all_total['usdTotal'] = round(
+                        ai_order_all_total['usdTotal'] + result['result']['aiOrderAllTotal']['usdTotal'], 2)
                     unicom_order_all_total['cnyTotal'] = round(
                     unicom_order_all_total['cnyTotal'] = round(
                         unicom_order_all_total['cnyTotal'] + result['result']['unicomOrderAllTotal']['cnyTotal'], 2)
                         unicom_order_all_total['cnyTotal'] + result['result']['unicomOrderAllTotal']['cnyTotal'], 2)
                     unicom_order_all_total['usdTotal'] = round(
                     unicom_order_all_total['usdTotal'] = round(
@@ -394,18 +394,18 @@ class HomeDataView(View):
                 'deviceAllCount': device_all_count,
                 'deviceAllCount': device_all_count,
                 'orderTotal': order_total,
                 'orderTotal': order_total,
                 'vodOrderTotal': vod_order_total,
                 'vodOrderTotal': vod_order_total,
-                'icloudOrderTotal': icloud_order_total,
+                'aiOrderTotal': ai_order_total,
                 'unicomOrderTotal': unicom_order_total,
                 'unicomOrderTotal': unicom_order_total,
                 'orderAllTotal': order_all_total,
                 'orderAllTotal': order_all_total,
                 'vodOrderAllTotal': vod_order_all_total,
                 'vodOrderAllTotal': vod_order_all_total,
-                'icloudOrderAllTotal': icloud_order_all_total,
+                'aiOrderAllTotal': ai_order_all_total,
                 'unicomOrderAllTotal': unicom_order_all_total,
                 'unicomOrderAllTotal': unicom_order_all_total,
                 'userIncreaseRegion': user_increase_list,
                 'userIncreaseRegion': user_increase_list,
                 'userAllRegion': user_all_list
                 'userAllRegion': user_all_list
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_global_sales_volume_data(cls, request, request_dict, response):
     def query_global_sales_volume_data(cls, request, request_dict, response):
@@ -441,7 +441,7 @@ class HomeDataView(View):
                     return response.json(result['result_code'], result['result'])
                     return response.json(result['result_code'], result['result'])
             return response.json(0, order_list)
             return response.json(0, order_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def export_data(cls, request_dict, response):
     def export_data(cls, request_dict, response):
@@ -475,4 +475,4 @@ class HomeDataView(View):
             #     res['Content-Disposition'] = 'attachment;filename="{}"'.format(file_name)
             #     res['Content-Disposition'] = 'attachment;filename="{}"'.format(file_name)
             return res
             return res
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 18 - 24
AdminController/dataSystemManagement/ServiceDataController.py

@@ -71,12 +71,10 @@ class ServiceDataView(View):
         if not all([start_time, end_time, time_unit, store_meal_type]):
         if not all([start_time, end_time, time_unit, store_meal_type]):
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
         try:
         try:
-            store_meal_type = store_meal_type.split(',')
+            store_meal_type = int(store_meal_type)
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=0,
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=0,
-                                                    service_type__in=store_meal_type).values('count', 'country',
-                                                                                             'total',
-                                                                                             'device_type',
-                                                                                             'store_meal')
+                                                    service_type=store_meal_type).values('count', 'country', 'total',
+                                                                                         'device_type', 'store_meal')
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
                 Q(query_type=0) | Q(query_type=1)).values('total', 'count')
                 Q(query_type=0) | Q(query_type=1)).values('total', 'count')
             all_order_count = 0
             all_order_count = 0
@@ -207,7 +205,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_free_order(cls, request_dict, response):
     def query_free_order(cls, request_dict, response):
@@ -228,10 +226,10 @@ class ServiceDataView(View):
         if not all([start_time, end_time, time_unit, store_meal_type]):
         if not all([start_time, end_time, time_unit, store_meal_type]):
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
         try:
         try:
-            store_meal_type = store_meal_type.split(',')
+            store_meal_type = int(store_meal_type)
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=1,
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=1,
-                                                    service_type__in=store_meal_type).values('count', 'country',
-                                                                                             'device_type')
+                                                    service_type=store_meal_type).values('count', 'country',
+                                                                                         'device_type')
             free_order_count = order_qs.aggregate(count=Sum('count'))['count']
             free_order_count = order_qs.aggregate(count=Sum('count'))['count']
             free_order_count = free_order_count if free_order_count else 0  # 免费订单数量
             free_order_count = free_order_count if free_order_count else 0  # 免费订单数量
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
@@ -316,7 +314,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_first_pay_order(cls, request_dict, response):
     def query_first_pay_order(cls, request_dict, response):
@@ -337,11 +335,9 @@ class ServiceDataView(View):
         if not all([start_time, end_time, time_unit, store_meal_type]):
         if not all([start_time, end_time, time_unit, store_meal_type]):
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
         try:
         try:
-            store_meal_type = store_meal_type.split(',')
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=2,
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=2,
-                                                    service_type__in=store_meal_type).values('count', 'country',
-                                                                                             'total',
-                                                                                             'device_type')
+                                                    service_type=store_meal_type).values('count', 'country', 'total',
+                                                                                         'device_type')
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
                 Q(query_type=0) | Q(query_type=1)).values('total', 'count')
                 Q(query_type=0) | Q(query_type=1)).values('total', 'count')
             all_order_count = 0
             all_order_count = 0
@@ -445,7 +441,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_repeat_pay_order(cls, request_dict, response):
     def query_repeat_pay_order(cls, request_dict, response):
@@ -466,11 +462,9 @@ class ServiceDataView(View):
         if not all([start_time, end_time, time_unit, store_meal_type]):
         if not all([start_time, end_time, time_unit, store_meal_type]):
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
             return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'})
         try:
         try:
-            store_meal_type = store_meal_type.split(',')
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=3,
             order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time, query_type=3,
-                                                    service_type__in=store_meal_type).values('count', 'country',
-                                                                                             'total',
-                                                                                             'device_type')
+                                                    service_type=store_meal_type).values('count', 'country', 'total',
+                                                                                         'device_type')
             repeat_pay_order_count = order_qs.aggregate(count=Sum('count'))['count']
             repeat_pay_order_count = order_qs.aggregate(count=Sum('count'))['count']
             repeat_pay_order_count = repeat_pay_order_count if repeat_pay_order_count else 0
             repeat_pay_order_count = repeat_pay_order_count if repeat_pay_order_count else 0
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
             all_order_qs = OrdersSummary.objects.filter(time__gte=start_time, time__lt=end_time).filter(
@@ -578,7 +572,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_global_pay_order(cls, request, request_dict, response):
     def query_global_pay_order(cls, request, request_dict, response):
@@ -697,7 +691,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_global_free_order(cls, request, request_dict, response):
     def query_global_free_order(cls, request, request_dict, response):
@@ -776,7 +770,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_global_first_pay_order(cls, request, request_dict, response):
     def query_global_first_pay_order(cls, request, request_dict, response):
@@ -871,7 +865,7 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def query_global_repeat_pay_order(cls, request, request_dict, response):
     def query_global_repeat_pay_order(cls, request, request_dict, response):
@@ -972,4 +966,4 @@ class ServiceDataView(View):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 2 - 2
Ansjer/cn_config/config_test.py

@@ -27,8 +27,8 @@ LOG_BUCKET = 'ansjer-statres'                       # 日志存储桶
 PUSH_CLOUD_PHOTO = 'push-cloud-photo'               # 推送云相册存储桶
 PUSH_CLOUD_PHOTO = 'push-cloud-photo'               # 推送云相册存储桶
 
 
 # redis节点
 # redis节点
-SERVER_HOST = '127.0.0.1'
-PUSH_REDIS_ADDRESS = '127.0.0.1'
+SERVER_HOST = 'backendserver.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
+PUSH_REDIS_ADDRESS = 'pushredis.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
 # ======================================================================================================================
 # ======================================================================================================================
 
 
 # 域名
 # 域名

+ 2 - 2
Ansjer/cn_config/formal_settings.py

@@ -95,7 +95,7 @@ DATABASES = {
         'HOST': SERVER_HOST,
         'HOST': SERVER_HOST,
         'PORT': '3306',
         'PORT': '3306',
         'AUTOCOMMIT': True,
         'AUTOCOMMIT': True,
-        # 'CONN_MAX_AGE': 1,
+        'CONN_MAX_AGE': 60,
         'OPTIONS': {
         'OPTIONS': {
             'charset': 'utf8mb4',
             'charset': 'utf8mb4',
             'use_unicode': True,
             'use_unicode': True,
@@ -110,7 +110,7 @@ DATABASES = {
         'HOST': SERVER_HOST2,
         'HOST': SERVER_HOST2,
         'PORT': '3306',
         'PORT': '3306',
         'AUTOCOMMIT': True,
         'AUTOCOMMIT': True,
-        # 'CONN_MAX_AGE': 1,
+        'CONN_MAX_AGE': 60,
         'OPTIONS': {
         'OPTIONS': {
             'charset': 'utf8mb4',
             'charset': 'utf8mb4',
             'use_unicode': True,
             'use_unicode': True,

+ 2 - 2
Ansjer/eur_config/config_formal.py

@@ -44,8 +44,8 @@ PAYPAL_CRD = {
     "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
     "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
     "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
     "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
 }
 }
-PAYPAL_WEB_HOOK_ID = '3YH86681TH784461T'
-PAYPAL_WEB_HOOK_ID_TWO = '7TN87895N70389928'
+PAYPAL_WEB_HOOK_ID = '3T5610747S126314V'
+PAYPAL_WEB_HOOK_ID_TWO = '4VS84179T6193840G'
 
 
 # 数据库dyanamo品牌日志数据库
 # 数据库dyanamo品牌日志数据库
 USER_BRAND = 'user_brand'
 USER_BRAND = 'user_brand'

+ 2 - 2
Ansjer/eur_config/formal_settings.py

@@ -92,7 +92,7 @@ DATABASES = {
         'HOST': SERVER_HOST,
         'HOST': SERVER_HOST,
         'PORT': '3306',
         'PORT': '3306',
         'AUTOCOMMIT': True,
         'AUTOCOMMIT': True,
-        'CONN_MAX_AGE': 60,
+        # 'CONN_MAX_AGE': 1,
         'OPTIONS': {
         'OPTIONS': {
             'charset': 'utf8mb4',
             'charset': 'utf8mb4',
             'use_unicode': True,
             'use_unicode': True,
@@ -107,7 +107,7 @@ DATABASES = {
         'HOST': SERVER_HOST2,
         'HOST': SERVER_HOST2,
         'PORT': '3306',
         'PORT': '3306',
         'AUTOCOMMIT': True,
         'AUTOCOMMIT': True,
-        'CONN_MAX_AGE': 60,
+        # 'CONN_MAX_AGE': 1,
         'OPTIONS': {
         'OPTIONS': {
             'charset': 'utf8mb4',
             'charset': 'utf8mb4',
             'use_unicode': True,
             'use_unicode': True,

+ 1 - 3
Ansjer/server_urls/loocam_url.py

@@ -9,8 +9,7 @@
 from django.urls import re_path
 from django.urls import re_path
 
 
 from Controller.SensorGateway import GatewayFamilyRoomController, SubDeviceController, GatewayFamilyMemberController, \
 from Controller.SensorGateway import GatewayFamilyRoomController, SubDeviceController, GatewayFamilyMemberController, \
-    EquipmentFamilyController, GatewayDeviceController, SmartSceneController, SmartSocketController, \
-    SmartSwitchController
+    EquipmentFamilyController, GatewayDeviceController, SmartSceneController, SmartSocketController
 
 
 urlpatterns = [
 urlpatterns = [
     re_path(r'^sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
     re_path(r'^sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
@@ -21,5 +20,4 @@ urlpatterns = [
     re_path(r'^gateway/device/info/(?P<operation>.*)$', GatewayDeviceController.GatewayDeviceView.as_view()),
     re_path(r'^gateway/device/info/(?P<operation>.*)$', GatewayDeviceController.GatewayDeviceView.as_view()),
     re_path(r'^smartscene/(?P<operation>.*)$', SmartSceneController.SmartSceneView.as_view()),
     re_path(r'^smartscene/(?P<operation>.*)$', SmartSceneController.SmartSceneView.as_view()),
     re_path(r'^open/socket/(?P<operation>.*)$', SmartSocketController.SmartSocketView.as_view()),
     re_path(r'^open/socket/(?P<operation>.*)$', SmartSocketController.SmartSocketView.as_view()),
-    re_path(r'^smartswitch/(?P<operation>.*)$', SmartSwitchController.SmartSwitchView.as_view()),
 ]
 ]

+ 327 - 226
Ansjer/urls.py

@@ -1,10 +1,10 @@
+from django.conf.urls import url
 from django.contrib import admin
 from django.contrib import admin
-from django.urls import include
-from django.urls import re_path
+from django.urls import path, re_path
 
 
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
-    AiServeController, SurveysManageController, SerialManageController, IcloudManagementController
+    AiServeController, SurveysManageController, SerialManageController
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppInfo, \
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppInfo, \
     Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
     Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
     AppColophon, DateController, \
     AppColophon, DateController, \
@@ -25,252 +25,353 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     DeviceLogController, CouponController, AiController, ShadowController, AppAccountManagement, InitController
     DeviceLogController, CouponController, AiController, ShadowController, AppAccountManagement, InitController
 from Controller.Cron import CronTaskController
 from Controller.Cron import CronTaskController
 from Controller.MessagePush import EquipmentMessagePush
 from Controller.MessagePush import EquipmentMessagePush
-from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyController
 from Controller.Surveys import CloudStorageController
 from Controller.Surveys import CloudStorageController
+from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyController
+from django.urls import include
+
 from Controller.UserDevice import UserDeviceShareController
 from Controller.UserDevice import UserDeviceShareController
-from Controller.VseesWeb import VseesController
 
 
 urlpatterns = [
 urlpatterns = [
     re_path(r'init/(?P<operation>.*)', InitController.InitView.as_view()),
     re_path(r'init/(?P<operation>.*)', InitController.InitView.as_view()),
     re_path(r'^testApi/(?P<operation>.*)', TestApi.testView.as_view()),
     re_path(r'^testApi/(?P<operation>.*)', TestApi.testView.as_view()),
     re_path(r'^account/authcode', UserController.authCodeView.as_view()),
     re_path(r'^account/authcode', UserController.authCodeView.as_view()),
     re_path(r'^v3/account/generatepictureCodeView/$', UserController.generatePictureCodeView.as_view()),
     re_path(r'^v3/account/generatepictureCodeView/$', UserController.generatePictureCodeView.as_view()),
-    re_path(r'^v3/account/imageCodeRegister/$', UserController.Image_Code_RegisterView.as_view()),
-    re_path(r'^account/register$', UserController.registerView.as_view()),
-    re_path(r'^account/login$', UserController.v2LoginView.as_view()),
-    re_path(r'^account/logout$', UserController.LogoutView.as_view()),
-    re_path(r'^account/noPasslogin$', UserController.noPasslogin.as_view()),
-    re_path(r'^account/changePwd$', UserController.ChangePwdView.as_view()),
-    re_path(r'^account/forget$', UserController.ForgetPwdView.as_view()),
-    re_path(r'^account/email-re-pwd$', UserController.EmailResetPwdView.as_view()),
-    re_path(r'^account/refreshTk$', UserController.refreshTokenView.as_view()),
-    re_path(r'^v3/account/refreshTk$', UserController.refreshTokenViewV3.as_view()),
-    re_path(r'^v3/account/deleteUser$', UserController.DeleteUser.as_view()),
-    re_path(r'^favicon.ico$', UserManger.success, name=u'favicon.ico'),
-    re_path(r'^account/showUserMore$', UserManger.showUserMoreView.as_view()),
-    re_path(r'^account/perfectUserInfo$', UserManger.perfectUserInfoView.as_view()),
-    re_path(r'^account/getAvatar/(?P<filePath>.*)$', UserManger.getAvatarView.as_view()),
-    re_path(r'^account/delUser$', UserManger.delUserInterface),
-    re_path(r'^account/setUserValid$', UserManger.setUserValidView.as_view()),
-    re_path(r'^account/showAllUser$', UserManger.showAllUserInterface),
-    re_path(r'^account/help$', LogManager.HelpView.as_view()),
-    re_path(r'^account/searchUser$', shareUserPermission.searchUserView.as_view()),
-    re_path('accounts', AdminManage.search_user_by_content),  # 多条件搜索用户信息admin
-    re_path(r'^account/shareUserEquipment$', shareUserPermission.shareUserEquipmentView.as_view()),
-    re_path(r'^account/unsharedUserEquipment$', shareUserPermission.unsharedUserEquipmentView.as_view()),
-    re_path(r'^response/success$', UserManger.success),
-    re_path(r'^equipment/queryUserEquipment$', EquipmentManager.queryUserEquipmentInterface),
-    re_path(r'^equipment/addNewUserEquipment$', EquipmentManager.addNewUserEquipmentInterface),
-    re_path(r'^equipment/delUserEquipment$', EquipmentManager.delUserEquipmentInterface),
-    re_path(r'^equipment/modifyUserEquipment$', EquipmentManager.modifyUserEquipmentInterface),
-    re_path(r'^equipment/showAllUserEquipment$', EquipmentManager.showAllUserEquipmentInterface),
-    re_path(r'^equipment/findEquipmentInfo$', EquipmentManager.findEquipmentInfoInterface),
-    re_path(r'^equipment/delete', EquipmentManager.deleteInterface),
-    re_path(r'^equipment/batchDelete', EquipmentManager.batchDeleteInterface),
-    re_path(r'^equipment/add', EquipmentManager.addInterface),
-    re_path(r'^equipment/admin_add', EquipmentManager.admin_addInterface),
-    re_path(r'^equipment/admin_modify', EquipmentManager.admin_modifyInterface),
-    re_path(r'^equipment/query', EquipmentManager.queryInterface),
-    re_path(r'^equipment/flow$', EquipmentManager.uid_status),
-    re_path(r'^OTA/uploads$', OTAEquipment.getUploadFiletoDirView.as_view()),
-    re_path(r'^OTA/download$', OTAEquipment.downloadUpdataFileUrl),
-    re_path(r'^OTA/downloads/(\w+)/(\w+[\w+]*.+[^_w]*.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface),
-    re_path(r'^OTA/getEquipmentVersion$', OTAEquipment.getEquipmentVersionInterface),
-    re_path(r'^OTA/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface),
-    re_path(r'^OTA/addNewEquipmentVersion$', OTAEquipment.addNewEquipmentVersionInterface),
-    re_path(r'^roles/addNewRole$', PermissionManager.addNewRoleView.as_view()),
-    re_path(r'^roles/queryRole$', PermissionManager.queryRoleView.as_view()),
-    re_path(r'^roles/delRole$', PermissionManager.delRoleView.as_view()),
-    re_path(r'^roles/modifyRole$', PermissionManager.modifyRoleView.as_view()),
-    re_path(r'^perms/addNewPerms$', PermissionManager.addNewPermsView.as_view()),
-    re_path(r'^perms/delPerms$', PermissionManager.delPermsView.as_view()),
-    re_path(r'^perms/queryPerms$', PermissionManager.queryPermsView.as_view()),
-    re_path(r'^perms/modifyPerms$', PermissionManager.modifyPermsView.as_view()),
-    re_path(r'^permsManager/queryRolePerms$', PermissionManager.queryRolePermsView.as_view()),
-    re_path(r'^uploads/upgrade$', OTAEquipment.getUploadFiletoDirView.as_view()),
-    re_path(r'^upgrade/download/(\w+.[^_w]*\w+.\w+)$', CheckUserData.download_file),
-    re_path(r'^downloads/upgrade/(\w+)/(\w+.[^_w]*\w+.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface),
-    re_path(r'^getOTAurl/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface),
-    re_path(r'^equipment/info', EquipmentInfo.EquipmentInfo.as_view()),
-    re_path(r'^adminManage/manage', AdminManage.AdminManage.as_view()),
-    re_path(r'^equipment/OTA', EquipmentOTA.EquipmentOTA.as_view()),
-    re_path(r'^userbrandinfo/(?P<operation>.*)$', UserBrandController.UserBrandInfo.as_view()),
-    re_path(r'^uidset/(?P<operation>.*)$', UidSetController.UidSetView.as_view()),
-    re_path(r'^appInfo', AppInfo.AppInfo.as_view()),
-    re_path(r'^meal/manage', MealManage.MealManage.as_view()),
-    re_path(r'^device/manage$', DeviceManage.DeviceManage.as_view()),
-    re_path(r'^device/online$', EquipmentStatus.EquipmentOnline),
-    re_path(r'^device/offline$', EquipmentStatus.EquipmentOffline),
-    re_path(r'^device/updateIP$', EquipmentStatus.updateIP),
-    re_path(r'^sys/updateLog', SysManage.updateLog),
-    re_path(r'^devices/(\w+)/logs$', DeviceLog.DeviceLog),
-    re_path(r'^devices/(\w+)$', DeviceManage.Devices),
-    re_path(r'^LogAccess$', LogAccess.LogAccess),
-    re_path(r'^HelpCHM/upload$', LogManager.upload_help_chm),
-    re_path(r'^admin/userIDs$', AdminManage.getUserIds),
-    re_path('eq/delById', EquipmentInfo.deleteExpireEquipmentInfoById),
-    re_path(r'^OTA/getNewVer', OTAEquipment.getNewVerInterface),
-    re_path(r'^OTA/uploadsPack$', OTAEquipment.uploadOTAInterfaceView.as_view()),
-    re_path(r'^OTA/downloadsPack/(?P<fullPath>[0-9\w/.\-]+)', OTAEquipment.downloadOTAInterface),
-    re_path(r'^dlotapack/(?P<fullPath>[0-9\w/.\-]+)', OTAEquipment.downloadOTAInterfaceV2),
-    re_path(r'^OTA/getDownLoadOTApackUrl$', OTAEquipment.getDownLoadOTApackUrl),
-    re_path(r'^OTA/checkMaxVersion$', OTAEquipment.checkMaxVersion),
-    re_path(r'^v2/account/authcode$', UserController.v2authCodeView.as_view()),
-    re_path(r'^v2/account/register$', UserController.v2registerView.as_view()),
-    re_path(r'^v2/account/forgetCode$', UserController.v2forgetPwdCodeView.as_view()),
-    re_path(r'^v2/account/resetPwdByCode$', UserController.v2resetPwdByCodeView.as_view()),
-    re_path(r'^v2/authcode/verify$', UserController.verifyAuthcode.as_view()),
-    re_path(r'^v2/account/logout$', UserController.V2LogoutView.as_view()),
-    re_path(r'^v2/account/login$', UserController.v3LoginView.as_view()),
-    re_path(r'^v3/account/login$', UserController.v3LoginView.as_view()),
-    re_path(r'^account/oneClickLogin$', UserController.oneClickLoginView.as_view()),
-    re_path(r'^account/createPwd$', UserController.createPwd.as_view()),
-    re_path(r'^account/delete$', UserController.deleteAccount),
-    re_path(r'^user/confirmRegion$', UserController.confirmRegion),
-    re_path(r'^account/loginCode$', UserController.loginCodeView.as_view()),
-    re_path(r'^v3/account/loginByCode$', UserController.v3LoginByCodeView.as_view()),
-    re_path(r'^v3/account/loginByFingerprint$', UserController.v3LoginByFingerprintView.as_view()),
-    re_path(r'^v3/account/setFingerprint$', UserController.v3SetFingerprintView.as_view()),
-    re_path(r'^detect/(?P<operation>.*)$', DetectController.DetectControllerView.as_view()),
-    re_path(r'^detectV2/(?P<operation>.*)$', DetectControllerV2.DetectControllerViewV2.as_view()),
-    re_path(r'^cloudVod/(?P<operation>.*)$', CloudVod.CloudVodView.as_view()),
-    re_path(r'^meal/(?P<operation>.*)$', MealManage.MealView.as_view()),
-    re_path(r'^order/(?P<operation>.*)$', OrderContrller.OrderView.as_view()),
-    re_path(r'^appCol/(?P<operation>.*)$', AppColophon.AppColView.as_view()),
-    re_path(r'^vodBucket/(?P<operation>.*)$', VodBucket.VodBucketView.as_view()),
-    re_path(r'^UIDBucket/(?P<operation>.*)$', VodBucket.UidBucketView.as_view()),
-    re_path(r'^EquipmentVersion/(?P<operation>.*)$', EquipmentOTA.EquipmentVersionView.as_view()),
-    re_path(r'^deviceShare/(?P<operation>.*)$', DeviceShare.DeviceShareView.as_view()),
-    re_path(r'^appVer/views$', AppInfo.AppVersionView.as_view()),
-    re_path(r'^user/initInfo$', UserController.InitInfoView.as_view()),
-    re_path(r'^user/information/(?P<operation>.*)$', UserController.InitUserInformationView.as_view()),
-    re_path(r'^getTZ$', EquipmentStatus.getTZ),
-    re_path(r'^stsOss/(?P<operation>.*)$', StsOssController.StsOssView.as_view()),
-    re_path(r'^feedback/(?P<operation>.*)$', FeedBack.FeedBackView.as_view()),
-    re_path(r'^uidpreview/(?P<operation>.*)$', UIDPreview.UIDPreview.as_view()),
-    re_path(r'^sysmsg/(?P<operation>.*)$', SysMsg.SysMsgView.as_view()),
-    re_path(r'^sysfile/(?P<filePath>.*)$', SysManage.getStatView.as_view()),
-    re_path(r'^equipment/flowUpdate', EquipmentManager.update_uid_set),
-    re_path(r'^log/getUploadUrl', EquipmentStatus.getUploadLogUrl),
-    re_path(r'^app/getIdData', AppInfo.AppIdDataView.as_view()),
-    re_path(r'^wechat/authsign', UserController.wxAuthSignView.as_view()),
-    re_path(r'^wechat/perfect', UserController.wxPerfectView.as_view()),
-    re_path(r'^Test', Test.Test.as_view()),
-    re_path(r'^oauth/authcode', UserController.OauthAuthCodeView.as_view()),
-    re_path(r'^oauth/perfect', UserController.OauthPerfectView.as_view()),
-    re_path(r'^oauth/unbunding', UserController.UnbundingWXView.as_view()),
-    re_path(r'^equipment/judge', EquipmentManager.judgeInterface),
-    re_path(r'^uiduser/add', UidUser.addInterface),
-    re_path(r'^uiduser/query', UidUser.queryInterface),
-    re_path(r'^uiduser/update', UidUser.updateInterface),
-    re_path(r'^uiduser/delete', UidUser.deleteInterface),
-    re_path(r'^uid_user/(?P<operation>.*)$', UidUser.UidUserView.as_view()),
-    re_path(r'^v2/equipment/(?P<operation>.*)$', EquipmentManagerV2.EquipmentManagerV2.as_view()),
-    re_path(r'^msg/init', SysManage.initMsgFunc),
-    re_path(r'^oss_crd/(?P<operation>.*)$', OssCrd.OssCrdView.as_view()),
-    re_path(r'^push_deploy/(?P<operation>.*)$', PushDeploy.PushDeployView.as_view()),
-    re_path(r'^oalexa/auth', UserController.alexaAuthView.as_view()),
-    re_path(r'^oalexa/discoveryuid', UserController.alexaUidView.as_view()),
+    url(r'^v3/account/imageCodeRegister/$', UserController.Image_Code_RegisterView.as_view()),
+    url(r'^account/register$', UserController.registerView.as_view()),
+    url(r'^account/login$', UserController.v2LoginView.as_view()),
+    url(r'^account/logout$', UserController.LogoutView.as_view()),
+    url(r'^account/noPasslogin$', UserController.noPasslogin.as_view()),
+    url(r'^account/changePwd$', UserController.ChangePwdView.as_view()),
+    url(r'^account/forget$', UserController.ForgetPwdView.as_view()),
+    url(r'^account/email-re-pwd$', UserController.EmailResetPwdView.as_view()),
+    url(r'^account/refreshTk$', UserController.refreshTokenView.as_view()),
+    url(r'^v3/account/refreshTk$', UserController.refreshTokenViewV3.as_view()),
+    url(r'^v3/account/deleteUser$', UserController.DeleteUser.as_view()),
+    url(r'^favicon.ico$', UserManger.success, name=u'favicon.ico'),
+    url(r'^account/showUserMore$', UserManger.showUserMoreView.as_view()),
+    url(r'^account/perfectUserInfo$', UserManger.perfectUserInfoView.as_view()),
+    url(r'^account/getAvatar/(?P<filePath>.*)$', UserManger.getAvatarView.as_view()),
+    url(r'^account/delUser$', UserManger.delUserInterface),
+    url(r'^account/setUserValid$', UserManger.setUserValidView.as_view()),
+    url(r'^account/showAllUser$', UserManger.showAllUserInterface),
+    url(r'^account/help$', LogManager.HelpView.as_view()),
+    url(r'^account/searchUser$', shareUserPermission.searchUserView.as_view()),
+    path('accounts', AdminManage.search_user_by_content),  # 多条件搜索用户信息admin
+    url(r'^account/shareUserEquipment$', shareUserPermission.shareUserEquipmentView.as_view()),
+    url(r'^account/unsharedUserEquipment$', shareUserPermission.unsharedUserEquipmentView.as_view()),
+    url(r'^response/success$', UserManger.success),
+    url(r'^equipment/queryUserEquipment$', EquipmentManager.queryUserEquipmentInterface),
+    url(r'^equipment/addNewUserEquipment$', EquipmentManager.addNewUserEquipmentInterface),
+    url(r'^equipment/delUserEquipment$', EquipmentManager.delUserEquipmentInterface),
+    url(r'^equipment/modifyUserEquipment$', EquipmentManager.modifyUserEquipmentInterface),
+    url(r'^equipment/showAllUserEquipment$', EquipmentManager.showAllUserEquipmentInterface),
+    url(r'^equipment/findEquipmentInfo$', EquipmentManager.findEquipmentInfoInterface),
+    # 新删除设备接口
+    url(r'^equipment/delete', EquipmentManager.deleteInterface),
+    url(r'^equipment/batchDelete', EquipmentManager.batchDeleteInterface),
+    url(r'^equipment/add', EquipmentManager.addInterface),
+    url(r'^equipment/admin_add', EquipmentManager.admin_addInterface),
+    url(r'^equipment/admin_modify', EquipmentManager.admin_modifyInterface),
+
+    url(r'^equipment/query', EquipmentManager.queryInterface),
+    # 获取设备影子信息接口
+    url(r'^equipment/flow$', EquipmentManager.uid_status),
+
+    url(r'^OTA/uploads$', OTAEquipment.getUploadFiletoDirView.as_view()),
+    url(r'^OTA/download$', OTAEquipment.downloadUpdataFileUrl),
+    url(r'^OTA/downloads/(\w+)/(\w+[\w+]*.+[^_w]*.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface),
+    url(r'^OTA/getEquipmentVersion$', OTAEquipment.getEquipmentVersionInterface),
+    url(r'^OTA/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface),
+    url(r'^OTA/addNewEquipmentVersion$', OTAEquipment.addNewEquipmentVersionInterface),
+
+    url(r'^roles/addNewRole$', PermissionManager.addNewRoleView.as_view()),
+    url(r'^roles/queryRole$', PermissionManager.queryRoleView.as_view()),
+    url(r'^roles/delRole$', PermissionManager.delRoleView.as_view()),
+    url(r'^roles/modifyRole$', PermissionManager.modifyRoleView.as_view()),
+    url(r'^perms/addNewPerms$', PermissionManager.addNewPermsView.as_view()),
+    url(r'^perms/delPerms$', PermissionManager.delPermsView.as_view()),
+    url(r'^perms/queryPerms$', PermissionManager.queryPermsView.as_view()),
+    url(r'^perms/modifyPerms$', PermissionManager.modifyPermsView.as_view()),
+    url(r'^permsManager/queryRolePerms$', PermissionManager.queryRolePermsView.as_view()),
+    url(r'^uploads/upgrade$', OTAEquipment.getUploadFiletoDirView.as_view()),
+    url(r'^upgrade/download/(\w+.[^_w]*\w+.\w+)$', CheckUserData.download_file),
+    url(r'^downloads/upgrade/(\w+)/(\w+.[^_w]*\w+.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface),
+    url(r'^getOTAurl/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface),
+    url(r'^equipment/info', EquipmentInfo.EquipmentInfo.as_view()),
+    url(r'^adminManage/manage', AdminManage.AdminManage.as_view()),  # 管理员专属view
+    url(r'^equipment/OTA', EquipmentOTA.EquipmentOTA.as_view()),  # OTA重构类
+    url(r'^userbrandinfo/(?P<operation>.*)$', UserBrandController.UserBrandInfo.as_view()),  # 用户登录的手机端品牌记录统计信息表
+
+    url(r'^uidset/(?P<operation>.*)$', UidSetController.UidSetView.as_view()),
+    url(r'^appInfo', AppInfo.AppInfo.as_view()),  # app版本信息
+
+    url(r'^meal/manage', MealManage.MealManage.as_view()),
+    url(r'^device/manage$', DeviceManage.DeviceManage.as_view()),
+    # 设备在线
+    url(r'^device/online$', EquipmentStatus.EquipmentOnline),
+    # 设备离线
+    url(r'^device/offline$', EquipmentStatus.EquipmentOffline),
+    # 设备离线
+    url(r'^device/updateIP$', EquipmentStatus.updateIP),
+    # 系统ctr
+    url(r'^sys/updateLog', SysManage.updateLog),
+    url(r'^devices/(\w+)/logs$', DeviceLog.DeviceLog),
+    url(r'^devices/(\w+)$', DeviceManage.Devices),
+    # 访问日志 mongodb版
+    url(r'^LogAccess$', LogAccess.LogAccess),
+    # 上传操作文档
+    url(r'^HelpCHM/upload$', LogManager.upload_help_chm),
+    url(r'^admin/userIDs$', AdminManage.getUserIds),
+    path('eq/delById', EquipmentInfo.deleteExpireEquipmentInfoById),
+    # 新需求ota接口
+    url(r'^OTA/getNewVer', OTAEquipment.getNewVerInterface),
+    url(r'^OTA/uploadsPack$', OTAEquipment.uploadOTAInterfaceView.as_view()),
+    url(r'^OTA/downloadsPack/(?P<fullPath>[0-9\w/.\-]+)', OTAEquipment.downloadOTAInterface),
+    url(r'^dlotapack/(?P<fullPath>[0-9\w/.\-]+)', OTAEquipment.downloadOTAInterfaceV2),
+    url(r'^OTA/getDownLoadOTApackUrl$', OTAEquipment.getDownLoadOTApackUrl),
+    url(r'^OTA/checkMaxVersion$', OTAEquipment.checkMaxVersion),
+
+    # h获取验证码    # v2接口
+    url(r'^v2/account/authcode$', UserController.v2authCodeView.as_view()),
+    url(r'^v2/account/register$', UserController.v2registerView.as_view()),
+    url(r'^v2/account/forgetCode$', UserController.v2forgetPwdCodeView.as_view()),
+    url(r'^v2/account/resetPwdByCode$', UserController.v2resetPwdByCodeView.as_view()),
+
+    # 重置密码验证码校验
+    url(r'^v2/authcode/verify$', UserController.verifyAuthcode.as_view()),
+    url(r'^v2/account/logout$', UserController.V2LogoutView.as_view()),
+    url(r'^v2/account/login$', UserController.v3LoginView.as_view()),
+    url(r'^v3/account/login$', UserController.v3LoginView.as_view()),
+    url(r'^account/oneClickLogin$', UserController.oneClickLoginView.as_view()),
+    url(r'^account/createPwd$', UserController.createPwd.as_view()),
+
+    # 用户删除/注销
+    url(r'^account/delete$', UserController.deleteAccount),
+
+    # 确认地区
+    url(r'^user/confirmRegion$', UserController.confirmRegion),
+
+    # 验证码登录
+    url(r'^account/loginCode$', UserController.loginCodeView.as_view()),
+    url(r'^v3/account/loginByCode$', UserController.v3LoginByCodeView.as_view()),
+
+    # 指纹登录
+    url(r'^v3/account/loginByFingerprint$', UserController.v3LoginByFingerprintView.as_view()),
+    url(r'^v3/account/setFingerprint$', UserController.v3SetFingerprintView.as_view()),
+
+    # 推送项目接口
+    url(r'^detect/(?P<operation>.*)$', DetectController.DetectControllerView.as_view()),
+    url(r'^detectV2/(?P<operation>.*)$', DetectControllerV2.DetectControllerViewV2.as_view()),
+
+    # 新增
+    url(r'^cloudVod/(?P<operation>.*)$', CloudVod.CloudVodView.as_view()),
+    url(r'^meal/(?P<operation>.*)$', MealManage.MealView.as_view()),
+    url(r'^order/(?P<operation>.*)$', OrderContrller.OrderView.as_view()),
+    url(r'^appCol/(?P<operation>.*)$', AppColophon.AppColView.as_view()),
+    url(r'^vodBucket/(?P<operation>.*)$', VodBucket.VodBucketView.as_view()),
+    url(r'^UIDBucket/(?P<operation>.*)$', VodBucket.UidBucketView.as_view()),
+    url(r'^EquipmentVersion/(?P<operation>.*)$', EquipmentOTA.EquipmentVersionView.as_view()),
+
+    url(r'^deviceShare/(?P<operation>.*)$', DeviceShare.DeviceShareView.as_view()),
+    url(r'^appVer/views$', AppInfo.AppVersionView.as_view()),
+
+    # 屏蔽
+    url(r'^user/initInfo$', UserController.InitInfoView.as_view()),
+    url(r'^user/information/(?P<operation>.*)$', UserController.InitUserInformationView.as_view()),
+    # 获取时区相关信息
+    url(r'^getTZ$', EquipmentStatus.getTZ),
+
+    # oss授权
+    url(r'^stsOss/(?P<operation>.*)$', StsOssController.StsOssView.as_view()),
+
+    # 用户反馈信息
+    url(r'^feedback/(?P<operation>.*)$', FeedBack.FeedBackView.as_view()),
+    url(r'^uidpreview/(?P<operation>.*)$', UIDPreview.UIDPreview.as_view()),
+    url(r'^sysmsg/(?P<operation>.*)$', SysMsg.SysMsgView.as_view()),
+    url(r'^sysfile/(?P<filePath>.*)$', SysManage.getStatView.as_view()),
+
+    url(r'^equipment/flowUpdate', EquipmentManager.update_uid_set),
+
+    url(r'^log/getUploadUrl', EquipmentStatus.getUploadLogUrl),
+    url(r'^app/getIdData', AppInfo.AppIdDataView.as_view()),
+    url(r'^wechat/authsign', UserController.wxAuthSignView.as_view()),
+    url(r'^wechat/perfect', UserController.wxPerfectView.as_view()),
+    # 分区分流
+    path('Test', Test.Test.as_view()),
+    # 微信绑定的用户获取验证码
+    url(r'^oauth/authcode', UserController.OauthAuthCodeView.as_view()),
+    url(r'^oauth/perfect', UserController.OauthPerfectView.as_view()),
+    url(r'^oauth/unbunding', UserController.UnbundingWXView.as_view()),
+
+    url(r'^equipment/judge', EquipmentManager.judgeInterface),
+
+    # ap模式,新增设备表
+    url(r'^uiduser/add', UidUser.addInterface),
+    url(r'^uiduser/query', UidUser.queryInterface),
+    url(r'^uiduser/update', UidUser.updateInterface),
+    url(r'^uiduser/delete', UidUser.deleteInterface),
+    url(r'^uid_user/(?P<operation>.*)$', UidUser.UidUserView.as_view()),
+    # add query update delete
+    url(r'^v2/equipment/(?P<operation>.*)$', EquipmentManagerV2.EquipmentManagerV2.as_view()),
+
+    url(r'^msg/init', SysManage.initMsgFunc),
+
+    url(r'^oss_crd/(?P<operation>.*)$', OssCrd.OssCrdView.as_view()),
+    url(r'^push_deploy/(?P<operation>.*)$', PushDeploy.PushDeployView.as_view()),
+    url(r'^oalexa/auth', UserController.alexaAuthView.as_view()),
+    url(r'^oalexa/discoveryuid', UserController.alexaUidView.as_view()),
     re_path(r'^oalexa/discoveryswitch', UserController.alexaSwitchView.as_view()),
     re_path(r'^oalexa/discoveryswitch', UserController.alexaSwitchView.as_view()),
     re_path('appset/(?P<operation>.*)', AppSetController.AppSetView.as_view()),
     re_path('appset/(?P<operation>.*)', AppSetController.AppSetView.as_view()),
-    re_path(r'^application/(?P<operation>.*)$', ApplicationController.ApplicationView.as_view()),
-    re_path(r'^login/oauth/(?P<operation>.*)$', ApplicationController.AuthView.as_view()),
-    re_path(r'^grant/code/(?P<operation>.*)$', ApplicationController.GrantCodeView.as_view()),
-    re_path(r'^user/ex/(?P<operation>.*)$', UserExController.UserExView.as_view()),
-    re_path(r'^v3/equipment/(?P<operation>.*)$', EquipmentManagerV3.EquipmentManagerV3.as_view()),
-    re_path(r'^cloudstorage/(?P<operation>.*)$', CloudStorage.CloudStorageView.as_view()),
-    re_path(r'^payCycle/(?P<operation>.*)$', PaymentCycle.PaypalCycleNotify.as_view()),
-    re_path(r'^paypalCycleNotify/(?P<operation>.*)$', PaymentCycle.PaypalCycleNotify.as_view()),
-    re_path(r'^paymentCycle/(?P<operation>.*)$', PaymentCycle.payCycle.as_view()),
-    re_path(r'^AiService/(?P<operation>.*)$', AiController.AiView.as_view()),
-    re_path(r'^app/setting/notification/(?P<operation>.*)$', EquipmentMessagePush.EquipmentMessagePushView.as_view()),
-    re_path(r'^v3/account/changePwd$', UserController.v3ChangePwdView.as_view()),
-    re_path(r'^v3/account/resetPwdByCode$', UserController.v3resetPwdByCodeView.as_view()),
-    re_path(r'^v3/account/register$', UserController.v3registerView.as_view()),
-    re_path(r'^v3/uiduser/add', UidUser.v3addInterface),
-    re_path(r'^v3/uiduser/query', UidUser.v3queryInterface),
-    re_path(r'^date/(?P<operation>.*)$', DateController.DateConView.as_view()),
-    re_path(r'^equipment/flow_test$', EquipmentManager.uid_status_test),
-    re_path(r'^account/appFrequency/(?P<operation>.*)$', UserController.UserAppFrequencyView.as_view()),
-    re_path(r'^v2/userbrand/(?P<operation>.*)$', UserBrandControllerV2.UserBrandV2.as_view()),
-    re_path(r'^statistcs/appFrequencyMonth$', StatisticsController.statistcsAppFrequency),
-    re_path(r'^statistcs/appFrequencyYear$', StatisticsController.statistcsAppFrequencyYear),
-    re_path(r'^statistcs/pushDay$', StatisticsController.statistcsPushDay),
-    re_path(r'^statistcs/pushMonth$', StatisticsController.statistcsPushMonth),
-    re_path(r'^alexa/(?P<operation>.*)$', Alexa.AlexaConnectNum.as_view()),
-    re_path(r'^faq/upload', FAQController.FAQUploadView.as_view()),
-    re_path(r'^faq/image/(?P<filePath>.*)$', FAQController.getFAQImage.as_view()),
-    re_path(r'^faq/(?P<operation>.*)$', FAQController.FAQView.as_view()),
-    re_path(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
-    re_path(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
-    re_path(r'deviceLog/(?P<operation>.*)$', DeviceLogController.DeviceLogView.as_view()),
-    re_path(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
-    re_path(r'^account/updateUserCountry', UserController.updateUserCountry),
-    re_path(r'^equipmentVersionLimit/(?P<operation>.*)$', EquipmentVersionLimit.EquipmentVersionLimitView.as_view()),
-    re_path(r'^account/subscribe$', UserController.SubscribeEmailView.as_view()),
-    re_path(r'^account/subscribe/download$', UserController.SubscribeEmailView.as_view()),
-    re_path(r'^voicePrompt/(?P<operation>.*)$', VoicePromptController.VoicePromptView.as_view()),
-    re_path(r'^deviceType/(?P<operation>.*)$', DeviceTypeController.DeviceTypeView.as_view()),
-    re_path(r'^cdk/(?P<operation>.*)$', CDKController.CDKView.as_view()),
-    re_path(r'^cloudTransfer/(?P<operation>.*)$', CloudTransfer.cloudTestView.as_view()),
-    re_path(r'^coupon/(?P<operation>.*)$', CouponController.CouponView.as_view()),
-    re_path(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
-    re_path(r'^device/StatisticsIpRegion$', DeviceConfirmRegion.StatisticsIpRegion.as_view()),
+    url(r'^application/(?P<operation>.*)$', ApplicationController.ApplicationView.as_view()),
+    url(r'^login/oauth/(?P<operation>.*)$', ApplicationController.AuthView.as_view()),
+    url(r'^grant/code/(?P<operation>.*)$', ApplicationController.GrantCodeView.as_view()),
+    url(r'^user/ex/(?P<operation>.*)$', UserExController.UserExView.as_view()),
+    url(r'^v3/equipment/(?P<operation>.*)$', EquipmentManagerV3.EquipmentManagerV3.as_view()),
+    url(r'^cloudstorage/(?P<operation>.*)$', CloudStorage.CloudStorageView.as_view()),
+    url(r'^payCycle/(?P<operation>.*)$', PaymentCycle.PaypalCycleNotify.as_view()),  # 周期扣款
+    url(r'^paypalCycleNotify/(?P<operation>.*)$', PaymentCycle.PaypalCycleNotify.as_view()),  # paypal周期扣款订阅通知
+    url(r'^paymentCycle/(?P<operation>.*)$', PaymentCycle.payCycle.as_view()),  # paypal周期扣款
+
+    # AI服务
+    url(r'^AiService/(?P<operation>.*)$', AiController.AiView.as_view()),
+    # 消息提醒
+    url(r'^app/setting/notification/(?P<operation>.*)$', EquipmentMessagePush.EquipmentMessagePushView.as_view()),
+
+    # 新增解密的接口
+    url(r'^v3/account/changePwd$', UserController.v3ChangePwdView.as_view()),
+    url(r'^v3/account/resetPwdByCode$', UserController.v3resetPwdByCodeView.as_view()),
+    url(r'^v3/account/register$', UserController.v3registerView.as_view()),
+    url(r'^v3/uiduser/add', UidUser.v3addInterface),
+    url(r'^v3/uiduser/query', UidUser.v3queryInterface),
+    # 判断节假日接口
+    url(r'^date/(?P<operation>.*)$', DateController.DateConView.as_view()),
+
+    url(r'^equipment/flow_test$', EquipmentManager.uid_status_test),
+    url(r'^account/appFrequency/(?P<operation>.*)$', UserController.UserAppFrequencyView.as_view()),
+    url(r'^v2/userbrand/(?P<operation>.*)$', UserBrandControllerV2.UserBrandV2.as_view()),
+    url(r'^statistcs/appFrequencyMonth$', StatisticsController.statistcsAppFrequency),
+    url(r'^statistcs/appFrequencyYear$', StatisticsController.statistcsAppFrequencyYear),
+    url(r'^statistcs/pushDay$', StatisticsController.statistcsPushDay),
+    url(r'^statistcs/pushMonth$', StatisticsController.statistcsPushMonth),
+
+    # 统计alexa连接数
+    url(r'^alexa/(?P<operation>.*)$', Alexa.AlexaConnectNum.as_view()),
+
+    # FAQ
+    url(r'^faq/upload', FAQController.FAQUploadView.as_view()),
+    url(r'^faq/image/(?P<filePath>.*)$', FAQController.getFAQImage.as_view()),
+    url(r'^faq/(?P<operation>.*)$', FAQController.FAQView.as_view()),
+
+    # 苹果登录
+    url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
+    # app/设备上传日志接口
+    url(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
+    url(r'deviceLog/(?P<operation>.*)', DeviceLogController.DeviceLogView.as_view()),
+    # 本地登录接口
+    url(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
+
+    url(r'^account/updateUserCountry', UserController.updateUserCountry),
+    url(r'^equipmentVersionLimit/(?P<operation>.*)$', EquipmentVersionLimit.EquipmentVersionLimitView.as_view()),
+
+    # 订阅邮件
+    url(r'^account/subscribe$', UserController.SubscribeEmailView.as_view()),
+    url(r'^account/subscribe/download$', UserController.SubscribeEmailView.as_view()),
+
+    # 语音提示
+    url(r'^voicePrompt/(?P<operation>.*)$', VoicePromptController.VoicePromptView.as_view()),
+    # 设备类型
+    url(r'^deviceType/(?P<operation>.*)$', DeviceTypeController.DeviceTypeView.as_view()),
+
+    # cdk(激活码)
+    url(r'^cdk/(?P<operation>.*)$', CDKController.CDKView.as_view()),
+    # 云存转移功能
+    url(r'^cloudTransfer/(?P<operation>.*)$', CloudTransfer.cloudTestView.as_view()),
+    # 优惠券
+    url(r'^coupon/(?P<operation>.*)$', CouponController.CouponView.as_view()),
+
+    # 云存服务统计
+    url(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
+    # 设备ip地区统计
+    url(r'^device/StatisticsIpRegion$', DeviceConfirmRegion.StatisticsIpRegion.as_view()),
+
+    # Iot Core
     re_path('iot/(?P<operation>.*)', IotCoreController.IotCoreView.as_view()),
     re_path('iot/(?P<operation>.*)', IotCoreController.IotCoreView.as_view()),
-    re_path(r's3_getsts/(?P<operation>.*)$', S3GetStsController.S3GetStsView.as_view()),
-    re_path('admin/', admin.site.urls),
+
+    # S3预签名
+    url(r's3_getsts/(?P<operation>.*)$', S3GetStsController.S3GetStsView.as_view()),
+
+    # 云分配UID
+    path('admin/', admin.site.urls),
     re_path('user/(?P<operation>.*)', UIDManageUserController.UserView.as_view()),
     re_path('user/(?P<operation>.*)', UIDManageUserController.UserView.as_view()),
     re_path('uid/(?P<operation>.*)', UIDController.UIDView.as_view()),
     re_path('uid/(?P<operation>.*)', UIDController.UIDView.as_view()),
     re_path('history/(?P<operation>.*)', HistoryUIDController.HistoryUIDView.as_view()),
     re_path('history/(?P<operation>.*)', HistoryUIDController.HistoryUIDView.as_view()),
     re_path('^log/(?P<operation>.*)', LogController.LogView.as_view()),
     re_path('^log/(?P<operation>.*)', LogController.LogView.as_view()),
     re_path('orderTask/(?P<operation>.*)', OrderTaskController.OrderTaskView.as_view()),
     re_path('orderTask/(?P<operation>.*)', OrderTaskController.OrderTaskView.as_view()),
-    re_path('^upload', FileController.UploadUIDFileView.as_view()),
-    re_path('^download', FileController.DownloadUIDFileView.as_view()),
-    re_path('^sales', SalesController.SalesView.as_view()),
-    re_path('device/online', SalesController.DeviceOnlineView.as_view()),
+    path('upload', FileController.UploadUIDFileView.as_view()),
+    path('download', FileController.DownloadUIDFileView.as_view()),
+    path('sales', SalesController.SalesView.as_view()),
+    path('device/online', SalesController.DeviceOnlineView.as_view()),
     re_path('serialNumber/(?P<operation>.*)', SerialNumberController.SerialNumberView.as_view()),
     re_path('serialNumber/(?P<operation>.*)', SerialNumberController.SerialNumberView.as_view()),
-    re_path('deviceShadow/update', ShadowController.update_device_shadow),
+    re_path('deviceShadow/updateV2', ShadowController.update_device_shadow),
     re_path('company/(?P<operation>.*)', CompanyController.CompanyView.as_view()),
     re_path('company/(?P<operation>.*)', CompanyController.CompanyView.as_view()),
     re_path('region/(?P<operation>.*)', RegionController.RegionView.as_view()),
     re_path('region/(?P<operation>.*)', RegionController.RegionView.as_view()),
     re_path('vpg/(?P<operation>.*)', VPGController.VPGView.as_view()),
     re_path('vpg/(?P<operation>.*)', VPGController.VPGView.as_view()),
-    re_path('vpgUid/uid', VPGController.do_upload_uid),
+    path('vpgUid/uid', VPGController.do_upload_uid),
     re_path('language/(?P<operation>.*)', LanguageController.LanguageView.as_view()),
     re_path('language/(?P<operation>.*)', LanguageController.LanguageView.as_view()),
+
     re_path('test/(?P<operation>.*)', TestController.TestView.as_view()),
     re_path('test/(?P<operation>.*)', TestController.TestView.as_view()),
-    re_path(r'^OperatingLogs/(?P<operation>.*)$', OperatingLogs.OperatingLogsView.as_view()),
-    re_path(r'^ProcessInfo/(?P<operation>.*)$', ProcessInfo.ProcessInfoView.as_view()),
-    re_path(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
-    re_path(r'regionCountry/(?P<operation>.*$)', RegionCountryController.RegionCountryView.as_view()),
-    re_path(r'verifyCode/(?P<operation>.*$)', VerifyCodeController.VerifyCodeView.as_view()),
-    re_path(r'^device/confirmRegion$', DeviceConfirmRegion.ConfirmRegion.as_view()),
-    re_path(r'^device/confirmRegionV2$', DeviceConfirmRegion.ConfirmRegionV2.as_view()),
-    re_path(r'^device/confirmCountry$', DeviceConfirmRegion.confirm_country_with_ip),
-    re_path(r'^pcInfo/(?P<operation>.*)$', PcInfo.PcInfo.as_view()),
-    re_path(r'^pcTest/(?P<operation>.*)$', PctestController.PcTest.as_view()),
+    # 日志管理系统
+    url(r'^OperatingLogs/(?P<operation>.*)$', OperatingLogs.OperatingLogsView.as_view()),
+    url(r'^ProcessInfo/(?P<operation>.*)$', ProcessInfo.ProcessInfoView.as_view()),
+    url(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
+
+    url(r'regionCountry/(?P<operation>.*$)', RegionCountryController.RegionCountryView.as_view()),
+
+    # 验证验证码
+    url(r'verifyCode/(?P<operation>.*$)', VerifyCodeController.VerifyCodeView.as_view()),
+
+    # 设备确定分配地区
+    url(r'^device/confirmRegion$', DeviceConfirmRegion.ConfirmRegion.as_view()),
+    url(r'^device/confirmRegionV2$', DeviceConfirmRegion.ConfirmRegionV2.as_view()),
+    url(r'^device/confirmCountry$', DeviceConfirmRegion.confirm_country_with_ip),
+
+    # pc端软件信息
+    url(r'^pcInfo/(?P<operation>.*)$', PcInfo.PcInfo.as_view()),
+
+    # pc端测试软件
+    url(r'^pcTest/(?P<operation>.*)$', PctestController.PcTest.as_view()),
+
+    # 设备debug
     re_path('deviceDebug/(?P<operation>.*)', DeviceDebug.DeviceDebug.as_view()),
     re_path('deviceDebug/(?P<operation>.*)', DeviceDebug.DeviceDebug.as_view()),
-    re_path(r'^api/surveys/(?P<operation>.*)$', CloudStorageController.CloudStorageView.as_view()),
-    re_path(r'^api/device/share/(?P<operation>.*)$', UserDeviceShareController.UserDeviceShareView.as_view()),
-    re_path(r'^app/sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
-    re_path(r'^loocam/', include("Ansjer.server_urls.loocam_url")),
+
+    # 问卷调查
+    url(r'^api/surveys/(?P<operation>.*)$', CloudStorageController.CloudStorageView.as_view()),
+    # 设备分享
+    url(r'^api/device/share/(?P<operation>.*)$', UserDeviceShareController.UserDeviceShareView.as_view()),
+
+    # 网关家庭模块
+    url(r'^app/sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
+    url(r'^loocam/', include("Ansjer.server_urls.loocam_url")),
     re_path(r'^api/loocam/', include("Ansjer.server_urls.loocam_url")),
     re_path(r'^api/loocam/', include("Ansjer.server_urls.loocam_url")),
-    re_path(r'^unicom/', include("Ansjer.server_urls.unicom_url")),
-    re_path(r'^algorithm-shop/', include("Ansjer.server_urls.algorithm_shop_url")),
+    # 联通4G套餐模块
+    url(r'^unicom/', include("Ansjer.server_urls.unicom_url")),
+    # 算法小店
+    url(r'^algorithm-shop/', include("Ansjer.server_urls.algorithm_shop_url")),
     re_path(r'^api/algorithm/', include("Ansjer.server_urls.algorithm_shop_url")),
     re_path(r'^api/algorithm/', include("Ansjer.server_urls.algorithm_shop_url")),
-    re_path(r'^kvs/', include("Ansjer.server_urls.kvs_url")),
-    re_path(r'^icloud/', include("Ansjer.server_urls.icloud_url")),
+    # KVS模块
+    url(r'^kvs/', include("Ansjer.server_urls.kvs_url")),
+    # 超级密码模块
     re_path('appAccout/(?P<operation>.*)', AppAccountManagement.AppAccoutView.as_view()),
     re_path('appAccout/(?P<operation>.*)', AppAccountManagement.AppAccoutView.as_view()),
+
+    # 传感器网关
     re_path('sensorGateway/(?P<operation>.*)', SensorGatewayController.SensorGateway.as_view()),
     re_path('sensorGateway/(?P<operation>.*)', SensorGatewayController.SensorGateway.as_view()),
-    re_path(r'^api/surveys/(?P<operation>.*)$', CloudStorageController.CloudStorageView.as_view()),
-    re_path(r'^api/device/share/(?P<operation>.*)$', UserDeviceShareController.UserDeviceShareView.as_view()),
-    re_path(r'^server/(?P<apiVersion>[a-zA-Z0-9]+)/open/detect/(?P<operation>.*)$',
-            DetectControllerV2.DetectControllerViewV2.as_view()),
-    re_path(r'^vsees/(?P<operation>.*)', VseesController.VseesManagement.as_view()),
-
-    # 后台界面接口 -------------------------------------------------------------------------------------------------------
-    # 登录,用户信息,权限
-    re_path(r'^login$', UserManageController.LoginView.as_view()),
-    re_path(r'^noPasslogin$', UserManageController.LoginView.as_view()),
-    re_path(r'^userInfo$', UserManageController.GetPermissions.as_view()),
-    re_path(r'^router/getList$', UserManageController.GetList.as_view()),
+
+    # 后台界面接口 -----------------------------------------------------
+    # 用户登录信息等
+    url(r'^login$', UserManageController.LoginView.as_view()),
+    url(r'^noPasslogin$', UserManageController.LoginView.as_view()),
+    url(r'^userInfo$', UserManageController.GetPermissions.as_view()),
+    url(r'^router/getList$', UserManageController.GetList.as_view()),
     # 角色管理
     # 角色管理
     re_path('roleManagement/(?P<operation>.*)', RoleController.RoleView.as_view()),
     re_path('roleManagement/(?P<operation>.*)', RoleController.RoleView.as_view()),
     # 菜单管理
     # 菜单管理
@@ -295,13 +396,13 @@ urlpatterns = [
     re_path(r'serial/(?P<operation>.*)', SerialManageController.SerialView.as_view()),
     re_path(r'serial/(?P<operation>.*)', SerialManageController.SerialView.as_view()),
     # 数据系统模块
     # 数据系统模块
     re_path(r'^dataManagement/', include("Ansjer.server_urls.datasystem_url")),
     re_path(r'^dataManagement/', include("Ansjer.server_urls.datasystem_url")),
-    # 数据系统模块
-    re_path(r'^icloudserve/(?P<operation>.*)', IcloudManagementController.IcloudServeView.as_view()),
-    # 后台界面接口 -------------------------------------------------------------------------------------------------------
+    # 后台界面接口 -----------------------------------------------------
 
 
-    # 定时任务接口
+    # 定时删除任务接口
     re_path(r'^cron/del/(?P<operation>.*)', CronTaskController.CronDelDataView.as_view()),
     re_path(r'^cron/del/(?P<operation>.*)', CronTaskController.CronDelDataView.as_view()),
+    # 定时更新任务接口
     re_path(r'^cron/update/(?P<operation>.*)', CronTaskController.CronUpdateDataView.as_view()),
     re_path(r'^cron/update/(?P<operation>.*)', CronTaskController.CronUpdateDataView.as_view()),
+    # 定时收集数据任务接口
     re_path(r'^cron/collect/(?P<operation>.*)', CronTaskController.CronCollectDataView.as_view()),
     re_path(r'^cron/collect/(?P<operation>.*)', CronTaskController.CronCollectDataView.as_view()),
 
 
     # 国内域名备案网站/错误路径
     # 国内域名备案网站/错误路径

+ 3 - 3
Controller/AWS/KVSController.py

@@ -372,7 +372,7 @@ class KVSView(View):
             return response.json(0, {"HlsStreamingSessionUrl": hls_streaming_session_url})
             return response.json(0, {"HlsStreamingSessionUrl": hls_streaming_session_url})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_device_midea_list(request_dict, response):
     def get_device_midea_list(request_dict, response):
@@ -430,7 +430,7 @@ class KVSView(View):
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def download_clip(request_dict, response):
     def download_clip(request_dict, response):
@@ -469,4 +469,4 @@ class KVSView(View):
             return res
             return res
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 18 - 17
Controller/AiController.py

@@ -56,20 +56,20 @@ class AiView(View):
             user_id = tko.userID
             user_id = tko.userID
 
 
             # 套餐相关接口
             # 套餐相关接口
-            if operation == 'commoditylist':  # 查询套餐列表
+            if operation == 'commoditylist':        # 查询套餐列表
                 return self.commodity_list(request_dict, response)
                 return self.commodity_list(request_dict, response)
-            elif operation == 'experienceOrder':  # 体验套餐
+            elif operation == 'experienceOrder':    # 体验套餐
                 return self.experience_order(request_dict, user_id, response)
                 return self.experience_order(request_dict, user_id, response)
-            elif operation == 'createpayorder':  # 创建支付订单
+            elif operation == 'createpayorder':     # 创建支付订单
                 return self.create_pay_order(request_dict, request, user_id, response)
                 return self.create_pay_order(request_dict, request, user_id, response)
-            elif operation == 'queryorderlist':  # 查询订单列表
+            elif operation == 'queryorderlist':     # 查询订单列表
                 return self.query_order_list(request_dict, user_id, response)
                 return self.query_order_list(request_dict, user_id, response)
-            elif operation == 'getUsingPackage':  # 获取当前使用套餐
+            elif operation == 'getUsingPackage':    # 获取当前使用套餐
                 return self.get_using_package(request_dict, response)
                 return self.get_using_package(request_dict, response)
             # 开关相关接口
             # 开关相关接口
-            elif operation == 'getAiStatus':  # 获取开关状态
+            elif operation == 'getAiStatus':        # 获取开关状态
                 return self.get_ai_status(request_dict, response)
                 return self.get_ai_status(request_dict, response)
-            elif operation == 'changeaistatus':  # 修改开关状态
+            elif operation == 'changeaistatus':     # 修改开关状态
                 return self.change_ai_status(request_dict, user_id, response)
                 return self.change_ai_status(request_dict, user_id, response)
             else:
             else:
                 return response.json(414)
                 return response.json(414)
@@ -118,7 +118,7 @@ class AiView(View):
             }
             }
             return response.json(0, result)
             return response.json(0, result)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def experience_order(request_dict, user_id, response):
     def experience_order(request_dict, user_id, response):
@@ -209,7 +209,7 @@ class AiView(View):
                                            store_meal_name=store_meal_name, order_type=1,
                                            store_meal_name=store_meal_name, order_type=1,
                                            rank_id=1, ai_rank_id=rank, status=1)
                                            rank_id=1, ai_rank_id=rank, status=1)
                 # ai服务表创建数据
                 # ai服务表创建数据
-                AiService.objects.create(uid=uid, channel=channel, detect_status=1, endTime=endTime,
+                AiService.objects.create(uid=uid, channel=channel, orders_id=orderID, detect_status=1, endTime=endTime,
                                          addTime=nowTime, updTime=nowTime, use_status=1)
                                          addTime=nowTime, updTime=nowTime, use_status=1)
                 logger.info('{}成功开通AI体验,结束时间{}'.format(uid, endTime))
                 logger.info('{}成功开通AI体验,结束时间{}'.format(uid, endTime))
                 if pay_type == 10:
                 if pay_type == 10:
@@ -225,8 +225,8 @@ class AiView(View):
                 pay_ok_url = "{}cloudstorage/payOK?paytype={}&lang={}".format(SERVER_DOMAIN_SSL, pay_type, lang)
                 pay_ok_url = "{}cloudstorage/payOK?paytype={}&lang={}".format(SERVER_DOMAIN_SSL, pay_type, lang)
                 return response.json(0, pay_ok_url)
                 return response.json(0, pay_ok_url)
         except Exception as e:
         except Exception as e:
+            print(e)
             redisObj.del_data(key=redis_key)
             redisObj.del_data(key=redis_key)
-            logger.info('开通AI异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(474)
             return response.json(474)
 
 
     @classmethod
     @classmethod
@@ -323,7 +323,7 @@ class AiView(View):
             return response.json(0, res_data)
             return response.json(0, res_data)
 
 
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def query_order_list(request_dict, user_id, response):
     def query_order_list(request_dict, user_id, response):
@@ -351,7 +351,7 @@ class AiView(View):
         try:
         try:
             order_qs = Order_Model.objects.filter(userID_id=user_id, status=1, order_type=1, ai_rank__lang__lang=lang)
             order_qs = Order_Model.objects.filter(userID_id=user_id, status=1, order_type=1, ai_rank__lang__lang=lang)
 
 
-            if uid:  # 查询指定设备订单
+            if uid:     # 查询指定设备订单
                 order_qs.filter(UID=uid)
                 order_qs.filter(UID=uid)
             if not order_qs.exists():
             if not order_qs.exists():
                 return response.json(173)
                 return response.json(173)
@@ -383,7 +383,7 @@ class AiView(View):
                         data.append(order)
                         data.append(order)
             return response.json(0, {'data': data, 'count': count})
             return response.json(0, {'data': data, 'count': count})
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_using_package(request_dict, response):
     def get_using_package(request_dict, response):
@@ -425,7 +425,7 @@ class AiView(View):
 
 
             return response.json(0, [ai_service_data])
             return response.json(0, [ai_service_data])
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_ai_status(request_dict, response):
     def get_ai_status(request_dict, response):
@@ -449,7 +449,7 @@ class AiView(View):
             }
             }
             return response.json(0, {'data': res})
             return response.json(0, {'data': res})
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def change_ai_status(request_dict, user_id, response):
     def change_ai_status(request_dict, user_id, response):
@@ -589,7 +589,7 @@ class AiView(View):
                     return response.json(10044)
                     return response.json(10044)
                 return response.json(0, {'aiIdentificationUrl': aiIdentificationUrl, 'endTime': endTime, 'etk': etk})
                 return response.json(0, {'aiIdentificationUrl': aiIdentificationUrl, 'endTime': endTime, 'etk': etk})
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def create_paypal_payment(lang, order_id, price, currency, content):
     def create_paypal_payment(lang, order_id, price, currency, content):
@@ -846,7 +846,8 @@ class AiView(View):
         effective_day = order_list[0]['ai_rank__effective_day']
         effective_day = order_list[0]['ai_rank__effective_day']
 
 
         ai_service_qs = AiService.objects.filter(Q(uid=UID), Q(channel=channel), Q(use_status=1))
         ai_service_qs = AiService.objects.filter(Q(uid=UID), Q(channel=channel), Q(use_status=1))
-        ai_service_dict = {'uid': UID,
+        ai_service_dict = {'orders_id': order_id,
+                           'uid': UID,
                            'channel': channel,
                            'channel': channel,
                            'detect_status': 1,
                            'detect_status': 1,
                            'addTime': now_time,
                            'addTime': now_time,

+ 2 - 2
Controller/AlgorithmShop/AlgorithmShopController.py

@@ -191,7 +191,7 @@ class AlgorithmShopView(View):
             return response.json(0, result_dto)
             return response.json(0, result_dto)
         except Exception as e:
         except Exception as e:
             LOGGER.info('接口异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             LOGGER.info('接口异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def get_scenario_algorithm_list(cls, request_dist, response):
     def get_scenario_algorithm_list(cls, request_dist, response):
@@ -269,7 +269,7 @@ class AlgorithmShopView(View):
             return response.json(0, algorithm_list)
             return response.json(0, algorithm_list)
         except Exception as e:
         except Exception as e:
             print('查询算法小店列表异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             print('查询算法小店列表异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def get_algorithm_details(cls, request_dict, response):
     def get_algorithm_details(cls, request_dict, response):

+ 1 - 1
Controller/AppAccountManagement.py

@@ -82,7 +82,7 @@ class AppAccoutView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print('生成验证码异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             print('生成验证码异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def verifyTheVerificationCode(request_dict, response, userID):
     def verifyTheVerificationCode(request_dict, response, userID):

+ 73 - 408
Controller/CloudStorage.py

@@ -21,19 +21,17 @@ from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
 from Ansjer.config import SERVER_DOMAIN, PAYPAL_CRD, SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
 from Ansjer.config import SERVER_DOMAIN, PAYPAL_CRD, SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
-    AWS_ARN, OAUTH_ACCESS_TOKEN_SECRET, DETECT_PUSH_DOMAINS, CONFIG_INFO, CONFIG_CN
+    AWS_ARN, OAUTH_ACCESS_TOKEN_SECRET
 from Controller.CheckUserData import DataValid
 from Controller.CheckUserData import DataValid
 from Controller.CloudPhoto.CloudServiceController import CloudServiceController
 from Controller.CloudPhoto.CloudServiceController import CloudServiceController
 from Controller.PaymentCycle import Paypal
 from Controller.PaymentCycle import Paypal
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, UID_Bucket, StsCrdModel, \
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, UID_Bucket, StsCrdModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMsgModel, Unused_Uid_Meal, PromotionRuleModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMsgModel, Unused_Uid_Meal, PromotionRuleModel, \
-    VideoPlaybackTimeModel, CouponModel, VodBucketModel, VodHlsSummary, AiService, UidSetModel, UidPushModel, \
-    VodHlsTagType, ICloudStoreMeal, IcloudUseDetails, IcloudService
+    VideoPlaybackTimeModel, CouponModel, VodBucketModel, VodHlsSummary, VodHlsTagType
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.S3Email import S3Email
 from Object.AWS.S3Email import S3Email
 from Object.AliPayObject import AliPayObject
 from Object.AliPayObject import AliPayObject
 from Object.AliSmsObject import AliSmsObject
 from Object.AliSmsObject import AliSmsObject
-from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
@@ -47,7 +45,6 @@ from Service.VodHlsService import SplitVodHlsObject
 ssl._create_default_https_context = ssl._create_unverified_context
 ssl._create_default_https_context = ssl._create_unverified_context
 LOGGER = logging.getLogger('info')
 LOGGER = logging.getLogger('info')
 
 
-
 # 设备信息添加
 # 设备信息添加
 class CloudStorageView(View):
 class CloudStorageView(View):
 
 
@@ -98,8 +95,6 @@ class CloudStorageView(View):
                 return self.do_create_pay_order(request_dict, user_id, ip, response)
                 return self.do_create_pay_order(request_dict, user_id, ip, response)
             elif operation == 'changevodstatus':  # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
             elif operation == 'changevodstatus':  # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
                 return self.do_change_vod_status(request_dict, user_id, response)
                 return self.do_change_vod_status(request_dict, user_id, response)
-            elif operation == 'changevodaistatus':  # 修改云存AI状态
-                return self.do_change_vod_ai_status(request_dict, user_id, response)
             elif operation == 'queryvodlist':  # 获取视频播放列表
             elif operation == 'queryvodlist':  # 获取视频播放列表
                 return self.do_query_vod_list(request_dict, user_id, response)
                 return self.do_query_vod_list(request_dict, user_id, response)
             elif operation == 'commoditylist':  # 查询套餐列表
             elif operation == 'commoditylist':  # 查询套餐列表
@@ -191,10 +186,7 @@ class CloudStorageView(View):
         device_info_qs = Device_Info.objects.filter(Q(UID=uid), Q(Type__lte=4) | Q(Type=10001))
         device_info_qs = Device_Info.objects.filter(Q(UID=uid), Q(Type__lte=4) | Q(Type=10001))
         if device_info_qs.exists():
         if device_info_qs.exists():
             return response.json(0)
             return response.json(0)
-        uid_set_qs = UidSetModel.objects.filter(uid=uid).values('is_ai')
-        if not uid_set_qs.exists():
-            return response.json(173)
-        is_ai = uid_set_qs[0]['is_ai']
+
         store_qs = Store_Meal.objects.filter(Q(lang__lang=lang), Q(is_show=0), ~Q(pay_type='11'))  # 过滤激活码、隐藏套餐
         store_qs = Store_Meal.objects.filter(Q(lang__lang=lang), Q(is_show=0), ~Q(pay_type='11'))  # 过滤激活码、隐藏套餐
         experience_context_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
         experience_context_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
 
 
@@ -206,15 +198,11 @@ class CloudStorageView(View):
             store_qs = store_qs.filter(~Q(pay_type='10'))
             store_qs = store_qs.filter(~Q(pay_type='10'))
         else:
         else:
             store_qs = store_qs.filter(pay_type='10')
             store_qs = store_qs.filter(pay_type='10')
-        if CONFIG_INFO != CONFIG_CN and is_ai != 2:  # 返回支持AI的套餐
-            store_qs = store_qs.filter(is_ai=1)
-        else:  # 返回不支持AI的套餐
-            store_qs = store_qs.filter(is_ai=0)
 
 
         store_qs = store_qs.annotate(title=F('lang__title'), content=F('lang__content'),
         store_qs = store_qs.annotate(title=F('lang__title'), content=F('lang__content'),
                                      discount_content=F('lang__discount_content'))
                                      discount_content=F('lang__discount_content'))
         store_qs = store_qs.order_by('sort').values("id", "title", "content", "price", "day", "currency",
         store_qs = store_qs.order_by('sort').values("id", "title", "content", "price", "day", "currency",
-                                                    "bucket__storeDay", 'is_beta', 'is_ai',
+                                                    "bucket__storeDay",
                                                     "bucket__bucket", "bucket__area", "commodity_code",
                                                     "bucket__bucket", "bucket__area", "commodity_code",
                                                     "commodity_type", "is_discounts", "virtual_price", "expire",
                                                     "commodity_type", "is_discounts", "virtual_price", "expire",
                                                     "discount_price", "discount_content", "symbol", "cycle_config_id")
                                                     "discount_price", "discount_content", "symbol", "cycle_config_id")
@@ -307,12 +295,11 @@ class CloudStorageView(View):
         now_time = int(time.time())
         now_time = int(time.time())
 
 
         split_vod_hls_obj = SplitVodHlsObject()
         split_vod_hls_obj = SplitVodHlsObject()
-        vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel, start_time__gte=start_time,
+        vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel, start_time=start_time,
                                                         end_time__gte=now_time).values("sec", "fg", "bucket_id",
                                                         end_time__gte=now_time).values("sec", "fg", "bucket_id",
-                                                                                       'start_time')[:10]
+                                                                                       'start_time')
         if not vod_hls_qs.exists():
         if not vod_hls_qs.exists():
             return response.json(173)
             return response.json(173)
-        vod_hls_qs = sorted(vod_hls_qs, key=lambda item: item['start_time'])[:10]
         bucket_id = vod_hls_qs[0]['bucket_id']
         bucket_id = vod_hls_qs[0]['bucket_id']
         vod_bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
         vod_bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
         if not vod_bucket_qs.exists():
         if not vod_bucket_qs.exists():
@@ -320,6 +307,7 @@ class CloudStorageView(View):
         bucket_region = vod_bucket_qs[0]['region']
         bucket_region = vod_bucket_qs[0]['region']
         bucket_name = vod_bucket_qs[0]['bucket']
         bucket_name = vod_bucket_qs[0]['bucket']
         mold = vod_bucket_qs[0]["mold"]
         mold = vod_bucket_qs[0]["mold"]
+        fg = int(vod_hls_qs[0]['fg'])
         s3_obj = AmazonS3Util(
         s3_obj = AmazonS3Util(
             AWS_ACCESS_KEY_ID[mold],
             AWS_ACCESS_KEY_ID[mold],
             AWS_SECRET_ACCESS_KEY[mold],
             AWS_SECRET_ACCESS_KEY[mold],
@@ -329,20 +317,16 @@ class CloudStorageView(View):
         playlist_entries = []
         playlist_entries = []
         # ts_count = fg & 0xf
         # ts_count = fg & 0xf
         # fg 64位整型,低四位代表ts文件总数,然后进行位运算,一次移四位,每四位转为十进制即为当前ts文件的秒数
         # fg 64位整型,低四位代表ts文件总数,然后进行位运算,一次移四位,每四位转为十进制即为当前ts文件的秒数
-        for item in vod_hls_qs:
-            fg = int(item['fg'])
-            temp_time = item['start_time']
-            for i in range(15):
-                shift = (i + 1) * 4
-                duration = (fg >> shift) & 0xf
-                if duration > 0:
-                    ts_file = '{uid}/vod{channel}/{time}/ts{i}.ts'.format(uid=uid, channel=channel, time=temp_time,
-                                                                          i=i)
-                    response_url = s3_obj.generate_file_obj_url(bucket_name, ts_file)
-                    playlist_entries.append({
-                        'name': response_url,
-                        'duration': duration,
-                    })
+        for i in range(15):
+            shift = (i + 1) * 4
+            duration = (fg >> shift) & 0xf
+            if duration > 0:
+                ts_file = '{uid}/vod{channel}/{time}/ts{i}.ts'.format(uid=uid, channel=channel, time=start_time, i=i)
+                response_url = s3_obj.generate_file_obj_url(bucket_name, ts_file)
+                playlist_entries.append({
+                    'name': response_url,
+                    'duration': duration,
+                })
 
 
         playlist = PlaylistGenerator(playlist_entries).generate()
         playlist = PlaylistGenerator(playlist_entries).generate()
         response = HttpResponse(playlist)
         response = HttpResponse(playlist)
@@ -413,7 +397,7 @@ class CloudStorageView(View):
                         "Effect": "Allow",
                         "Effect": "Allow",
                         "Action": "s3:*",
                         "Action": "s3:*",
                         "Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
                         "Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
-                                     format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
+                                         format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
                     }
                     }
                 ]
                 ]
             }
             }
@@ -445,7 +429,7 @@ class CloudStorageView(View):
                                            addTime=now_time, type=1)
                                            addTime=now_time, type=1)
             return JsonResponse(status=200, data=res)
             return JsonResponse(status=200, data=res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def do_query_vod_list(request_dict, user_id, response):  # 获取视频播放列表
     def do_query_vod_list(request_dict, user_id, response):  # 获取视频播放列表
@@ -477,10 +461,11 @@ class CloudStorageView(View):
             })
             })
 
 
         device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False).values(
         device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False).values(
-            'vodPrimaryUserID', 'Type', 'vodPrimaryMaster')
+            'vodPrimaryUserID',
+            'vodPrimaryMaster')
         if not device_info_qs.exists():
         if not device_info_qs.exists():
             return response.json(12)
             return response.json(12)
-        device_type = device_info_qs[0]['Type']
+
         device_info_qs_time_over = int(time.time())
         device_info_qs_time_over = int(time.time())
         if uid == 'UWE2ZJ52SE4FX75U111A':
         if uid == 'UWE2ZJ52SE4FX75U111A':
             logger.info({
             logger.info({
@@ -491,10 +476,8 @@ class CloudStorageView(View):
         if device_info_qs[0]['vodPrimaryUserID'] != user_id:
         if device_info_qs[0]['vodPrimaryUserID'] != user_id:
             return response.json(10034)
             return response.json(10034)
         now_time = int(time.time())
         now_time = int(time.time())
-        if device_type == 34:  # 枪球设备开通云存不区分通道
-            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time)
-        else:
-            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel)
+        uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel).values(
+            'bucket_id').order_by('addTime')
         if not uid_bucket_qs.exists():
         if not uid_bucket_qs.exists():
             return response.json(10030)
             return response.json(10030)
 
 
@@ -662,7 +645,7 @@ class CloudStorageView(View):
             res = {'code': 0, 'msg': '存储成功'}
             res = {'code': 0, 'msg': '存储成功'}
             return HttpResponse(json.dumps(res, ensure_ascii=False), content_type='application/json,charset=utf-8')
             return HttpResponse(json.dumps(res, ensure_ascii=False), content_type='application/json,charset=utf-8')
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def do_change_vod_status(request_dict, user_id, response):  # 修改云存状态
     def do_change_vod_status(request_dict, user_id, response):  # 修改云存状态
@@ -683,23 +666,18 @@ class CloudStorageView(View):
         if not all([uid, status, channel]):
         if not all([uid, status, channel]):
             return response.json(444, 'uid,status,channel')
             return response.json(444, 'uid,status,channel')
         device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False, isExist=1).values(
         device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False, isExist=1).values(
-            'vodPrimaryUserID', 'Type')
+            'vodPrimaryUserID')
         if not device_info_qs.exists() or device_info_qs[0]['vodPrimaryUserID'] != user_id:
         if not device_info_qs.exists() or device_info_qs[0]['vodPrimaryUserID'] != user_id:
             return response.json(12)
             return response.json(12)
-        device_type = device_info_qs[0]['Type']
-        if device_type == 34:  # 枪球设备开通云存不区分通道
-            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid)
-        else:
-            uid_bucket_qs = UID_Bucket.objects.filter(channel=channel, uid=uid)
+        uid_bucket_qs = UID_Bucket.objects.filter(channel=channel, uid=uid)
         if not uid_bucket_qs.exists():
         if not uid_bucket_qs.exists():
             return response.json(10030)
             return response.json(10030)
         now_time = int(time.time())
         now_time = int(time.time())
         if now_time > uid_bucket_qs[0].endTime:
         if now_time > uid_bucket_qs[0].endTime:
             return response.json(10031)
             return response.json(10031)
+        uid_bucket_qs.update(status=status)
         if status == 0:
         if status == 0:
-            uid_bucket_qs.update(status=status)
             return response.json(0)
             return response.json(0)
-        uid_bucket_qs.update(status=status, channel=channel)
         uid_obj = UidTokenObject()
         uid_obj = UidTokenObject()
         uid_obj.generate(data={'uid': uid, 'channel': channel})
         uid_obj.generate(data={'uid': uid, 'channel': channel})
 
 
@@ -711,157 +689,6 @@ class CloudStorageView(View):
         store_hls_url = '{}cloudstorage/storeplaylist?uidToken={}'.format(urls, uid_obj.token)
         store_hls_url = '{}cloudstorage/storeplaylist?uidToken={}'.format(urls, uid_obj.token)
         return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
         return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
 
 
-    @staticmethod
-    def do_change_vod_ai_status(request_dict, user_id, response):  # 修改云存状态
-        """
-        修改云存状态
-        @param request_dict: 请求数据
-        @param user_id: 用户id
-        @request_dict uid: uid
-        @request_dict status: 套餐状态
-        @request_dict channel: 通道
-        @param response: 响应
-        @return: response
-        """
-        uid = request_dict.get('uid', None)
-        vod_status = request_dict.get('vod_status', None)
-        channel = request_dict.get('channel', None)
-        domain_name = request_dict.get('domain_name', None)
-        token_val = request_dict.get('token_val', None)
-        appBundleId = request_dict.get('appBundleId', None)
-        app_type = request_dict.get('app_type', None)
-        push_type = request_dict.get('push_type', None)
-        ai_status = request_dict.get('ai_status', None)
-        m_code = request_dict.get('m_code', None)
-        lang = request_dict.get('lang', 'en')
-        tz = request_dict.get('tz', '0')
-        detect_group = request_dict.get('detect_group', None)
-        interval = request_dict.get('interval', None)
-        if not all([uid, vod_status, channel]):
-            return response.json(444, 'uid,vod_status,channel')
-        vod_status = int(vod_status)
-        device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False, isExist=1).values(
-            'vodPrimaryUserID', 'Type')
-        if not device_info_qs.exists() or device_info_qs[0]['vodPrimaryUserID'] != user_id:
-            return response.json(12)
-        device_type = device_info_qs[0]['Type']
-        uid_set_qs = UidSetModel.objects.filter(uid=uid)
-        if not uid_set_qs.exists():
-            return response.json(12)
-        if device_type == 34:  # 枪球设备开通云存不区分通道
-            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid)
-        else:
-            uid_bucket_qs = UID_Bucket.objects.filter(channel=channel, uid=uid)
-        if not uid_bucket_qs.exists():
-            return response.json(10030)
-        now_time = int(time.time())
-        end_time = uid_bucket_qs[0].endTime
-        if now_time > end_time:
-            return response.json(10031)
-        try:
-            with transaction.atomic():
-                if vod_status == 0:
-                    uid_bucket_qs.update(status=vod_status)
-                    ai_status = '0'
-                    if uid_set_qs[0].is_ai == 2:
-                        return response.json(0)
-                uid_bucket_qs.update(status=vod_status, channel=channel)
-                uid_obj = UidTokenObject()
-                uid_obj.generate(data={'uid': uid, 'channel': channel})
-
-                # 欧洲域名固定返回欧洲域名
-                urls = SERVER_DOMAIN_SSL
-                if domain_name in ['api.zositeche.com', 'api.loocam3.com', 'common.neutral3.com']:
-                    urls = 'https://api.zositeche.com/'
-                uid_tk_url = '{}cloudstorage/getsignsts?uidToken={}'.format(urls, uid_obj.token)
-                store_hls_url = '{}cloudstorage/storeplaylist?uidToken={}'.format(urls, uid_obj.token)
-                if uid_set_qs[0].is_ai != 2 and CONFIG_INFO != CONFIG_CN:
-                    if not all([appBundleId, app_type, token_val, uid, m_code, ai_status]):
-                        return response.json(444, 'appBundleId, app_type, token_val, uid,m_code, ai_status')
-
-                    # 如果传空上来,就默认为0
-                    tz = '0' if tz == '' else tz.replace('GMT', '')
-                    ai_status = int(ai_status)
-                    ai_service_qs = AiService.objects.filter(uid=uid, use_status=1)
-                    if not ai_service_qs.exists():
-                        return response.json(10053)
-
-                    uid_set_id = uid_set_qs[0].id
-                    interval = uid_set_qs[0].new_detect_interval if not interval else interval
-                    qs_data = {
-                        'updTime': now_time,
-                    }
-                    if interval:
-                        qs_data['detect_interval'] = int(interval)
-                        qs_data['detect_group'] = detect_group if detect_group else ''
-                    uid_set_qs.update(**qs_data)
-
-                    qs_data['detect_status'] = ai_status  # ai开关状态
-                    qs_data['endTime'] = end_time
-                    ai_service_qs.update(**qs_data)
-                    thing_name = CommonService.query_serial_with_uid(uid)  # 存在序列号则为使用序列号作为物品名
-                    topic_name = 'ansjer/generic/{}'.format(thing_name)
-
-                    if ai_status == 0:  # 关闭
-                        # mqtt通知设备关闭AI识别功能
-                        msg = {'commandType': 'AIDisable'}
-                        req_success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
-                        if not req_success:
-                            return response.json(10044)
-                        if vod_status == 0:
-                            return response.json(0)
-                        return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
-                    elif ai_status == 1:  # 开启
-                        # 更新或创建uid_push数据
-                        uid_push_qs = UidPushModel.objects.filter(userID_id=user_id, m_code=m_code, uid_set__uid=uid)
-                        uid_push_data = {
-                            'appBundleId': appBundleId,
-                            'app_type': app_type,
-                            'push_type': push_type,
-                            'token_val': token_val,
-                            'updTime': now_time,
-                            'lang': lang,
-                            'tz': tz
-                        }
-
-                        if uid_push_qs.exists():
-                            uid_push_qs.update(**uid_push_data)
-                        else:
-                            uid_push_data['uid_set_id'] = uid_set_id
-                            uid_push_data['userID_id'] = user_id
-                            uid_push_data['m_code'] = m_code
-                            uid_push_data['addTime'] = now_time
-                            UidPushModel.objects.create(**uid_push_data)
-                        if appBundleId == 0 or appBundleId == '0':
-                            LOGGER.info('cloudstorage/changevodaistatus接口推送数据{}'.format(request_dict))
-                        etkObj = ETkObject(etk='')
-                        etk = etkObj.encrypt(uid)
-
-                        # mqtt通知设备开启AI识别功能
-                        push_url = DETECT_PUSH_DOMAINS
-                        # 欧洲域名固定返回欧洲域名
-                        if domain_name in ['api.zositeche.com', 'api.loocam3.com', 'common.neutral3.com']:
-                            push_url = 'https://push.zositeche.com/'
-                        aiIdentificationUrl = '{}AiService/identification'.format(push_url)
-                        msg = {
-                            'commandType': 'AIEnable',
-                            'payload': {
-                                'etk': etk,
-                                'endTime': end_time,
-                                'aiIdentificationUrl': aiIdentificationUrl,
-                            }
-                        }
-                        req_success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
-                        if not req_success:
-                            return response.json(10044)
-                        return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url,
-                                                 'aiIdentificationUrl': aiIdentificationUrl, 'endTime': end_time,
-                                                 'etk': etk})
-
-                return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
-        except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-
     @staticmethod
     @staticmethod
     def do_pay_error():
     def do_pay_error():
         response = HttpResponse()
         response = HttpResponse()
@@ -928,19 +755,13 @@ class CloudStorageView(View):
                 channel = order_list[0]['channel']
                 channel = order_list[0]['channel']
                 rank = order_list[0]['rank']
                 rank = order_list[0]['rank']
 
 
-                store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
-                                                                     'is_ai', 'icloud_store_meal_id')
+                store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
+                bucket_id = store_qs[0]['bucket_id']
                 if not store_qs.exists():
                 if not store_qs.exists():
                     return response.json(173)
                     return response.json(173)
-                bucket_id = store_qs[0]['bucket_id']
-                uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
+                uiu_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
                                                                           "bucket__region", "endTime", "use_status")
                                                                           "bucket__region", "endTime", "use_status")
                 expire = store_qs[0]['expire']
                 expire = store_qs[0]['expire']
-                # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
-                # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
-                # if not icloud_meal_qs.exists():
-                #     return response.json(173)
-                # size = icloud_meal_qs[0]['size']
                 if order_list[0]['isSelectDiscounts'] == 1:
                 if order_list[0]['isSelectDiscounts'] == 1:
                     expire = store_qs[0]['expire'] * 2
                     expire = store_qs[0]['expire'] * 2
                 # 是否有促销
                 # 是否有促销
@@ -950,17 +771,15 @@ class CloudStorageView(View):
                 if promotion.exists():
                 if promotion.exists():
                     promotion_rule_id = promotion[0]['id']
                     promotion_rule_id = promotion[0]['id']
                     expire = expire * 2
                     expire = expire * 2
-                unuse_meal_flag = False  # 是否关联未使用套餐
                 with transaction.atomic():
                 with transaction.atomic():
-                    if uid_bucket_qs.exists():
-                        uid_bucket = uid_bucket_qs.first()
+                    if uiu_bucket_qs.exists():
+                        uid_bucket = uiu_bucket_qs.first()
                         if uid_bucket['use_status'] == 1 and uid_bucket['bucket_id'] == bucket_id:  # 套餐使用中并且相同套餐叠加过期时间
                         if uid_bucket['use_status'] == 1 and uid_bucket['bucket_id'] == bucket_id:  # 套餐使用中并且相同套餐叠加过期时间
                             end_time = CommonService.calcMonthLater(expire, uid_bucket['endTime'])
                             end_time = CommonService.calcMonthLater(expire, uid_bucket['endTime'])
                             UID_Bucket.objects.filter(id=uid_bucket['id']).update(uid=uid, channel=channel,
                             UID_Bucket.objects.filter(id=uid_bucket['id']).update(uid=uid, channel=channel,
                                                                                   bucket_id=bucket_id, endTime=end_time,
                                                                                   bucket_id=bucket_id, endTime=end_time,
                                                                                   updateTime=now_time)
                                                                                   updateTime=now_time)
                         else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
                         else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
-                            unuse_meal_flag = True
                             unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                             unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                             nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
                             nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
                             if promotion.exists():
                             if promotion.exists():
@@ -995,36 +814,6 @@ class CloudStorageView(View):
                     order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
                     order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
                                     promotion_rule_id=promotion_rule_id)
                                     promotion_rule_id=promotion_rule_id)
                     date_time = time.strftime("%Y-%m-%d", time.localtime())
                     date_time = time.strftime("%Y-%m-%d", time.localtime())
-                    # 开通AI服务
-                    if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
-                        ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
-                        if ai_service_qs.exists():  # 有正在使用的套餐,套餐结束时间保存为套餐有效期
-                            ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
-                        else:
-                            ai_service_dict = {
-                                'uid': uid,
-                                'channel': channel,
-                                'detect_status': 1,
-                                'addTime': now_time,
-                                'updTime': now_time,
-                                'use_status': 1,
-                                'endTime': end_time
-                            }
-                            AiService.objects.create(**ai_service_dict)
-                    # 开通云盘服务
-                    # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=userid).values('id')
-                    # if not icloud_use_qs.exists():
-                    #     bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
-                    #     icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
-                    #                                                     detect_status=1, user_id=userid,
-                    #                                                     bucket_id=bucket_qs[0]['id'])
-                    #     use_details_id = icloud_use_qs.id
-                    #     IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
-                    #                                  size=1, use_details_id=use_details_id)
-                    # else:
-                    #     use_details_id = icloud_use_qs[0]['id']
-                    # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
-                    #                              size=size, end_time=end_time, use_details_id=use_details_id)
                     # 如果存在序列号,消息提示用序列号
                     # 如果存在序列号,消息提示用序列号
                     device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
                     device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
                     serial_number = device_info_qs[0]['serial_number']
                     serial_number = device_info_qs[0]['serial_number']
@@ -1120,19 +909,14 @@ class CloudStorageView(View):
             uid = order_list[0]['UID']
             uid = order_list[0]['UID']
             channel = order_list[0]['channel']
             channel = order_list[0]['channel']
             rank = order_list[0]['rank']
             rank = order_list[0]['rank']
-            store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
-                                                                 'is_ai', 'icloud_store_meal_id')
+            store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
+            bucket_id = store_qs[0]['bucket_id']
             if not store_qs.exists():
             if not store_qs.exists():
                 return response.json(173)
                 return response.json(173)
-            bucket_id = store_qs[0]['bucket_id']
             uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
             uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
                                                                       "bucket__region", "endTime", "use_status")
                                                                       "bucket__region", "endTime", "use_status")
             expire = store_qs[0]['expire']
             expire = store_qs[0]['expire']
-            # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
-            # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
-            # if not icloud_meal_qs.exists():
-            #     return response.json(173)
-            # size = icloud_meal_qs[0]['size']
+
             if order_list[0]['isSelectDiscounts'] == 1:
             if order_list[0]['isSelectDiscounts'] == 1:
                 expire = store_qs[0]['expire'] * 2
                 expire = store_qs[0]['expire'] * 2
             # 是否有促销
             # 是否有促销
@@ -1142,7 +926,6 @@ class CloudStorageView(View):
             if promotion_rule_qs.exists():
             if promotion_rule_qs.exists():
                 promotion_rule_id = promotion_rule_qs[0]['id']
                 promotion_rule_id = promotion_rule_qs[0]['id']
                 expire = expire * 2
                 expire = expire * 2
-            unuse_meal_flag = False  # 是否关联未使用套餐
             with transaction.atomic():
             with transaction.atomic():
                 if uid_bucket_qs.exists():
                 if uid_bucket_qs.exists():
                     uid_bucket = uid_bucket_qs.first()
                     uid_bucket = uid_bucket_qs.first()
@@ -1152,7 +935,6 @@ class CloudStorageView(View):
                                                                               endTime=end_time,
                                                                               endTime=end_time,
                                                                               bucket_id=bucket_id, updateTime=now_time)
                                                                               bucket_id=bucket_id, updateTime=now_time)
                     else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
                     else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
-                        unuse_meal_flag = True
                         unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                         unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                         nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
                         nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
                         if promotion_rule_qs.exists():
                         if promotion_rule_qs.exists():
@@ -1186,36 +968,6 @@ class CloudStorageView(View):
                 order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
                 order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
                                 promotion_rule_id=promotion_rule_id)
                                 promotion_rule_id=promotion_rule_id)
                 date_time = time.strftime("%Y-%m-%d", time.localtime())
                 date_time = time.strftime("%Y-%m-%d", time.localtime())
-                # 开通AI服务
-                if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
-                    ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
-                    if ai_service_qs.exists():  # 有正在使用的套餐,套餐结束时间保存为套餐有效期
-                        ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
-                    else:
-                        ai_service_dict = {
-                            'uid': uid,
-                            'channel': channel,
-                            'detect_status': 1,
-                            'addTime': now_time,
-                            'updTime': now_time,
-                            'use_status': 1,
-                            'endTime': end_time
-                        }
-                        AiService.objects.create(**ai_service_dict)
-                # 开通云盘服务
-                # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=userid).values('id')
-                # if not icloud_use_qs.exists():
-                #     bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
-                #     icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
-                #                                                     detect_status=1, user_id=userid,
-                #                                                     bucket_id=bucket_qs[0]['id'])
-                #     use_details_id = icloud_use_qs.id
-                #     IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
-                #                                  size=1, use_details_id=use_details_id)
-                # else:
-                #     use_details_id = icloud_use_qs[0]['id']
-                # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
-                #                              size=size, end_time=end_time, use_details_id=use_details_id)
                 # 如果存在序列号,消息提示用序列号
                 # 如果存在序列号,消息提示用序列号
                 device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
                 device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
                 serial_number = device_info_qs[0]['serial_number']
                 serial_number = device_info_qs[0]['serial_number']
@@ -1293,19 +1045,13 @@ class CloudStorageView(View):
                 uid = order_list[0]['UID']
                 uid = order_list[0]['UID']
                 channel = order_list[0]['channel']
                 channel = order_list[0]['channel']
                 rank = order_list[0]['rank']
                 rank = order_list[0]['rank']
-                store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
-                                                                     'is_ai', 'icloud_store_meal_id')
+                store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
+                bucket_id = store_qs[0]['bucket_id']
                 if not store_qs.exists():
                 if not store_qs.exists():
                     return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '套餐不存在'}))
                     return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '套餐不存在'}))
-                bucket_id = store_qs[0]['bucket_id']
                 uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
                 uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
                                                                           "bucket__region", "endTime", "use_status")
                                                                           "bucket__region", "endTime", "use_status")
                 expire = store_qs[0]['expire']
                 expire = store_qs[0]['expire']
-                # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
-                # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
-                # if not icloud_meal_qs.exists():
-                #     return response.json(173)
-                # size = icloud_meal_qs[0]['size']
                 if order_list[0]['isSelectDiscounts'] == 1:
                 if order_list[0]['isSelectDiscounts'] == 1:
                     expire = store_qs[0]['expire'] * 2
                     expire = store_qs[0]['expire'] * 2
                 # 是否有促销
                 # 是否有促销
@@ -1315,7 +1061,6 @@ class CloudStorageView(View):
                 if promotion_rule_qs.exists():
                 if promotion_rule_qs.exists():
                     promotion_rule_id = promotion_rule_qs[0]['id']
                     promotion_rule_id = promotion_rule_qs[0]['id']
                     expire = expire * 2
                     expire = expire * 2
-                unuse_meal_flag = False  # 是否关联未使用套餐
                 with transaction.atomic():
                 with transaction.atomic():
                     if uid_bucket_qs.exists():
                     if uid_bucket_qs.exists():
                         uid_bucket = uid_bucket_qs.first()
                         uid_bucket = uid_bucket_qs.first()
@@ -1325,7 +1070,6 @@ class CloudStorageView(View):
                                                                                   bucket_id=bucket_id,
                                                                                   bucket_id=bucket_id,
                                                                                   endTime=end_time, updateTime=now_time)
                                                                                   endTime=end_time, updateTime=now_time)
                         else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
                         else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
-                            unuse_meal_flag = True
                             unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                             unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                             nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
                             nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
                             if promotion_rule_qs.exists():
                             if promotion_rule_qs.exists():
@@ -1360,36 +1104,6 @@ class CloudStorageView(View):
                     order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
                     order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
                                     promotion_rule_id=promotion_rule_id)
                                     promotion_rule_id=promotion_rule_id)
                     date_time = time.strftime("%Y-%m-%d", time.localtime())
                     date_time = time.strftime("%Y-%m-%d", time.localtime())
-                    # 开通AI服务
-                    if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
-                        ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
-                        if ai_service_qs.exists():  # 有正在使用的套餐,套餐结束时间保存为套餐有效期
-                            ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
-                        else:
-                            ai_service_dict = {
-                                'uid': uid,
-                                'channel': channel,
-                                'detect_status': 1,
-                                'addTime': now_time,
-                                'updTime': now_time,
-                                'use_status': 1,
-                                'endTime': end_time
-                            }
-                            AiService.objects.create(**ai_service_dict)
-                    # 开通云盘服务
-                    # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=userid).values('id')
-                    # if not icloud_use_qs.exists():
-                    #     bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
-                    #     icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
-                    #                                                     detect_status=1, user_id=userid,
-                    #                                                     bucket_id=bucket_qs[0]['id'])
-                    #     use_details_id = icloud_use_qs.id
-                    #     IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
-                    #                                  size=1, use_details_id=use_details_id)
-                    # else:
-                    #     use_details_id = icloud_use_qs[0]['id']
-                    # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
-                    #                              size=size, end_time=end_time, use_details_id=use_details_id)
                     # 如果存在序列号,消息提示用序列号
                     # 如果存在序列号,消息提示用序列号
                     device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
                     device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
                     serial_number = device_info_qs[0]['serial_number']
                     serial_number = device_info_qs[0]['serial_number']
@@ -1462,7 +1176,7 @@ class CloudStorageView(View):
         now_time = int(time.time())
         now_time = int(time.time())
         store_qs = Store_Meal.objects.filter(id=rank, pay_type=pay_type, lang__lang=lang, is_show=0). \
         store_qs = Store_Meal.objects.filter(id=rank, pay_type=pay_type, lang__lang=lang, is_show=0). \
             values('currency', 'price', 'lang__content', 'day', 'commodity_type', 'lang__title', 'expire',
             values('currency', 'price', 'lang__content', 'day', 'commodity_type', 'lang__title', 'expire',
-                   'commodity_code', 'discount_price', 'bucket__mold', 'cycle_config_id', 'is_ai')
+                   'commodity_code', 'discount_price', 'bucket__mold', 'cycle_config_id')
         if not store_qs.exists():
         if not store_qs.exists():
             return response.json(173)
             return response.json(173)
         store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
         store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
@@ -1515,17 +1229,14 @@ class CloudStorageView(View):
                 sub_info = Paypal.subscriptions(store_info=store_qs[0], lang=lang, orderID=order_id, price=price)
                 sub_info = Paypal.subscriptions(store_info=store_qs[0], lang=lang, orderID=order_id, price=price)
                 if not sub_info:
                 if not sub_info:
                     return response.json(10048)
                     return response.json(10048)
-                order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
-                                                      desc=content, payType=pay_type, payTime=now_time,
-                                                      price=price, currency=currency, addTime=now_time,
-                                                      updTime=now_time,
-                                                      pay_url=sub_info['url'], isSelectDiscounts=is_select_discount,
-                                                      commodity_code=commodity_code, commodity_type=commodity_type,
-                                                      rank_id=rank, plan_id=sub_info['plan_id'], coupon_id=coupon_id,
-                                                      ai_rank_id=1,
-                                                      store_meal_name=store_meal_name)
-                if store_qs[0]['is_ai'] == 1:
-                    order_qs.order_type = 1
+                Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
+                                           desc=content, payType=pay_type, payTime=now_time,
+                                           price=price, currency=currency, addTime=now_time, updTime=now_time,
+                                           pay_url=sub_info['url'], isSelectDiscounts=is_select_discount,
+                                           commodity_code=commodity_code, commodity_type=commodity_type,
+                                           rank_id=rank, plan_id=sub_info['plan_id'], coupon_id=coupon_id, ai_rank_id=1,
+                                           store_meal_name=store_meal_name)
+
                 return response.json(0, {"redirectUrl": sub_info['url'], "orderID": order_id})
                 return response.json(0, {"redirectUrl": sub_info['url'], "orderID": order_id})
             # 正常扣款
             # 正常扣款
             call_clc_url = "{}web/paid2/fail.html".format(SERVER_DOMAIN_SSL)
             call_clc_url = "{}web/paid2/fail.html".format(SERVER_DOMAIN_SSL)
@@ -1552,17 +1263,13 @@ class CloudStorageView(View):
             for link in payment.links:
             for link in payment.links:
                 if link.rel == "approval_url":
                 if link.rel == "approval_url":
                     approval_url = str(link.href)
                     approval_url = str(link.href)
-                    order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
-                                                          desc=content, payType=pay_type, payTime=now_time,
-                                                          price=price, currency=currency, addTime=now_time,
-                                                          updTime=now_time,
-                                                          pay_url=approval_url, isSelectDiscounts=is_select_discount,
-                                                          commodity_code=commodity_code, commodity_type=commodity_type,
-                                                          rank_id=rank, paymentID=payment_id, coupon_id=coupon_id,
-                                                          ai_rank_id=1,
-                                                          store_meal_name=store_meal_name)
-                    if store_qs[0]['is_ai'] == 1:
-                        order_qs.order_type = 1
+                    Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
+                                               desc=content, payType=pay_type, payTime=now_time,
+                                               price=price, currency=currency, addTime=now_time, updTime=now_time,
+                                               pay_url=approval_url, isSelectDiscounts=is_select_discount,
+                                               commodity_code=commodity_code, commodity_type=commodity_type,
+                                               rank_id=rank, paymentID=payment_id, coupon_id=coupon_id, ai_rank_id=1,
+                                               store_meal_name=store_meal_name)
                     return response.json(0, {"redirectUrl": approval_url, "orderID": order_id})
                     return response.json(0, {"redirectUrl": approval_url, "orderID": order_id})
             return response.json(10, 'generate_order_false')
             return response.json(10, 'generate_order_false')
         elif pay_type == 2:
         elif pay_type == 2:
@@ -1586,16 +1293,14 @@ class CloudStorageView(View):
             else:
             else:
                 if order_string:
                 if order_string:
                     redirect_url = ali_pay_obj.alipay_prefix + order_string
                     redirect_url = ali_pay_obj.alipay_prefix + order_string
-                    order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
-                                                          desc=content, payType=pay_type, payTime=now_time,
-                                                          price=price, currency=currency, addTime=now_time,
-                                                          updTime=now_time,
-                                                          pay_url=redirect_url, isSelectDiscounts=is_select_discount,
-                                                          commodity_code=commodity_code, commodity_type=commodity_type,
-                                                          rank_id=rank, coupon_id=coupon_id, ai_rank_id=1,
-                                                          store_meal_name=store_meal_name)
-                    if store_qs[0]['is_ai'] == 1:
-                        order_qs.order_type = 1
+                    Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
+                                               desc=content, payType=pay_type, payTime=now_time,
+                                               price=price, currency=currency, addTime=now_time, updTime=now_time,
+                                               pay_url=redirect_url, isSelectDiscounts=is_select_discount,
+                                               commodity_code=commodity_code, commodity_type=commodity_type,
+                                               rank_id=rank, coupon_id=coupon_id, ai_rank_id=1,
+                                               store_meal_name=store_meal_name)
+
                     return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
                     return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
                                                           'result': {"redirectUrl": redirect_url, "orderID": order_id},
                                                           'result': {"redirectUrl": redirect_url, "orderID": order_id},
                                                           'error_code': 0})
                                                           'error_code': 0})
@@ -1616,15 +1321,12 @@ class CloudStorageView(View):
             if not response:
             if not response:
                 return response.json(10, '生成订单错误.')
                 return response.json(10, '生成订单错误.')
             # 回调函数
             # 回调函数
-            order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
-                                                  desc=content, payType=pay_type, payTime=now_time,
-                                                  price=price, currency=currency, addTime=now_time, updTime=now_time,
-                                                  pay_url=notify_url, isSelectDiscounts=is_select_discount,
-                                                  commodity_code=commodity_code, commodity_type=commodity_type,
-                                                  rank_id=rank,
-                                                  ai_rank_id=1, store_meal_name=store_meal_name)
-            if store_qs[0]['is_ai'] == 1:
-                order_qs.order_type = 1
+            Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
+                                       desc=content, payType=pay_type, payTime=now_time,
+                                       price=price, currency=currency, addTime=now_time, updTime=now_time,
+                                       pay_url=notify_url, isSelectDiscounts=is_select_discount,
+                                       commodity_code=commodity_code, commodity_type=commodity_type, rank_id=rank,
+                                       ai_rank_id=1, store_meal_name=store_meal_name)
             return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
             return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
                                                   'result': response,
                                                   'result': response,
                                                   'orderId': order_id,
                                                   'orderId': order_id,
@@ -1697,24 +1399,16 @@ class CloudStorageView(View):
             return response.json(10064)
             return response.json(10064)
         order_id = CommonService.createOrderID()
         order_id = CommonService.createOrderID()
         now_time = int(time.time())
         now_time = int(time.time())
-        order_type = 0
-        store_qs = Store_Meal.objects.filter(id=rank, lang__lang=lang, is_show=0).values("day", "bucket_id", 'is_ai',
+        store_qs = Store_Meal.objects.filter(id=rank, lang__lang=lang, is_show=0).values("day", "bucket_id",
                                                                                          "bucket__storeDay", "expire",
                                                                                          "bucket__storeDay", "expire",
                                                                                          'lang__content', 'price',
                                                                                          'lang__content', 'price',
-                                                                                         'currency', 'commodity_type',
-                                                                                         'icloud_store_meal_id')
+                                                                                         'currency', 'commodity_type')
         if not store_qs.exists():
         if not store_qs.exists():
             return response.json(173)
             return response.json(173)
         bucket_id = store_qs[0]['bucket_id']
         bucket_id = store_qs[0]['bucket_id']
         uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
         uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
                                                                   "bucket__region", "endTime", "use_status")
                                                                   "bucket__region", "endTime", "use_status")
         expire = store_qs[0]['expire']
         expire = store_qs[0]['expire']
-        unuse_meal_flag = False  # 是否关联未使用套餐
-        # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
-        # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
-        # if not icloud_meal_qs.exists():
-        #     return response.json(173)
-        # size = icloud_meal_qs[0]['size']
         try:
         try:
             with transaction.atomic():
             with transaction.atomic():
                 if uid_bucket_qs.exists():
                 if uid_bucket_qs.exists():
@@ -1725,7 +1419,6 @@ class CloudStorageView(View):
                                                                               bucket_id=bucket_id,
                                                                               bucket_id=bucket_id,
                                                                               endTime=end_time, updateTime=now_time)
                                                                               endTime=end_time, updateTime=now_time)
                     else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
                     else:  # 已过期或者不相同的套餐加入未使用的关联套餐表
-                        unuse_meal_flag = True
                         unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                         unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
                         nums = 1
                         nums = 1
                         if unused_uid_qs.exists():
                         if unused_uid_qs.exists():
@@ -1741,30 +1434,6 @@ class CloudStorageView(View):
                                                            endTime=end_time, addTime=now_time, updateTime=now_time,
                                                            endTime=end_time, addTime=now_time, updateTime=now_time,
                                                            use_status=1)
                                                            use_status=1)
                     uid_bucket_id = uid_bucket.id
                     uid_bucket_id = uid_bucket.id
-                #  开通AI体验
-                if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
-                    order_type = 1
-                    ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
-                    if ai_service_qs.exists():
-                        ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
-                    else:
-                        AiService.objects.create(uid=uid, channel=channel, detect_status=1, endTime=end_time,
-                                                 addTime=now_time, updTime=now_time, use_status=1)
-                #  开通云盘体验
-                # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=user_id).values('id')
-                # if not icloud_use_qs.exists():
-                #     bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
-                #     icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
-                #                                                     detect_status=1, user_id=user_id,
-                #                                                     bucket_id=bucket_qs[0]['id'])
-                #     use_details_id = icloud_use_qs.id
-                #     IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
-                #                                  size=1, use_details_id=use_details_id)
-                # else:
-                #     use_details_id = icloud_use_qs[0]['id']
-                # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
-                #                              size=size, end_time=end_time, use_details_id=use_details_id)
-
                 store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
                 store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
                                                                                                       'lang__content')
                                                                                                       'lang__content')
                 if store_meal_qs.exists():
                 if store_meal_qs.exists():
@@ -1774,7 +1443,7 @@ class CloudStorageView(View):
                 Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
                 Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
                                            desc=store_qs[0]['lang__content'], payType=pay_type, payTime=now_time,
                                            desc=store_qs[0]['lang__content'], payType=pay_type, payTime=now_time,
                                            price=store_qs[0]['price'], currency=store_qs[0]['currency'],
                                            price=store_qs[0]['price'], currency=store_qs[0]['currency'],
-                                           addTime=now_time, order_type=order_type,
+                                           addTime=now_time,
                                            updTime=now_time,
                                            updTime=now_time,
                                            pay_url="体验版", store_meal_name=store_meal_name,
                                            pay_url="体验版", store_meal_name=store_meal_name,
                                            commodity_code=commodity_code, commodity_type=store_qs[0]['commodity_type'],
                                            commodity_code=commodity_code, commodity_type=store_qs[0]['commodity_type'],
@@ -1857,7 +1526,6 @@ class CloudStorageView(View):
                 experience_context_qs.delete()
                 experience_context_qs.delete()
                 Order_Model.objects.filter(uid_bucket_id=bucket_id).delete()
                 Order_Model.objects.filter(uid_bucket_id=bucket_id).delete()
                 uid_bucket_qs.delete()
                 uid_bucket_qs.delete()
-                AiService.objects.filter(uid=uid_bucket_qs[0].uid).delete()
             else:
             else:
                 return response.json(10007)
                 return response.json(10007)
         else:
         else:
@@ -2018,9 +1686,6 @@ class CloudStorageView(View):
                 Unused_Uid_Meal.objects.filter(id=unused_id).delete()
                 Unused_Uid_Meal.objects.filter(id=unused_id).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()  # 删除sts记录
                 StsCrdModel.objects.filter(uid=uid).delete()  # 删除sts记录
                 # VodHlsModel.objects.filter(uid=uid).delete()  # 删除播放列表,后期数据量多时应该考虑延后删除
                 # VodHlsModel.objects.filter(uid=uid).delete()  # 删除播放列表,后期数据量多时应该考虑延后删除
-                AiService.objects.filter(uid=uid, channel=unused_uid_bucket['channel']).update(endTime=end_time,
-                                                                                               updTime=now_time,
-                                                                                               use_status=1)
                 return response.json(0)
                 return response.json(0)
         except Exception:
         except Exception:
             return response.json(474)
             return response.json(474)
@@ -2101,7 +1766,7 @@ class CloudStorageView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def do_vod_msg_notice(self, uid, channel, user_id, lang, sys_msg_text_list, sms):  # 云存操作系统消息
     def do_vod_msg_notice(self, uid, channel, user_id, lang, sys_msg_text_list, sms):  # 云存操作系统消息
         """
         """
@@ -2339,4 +2004,4 @@ class CloudStorageView(View):
         except Exception as e:
         except Exception as e:
             logger = logging.getLogger('info')
             logger = logging.getLogger('info')
             logger.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             logger.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 3 - 3
Controller/CloudTransfer.py

@@ -144,7 +144,7 @@ class cloudTestView(View):
 
 
         except Exception as e:
         except Exception as e:
             # print(e)
             # print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
         else:
         else:
             return response.json(0)
             return response.json(0)
 
 
@@ -243,7 +243,7 @@ class cloudTestView(View):
                 LogModel.objects.create(**log)
                 LogModel.objects.create(**log)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def expireMeal(self, request_dict, response):
     def expireMeal(self, request_dict, response):
         UID_Bucket_id = request_dict.get("UID_Bucket_id", None)
         UID_Bucket_id = request_dict.get("UID_Bucket_id", None)
@@ -253,7 +253,7 @@ class cloudTestView(View):
                 UID_Bucket.objects.filter(id=UID_Bucket_id).update(use_status=2)
                 UID_Bucket.objects.filter(id=UID_Bucket_id).update(use_status=2)
             except Exception as e:
             except Exception as e:
                 # print(e)
                 # print(e)
-                return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+                return response.json(500, repr(e))
             else:
             else:
                 return response.json(0)
                 return response.json(0)
         response.json(404)
         response.json(404)

+ 6 - 24
Controller/CloudVod.py

@@ -13,10 +13,9 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
-    CONFIG_INFO, CONFIG_CN
-from Model.models import Device_Info, Order_Model, Store_Meal, OssCrdModel, UID_Bucket, StsCrdModel, \
-    VodBucketModel, UidSetModel, AiService
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD
+from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
+    VodBucketModel
 from Object.AliPayObject import AliPayObject
 from Object.AliPayObject import AliPayObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
@@ -83,27 +82,11 @@ class CloudVodView(View):
         dvqs = Device_Info.objects.filter(UID=uid, isShare=False)
         dvqs = Device_Info.objects.filter(UID=uid, isShare=False)
         if not dvqs.exists():
         if not dvqs.exists():
             return response.json(12)
             return response.json(12)
-        uid_set_qs = UidSetModel.objects.filter(uid=uid).values('is_ai')
-        if not uid_set_qs.exists():
-            return response.json(12)
         ubqs = UID_Bucket.objects.filter(uid=uid). \
         ubqs = UID_Bucket.objects.filter(uid=uid). \
             values('bucket__content', 'status', 'channel', 'endTime', 'uid')
             values('bucket__content', 'status', 'channel', 'endTime', 'uid')
         res = []
         res = []
-        for item in ubqs:
-            result = {
-                'bucket__content': item['bucket__content'],
-                'status': item['status'],
-                'channel': item['channel'],
-                'endTime': item['endTime'],
-                'uid': item['uid'],
-            }
-            if uid_set_qs[0]['is_ai'] != 2 and CONFIG_INFO != CONFIG_CN:
-                ai_server_qs = AiService.objects.filter(uid=uid, use_status=1).values('detect_status', 'detect_group')
-                if not ai_server_qs.exists():
-                    return response.json(12)
-                result['detect_status'] = ai_server_qs[0]['detect_status']
-                result['detect_group'] = ai_server_qs[0]['detect_group']
-            res.append(result)
+        if ubqs.exists():
+            res = list(ubqs)
         return response.json(0, res)
         return response.json(0, res)
 
 
     def do_pay_error(self):
     def do_pay_error(self):
@@ -581,8 +564,7 @@ class CloudVodView(View):
             thumb = bucket.sign_url('GET', ts, 3600,
             thumb = bucket.sign_url('GET', ts, 3600,
                                     params={'x-oss-process': 'video/snapshot,t_1000,m_fast,w_300'})
                                     params={'x-oss-process': 'video/snapshot,t_1000,m_fast,w_300'})
             vod_play_list.append(
             vod_play_list.append(
-                {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec'],
-                 'id': vod['id']})
+                {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec'], 'id': vod['id']})
         vod_play_list = sorted(vod_play_list, key=lambda item: -item['name'])
         vod_play_list = sorted(vod_play_list, key=lambda item: -item['name'])
         return response.json(0, vod_play_list)
         return response.json(0, vod_play_list)
 
 

+ 67 - 231
Controller/Cron/CronTaskController.py

@@ -10,18 +10,18 @@
 import datetime
 import datetime
 import threading
 import threading
 import time
 import time
-
+import logging
 import requests
 import requests
 from django.db import connection, connections, transaction
 from django.db import connection, connections, transaction
 from django.db.models import Q, Sum, Count
 from django.db.models import Q, Sum, Count
 from django.views import View
 from django.views import View
 
 
 from Ansjer.config import USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, CONFIG_INFO, CONFIG_US, \
 from Ansjer.config import USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, CONFIG_INFO, CONFIG_US, \
-    RESET_REGION_ID_SERIAL_REDIS_LIST, LOGGER
+    RESET_REGION_ID_SERIAL_REDIS_LIST
 from Model.models import Device_User, Device_Info, UidSetModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
 from Model.models import Device_User, Device_Info, UidSetModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
     VodHlsModel, ExperienceContextModel, AiService, VodHlsSummary, VideoPlaybackTimeModel, DeviceUserSummary, \
     VodHlsModel, ExperienceContextModel, AiService, VodHlsSummary, VideoPlaybackTimeModel, DeviceUserSummary, \
     CountryModel, DeviceTypeModel, OrdersSummary, DeviceInfoSummary, CompanySerialModel, \
     CountryModel, DeviceTypeModel, OrdersSummary, DeviceInfoSummary, CompanySerialModel, \
-    CloudLogModel, UidCloudStorageCount, UserExModel, DeviceDomainRegionModel, VodHlsTag, VodHlsTagType, IcloudService, \
+    CloudLogModel, UidCloudStorageCount, UserExModel, DeviceDomainRegionModel, VodHlsTag, VodHlsTagType, \
     Store_Meal, Lang, VodBucketModel, UnicomComboOrderInfo, UnicomDeviceInfo
     Store_Meal, Lang, VodBucketModel, UnicomComboOrderInfo, UnicomDeviceInfo
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
@@ -30,6 +30,7 @@ from Service.CommonService import CommonService
 from Service.VodHlsService import SplitVodHlsObject
 from Service.VodHlsService import SplitVodHlsObject
 from Object.UnicomObject import UnicomObjeect
 from Object.UnicomObject import UnicomObjeect
 
 
+LOGGER = logging.getLogger('info')
 
 
 class CronDelDataView(View):
 class CronDelDataView(View):
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
@@ -73,6 +74,7 @@ class CronDelDataView(View):
         try:
         try:
             ucode_list = ['823C01552AA',
             ucode_list = ['823C01552AA',
                           '823C01550AA',
                           '823C01550AA',
+                          '823C01550XA',
                           '823C01850XA',
                           '823C01850XA',
                           '730201350AA',
                           '730201350AA',
                           '730201350AA',
                           '730201350AA',
@@ -86,9 +88,23 @@ class CronDelDataView(View):
                           '72V201254AA']
                           '72V201254AA']
             UidSetModel.objects.filter(ucode__in=ucode_list, is_human=0).update(is_human=1)
             UidSetModel.objects.filter(ucode__in=ucode_list, is_human=0).update(is_human=1)
             UidSetModel.objects.filter(ucode='72V201254AA', mobile_4g=0).update(mobile_4g=1)
             UidSetModel.objects.filter(ucode='72V201254AA', mobile_4g=0).update(mobile_4g=1)
+            # 根据设备规格码定时更新默认算法类型类型
+            ucode_list = ['823C01552AA', '823C01550AA', '823C01550XA', 'C18201550KA',
+                          '823C01550TA', '823C01550VA', '823C01850XA', 'C18201850KA',
+                          '823C01850TA', '823C01850VA']
+            UidSetModel.objects.filter(ucode__in=ucode_list, ai_type=0).update(ai_type=47)
+            ucode_list = ['730201350AA', '730201450AA', '730201450MA', '730201450NA']
+            UidSetModel.objects.filter(ucode__in=ucode_list, ai_type=0).update(ai_type=7)
+
+            # 根据设备规格码更新默认个性化语音值
+            ucode_list = ['823C01552AA', '823C01550XA', 'C18201550KA', '823C01550TA',
+                          '823C01550VA', '823C01850XA', 'C18201850KA', '823C01850TA', '823C01850VA',
+                          '730201450AA', '730201450MA', '730201450NA', '72V201252AA', '72V201253AA',
+                          '72V201353AA', '72V201354AA', '72V201355AA', '72V201254AA']
+            UidSetModel.objects.filter(ucode__in=ucode_list, is_custom_voice=0).update(is_custom_voice=1)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def delAppLog(response):
     def delAppLog(response):
@@ -106,7 +122,7 @@ class CronDelDataView(View):
             cursor.close()
             cursor.close()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def uid_cloud_storage_upload_count(response):
     def uid_cloud_storage_upload_count(response):
@@ -147,7 +163,7 @@ class CronDelDataView(View):
             connection.close()
             connection.close()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def delPushInfo(response):
     def delPushInfo(response):
@@ -186,7 +202,7 @@ class CronDelDataView(View):
             cursor.close()
             cursor.close()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def delVodHls(response):
     def delVodHls(response):
@@ -203,7 +219,7 @@ class CronDelDataView(View):
             split_vod_hls_obj.del_vod_hls_data(end_time__lt=month_ago_time)
             split_vod_hls_obj.del_vod_hls_data(end_time__lt=month_ago_time)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def del_vod_hls_tag():
     def del_vod_hls_tag():
@@ -227,7 +243,7 @@ class CronDelDataView(View):
             cursor.close()
             cursor.close()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def delTesterDevice(response):
     def delTesterDevice(response):
@@ -269,7 +285,7 @@ class CronDelDataView(View):
                 Device_Info.objects.filter(userID__in=device_user).delete()
                 Device_Info.objects.filter(userID__in=device_user).delete()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 class CronUpdateDataView(View):
 class CronUpdateDataView(View):
@@ -289,8 +305,6 @@ class CronUpdateDataView(View):
             return self.updateUnusedUidBucket(response)
             return self.updateUnusedUidBucket(response)
         elif operation == 'updateUnusedAiService':  # 定时更新过期ai关联的未使用套餐状态
         elif operation == 'updateUnusedAiService':  # 定时更新过期ai关联的未使用套餐状态
             return self.updateUnusedAiService(response)
             return self.updateUnusedAiService(response)
-        elif operation == 'updateIcloudService':  # 定时更新过期云盘套餐使用状态
-            return self.updateIcloudService(response)
         elif operation == 'reqUpdateSerialStatus':  # 定时请求更新序列号状态
         elif operation == 'reqUpdateSerialStatus':  # 定时请求更新序列号状态
             return self.reqUpdateSerialStatus(response)
             return self.reqUpdateSerialStatus(response)
         elif operation == 'updateSerialStatus':  # 更新序列号状态
         elif operation == 'updateSerialStatus':  # 更新序列号状态
@@ -315,9 +329,9 @@ class CronUpdateDataView(View):
         expired_uid_bucket = expired_uid_bucket.filter(~Q(use_status=2)).values('id')
         expired_uid_bucket = expired_uid_bucket.filter(~Q(use_status=2)).values('id')
         if expired_uid_bucket.exists():
         if expired_uid_bucket.exists():
             expired_uid_bucket.update(use_status=2)
             expired_uid_bucket.update(use_status=2)
-        AiService.objects.filter(Q(endTime__lte=now_time), ~Q(use_status=2)).update(use_status=2)
         # 监控有未使用套餐则自动生效
         # 监控有未使用套餐则自动生效
-        expired_uid_buckets = UID_Bucket.objects.filter(endTime__lte=now_time, has_unused=1).values("id", "uid")[0:1000]
+        expired_uid_buckets = \
+            UID_Bucket.objects.filter(endTime__lte=now_time, has_unused=1).values("id", "uid")[0:1000]
         for expired_uid_bucket in expired_uid_buckets:
         for expired_uid_bucket in expired_uid_buckets:
             unuseds = Unused_Uid_Meal.objects.filter(
             unuseds = Unused_Uid_Meal.objects.filter(
                 uid=expired_uid_bucket['uid']).values(
                 uid=expired_uid_bucket['uid']).values(
@@ -327,28 +341,28 @@ class CronUpdateDataView(View):
                 "addTime",
                 "addTime",
                 "expire",
                 "expire",
                 "num",
                 "num",
-                "bucket_id").order_by('addTime')
+                "bucket_id").order_by('addTime')[0:1]
             if not unuseds.exists():
             if not unuseds.exists():
                 continue
                 continue
             unused = unuseds[0]
             unused = unuseds[0]
             try:
             try:
                 with transaction.atomic():
                 with transaction.atomic():
-                    count_unused = Unused_Uid_Meal.objects.filter(uid=expired_uid_bucket['uid']).count()
+                    count_unused = Unused_Uid_Meal.objects.filter(
+                        uid=expired_uid_bucket['uid']).count()
                     has_unused = 1 if count_unused > 1 else 0
                     has_unused = 1 if count_unused > 1 else 0
-                    end_time = CommonService.calcMonthLater(unused['expire'] * unused['num'])
+                    endTime = CommonService.calcMonthLater(
+                        unused['expire'] * unused['num'])
                     UID_Bucket.objects.filter(
                     UID_Bucket.objects.filter(
                         uid=expired_uid_bucket['uid']).update(
                         uid=expired_uid_bucket['uid']).update(
                         channel=unused['channel'],
                         channel=unused['channel'],
-                        endTime=end_time,
+                        endTime=endTime,
                         bucket_id=unused['bucket_id'],
                         bucket_id=unused['bucket_id'],
                         updateTime=now_time,
                         updateTime=now_time,
                         use_status=1,
                         use_status=1,
                         has_unused=has_unused)
                         has_unused=has_unused)
                     Unused_Uid_Meal.objects.filter(id=unused['id']).delete()
                     Unused_Uid_Meal.objects.filter(id=unused['id']).delete()
-                    StsCrdModel.objects.filter(uid=expired_uid_bucket['uid']).delete()  # 删除sts记录
-                    AiService.objects.filter(uid=expired_uid_bucket['uid']).update(use_status=1, endTime=end_time,
-                                                                                   updTime=now_time,
-                                                                                   channel=unused['channel'])
+                    StsCrdModel.objects.filter(
+                        uid=expired_uid_bucket['uid']).delete()  # 删除sts记录
             except Exception as e:
             except Exception as e:
                 print(repr(e))
                 print(repr(e))
                 continue
                 continue
@@ -387,44 +401,29 @@ class CronUpdateDataView(View):
                 continue
                 continue
         return response.json(0)
         return response.json(0)
 
 
-    @staticmethod
-    def updateIcloudService(response):
-        """
-        监控云盘套餐过期修改状态
-        @param response:
-        @return:
-        """
-        # 定时更新已过期套餐修改状态为2
-        now_time = int(time.time())
-        try:
-            IcloudService.objects.filter(Q(end_time__lte=now_time), ~Q(end_time=0),
-                                         ~Q(use_status=1)).update(use_status=1)
-            return response.json(0)
-        except Exception as e:
-            return response.json(500)
-
     @classmethod
     @classmethod
     def reqUpdateSerialStatus(cls, response):
     def reqUpdateSerialStatus(cls, response):
         redis_obj = RedisObject()
         redis_obj = RedisObject()
+        logger = logging.getLogger('info')
 
 
         # 更新已使用序列号其他服务器的状态
         # 更新已使用序列号其他服务器的状态
         used_serial_redis_list = redis_obj.lrange(USED_SERIAL_REDIS_LIST, 0, -1)  # 读取redis已使用序列号
         used_serial_redis_list = redis_obj.lrange(USED_SERIAL_REDIS_LIST, 0, -1)  # 读取redis已使用序列号
         if used_serial_redis_list:
         if used_serial_redis_list:
-            LOGGER.info('---请求更新已使用序列号列表---used_serial_redis_list:{}'.format(used_serial_redis_list))
+            logger.info('---请求更新已使用序列号列表---used_serial_redis_list:{}'.format(used_serial_redis_list))
             used_serial_redis_list = [str(i, 'utf-8') for i in used_serial_redis_list]
             used_serial_redis_list = [str(i, 'utf-8') for i in used_serial_redis_list]
             cls.do_request_function(used_serial_redis_list, 3)
             cls.do_request_function(used_serial_redis_list, 3)
 
 
         # 更新未使用序列号其他服务器的状态
         # 更新未使用序列号其他服务器的状态
         unused_serial_redis_list = redis_obj.lrange(UNUSED_SERIAL_REDIS_LIST, 0, -1)  # 读取redis未使用序列号
         unused_serial_redis_list = redis_obj.lrange(UNUSED_SERIAL_REDIS_LIST, 0, -1)  # 读取redis未使用序列号
         if unused_serial_redis_list:
         if unused_serial_redis_list:
-            LOGGER.info('---请求更新未使用序列号列表---unused_serial_redis_list:{}'.format(unused_serial_redis_list))
+            logger.info('---请求更新未使用序列号列表---unused_serial_redis_list:{}'.format(unused_serial_redis_list))
             unused_serial_redis_list = [str(i, 'utf-8') for i in unused_serial_redis_list]
             unused_serial_redis_list = [str(i, 'utf-8') for i in unused_serial_redis_list]
             cls.do_request_function(unused_serial_redis_list, 1)
             cls.do_request_function(unused_serial_redis_list, 1)
 
 
         # 重置地区id
         # 重置地区id
         reset_region_id_serial_redis_list = redis_obj.lrange(RESET_REGION_ID_SERIAL_REDIS_LIST, 0, -1)  # 读取redis未使用序列号
         reset_region_id_serial_redis_list = redis_obj.lrange(RESET_REGION_ID_SERIAL_REDIS_LIST, 0, -1)  # 读取redis未使用序列号
         if reset_region_id_serial_redis_list:
         if reset_region_id_serial_redis_list:
-            LOGGER.info('---请求重置地区id的序列号列表---:{}'.format(reset_region_id_serial_redis_list))
+            logger.info('---请求重置地区id的序列号列表---:{}'.format(reset_region_id_serial_redis_list))
             reset_region_id_serial_redis_list = [str(i, 'utf-8') for i in reset_region_id_serial_redis_list]
             reset_region_id_serial_redis_list = [str(i, 'utf-8') for i in reset_region_id_serial_redis_list]
             cls.do_request_reset_region_id(reset_region_id_serial_redis_list)
             cls.do_request_reset_region_id(reset_region_id_serial_redis_list)
         return response.json(0)
         return response.json(0)
@@ -443,30 +442,31 @@ class CronUpdateDataView(View):
         # 确认域名列表
         # 确认域名列表
         orders_domain_name_list = CommonService.get_orders_domain_name_list()
         orders_domain_name_list = CommonService.get_orders_domain_name_list()
         redis_obj = RedisObject()
         redis_obj = RedisObject()
-        LOGGER.info('---请求更新序列号线程---data:{},orders_domain_name_list:{}'.format(data, orders_domain_name_list))
+        logger = logging.getLogger('info')
+        logger.info('---请求更新序列号线程---data:{},orders_domain_name_list:{}'.format(data, orders_domain_name_list))
         try:
         try:
             requests_failed_flag = False  # 请求失败标志位
             requests_failed_flag = False  # 请求失败标志位
             for domain_name in orders_domain_name_list:
             for domain_name in orders_domain_name_list:
                 url = '{}cron/update/updateSerialStatus'.format(domain_name)
                 url = '{}cron/update/updateSerialStatus'.format(domain_name)
                 response = requests.post(url=url, data=data, timeout=5)
                 response = requests.post(url=url, data=data, timeout=5)
-                LOGGER.info('---请求更新序列号响应时间---:{}'.format(response.elapsed.total_seconds()))
+                logger.info('---请求更新序列号响应时间---:{}'.format(response.elapsed.total_seconds()))
                 result = response.json()
                 result = response.json()
                 if result['result_code'] != 0:  # 请求失败标志位置位
                 if result['result_code'] != 0:  # 请求失败标志位置位
                     requests_failed_flag = True
                     requests_failed_flag = True
                     break
                     break
 
 
                 # 状态为未使用,重置美洲服的地区id
                 # 状态为未使用,重置美洲服的地区id
-                if status == 1:  # 美洲服直接更新
+                if status == 1:     # 美洲服直接更新
                     if CONFIG_INFO == CONFIG_US:
                     if CONFIG_INFO == CONFIG_US:
-                        DeviceDomainRegionModel.objects.filter(~Q(region_id=0), serial_number__in=serial_redis_list). \
+                        DeviceDomainRegionModel.objects.filter(~Q(region_id=0), serial_number__in=serial_redis_list).\
                             update(region_id=0)
                             update(region_id=0)
-                    else:  # 其他服请求到美洲服更新
+                    else:   # 其他服请求到美洲服更新
                         req_url = 'https://www.dvema.com/cron/update/reset-region-id'
                         req_url = 'https://www.dvema.com/cron/update/reset-region-id'
                         req_data = {
                         req_data = {
                             'serial_redis_list': str(serial_redis_list)
                             'serial_redis_list': str(serial_redis_list)
                         }
                         }
                         response = requests.post(url=req_url, data=req_data, timeout=5)
                         response = requests.post(url=req_url, data=req_data, timeout=5)
-                        LOGGER.info('---请求重置地区id响应时间---:{}'.format(response.elapsed.total_seconds()))
+                        logger.info('---请求重置地区id响应时间---:{}'.format(response.elapsed.total_seconds()))
                         result = response.json()
                         result = response.json()
                         if result['result_code'] != 0:  # 请求失败标志位置位
                         if result['result_code'] != 0:  # 请求失败标志位置位
                             requests_failed_flag = True
                             requests_failed_flag = True
@@ -480,7 +480,7 @@ class CronUpdateDataView(View):
                     for i in serial_redis_list:
                     for i in serial_redis_list:
                         redis_obj.lrem(USED_SERIAL_REDIS_LIST, 0, i)
                         redis_obj.lrem(USED_SERIAL_REDIS_LIST, 0, i)
         except Exception as e:
         except Exception as e:
-            LOGGER.info('---更新序列号状态异常---:{}'.format(repr(e)))
+            logger.info('---更新序列号状态异常---:{}'.format(repr(e)))
 
 
     @staticmethod
     @staticmethod
     def do_request_reset_region_id(reset_region_id_serial_redis_list):
     def do_request_reset_region_id(reset_region_id_serial_redis_list):
@@ -489,6 +489,7 @@ class CronUpdateDataView(View):
         @param reset_region_id_serial_redis_list: 序列号redis列表
         @param reset_region_id_serial_redis_list: 序列号redis列表
         """
         """
         redis_obj = RedisObject()
         redis_obj = RedisObject()
+        logger = logging.getLogger('info')
         requests_failed_flag = False  # 请求失败标志位
         requests_failed_flag = False  # 请求失败标志位
         data = {
         data = {
             'serial_redis_list': str(reset_region_id_serial_redis_list),
             'serial_redis_list': str(reset_region_id_serial_redis_list),
@@ -504,7 +505,7 @@ class CronUpdateDataView(View):
                 for serial in reset_region_id_serial_redis_list:
                 for serial in reset_region_id_serial_redis_list:
                     redis_obj.lrem(RESET_REGION_ID_SERIAL_REDIS_LIST, 0, serial)
                     redis_obj.lrem(RESET_REGION_ID_SERIAL_REDIS_LIST, 0, serial)
         except Exception as e:
         except Exception as e:
-            LOGGER.info('---请求重置地区id异常---:{}'.format(repr(e)))
+            logger.info('---请求重置地区id异常---:{}'.format(repr(e)))
 
 
     @staticmethod
     @staticmethod
     def updateSerialStatus(request_dict, response):
     def updateSerialStatus(request_dict, response):
@@ -517,7 +518,8 @@ class CronUpdateDataView(View):
         """
         """
         serial_redis_list = request_dict.get('serial_redis_list', None)
         serial_redis_list = request_dict.get('serial_redis_list', None)
         status = request_dict.get('status', None)
         status = request_dict.get('status', None)
-        LOGGER.info('---更新序列号状态参数---serial_redis_list:{},status:{}'.format(serial_redis_list, status))
+        logger = logging.getLogger('info')
+        logger.info('---更新序列号状态参数---serial_redis_list:{},status:{}'.format(serial_redis_list, status))
         if not all([serial_redis_list, status]):
         if not all([serial_redis_list, status]):
             return response.json(444)
             return response.json(444)
         now_time = int(time.time())
         now_time = int(time.time())
@@ -527,7 +529,7 @@ class CronUpdateDataView(View):
                                                                                           update_time=now_time)
                                                                                           update_time=now_time)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            LOGGER.info('---更新序列号状态异常---:{}'.format(repr(e)))
+            logger.info('---更新序列号状态异常---:{}'.format(repr(e)))
             return response.json(500)
             return response.json(500)
 
 
     @staticmethod
     @staticmethod
@@ -539,7 +541,8 @@ class CronUpdateDataView(View):
         @param response: 响应对象
         @param response: 响应对象
         """
         """
         serial_redis_list = request_dict.get('serial_redis_list', None)
         serial_redis_list = request_dict.get('serial_redis_list', None)
-        LOGGER.info('---重置地区id参数---serial_redis_list:{}'.format(serial_redis_list))
+        logger = logging.getLogger('info')
+        logger.info('---重置地区id参数---serial_redis_list:{}'.format(serial_redis_list))
         if not serial_redis_list:
         if not serial_redis_list:
             return response.json(444)
             return response.json(444)
         try:
         try:
@@ -547,7 +550,7 @@ class CronUpdateDataView(View):
             DeviceDomainRegionModel.objects.filter(serial_number__in=serial_redis_list).update(region_id=0)
             DeviceDomainRegionModel.objects.filter(serial_number__in=serial_redis_list).update(region_id=0)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            LOGGER.info('---重置地区id异常---:{}'.format(repr(e)))
+            logger.info('---重置地区id异常---:{}'.format(repr(e)))
             return response.json(500)
             return response.json(500)
 
 
     @staticmethod
     @staticmethod
@@ -568,33 +571,25 @@ class CronUpdateDataView(View):
                 elif lang == 'en':
                 elif lang == 'en':
                     Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='1-Month plan (free trial)')
                     Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='1-Month plan (free trial)')
                 elif lang == 'es':
                 elif lang == 'es':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='Plan de 1 mes (prueba gratuita)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='Plan de 1 mes (prueba gratuita)')
                 elif lang == 'fr':
                 elif lang == 'fr':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='Forfait de 1 mois (essai gratuit)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='Forfait de 1 mois (essai gratuit)')
                 elif lang == 'de':
                 elif lang == 'de':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='1 Monat Paket (kostenlose Testversion) ')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='1 Monat Paket (kostenlose Testversion) ')
                 elif lang == 'cn_tw':
                 elif lang == 'cn_tw':
                     Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='一個月套餐(免費試用)')
                     Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='一個月套餐(免費試用)')
                 elif lang == 'pt':
                 elif lang == 'pt':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='Plano de 1 mês (teste gratuito)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='Plano de 1 mês (teste gratuito)')
                 elif lang == 'ru':
                 elif lang == 'ru':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='Тариф 1 месяц (бесплатный пробный период)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='Тариф 1 месяц (бесплатный пробный период)')
                 elif lang == 'ja':
                 elif lang == 'ja':
                     Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='1ヶ月プラン(無料試用)')
                     Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='1ヶ月プラン(無料試用)')
                 elif lang == 'it':
                 elif lang == 'it':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='Pacchetto di 1 mese (prova gratuita)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='Pacchetto di 1 mese (prova gratuita)')
                 elif lang == 'pl':
                 elif lang == 'pl':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='jednomiesięczny pakiet (bezpłatny próbny)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='jednomiesięczny pakiet (bezpłatny próbny)')
                 elif lang == 'nl':
                 elif lang == 'nl':
-                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(
-                        content='Pakket van 1 maand (gratis proefperiode)')
+                    Lang.objects.filter(lang=lang, store_meal__id=meal_id).update(content='Pakket van 1 maand (gratis proefperiode)')
             VodBucketModel.objects.filter(id=meal_qs[0]['bucket']).update(content='国内存储桶免费体验30天,录像保存7天')
             VodBucketModel.objects.filter(id=meal_qs[0]['bucket']).update(content='国内存储桶免费体验30天,录像保存7天')
             meal_qs.update(expire=1)
             meal_qs.update(expire=1)
             return response.json(0)
             return response.json(0)
@@ -602,7 +597,6 @@ class CronUpdateDataView(View):
             LOGGER.info('---修改体验套餐有效期---:{}'.format(repr(e)))
             LOGGER.info('---修改体验套餐有效期---:{}'.format(repr(e)))
             return response.json(500)
             return response.json(500)
 
 
-
 class CronCollectDataView(View):
 class CronCollectDataView(View):
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
@@ -622,8 +616,6 @@ class CronCollectDataView(View):
             return self.collect_device_user(response)
             return self.collect_device_user(response)
         elif operation == 'collectOrder':  # 定时保存订单数据
         elif operation == 'collectOrder':  # 定时保存订单数据
             return self.collect_order(response)
             return self.collect_order(response)
-        elif operation == 'collectIcloudOrder':  # 定时保存云盘订单数据
-            return self.collect_icloud_order(response)
         elif operation == 'collectDeviceInfo':  # 定时保存设备数据
         elif operation == 'collectDeviceInfo':  # 定时保存设备数据
             return self.collect_device_info(response)
             return self.collect_device_info(response)
         elif operation == 'collectFlowInfo':  # 定时保存设备数据
         elif operation == 'collectFlowInfo':  # 定时保存设备数据
@@ -662,7 +654,7 @@ class CronCollectDataView(View):
 
 
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def collect_device_user(response):
     def collect_device_user(response):
@@ -719,7 +711,7 @@ class CronCollectDataView(View):
 
 
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def collect_order(response):
     def collect_order(response):
@@ -760,8 +752,6 @@ class CronCollectDataView(View):
                     country_id = uid_set_qs[0]['tb_country'] if uid_set_qs.exists() else 0
                     country_id = uid_set_qs[0]['tb_country'] if uid_set_qs.exists() else 0
                     country_name = country_dict.get(country_id, '未知国家')
                     country_name = country_dict.get(country_id, '未知国家')
                     order_type = item['order_type']
                     order_type = item['order_type']
-                    if order_type == 1:
-                        order_type = 0
                     device_info_qs = Device_Info.objects.filter(UID=item['UID']).values('Type')
                     device_info_qs = Device_Info.objects.filter(UID=item['UID']).values('Type')
                     device_type_id = device_info_qs[0]['Type'] if device_info_qs.exists() else 0
                     device_type_id = device_info_qs[0]['Type'] if device_info_qs.exists() else 0
                     device_type_name = device_type_dict.get(device_type_id, '未知设备')
                     device_type_name = device_type_dict.get(device_type_id, '未知设备')
@@ -952,161 +942,7 @@ class CronCollectDataView(View):
                                                      device_type=device_type_temp_dict, store_meal=store_meal_temp_dict)
                                                      device_type=device_type_temp_dict, store_meal=store_meal_temp_dict)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-
-    @staticmethod
-    def collect_icloud_order(response):
-        try:
-            order_type = 4
-            created_time = int(time.time())
-            today = datetime.datetime.today()
-            start_time = datetime.datetime(today.year, today.month, today.day)
-            end_time = start_time + datetime.timedelta(days=1)
-            start_time = CommonService.str_to_timestamp(start_time.strftime('%Y-%m-%d %H:%M:%S'))
-            end_time = CommonService.str_to_timestamp(end_time.strftime('%Y-%m-%d %H:%M:%S'))
-            order_qs = Order_Model.objects.filter(addTime__gte=start_time, addTime__lt=end_time, order_type=order_type,
-                                                  status=1).values('userID',
-                                                                   'store_meal_name', 'price',
-                                                                   'addTime', 'currency').order_by(
-                'addTime')
-            user_list = []
-            all_order_qs = Order_Model.objects.filter(addTime__lt=start_time, status=1, order_type=order_type).values(
-                'userID')
-            for item in all_order_qs:
-                if item['userID'] not in user_list:
-                    user_list.append(item['userID'])
-            # 国家表数据
-            country_qs = CountryModel.objects.values('id', 'country_name')
-            country_dict = {}
-            for item in country_qs:
-                country_dict[item['id']] = item['country_name']
-            with transaction.atomic():
-                for item in order_qs:
-                    price = float(item['price'])
-                    currency = item['currency']
-                    user_qs = Device_User.objects.filter(userID=item['userID']).values('region_country')
-                    country_id = user_qs[0]['region_country'] if user_qs.exists() else 0
-                    country_name = country_dict.get(country_id, '未知国家')
-                    store_meal_name = item['store_meal_name']
-                    add_time_stamp = item['addTime']
-                    add_time_str = datetime.datetime.fromtimestamp(int(add_time_stamp))
-                    add_time_str = datetime.datetime(add_time_str.year, add_time_str.month, add_time_str.day)
-                    add_time_stamp = CommonService.str_to_timestamp(add_time_str.strftime('%Y-%m-%d %H:%M:%S'))
-
-                    order_summary_qs = OrdersSummary.objects.filter(time=add_time_stamp, query_type=0,
-                                                                    service_type=order_type)
-                    if item['userID'] not in user_list:
-                        pay_order_summary_qs = OrdersSummary.objects.filter(time=add_time_stamp, query_type=2,
-                                                                            service_type=order_type)
-                        query_type = 2
-                    else:
-                        pay_order_summary_qs = OrdersSummary.objects.filter(time=add_time_stamp, query_type=3,
-                                                                            service_type=order_type)
-                        query_type = 3
-                    if pay_order_summary_qs.exists():
-                        pay_order_summary = pay_order_summary_qs.first()
-                        pay_order_summary.count += 1
-                        temp_total = eval(pay_order_summary.total)
-                        if currency not in temp_total:
-                            temp_total[currency] = price
-                        else:
-                            temp_total[currency] = round(temp_total[currency] + price, 2)
-                        pay_order_summary.total = temp_total
-                        country_temp_dict = eval(pay_order_summary.country)
-                        if country_name in country_temp_dict:
-                            country_temp_dict[country_name]['数量'] += 1
-                            if currency not in country_temp_dict[country_name]:
-                                country_temp_dict[country_name][currency] = price
-                            else:
-                                country_temp_dict[country_name][currency] = round(
-                                    country_temp_dict[country_name][currency] + price, 2)
-                        else:
-                            country_temp_dict[country_name] = {'数量': 1, currency: price}
-                        pay_order_summary.country = country_temp_dict
-                        store_meal_temp_dict = eval(pay_order_summary.store_meal)
-                        if store_meal_name in store_meal_temp_dict:
-                            store_meal_temp_dict[store_meal_name]['数量'] += 1
-                            if currency not in store_meal_temp_dict[store_meal_name]:
-                                store_meal_temp_dict[store_meal_name][currency] = price
-                            else:
-                                store_meal_temp_dict[store_meal_name][currency] = round(
-                                    store_meal_temp_dict[store_meal_name][currency] + price, 2)
-                        else:
-                            store_meal_temp_dict[store_meal_name] = {'数量': 1, currency: price}
-                        pay_order_summary.store_meal = store_meal_temp_dict
-                        pay_order_summary.save()
-                    else:
-                        final_total = {currency: price}
-                        country_temp_dict = {
-                            country_name: {
-                                '数量': 1,
-                                currency: price
-                            }
-                        }
-                        store_meal_temp_dict = {
-                            store_meal_name: {
-                                '数量': 1,
-                                currency: price
-                            }
-                        }
-                        OrdersSummary.objects.create(time=add_time_stamp, count=1, query_type=query_type,
-                                                     service_type=order_type, total=final_total,
-                                                     country=country_temp_dict, created_time=created_time,
-                                                     device_type={},
-                                                     store_meal=store_meal_temp_dict)
-                    if order_summary_qs.exists():
-                        order_summary = order_summary_qs.first()
-                        order_summary.count += 1
-                        temp_total = eval(order_summary.total)
-                        if currency not in temp_total:
-                            temp_total[currency] = price
-                        else:
-                            temp_total[currency] = round(temp_total[currency] + price, 2)
-                        order_summary.total = temp_total
-                        country_temp_dict = eval(order_summary.country)
-                        if country_name in country_temp_dict:
-                            country_temp_dict[country_name]['数量'] += 1
-                            if currency not in country_temp_dict[country_name]:
-                                country_temp_dict[country_name][currency] = price
-                            else:
-                                country_temp_dict[country_name][currency] = round(
-                                    country_temp_dict[country_name][currency] + price, 2)
-                        else:
-                            country_temp_dict[country_name] = {'数量': 1, currency: price}
-                        order_summary.country = country_temp_dict
-                        store_meal_temp_dict = eval(order_summary.store_meal)
-                        if store_meal_name in store_meal_temp_dict:
-                            store_meal_temp_dict[store_meal_name]['数量'] += 1
-                            if currency not in store_meal_temp_dict[store_meal_name]:
-                                store_meal_temp_dict[store_meal_name][currency] = price
-                            else:
-                                store_meal_temp_dict[store_meal_name][currency] = round(
-                                    store_meal_temp_dict[store_meal_name][currency] + price, 2)
-                        else:
-                            store_meal_temp_dict[store_meal_name] = {'数量': 1, currency: price}
-                        order_summary.store_meal = store_meal_temp_dict
-                        order_summary.save()
-                    else:
-                        final_total = {currency: price}
-                        country_temp_dict = {
-                            country_name: {
-                                '数量': 1,
-                                currency: price
-                            }
-                        }
-                        store_meal_temp_dict = {
-                            store_meal_name: {
-                                '数量': 1,
-                                currency: price
-                            }
-                        }
-                        OrdersSummary.objects.create(time=add_time_stamp, count=1, query_type=0,
-                                                     service_type=order_type, total=final_total,
-                                                     country=country_temp_dict, created_time=created_time,
-                                                     device_type={}, store_meal=store_meal_temp_dict)
-            return response.json(0)
-        except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def collect_device_info(response):
     def collect_device_info(response):

+ 4 - 3
Controller/DetectController.py

@@ -26,7 +26,7 @@ from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, DETECT_PUSH
     JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, \
     JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, \
     BASE_DIR, APNS_MODE, SERVER_TYPE, LOGGER
     BASE_DIR, APNS_MODE, SERVER_TYPE, LOGGER
 from Ansjer.config import PUSH_REDIS_ADDRESS
 from Ansjer.config import PUSH_REDIS_ADDRESS
-from Model.models import Device_Info, Equipment_Info, UidSetModel, UidPushModel, SysMsgModel, \
+from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, SysMsgModel, \
     VodBucketModel
     VodBucketModel
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
@@ -181,6 +181,7 @@ class DetectControllerView(View):
 
 
     def do_change_status(self, userID, request_dict, response):
     def do_change_status(self, userID, request_dict, response):
         token_val = request_dict.get('token_val', None)
         token_val = request_dict.get('token_val', None)
+        jg_token_val = request_dict.get('jg_token_val', '')
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
         app_type = request_dict.get('app_type', None)
         app_type = request_dict.get('app_type', None)
         push_type = request_dict.get('push_type', None)
         push_type = request_dict.get('push_type', None)
@@ -271,6 +272,7 @@ class DetectControllerView(View):
                         'app_type': app_type,
                         'app_type': app_type,
                         'push_type': push_type,
                         'push_type': push_type,
                         'token_val': token_val,
                         'token_val': token_val,
+                        'jg_token_val': jg_token_val,
                         'updTime': nowTime,
                         'updTime': nowTime,
                         'lang': lang,
                         'lang': lang,
                         'tz': tz
                         'tz': tz
@@ -285,6 +287,7 @@ class DetectControllerView(View):
                         'app_type': app_type,
                         'app_type': app_type,
                         'push_type': push_type,
                         'push_type': push_type,
                         'token_val': token_val,
                         'token_val': token_val,
+                        'jg_token_val': jg_token_val,
                         'm_code': m_code,
                         'm_code': m_code,
                         'addTime': nowTime,
                         'addTime': nowTime,
                         'updTime': nowTime,
                         'updTime': nowTime,
@@ -293,8 +296,6 @@ class DetectControllerView(View):
                     }
                     }
                     # 绑定设备推送
                     # 绑定设备推送
                     UidPushModel.objects.create(**uid_push_create_dict)
                     UidPushModel.objects.create(**uid_push_create_dict)
-                if appBundleId == 0 or appBundleId == '0':
-                    LOGGER.info('detect/changeStatus接口推送数据:{}'.format(request_dict))
                 if interval:
                 if interval:
                     self.do_delete_redis(uid, int(interval))
                     self.do_delete_redis(uid, int(interval))
                 else:
                 else:

+ 18 - 43
Controller/DetectControllerV2.py

@@ -10,6 +10,7 @@ from django.views.generic.base import View
 
 
 from Ansjer.config import DETECT_PUSH_DOMAIN, DETECT_PUSH_DOMAINS, DETECT_PUSH_DOMAIN_JIUAN, DETECT_PUSH_DOMAINS_JIUAN, \
 from Ansjer.config import DETECT_PUSH_DOMAIN, DETECT_PUSH_DOMAINS, DETECT_PUSH_DOMAIN_JIUAN, DETECT_PUSH_DOMAINS_JIUAN, \
     OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, LOGGER
     OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, LOGGER
+from Ansjer.config import PUSH_REDIS_ADDRESS
 from Model.models import Device_Info, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
 from Model.models import Device_Info, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
     AiService, VodBucketModel
     AiService, VodBucketModel
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
@@ -27,18 +28,17 @@ class DetectControllerViewV2(View):
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
         operation = kwargs.get('operation')
         operation = kwargs.get('operation')
-        api_version = kwargs.get('apiVersion')
         # self.ip = CommonService.get_ip_address(request)
         # self.ip = CommonService.get_ip_address(request)
-        return self.validation(request, request.GET, operation, api_version)
+        return self.validation(request.GET, operation)
 
 
     def post(self, request, *args, **kwargs):
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
         operation = kwargs.get('operation')
         operation = kwargs.get('operation')
-        api_version = kwargs.get('apiVersion')
         # self.ip = CommonService.get_ip_address(request)
         # self.ip = CommonService.get_ip_address(request)
-        return self.validation(request, request.POST, operation, api_version)
+        return self.validation(request.POST, operation)
+
+    def validation(self, request_dict, operation):
 
 
-    def validation(self, request, request_dict, operation, api_version):
         response = ResponseObject()
         response = ResponseObject()
         if operation is None:
         if operation is None:
             return response.json(444, 'error path')
             return response.json(444, 'error path')
@@ -58,42 +58,14 @@ class DetectControllerViewV2(View):
             # 更新推送延迟
             # 更新推送延迟
             elif operation == 'updateInterval':
             elif operation == 'updateInterval':
                 return self.do_update_interval(userID, request_dict, response)
                 return self.do_update_interval(userID, request_dict, response)
-            # 消息提醒配置
-            elif operation == 'messageNotificationSet':
-                return self.message_notification_set(api_version, request_dict, response)
             else:
             else:
                 return response.json(414)
                 return response.json(414)
         else:
         else:
             return response.json(tko.code)
             return response.json(tko.code)
 
 
-    @classmethod
-    def message_notification_set(cls, api_version, request_dict, response):
-        """
-        消息提醒设置
-        @param api_version: 版本号
-        @param request_dict: 参数json格式
-        @param response: 响应数据
-        """
-        try:
-            msg_data = request_dict.get('msgData', None)
-            uid = request_dict.get('uid', None)
-            LOGGER.info('*****DetectControllerViewV2.message_notification_set*****api_version:{},uid:{}'
-                        .format(api_version, uid))
-            if not all([msg_data, uid]):
-                return response.json(444)
-            data = json.loads(msg_data)
-            uid_set_qs = UidSetModel.objects.filter(uid=uid)
-            if not uid_set_qs.exists():
-                return response.json(173)
-            uid_set_qs.update(msg_notify=data, updTime=int(time.time()))
-            return response.json(0)
-        except Exception as e:
-            LOGGER.info('*****DetectControllerViewV2.message_notification_set:errLine:{}, errMsg:{}'
-                        .format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-
     def do_change_status(self, userID, request_dict, response):
     def do_change_status(self, userID, request_dict, response):
         token_val = request_dict.get('token_val', None)
         token_val = request_dict.get('token_val', None)
+        jg_token_val = request_dict.get('jg_token_val', '')
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
         app_type = request_dict.get('app_type', None)
         app_type = request_dict.get('app_type', None)
         push_type = request_dict.get('push_type', None)
         push_type = request_dict.get('push_type', None)
@@ -142,6 +114,7 @@ class DetectControllerViewV2(View):
             uid_set_data = {
             uid_set_data = {
                 'device_type': device_info_qs[0].Type
                 'device_type': device_info_qs[0].Type
             }
             }
+
             # 设置开关状态,0:关闭,1:开启
             # 设置开关状态,0:关闭,1:开启
             if status:
             if status:
                 status = int(status)
                 status = int(status)
@@ -151,6 +124,9 @@ class DetectControllerViewV2(View):
             # 检测类型
             # 检测类型
             if detect_group:
             if detect_group:
                 uid_set_data['detect_group'] = detect_group
                 uid_set_data['detect_group'] = detect_group
+            # uid_set = UidSetModel.objects.filter(uid=uid).order_by('-updTime')
+            # if uid_set.exists():
+            #     interval = uid_set.first().new_detect_interval if not interval else interval
             # 设置消息推送间隔
             # 设置消息推送间隔
             if interval:
             if interval:
                 interval = int(interval)
                 interval = int(interval)
@@ -166,13 +142,12 @@ class DetectControllerViewV2(View):
                         }
                         }
                     }
                     }
                     CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
                     CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
+                    # req_success = CommonService.req_publish_mqtt_msg(uid, topic_name, msg)
+                    # if not req_success:
+                    #     return response.json(10044)
 
 
             uid_set_qs = UidSetModel.objects.filter(uid=uid)
             uid_set_qs = UidSetModel.objects.filter(uid=uid)
             if uid_set_qs.exists():
             if uid_set_qs.exists():
-                msg_data = uid_set_qs.first().msg_notify
-                if status == 0 and msg_data:
-                    msg_data['appPush'] = -1
-                    uid_set_data['msg_notify'] = msg_data
                 uid_set_id = uid_set_qs[0].id
                 uid_set_id = uid_set_qs[0].id
                 uid_set_data['updTime'] = nowTime
                 uid_set_data['updTime'] = nowTime
                 uid_set_qs.update(**uid_set_data)
                 uid_set_qs.update(**uid_set_data)
@@ -193,6 +168,7 @@ class DetectControllerViewV2(View):
                             'app_type': app_type,
                             'app_type': app_type,
                             'push_type': push_type,
                             'push_type': push_type,
                             'token_val': token_val,
                             'token_val': token_val,
+                            'jg_token_val': jg_token_val,
                             'updTime': nowTime,
                             'updTime': nowTime,
                             'lang': lang,
                             'lang': lang,
                             'tz': tz
                             'tz': tz
@@ -206,6 +182,7 @@ class DetectControllerViewV2(View):
                             'app_type': app_type,
                             'app_type': app_type,
                             'push_type': push_type,
                             'push_type': push_type,
                             'token_val': token_val,
                             'token_val': token_val,
+                            'jg_token_val': jg_token_val,
                             'm_code': m_code,
                             'm_code': m_code,
                             'addTime': nowTime,
                             'addTime': nowTime,
                             'updTime': nowTime,
                             'updTime': nowTime,
@@ -214,8 +191,6 @@ class DetectControllerViewV2(View):
                         }
                         }
                         # 绑定设备推送
                         # 绑定设备推送
                         UidPushModel.objects.create(**uid_push_create_dict)
                         UidPushModel.objects.create(**uid_push_create_dict)
-                if appBundleId == 0 or appBundleId == '0':
-                    LOGGER.info('detectV2/changeStatus接口推送数据:{}'.format(request_dict))
                 return response.json(0)
                 return response.json(0)
 
 
             if status == 0:
             if status == 0:
@@ -231,6 +206,7 @@ class DetectControllerViewV2(View):
                             'app_type': app_type,
                             'app_type': app_type,
                             'push_type': push_type,
                             'push_type': push_type,
                             'token_val': token_val,
                             'token_val': token_val,
+                            'jg_token_val': jg_token_val,
                             'updTime': nowTime,
                             'updTime': nowTime,
                             'lang': lang,
                             'lang': lang,
                             'tz': tz
                             'tz': tz
@@ -244,6 +220,7 @@ class DetectControllerViewV2(View):
                             'app_type': app_type,
                             'app_type': app_type,
                             'push_type': push_type,
                             'push_type': push_type,
                             'token_val': token_val,
                             'token_val': token_val,
+                            'jg_token_val': jg_token_val,
                             'm_code': m_code,
                             'm_code': m_code,
                             'addTime': nowTime,
                             'addTime': nowTime,
                             'updTime': nowTime,
                             'updTime': nowTime,
@@ -252,8 +229,6 @@ class DetectControllerViewV2(View):
                         }
                         }
                         # 绑定设备推送
                         # 绑定设备推送
                         UidPushModel.objects.create(**uid_push_create_dict)
                         UidPushModel.objects.create(**uid_push_create_dict)
-                if appBundleId == 0 or appBundleId == '0':
-                    LOGGER.info('detectV2/changeStatus接口推送数据:{}'.format(request_dict))
                 if interval:
                 if interval:
                     self.do_delete_redis(uid, interval)
                     self.do_delete_redis(uid, interval)
                 else:
                 else:
@@ -278,7 +253,7 @@ class DetectControllerViewV2(View):
             else:
             else:
                 return response.json(173)
                 return response.json(173)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def do_delete_redis(self, uid, detect_interval=0):
     def do_delete_redis(self, uid, detect_interval=0):
         keyPattern = '{uid}*'.format(uid=uid)
         keyPattern = '{uid}*'.format(uid=uid)

+ 40 - 43
Controller/EquipmentManager.py

@@ -776,13 +776,12 @@ def admin_modifyInterface(request):
             return response.json(0, res)
             return response.json(0, res)
 
 
 
 
-# 新删除设备
 def deleteInterface(request):
 def deleteInterface(request):
-    '''
-    删除用户设备
-    :param request:
-    :return:
-    '''
+    """
+    删除设备
+    @param request: 请求体
+    @return: response
+    """
     response = ResponseObject()
     response = ResponseObject()
     request.encoding = 'utf-8'
     request.encoding = 'utf-8'
     if request.method == 'POST':
     if request.method == 'POST':
@@ -791,51 +790,53 @@ def deleteInterface(request):
         request_dict = request.GET
         request_dict = request.GET
     else:
     else:
         return response.json(444)
         return response.json(444)
+
     token = request_dict.get('token', None)
     token = request_dict.get('token', None)
     id = request_dict.get('id', None)
     id = request_dict.get('id', None)
-    if not id:
-        return response.json(444, 'id')
+    if not all([token, id]):
+        return response.json(444)
+
     tko = TokenObject(token)
     tko = TokenObject(token)
     response.lang = tko.lang
     response.lang = tko.lang
     if tko.code != 0:
     if tko.code != 0:
         return response.json(tko.code)
         return response.json(tko.code)
     userID = tko.userID
     userID = tko.userID
-    # 主用户删除设备全部删除
     if not userID:
     if not userID:
         return response.json(309)
         return response.json(309)
+
     try:
     try:
         with transaction.atomic():
         with transaction.atomic():
-            dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
+            dv_qs = Device_Info.objects.filter(userID_id=userID, id=id).values('UID', 'serial_number', 'isShare',
+                                                                               'vodPrimaryUserID')
             if not dv_qs.exists():
             if not dv_qs.exists():
                 return response.json(14)
                 return response.json(14)
-            uid = dv_qs[0].UID
-            serial_number = dv_qs[0].serial_number
-            if userID == dv_qs[0].vodPrimaryUserID:
-                Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
-
-            up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
-            if dv_qs[0].isShare:
-                DeviceShareView.del_device_channel_permission(userID, uid)
+            uid = dv_qs[0]['UID']
+            serial_number = dv_qs[0]['serial_number']
+            is_share = dv_qs[0]['isShare']
+            vod_primary_user_id = dv_qs[0]['vodPrimaryUserID']
+
+            del_channel_permission_user_id = ''
+            # 主用户删除
+            if userID == vod_primary_user_id:
+                user_id_list = list(Device_Info.objects.filter(UID=uid).values_list('userID_id', flat=True))
+                Device_Info.objects.filter(UID=uid).delete()
+                UidPushModel.objects.filter(uid_set__uid=uid).delete()
+                # 删除推送消息
+                del_eq_info_thread = threading.Thread(target=ModelService.del_user_list_eq_info,
+                                                      args=(user_id_list, uid))
             else:
             else:
-                # a.主用户删除设备
-                # 删除设备影子信息uid_set   外键关联删除设备推送配置信息 uid_push
-                DetectControllerView().do_delete_redis(uid)
-                if up_qs.count() > 1:
-                    redisObj = RedisObject()
-                    ykey = '{uid}_redis_qs'.format(uid=uid)
-                    if ykey:
-                        redisObj.del_data(key=ykey)
-                # b.删除次用户设备
-                Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID).delete()
-                DeviceShareView.del_device_channel_permission('', uid)
-            up_qs.delete()
-            dv_qs.delete()
+                Device_Info.objects.filter(UID=uid, userID_id=userID).delete()
+                UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
+                # 删除推送消息
+                del_eq_info_thread = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
+                if is_share:
+                    del_channel_permission_user_id = userID
+            del_eq_info_thread.start()
+            DeviceShareView.del_device_channel_permission(userID, uid)
+
             if not serial_number:
             if not serial_number:
                 serial_number = CommonService.query_serial_with_uid(uid)
                 serial_number = CommonService.query_serial_with_uid(uid)
             del_unicom_info(userID, serial_number)
             del_unicom_info(userID, serial_number)
-            # 异步删除推送消息
-            asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
-            asy.start()
 
 
             # 记录操作日志
             # 记录操作日志
             now_time = int(time.time())
             now_time = int(time.time())
@@ -851,12 +852,10 @@ def deleteInterface(request):
                 'operation': '{}删除设备,uid:{}'.format(userID, uid),
                 'operation': '{}删除设备,uid:{}'.format(userID, uid),
             }
             }
             LogModel.objects.create(**log)
             LogModel.objects.create(**log)
-    except Exception as e:
-        errorInfo = traceback.format_exc()
-        print('删除数据库记录错误: %s' % errorInfo)
-        return response.json(176, repr(e))
-    else:
+
         return response.json(0)
         return response.json(0)
+    except Exception as e:
+        return response.json(176, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
 
 
 def del_unicom_info(user_id, serial_no):
 def del_unicom_info(user_id, serial_no):
@@ -1089,8 +1088,7 @@ def uid_status(request):
     # 判断用户是否绑定设备
     # 判断用户是否绑定设备
     qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
     qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
                                                     'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
                                                     'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
-                                                    'detect_group', 'is_alexa', 'region_alexa', 'is_ptz',
-                                                    'msg_notify')
+                                                    'detect_group', 'is_alexa', 'region_alexa', 'is_ptz')
 
 
     # 调试
     # 调试
     debugOnes = int(time.time())
     debugOnes = int(time.time())
@@ -1121,8 +1119,7 @@ def uid_status(request):
             'detect_group': qs[0]['detect_group'],  # 推送组
             'detect_group': qs[0]['detect_group'],  # 推送组
             'is_alexa': qs[0]['is_alexa'],  # 推送组
             'is_alexa': qs[0]['is_alexa'],  # 推送组
             'region_alexa': qs[0]['region_alexa'],  # 推送组
             'region_alexa': qs[0]['region_alexa'],  # 推送组
-            'is_ptz': qs[0]['is_ptz'],
-            'msgData': qs[0]['msg_notify']
+            'is_ptz': qs[0]['is_ptz']
         }
         }
 
 
         # 调试
         # 调试

+ 10 - 26
Controller/EquipmentManagerV3.py

@@ -19,7 +19,7 @@ from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyVi
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
 from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
     Device_User, iotdeviceInfoModel, UIDCompanySerialModel, UnicomDeviceInfo, CountryModel, \
     Device_User, iotdeviceInfoModel, UIDCompanySerialModel, UnicomDeviceInfo, CountryModel, \
-    DeviceCloudPhotoInfo, UidPushModel, ExperienceContextModel
+    DeviceCloudPhotoInfo, UidPushModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -120,6 +120,7 @@ class EquipmentManagerV3(View):
         app_type = request_dict.get('app_type', None)
         app_type = request_dict.get('app_type', None)
         push_type = request_dict.get('push_type', None)
         push_type = request_dict.get('push_type', None)
         token_val = request_dict.get('token_val', None)
         token_val = request_dict.get('token_val', None)
+        jg_token_val = request_dict.get('jg_token_val', '')
         lang = request_dict.get('lang', 'en')
         lang = request_dict.get('lang', 'en')
         tz = request_dict.get('tz', '0')
         tz = request_dict.get('tz', '0')
 
 
@@ -252,6 +253,7 @@ class EquipmentManagerV3(View):
                         'app_type': app_type,
                         'app_type': app_type,
                         'push_type': push_type,
                         'push_type': push_type,
                         'token_val': token_val,
                         'token_val': token_val,
+                        'jg_token_val': jg_token_val,
                         'updTime': nowTime,
                         'updTime': nowTime,
                         'lang': lang,
                         'lang': lang,
                         'tz': tz
                         'tz': tz
@@ -265,6 +267,7 @@ class EquipmentManagerV3(View):
                         'app_type': app_type,
                         'app_type': app_type,
                         'push_type': push_type,
                         'push_type': push_type,
                         'token_val': token_val,
                         'token_val': token_val,
+                        'jg_token_val': jg_token_val,
                         'm_code': m_code,
                         'm_code': m_code,
                         'addTime': nowTime,
                         'addTime': nowTime,
                         'updTime': nowTime,
                         'updTime': nowTime,
@@ -273,8 +276,6 @@ class EquipmentManagerV3(View):
                     }
                     }
                     # 绑定设备推送
                     # 绑定设备推送
                     UidPushModel.objects.create(**uid_push_create_dict)
                     UidPushModel.objects.create(**uid_push_create_dict)
-                if appBundleId == 0 or appBundleId == '0':
-                    LOGGER.info('v3/equipment/add接口推送数据:{}'.format(request_dict))
             # 查询uid_channel表有无该uid的数据
             # 查询uid_channel表有无该uid的数据
             uid_channel_set = UidChannelSetModel.objects.filter(uid_id=UidSet_id)
             uid_channel_set = UidChannelSetModel.objects.filter(uid_id=UidSet_id)
             if not uid_channel_set.exists():
             if not uid_channel_set.exists():
@@ -380,7 +381,9 @@ class EquipmentManagerV3(View):
             if not unicom_device_info_qs[0].user_id:
             if not unicom_device_info_qs[0].user_id:
                 # 生成4G免费订单
                 # 生成4G免费订单
                 UnicomComboView.experience_order_4G(unicom_device_info_qs[0].iccid,
                 UnicomComboView.experience_order_4G(unicom_device_info_qs[0].iccid,
-                                                    serial_number, user_id, True)
+                                                    serial_number, user_id, False)
+                UnicomDeviceInfo.objects.filter(iccid=unicom_device_info_qs[0].iccid) \
+                    .update(user_id=user_id, updated_time=int(time.time()))
             return True
             return True
         except Exception as e:
         except Exception as e:
             logging.info('创建体验4G订单异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             logging.info('创建体验4G订单异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -739,8 +742,6 @@ class EquipmentManagerV3(View):
             p_uid = p['UID'].upper()
             p_uid = p['UID'].upper()
             UserDeviceService.get_sim_by_serial_number(p)  # 获取SIM卡属性
             UserDeviceService.get_sim_by_serial_number(p)  # 获取SIM卡属性
             p['cloudPhoto'] = self.get_cloud_photo_status(p['UID'])
             p['cloudPhoto'] = self.get_cloud_photo_status(p['UID'])
-            # 获取云存使用状态
-            p['vod_use_status'] = self.get_vod_use_status(p_uid, nowTime)
             # 获取iot_deviceInfo表的endpoint和token_iot_number
             # 获取iot_deviceInfo表的endpoint和token_iot_number
             p['iot'] = []
             p['iot'] = []
             if p['serial_number']:  # 存在序列号根据序列号查询
             if p['serial_number']:  # 存在序列号根据序列号查询
@@ -777,7 +778,7 @@ class EquipmentManagerV3(View):
             p['View_Password'] = self.encrypt_pwd(p['View_Password'])
             p['View_Password'] = self.encrypt_pwd(p['View_Password'])
 
 
             # 判断设备是否支持4G
             # 判断设备是否支持4G
-            uid_set_qs = UidSetModel.objects.filter(uid=p['UID']).values('mobile_4g')
+            uid_set_qs =UidSetModel.objects.filter(uid=p['UID']).values('mobile_4g')
             if uid_set_qs.exists():
             if uid_set_qs.exists():
                 uid_set_qs = uid_set_qs.first()
                 uid_set_qs = uid_set_qs.first()
                 if uid_set_qs['mobile_4g'] == 1:
                 if uid_set_qs['mobile_4g'] == 1:
@@ -786,23 +787,6 @@ class EquipmentManagerV3(View):
         result = data
         result = data
         return response.json(0, result)
         return response.json(0, result)
 
 
-    @staticmethod
-    def get_vod_use_status(uid, now_time):
-        """
-        根据UID获取云存使用状态
-        @param uid: 设备uid
-        @param now_time: 现在时间戳
-        @return: 0:未体验;1:使用中;2:已过期
-        """
-        experience_context_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
-        if not experience_context_qs.exists():
-            return 0
-        uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gt=now_time, use_status=1)
-        if uid_bucket_qs.exists():
-            return 1
-        else:
-            return 2
-
     @staticmethod
     @staticmethod
     def get_cloud_photo_status(uid):
     def get_cloud_photo_status(uid):
         """
         """
@@ -974,7 +958,7 @@ class EquipmentManagerV3(View):
                         items.append(item)
                         items.append(item)
             return response.json(0, items)
             return response.json(0, items)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, 'error_ine:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
     # 加密
     # 加密
     def encrypt_pwd(self, userPwd):
     def encrypt_pwd(self, userPwd):
@@ -1099,7 +1083,7 @@ class EquipmentManagerV3(View):
                     EquipmentInfoService.get_equipment_info_model('', val).filter(device_uid=uid).delete()
                     EquipmentInfoService.get_equipment_info_model('', val).filter(device_uid=uid).delete()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def do_get_device_features(self, request_dict, response):
     def do_get_device_features(self, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)

+ 6 - 6
Controller/FeedBack.py

@@ -139,7 +139,7 @@ class FeedBackView(View):
                     fb.FS.add(StatResModel.objects.create(addTime=nowTime, name=res_3))
                     fb.FS.add(StatResModel.objects.create(addTime=nowTime, name=res_3))
         except Exception as e:
         except Exception as e:
             print(repr(e))
             print(repr(e))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
         else:
         else:
             return response.json(0)
             return response.json(0)
 
 
@@ -174,7 +174,7 @@ class FeedBackView(View):
             print('----------')
             print('----------')
 
 
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
         else:
         else:
             return response.json(0)
             return response.json(0)
 
 
@@ -200,7 +200,7 @@ class FeedBackView(View):
                 try:
                 try:
                     fb_qs = FeedBackModel.objects.filter()
                     fb_qs = FeedBackModel.objects.filter()
                 except Exception as e:
                 except Exception as e:
-                    return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+                    return response.json(500, repr(e))
                 print('----------')
                 print('----------')
                 if filter_data:
                 if filter_data:
                     fb_qs = fb_qs.filter(**filter_data)
                     fb_qs = fb_qs.filter(**filter_data)
@@ -253,7 +253,7 @@ class FeedBackView(View):
                 fb_qs.delete()
                 fb_qs.delete()
                 print('----------')
                 print('----------')
             except Exception as e:
             except Exception as e:
-                return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+                return response.json(500, repr(e))
             else:
             else:
                 return response.json(0)
                 return response.json(0)
         else:
         else:
@@ -328,7 +328,7 @@ class FeedBackView(View):
             else:
             else:
                 return response.json(174)
                 return response.json(174)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def push_inaccurate(user_id, request_dict, response):
     def push_inaccurate(user_id, request_dict, response):
@@ -368,4 +368,4 @@ class FeedBackView(View):
                                                   add_time=now_time, tag=tag, is_st=is_st, event_time=event_time)
                                                   add_time=now_time, tag=tag, is_st=is_st, event_time=event_time)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 32 - 53
Controller/PaymentCycle.py

@@ -180,7 +180,7 @@ class PaypalCycleNotify(View):
         agreement_id = billing_agreement_response.id
         agreement_id = billing_agreement_response.id
         order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
         order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
         order_list = order_qs.values("UID", "channel", "commodity_code", "rank", "isSelectDiscounts",
         order_list = order_qs.values("UID", "channel", "commodity_code", "rank", "isSelectDiscounts",
-                                     "userID__userID", 'rank__is_ai',
+                                     "userID__userID",
                                      "userID__username", 'coupon_id')
                                      "userID__username", 'coupon_id')
         if not orderID:
         if not orderID:
             logger.info('----订阅订单号失效----')
             logger.info('----订阅订单号失效----')
@@ -255,22 +255,6 @@ class PaypalCycleNotify(View):
                         (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
                         (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
                          updateTime=nowTime, use_status=1)
                          updateTime=nowTime, use_status=1)
                     uid_bucket_id = ub_cqs.id
                     uid_bucket_id = ub_cqs.id
-                # 开通AI服务
-                if order_list[0]['rank__is_ai']:
-                    ai_service_qs = AiService.objects.filter(uid=UID, channel=channel)
-                    if ai_service_qs.exists():  # 有正在使用的套餐,套餐结束时间保存为套餐有效期
-                        ai_service_qs.update(endTime=endTime, use_status=1, updTime=nowTime)
-                    else:
-                        ai_service_dict = {
-                            'uid': UID,
-                            'channel': channel,
-                            'detect_status': 1,
-                            'addTime': nowTime,
-                            'updTime': nowTime,
-                            'use_status': 1,
-                            'endTime': endTime
-                        }
-                        AiService.objects.create(**ai_service_dict)
 
 
                 dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
                 dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
                 if dvq.exists():
                 if dvq.exists():
@@ -400,13 +384,15 @@ class PaypalCycleNotify(View):
                 paymentID = paypal_body.get('parent_payment')
                 paymentID = paypal_body.get('parent_payment')
                 if paymentID and paypal_transaction_id:
                 if paymentID and paypal_transaction_id:
                     # 查询客户地区信息,地区跟服务器配置不匹配,返回500
                     # 查询客户地区信息,地区跟服务器配置不匹配,返回500
-                    order_qs = Order_Model.objects.filter(paymentID=paymentID).values('userID__region_country')
+                    order_qs = Order_Model.objects.filter(paymentID=paymentID).values('UID', 'userID__region_country')
                     if not order_qs.exists():
                     if not order_qs.exists():
                         PAY_LOGGER.info('PayPal周期扣款失败---根据paymentID查询订单数据不存在')
                         PAY_LOGGER.info('PayPal周期扣款失败---根据paymentID查询订单数据不存在')
                         return HttpResponse('Fail', status=500)
                         return HttpResponse('Fail', status=500)
 
 
+                    # 判断用户地区是否跟服务器地区匹配
+                    uid = order_qs[0]['UID']
                     country_id = order_qs[0]['userID__region_country']
                     country_id = order_qs[0]['userID__region_country']
-                    if not self.config_match_region(country_id):
+                    if not self.config_match_region(uid, country_id):
                         return HttpResponse('Fail', status=500)
                         return HttpResponse('Fail', status=500)
 
 
                     order_qs.update(status=1, updTime=nowTime, trade_no=paypal_transaction_id)
                     order_qs.update(status=1, updTime=nowTime, trade_no=paypal_transaction_id)
@@ -440,8 +426,10 @@ class PaypalCycleNotify(View):
                 PAY_LOGGER.info('PayPal周期扣款失败---根据order_id查询订单数据不存在')
                 PAY_LOGGER.info('PayPal周期扣款失败---根据order_id查询订单数据不存在')
                 return HttpResponse('fail', status=500)
                 return HttpResponse('fail', status=500)
 
 
+            # 判断用户地区是否跟服务器地区匹配
+            uid = order_qs[0]['UID']
             country_id = order_qs[0]['userID__region_country']
             country_id = order_qs[0]['userID__region_country']
-            if not self.config_match_region(country_id):
+            if not self.config_match_region(uid, country_id):
                 return HttpResponse('Fail', status=500)
                 return HttpResponse('Fail', status=500)
 
 
             UID = order_qs[0]['UID']
             UID = order_qs[0]['UID']
@@ -466,15 +454,14 @@ class PaypalCycleNotify(View):
             username = order_qs[0]['userID__username']
             username = order_qs[0]['userID__username']
             channel = order_qs[0]['channel']
             channel = order_qs[0]['channel']
             rank = order_qs[0]['rank']
             rank = order_qs[0]['rank']
-            store_meal_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
-                                                                      "is_ai")
+            store_meal_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
             if not store_meal_qs.exists():
             if not store_meal_qs.exists():
                 PAY_LOGGER.info('{} PayPal周期扣款失败---套餐数据不存在'.format(UID))
                 PAY_LOGGER.info('{} PayPal周期扣款失败---套餐数据不存在'.format(UID))
                 return HttpResponse('fail', status=500)
                 return HttpResponse('fail', status=500)
 
 
             bucketId = store_meal_qs[0]['bucket_id']
             bucketId = store_meal_qs[0]['bucket_id']
             expire = store_meal_qs[0]['expire']
             expire = store_meal_qs[0]['expire']
-            is_ai = store_meal_qs[0]['is_ai']
+
             ubqs = UID_Bucket.objects.filter(uid=UID).values("id", "bucket_id", "bucket__storeDay", "bucket__region",
             ubqs = UID_Bucket.objects.filter(uid=UID).values("id", "bucket_id", "bucket__storeDay", "bucket__region",
                                                              "endTime", "use_status")
                                                              "endTime", "use_status")
 
 
@@ -502,22 +489,7 @@ class PaypalCycleNotify(View):
                         (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
                         (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
                          updateTime=nowTime, use_status=1)
                          updateTime=nowTime, use_status=1)
                     uid_bucket_id = ub_cqs.id
                     uid_bucket_id = ub_cqs.id
-                # 开通AI服务
-                if is_ai:
-                    ai_service_qs = AiService.objects.filter(uid=UID, channel=channel)
-                    if ai_service_qs.exists():  # 有正在使用的套餐,套餐结束时间保存为套餐有效期
-                        ai_service_qs.update(endTime=endTime, use_status=1, updTime=nowTime)
-                    else:
-                        ai_service_dict = {
-                            'uid': UID,
-                            'channel': channel,
-                            'detect_status': 1,
-                            'addTime': nowTime,
-                            'updTime': nowTime,
-                            'use_status': 1,
-                            'endTime': endTime
-                        }
-                        AiService.objects.create(**ai_service_dict)
+
                 dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
                 dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
                 if dvq.exists():
                 if dvq.exists():
                     dvq_set_update_dict = {
                     dvq_set_update_dict = {
@@ -533,19 +505,14 @@ class PaypalCycleNotify(View):
                     store_meal_name = store_meal_qs[0]['lang__title'] + '-' + store_meal_qs[0]['lang__content']
                     store_meal_name = store_meal_qs[0]['lang__title'] + '-' + store_meal_qs[0]['lang__content']
                 else:
                 else:
                     store_meal_name = '未知套餐'
                     store_meal_name = '未知套餐'
-                new_order_qs = Order_Model.objects.create(orderID=orderID, UID=UID, channel=channel, userID_id=userid,
-                                                          desc=desc, payType=pay_type, payTime=nowTime,
-                                                          price=amount.get('total'),
-                                                          currency=order_qs[0]['currency'], addTime=nowTime,
-                                                          updTime=nowTime,
-                                                          pay_url='', isSelectDiscounts=0,
-                                                          commodity_code=commodity_code,
-                                                          commodity_type=commodity_type, rank_id=rank, paymentID='',
-                                                          coupon_id='', uid_bucket_id=uid_bucket_id, status=1,
-                                                          agreement_id=agreement_id, store_meal_name=store_meal_name,
-                                                          plan_id=plan_id, ai_rank_id=1, trade_no=paypal_transaction_id)
-                if is_ai:
-                    new_order_qs.order_type = 1
+                Order_Model.objects.create(orderID=orderID, UID=UID, channel=channel, userID_id=userid,
+                                           desc=desc, payType=pay_type, payTime=nowTime, price=amount.get('total'),
+                                           currency=order_qs[0]['currency'], addTime=nowTime, updTime=nowTime,
+                                           pay_url='', isSelectDiscounts=0, commodity_code=commodity_code,
+                                           commodity_type=commodity_type, rank_id=rank, paymentID='',
+                                           coupon_id='', uid_bucket_id=uid_bucket_id, status=1,
+                                           agreement_id=agreement_id, store_meal_name=store_meal_name,
+                                           plan_id=plan_id, ai_rank_id=1, trade_no=paypal_transaction_id)
                 # 如果存在序列号,消息提示用序列号
                 # 如果存在序列号,消息提示用序列号
                 device_name = CommonService.query_serial_with_uid(uid=UID)
                 device_name = CommonService.query_serial_with_uid(uid=UID)
                 datetime = time.strftime("%Y-%m-%d", time.localtime())
                 datetime = time.strftime("%Y-%m-%d", time.localtime())
@@ -579,9 +546,21 @@ class PaypalCycleNotify(View):
             return HttpResponse('fail', status=500)
             return HttpResponse('fail', status=500)
 
 
     @staticmethod
     @staticmethod
-    def config_match_region(country_id):
+    def config_match_region(uid, country_id):
+        """
+        判断用户地区是否跟服务器地区匹配
+        @param uid: uid
+        @param country_id: 国家表id
+        @return: bool
+        """
         country_qs = CountryModel.objects.filter(id=country_id).values('region_id')
         country_qs = CountryModel.objects.filter(id=country_id).values('region_id')
+        # 不确定用户地区信息,默认美洲
+        if not country_qs.exists() and CONFIG_INFO == CONFIG_EUR:
+            PAY_LOGGER.info('PayPal周期扣款失败---不确定地区的用户请求欧洲服,uid:{},country_id:{}'.format(uid, country_id))
+            return False
+
         region_id = country_qs[0]['region_id']
         region_id = country_qs[0]['region_id']
+        PAY_LOGGER.info('uid{}的用户地区信息: country_id:{}, region_id:{}'.format(uid, country_id, region_id))
         if (CONFIG_INFO == CONFIG_US and region_id == 4) or (CONFIG_INFO == CONFIG_EUR and region_id != 4):
         if (CONFIG_INFO == CONFIG_US and region_id == 4) or (CONFIG_INFO == CONFIG_EUR and region_id != 4):
             PAY_LOGGER.info('PayPal周期扣款失败---服务器跟用户地区不匹配')
             PAY_LOGGER.info('PayPal周期扣款失败---服务器跟用户地区不匹配')
             return False
             return False

+ 0 - 2
Controller/RegionController.py

@@ -356,8 +356,6 @@ class RegionView(View):
                 for country in country_qs:
                 for country in country_qs:
                     if country['country_id'] == 1:
                     if country['country_id'] == 1:
                         country['api'] = 'https://www.zositechc.cn/'
                         country['api'] = 'https://www.zositechc.cn/'
-                    else:
-                        country['api'] = 'https://www.dvema.com/'
 
 
             return response.json(0, list(country_qs))
             return response.json(0, list(country_qs))
         except Exception as e:
         except Exception as e:

+ 63 - 144
Controller/SensorGateway/GatewayDeviceController.py

@@ -7,7 +7,6 @@
 @Software: PyCharm
 @Software: PyCharm
 """
 """
 import datetime
 import datetime
-import threading
 import time
 import time
 
 
 import requests
 import requests
@@ -15,7 +14,7 @@ from django.db import transaction
 from django.db.models import Q
 from django.db.models import Q
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC, SCENE_EVENT_DELETE, SUB_DEVICE_TOPIC
+from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC
 from Ansjer.config import CONFIG_INFO, AWS_IOT_SES_ACCESS_CHINA_ID, AWS_IOT_SES_ACCESS_CHINA_SECRET, \
 from Ansjer.config import CONFIG_INFO, AWS_IOT_SES_ACCESS_CHINA_ID, AWS_IOT_SES_ACCESS_CHINA_SECRET, \
     AWS_IOT_SES_ACCESS_CHINA_REGION, AWS_IOT_SES_ACCESS_FOREIGN_ID, AWS_IOT_SES_ACCESS_FOREIGN_SECRET, \
     AWS_IOT_SES_ACCESS_CHINA_REGION, AWS_IOT_SES_ACCESS_FOREIGN_ID, AWS_IOT_SES_ACCESS_FOREIGN_SECRET, \
     AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA
     AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA
@@ -24,13 +23,12 @@ from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyVi
 from Controller.SensorGateway.SmartSocketController import SmartSocketView
 from Controller.SensorGateway.SmartSocketController import SmartSocketView
 from Model.models import FamilyRoomDevice, FamilyRoom, GatewaySubDevice, Device_Info, UserFamily, FamilyMember, \
 from Model.models import FamilyRoomDevice, FamilyRoom, GatewaySubDevice, Device_Info, UserFamily, FamilyMember, \
     UidSetModel, iotdeviceInfoModel, SmartScene, SceneLog, SocketInfo, SocketPowerStatistics, SocketSchedule, \
     UidSetModel, iotdeviceInfoModel, SmartScene, SceneLog, SocketInfo, SocketPowerStatistics, SocketSchedule, \
-    CountryModel, SensorRecord
+    CountryModel
 from Object.AWS.AWSIoTDataPlaneUtil import AWSIoTDataPlaneService
 from Object.AWS.AWSIoTDataPlaneUtil import AWSIoTDataPlaneService
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
-from Service.ModelService import ModelService
 
 
 
 
 class GatewayDeviceView(View):
 class GatewayDeviceView(View):
@@ -51,9 +49,6 @@ class GatewayDeviceView(View):
         if operation == 'bind-serial-user':
         if operation == 'bind-serial-user':
             response = ResponseObject()
             response = ResponseObject()
             return self.bind_serial_user(request_dict, response)
             return self.bind_serial_user(request_dict, response)
-        elif operation == 'reset':
-            response = ResponseObject()
-            return self.reset(request_dict, response)
 
 
         token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
         token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
         lang = request_dict.get('lang', None)
         lang = request_dict.get('lang', None)
@@ -169,7 +164,6 @@ class GatewayDeviceView(View):
         @param response:
         @param response:
         @return:
         @return:
         """
         """
-        LOGGER.info('开始删除设备:{}'.format(request_dict))
         device_id = request_dict.get('deviceId')
         device_id = request_dict.get('deviceId')
         family_id = request_dict.get('familyId')
         family_id = request_dict.get('familyId')
         # 1 删除网关 否则删除子设备
         # 1 删除网关 否则删除子设备
@@ -184,53 +178,35 @@ class GatewayDeviceView(View):
                 if device_id:
                 if device_id:
                     device_qs = Device_Info.objects.filter(id=device_id)
                     device_qs = Device_Info.objects.filter(id=device_id)
                     if device_qs.exists():
                     if device_qs.exists():
-                        serial_number = device_qs.first().serial_number
-                        FamilyRoomDevice.objects.filter(device_id=device_id).delete()
-                        UidSetModel.objects.filter(uid=device_qs.first().UID).delete()
+                        family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id)
+                        if family_device_qs.exists():
+                            family_device_qs.delete()
+                        uid_set_qs = UidSetModel.objects.filter(uid=device_qs.first().UID)
+                        if uid_set_qs.exists():
+                            uid_set_qs.delete()
                         socket_info_qs = SocketInfo.objects.filter(device_id=device_id)
                         socket_info_qs = SocketInfo.objects.filter(device_id=device_id)
                         if socket_info_qs.exists():
                         if socket_info_qs.exists():
                             # 设备在不在线, 都发布重置
                             # 设备在不在线, 都发布重置
+                            serial_number = device_qs.first().serial_number
                             cls.reset_device(serial_number)
                             cls.reset_device(serial_number)
                             socket_info_qs.delete()
                             socket_info_qs.delete()
-                            SocketPowerStatistics.objects.filter(device_id=device_id).delete()
-                            SocketSchedule.objects.filter(device_id=device_id).delete()
-                            SceneLog.objects.filter(device_id=serial_number).delete()
+                            socket_power_qs = SocketPowerStatistics.objects.filter(device_id=device_id)
+                            if socket_power_qs.exists():
+                                socket_power_qs.delete()
+                            socket_schedule_qs = SocketSchedule.objects.filter(device_id=device_id)
+                            if socket_schedule_qs.exists():
+                                socket_schedule_qs.delete()
+                            scene_log_qs = SceneLog.objects.filter(device_id=serial_number)
+                            if scene_log_qs.exists():
+                                scene_log_qs.delete()
                             SmartSocketView.delete_alexa_socket(serial_number)
                             SmartSocketView.delete_alexa_socket(serial_number)
-                        # 重置设备
-                        topic_name = SUB_DEVICE_TOPIC.format(serial_number)
-                        msg = {
-                            'zigbee': 'recover',
-                        }
-                        success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
-                        LOGGER.info('删除重置设备结果:{}'.format(success))
-                        try:
-                            assert success
-                        except AssertionError:
-                            return response.json(10044)
-                        time.sleep(0.3)
+
                         # 如果有子设备,删除子设备和关联的场景数据
                         # 如果有子设备,删除子设备和关联的场景数据
                         gateway_qs = GatewaySubDevice.objects.filter(device_id=device_id)
                         gateway_qs = GatewaySubDevice.objects.filter(device_id=device_id)
                         if gateway_qs.exists():
                         if gateway_qs.exists():
                             sub_id_list = gateway_qs.values_list('id', flat=True)
                             sub_id_list = gateway_qs.values_list('id', flat=True)
-                            # 删除传感器记录
-                            SensorRecord.objects.filter(gateway_sub_device_id__in=list(sub_id_list)).delete()
                             smart_scene_qs = SmartScene.objects.filter(
                             smart_scene_qs = SmartScene.objects.filter(
                                 Q(device_id=device_id) | Q(sub_device_id__in=sub_id_list))
                                 Q(device_id=device_id) | Q(sub_device_id__in=sub_id_list))
-
-                            # 下发删除设备消息
-                            ieee_addr_list = gateway_qs.values_list('ieee_addr', flat=True)
-                            for ieee_addr in ieee_addr_list:
-                                # 删除设备
-                                msg = {
-                                    'zigbee': 'delete',
-                                    'ieee': ieee_addr
-                                }
-                                success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
-                                try:
-                                    assert success
-                                except AssertionError:
-                                    return response.json(10044)
-                                time.sleep(0.3)
                         else:
                         else:
                             smart_scene_qs = SmartScene.objects.filter(device_id=device_id)
                             smart_scene_qs = SmartScene.objects.filter(device_id=device_id)
                         if smart_scene_qs.exists():
                         if smart_scene_qs.exists():
@@ -240,8 +216,7 @@ class GatewayDeviceView(View):
                             topic_name = SMART_SCENE_TOPIC.format(serial_number)
                             topic_name = SMART_SCENE_TOPIC.format(serial_number)
                             for smart_scene in smart_scene_info:
                             for smart_scene in smart_scene_info:
                                 msg = {
                                 msg = {
-                                    'scene_event': SCENE_EVENT_DELETE,
-                                    'scene_id': int(smart_scene['id'])
+                                    'smart_scene_delete': int(smart_scene['id'])
                                 }
                                 }
                                 success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                                 success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                                 try:
                                 try:
@@ -251,48 +226,44 @@ class GatewayDeviceView(View):
                                 time.sleep(0.3)
                                 time.sleep(0.3)
                             smart_scene_qs.delete()
                             smart_scene_qs.delete()
                         gateway_qs.delete()  # 删除子设备
                         gateway_qs.delete()  # 删除子设备
-                        SceneLog.objects.filter(device_id=device_id).delete()
+                        scene_log_qs = SceneLog.objects.filter(device_id=device_id)
+                        if scene_log_qs.exists():
+                            scene_log_qs.delete()
                         device_qs.delete()
                         device_qs.delete()
-                        # 异步删除推送消息
-                        asy = threading.Thread(target=ModelService.del_eq_info, args=(user_id, serial_number))
-                        asy.start()
                 elif sub_ids:
                 elif sub_ids:
-                    sub_id_list = list(map(int, sub_ids.split(',')))
-                    FamilyRoomDevice.objects.filter(sub_device__in=sub_id_list).delete()
-                    # 删除传感器记录
-                    SensorRecord.objects.filter(gateway_sub_device_id__in=sub_id_list).delete()
-                    # 查询网关序列号,确定MQTT主题
-                    sub_device_qs = GatewaySubDevice.objects.filter(id=sub_id_list[0]). \
-                        values('device__serial_number')
-                    assert sub_device_qs.exists()
-                    serial_number = sub_device_qs[0]['device__serial_number']
-
-                    # 下发删除设备消息
-                    gateway_sub_device_qs = GatewaySubDevice.objects.filter(id__in=sub_id_list)
-                    ieee_addr_list = gateway_sub_device_qs.values_list('ieee_addr', flat=True)
-                    topic_name = SUB_DEVICE_TOPIC.format(serial_number)
-                    for ieee_addr in ieee_addr_list:
-                        # 删除设备
-                        msg = {
-                            'zigbee': 'delete',
-                            'ieee': ieee_addr
-                        }
-                        success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
-                        try:
-                            assert success
-                        except AssertionError:
-                            return response.json(10044)
-                        time.sleep(0.3)
-                    # 删除场景,下发MQTT通知设备
-                    smart_scene_qs = SmartScene.objects.filter(sub_device_id__in=sub_id_list)
-                    if smart_scene_qs.exists():
+                    sub_ids = sub_ids.split(',')
+                    ids = []
+                    for item in sub_ids:
+                        sub_id = int(item)
+                        ids.append(sub_id)
+                        sub_device_qs = GatewaySubDevice.objects.filter(id=sub_id).values('device_type', 'src_addr',
+                                                                                          'device__serial_number')
+                        serial_number = sub_device_qs[0]['device__serial_number']
                         topic_name = SMART_SCENE_TOPIC.format(serial_number)
                         topic_name = SMART_SCENE_TOPIC.format(serial_number)
+                        device_type = sub_device_qs[0]['device_type']
+                        if device_type == 216:  # 删除智能按钮通知设备
+                            msg = {
+                                'sos_delete': int(sub_device_qs[0]['src_addr'], 16)
+                            }
+                            success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                            try:
+                                assert success
+                            except AssertionError:
+                                return response.json(10044)
+                            time.sleep(0.3)
+                    family_device_qs = FamilyRoomDevice.objects.filter(sub_device__in=ids)
+                    if family_device_qs.exists():
+                        family_device_qs.delete()
+                    gateway_sub_qs = GatewaySubDevice.objects.filter(id__in=ids)
+                    if gateway_sub_qs.exists():
+                        gateway_sub_qs.delete()
+                    smart_scene_qs = SmartScene.objects.filter(sub_device_id__in=ids)
+                    if smart_scene_qs.exists():
                         smart_scene_info = smart_scene_qs.values('id')
                         smart_scene_info = smart_scene_qs.values('id')
                         for smart_scene in smart_scene_info:
                         for smart_scene in smart_scene_info:
                             # 通知设备删除场景id
                             # 通知设备删除场景id
                             msg = {
                             msg = {
-                                'scene_event': SCENE_EVENT_DELETE,
-                                'scene_id': int(smart_scene['id'])
+                                'smart_scene_delete': int(smart_scene['id'])
                             }
                             }
                             success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                             success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                             try:
                             try:
@@ -301,15 +272,13 @@ class GatewayDeviceView(View):
                                 return response.json(10044)
                                 return response.json(10044)
                             time.sleep(0.3)
                             time.sleep(0.3)
                         smart_scene_qs.delete()
                         smart_scene_qs.delete()
-
-                    gateway_sub_device_qs.delete()
-                    SceneLog.objects.filter(sub_device_id__in=sub_id_list).delete()
-                    # 异步删除推送消息
-                    asy = threading.Thread(target=ModelService.del_eq_info, args=(user_id, serial_number))
-                    asy.start()
+                    scene_log_qs = SceneLog.objects.filter(sub_device_id__in=ids)
+                    if scene_log_qs.exists():
+                        scene_log_qs.delete()
                 return response.json(0)
                 return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(177, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            print(e)
+            return response.json(177, repr(e))
 
 
     @staticmethod
     @staticmethod
     def reset_device(serial_number):
     def reset_device(serial_number):
@@ -419,7 +388,10 @@ class GatewayDeviceView(View):
                     sub_id = item['sub_device']
                     sub_id = item['sub_device']
                     sub_id_list.append(sub_id)
                     sub_id_list.append(sub_id)
                     gateway_sub_qs = GatewaySubDevice.objects.filter(device_id=device_id, id=sub_id).values(
                     gateway_sub_qs = GatewaySubDevice.objects.filter(device_id=device_id, id=sub_id).values(
-                        'id', 'device_type', 'nickname', 'status', 'created_time', 'ieee_addr')
+                        'id', 'device_type',
+                        'nickname',
+                        'src_addr', 'status',
+                        'created_time', 'ieee_addr')
                     if not gateway_sub_qs.exists():
                     if not gateway_sub_qs.exists():
                         continue
                         continue
                     room_id = item['room_id']
                     room_id = item['room_id']
@@ -430,6 +402,7 @@ class GatewayDeviceView(View):
                         'gatewaySubId': gateway_sub_qs['id'],
                         'gatewaySubId': gateway_sub_qs['id'],
                         'nickName': gateway_sub_qs['nickname'],
                         'nickName': gateway_sub_qs['nickname'],
                         'deviceType': gateway_sub_qs['device_type'],
                         'deviceType': gateway_sub_qs['device_type'],
+                        'srcAddr': gateway_sub_qs['src_addr'],
                         'status': gateway_sub_qs['status'],
                         'status': gateway_sub_qs['status'],
                         'createdTime': gateway_sub_qs['created_time'],
                         'createdTime': gateway_sub_qs['created_time'],
                         'roomName': gateway_room_name,
                         'roomName': gateway_room_name,
@@ -508,15 +481,13 @@ class GatewayDeviceView(View):
         if not all([user_id, serial_number]):
         if not all([user_id, serial_number]):
             return response.json(444)
             return response.json(444)
         try:
         try:
-            now_time = int(time.time())
-            LOGGER.info('用户{}的设备{}上传序列号时间:{}'.format(user_id, serial_number, now_time))
             redis_obj = RedisObject()
             redis_obj = RedisObject()
             result = redis_obj.set_data(user_id, serial_number, 300)
             result = redis_obj.set_data(user_id, serial_number, 300)
             if not result:
             if not result:
                 return response.json(178)
                 return response.json(178)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_serial_user(user_id, request_dict, response):
     def get_serial_user(user_id, request_dict, response):
@@ -528,63 +499,13 @@ class GatewayDeviceView(View):
         @return:
         @return:
         """
         """
         try:
         try:
-            now_time = int(time.time())
             redis_obj = RedisObject()
             redis_obj = RedisObject()
             serial_number = redis_obj.get_data(user_id)
             serial_number = redis_obj.get_data(user_id)
-            LOGGER.info('用户{}的设备{}获取序列号时间:{}'.format(user_id, serial_number, now_time))
             if not serial_number:
             if not serial_number:
                 return response.json(173)
                 return response.json(173)
             return response.json(0, {'serialNumber': serial_number})
             return response.json(0, {'serialNumber': serial_number})
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-
-    @staticmethod
-    def reset(request_dict, response):
-        """
-        网关复位删除设备信息
-        @param request_dict: 请求参数字典
-        @request_dict serial_number: 序列号
-        @param response: 响应对象
-        @return:
-        """
-        serial_number = request_dict.get('serial_number')
-        if not serial_number:
-            return response.json(444)
-        try:
-            with transaction.atomic():
-                device_qs = Device_Info.objects.filter(serial_number=serial_number)
-                device_id_list = list(device_qs.values_list('id', flat=True))
-                user_id_list = list(device_qs.values_list('userID_id', flat=True))
-                if not device_qs.exists():
-                    return response.json(173)
-
-                FamilyRoomDevice.objects.filter(device_id__in=device_id_list).delete()
-                UidSetModel.objects.filter(uid=device_qs.first().UID).delete()
-                socket_info_qs = SocketInfo.objects.filter(device_id__in=device_id_list)
-                if socket_info_qs.exists():
-                    socket_info_qs.delete()
-                    SocketPowerStatistics.objects.filter(device_id__in=device_id_list).delete()
-                    SocketSchedule.objects.filter(device_id__in=device_id_list).delete()
-                    SmartSocketView.delete_alexa_socket(serial_number)
-
-                # 如果有子设备,删除子设备和关联的场景数据,删除传感器记录
-                gateway_qs = GatewaySubDevice.objects.filter(device_id__in=device_id_list)
-                if gateway_qs.exists():
-                    sub_id_list = gateway_qs.values_list('id', flat=True)
-                    SensorRecord.objects.filter(gateway_sub_device_id__in=list(sub_id_list)).delete()
-                    SmartScene.objects.filter(Q(device_id__in=device_id_list) | Q(sub_device_id__in=sub_id_list)).delete()
-                else:
-                    SmartScene.objects.filter(device_id__in=device_id_list).delete()
-
-                gateway_qs.delete()  # 删除子设备
-                SceneLog.objects.filter(device_id__in=device_id_list).delete()
-                device_qs.delete()
-                # 异步删除推送消息
-                asy = threading.Thread(target=ModelService.del_user_list_eq_info, args=(user_id_list, serial_number))
-                asy.start()
-            return response.json(0)
-        except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def update_socket(cls, serial_number, device_name, user_id, region):
     def update_socket(cls, serial_number, device_name, user_id, region):
@@ -600,8 +521,6 @@ class GatewayDeviceView(View):
             requests.post(url=url, data=data, timeout=5)
             requests.post(url=url, data=data, timeout=5)
         except Exception as e:
         except Exception as e:
             print(repr(e))
             print(repr(e))
-
-
 #
 #
 #                   ___====-_  _-====___
 #                   ___====-_  _-====___
 #             _--^^^#####//      \\#####^^^--_
 #             _--^^^#####//      \\#####^^^--_

+ 54 - 90
Controller/SensorGateway/SmartSceneController.py

@@ -12,8 +12,7 @@ from django.db import transaction
 from django.db.models import F, Q, Count
 from django.db.models import F, Q, Count
 from django.views import View
 from django.views import View
 
 
-from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC, SENSOR_TYPE, EVENT_TYPE, SCENE_EVENT_CREATE, \
-    SCENE_EVENT_EDIT, SCENE_EVENT_DELETE, SCENE_STATUS_ON, SCENE_STATUS_OFF, SCENE_EVENT_EDIT_STATUS
+from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC, SENSOR_TYPE, EVENT_TYPE
 from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime, Device_Info, \
 from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime, Device_Info, \
     SceneLog
     SceneLog
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
@@ -85,7 +84,7 @@ class SmartSceneView(View):
             res = cls.get_sub_device_room_name(gateway_sub_device_qs)
             res = cls.get_sub_device_room_name(gateway_sub_device_qs)
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def task_devices(cls, request_dict, response):
     def task_devices(cls, request_dict, response):
@@ -115,9 +114,8 @@ class SmartSceneView(View):
                 else:  # 智能按钮返回网关,门磁和人体传感器(如果存在)
                 else:  # 智能按钮返回网关,门磁和人体传感器(如果存在)
                     gateway_data = cls.get_gateway_data(device_id)
                     gateway_data = cls.get_gateway_data(device_id)
                     sub_device_qs = GatewaySubDevice.objects.filter(
                     sub_device_qs = GatewaySubDevice.objects.filter(
-                        Q(Q(device_id=device_id) & Q(device_type=SENSOR_TYPE['door_magnet'])) |
-                        Q(Q(device_id=device_id) & Q(device_type=SENSOR_TYPE['body_sensor']))
-                    ).values('id', 'nickname', 'status', 'device_type')
+                        Q(device_id=device_id) & Q(device_type=SENSOR_TYPE['door_magnet']) | Q(
+                            device_type=SENSOR_TYPE['body_sensor'])).values('id', 'nickname', 'status', 'device_type')
                     if sub_device_qs.exists():
                     if sub_device_qs.exists():
                         res = cls.get_sub_device_room_name(sub_device_qs, gateway_data)
                         res = cls.get_sub_device_room_name(sub_device_qs, gateway_data)
                     else:
                     else:
@@ -125,7 +123,7 @@ class SmartSceneView(View):
 
 
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_sub_device_room_name(sub_device_qs, gateway_data=None):
     def get_sub_device_room_name(sub_device_qs, gateway_data=None):
@@ -224,8 +222,7 @@ class SmartSceneView(View):
                 'updated_time': now_time,
                 'updated_time': now_time,
             }
             }
             msg = {
             msg = {
-                'scene_event': SCENE_EVENT_CREATE,
-                'scene_status': SCENE_STATUS_ON
+                'scene_status': 1
             }
             }
             # 处理设置时间
             # 处理设置时间
             if is_all_day is not None:
             if is_all_day is not None:
@@ -268,13 +265,13 @@ class SmartSceneView(View):
 
 
                 smart_scene_dict['sub_device_id'] = sub_device_id
                 smart_scene_dict['sub_device_id'] = sub_device_id
                 sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device__serial_number',
                 sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device__serial_number',
-                                                                                         'ieee_addr')
+                                                                                         'src_addr')
                 if not sub_device_qs.exists():
                 if not sub_device_qs.exists():
                     return response.json(173)
                     return response.json(173)
                 serial_number = sub_device_qs[0]['device__serial_number']
                 serial_number = sub_device_qs[0]['device__serial_number']
 
 
                 msg['sensor_type'] = int(conditions_dict['sensor']['device_type'])
                 msg['sensor_type'] = int(conditions_dict['sensor']['device_type'])
-                msg['sensor_ieee_addr'] = sub_device_qs[0]['ieee_addr']
+                msg['sensor_src'] = int(sub_device_qs[0]['src_addr'], 16)
                 msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
                 msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
 
 
             with transaction.atomic():
             with transaction.atomic():
@@ -316,36 +313,23 @@ class SmartSceneView(View):
                     return response.json(444, {'error param': 'invalid isAllDay'})
                     return response.json(444, {'error param': 'invalid isAllDay'})
 
 
                 msg['time'] = time_dict
                 msg['time'] = time_dict
-                msg['scene_id'] = smart_scene_qs.id
+                msg['smart_scene_id'] = smart_scene_qs.id
                 task_list = []
                 task_list = []
                 for task in tasks_list:
                 for task in tasks_list:
-                    sensor_type = int(task['device_type'])
                     task_temp = {
                     task_temp = {
-                        'sensor_type': sensor_type
+                        'sensor_type': int(task['device_type']),
+                        'sensor_action': int(task['event_type'])
                     }
                     }
-                    if sensor_type != -1:   # 不为-1时需要其他数据
-                        task_temp['sensor_action'] = int(task['event_type'])
-
-                        # 延时
-                        if 'delay_time' in task and task['delay_time'] != 0:
-                            task_temp['sensor_delay'] = task['delay_time']
-
-                        # 子设备返回长地址
-                        sub_device_id = task.get('subDeviceId', None)
-                        if sub_device_id:
-                            sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('ieee_addr').first()
-                            task_temp['sensor_ieee_addr'] = sub_device_qs['ieee_addr']
-                        # 网关添加报警类型数据
-                        else:
-                            task_temp['voice_type'] = task.get('voice_type')
-                            task_temp['voice_id'] = task.get('voice_id')
-                            task_temp['count'] = task.get('count')
-                            task_temp['delay_time'] = task.get('delay_time')
-                            task_temp['duration'] = task.get('duration')
-                            task_temp['value_type'] = task.get('value_type')
 
 
-                    task_list.append(task_temp)
+                    # 延时
+                    if 'delay_time' in task and task['delay_time'] != 0:
+                        task_temp['sensor_delay'] = task['delay_time']
 
 
+                    sub_device_id = task.get('subDeviceId', None)
+                    if sub_device_id:
+                        sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
+                        task_temp['sensor_src'] = int(sub_device_qs['src_addr'], 16)
+                    task_list.append(task_temp)
                 msg['task'] = task_list
                 msg['task'] = task_list
 
 
                 smart_scene_qs.device_data = json.dumps(msg)
                 smart_scene_qs.device_data = json.dumps(msg)
@@ -362,7 +346,7 @@ class SmartSceneView(View):
 
 
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def scene_list(request_dict, user_id, response):
     def scene_list(request_dict, user_id, response):
@@ -410,7 +394,7 @@ class SmartSceneView(View):
                 smart_scene_list.append(smart_scene_dict)
                 smart_scene_list.append(smart_scene_dict)
             return response.json(0, smart_scene_list)
             return response.json(0, smart_scene_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def smart_button_scene_list(request_dict, user_id, response):
     def smart_button_scene_list(request_dict, user_id, response):
@@ -463,7 +447,7 @@ class SmartSceneView(View):
                 })
                 })
             return response.json(0, scene_list)
             return response.json(0, scene_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def update_status(request_dict, response):
     def update_status(request_dict, response):
@@ -482,9 +466,8 @@ class SmartSceneView(View):
             return response.json(444, {'error param': 'smartSceneId and status'})
             return response.json(444, {'error param': 'smartSceneId and status'})
         try:
         try:
             smart_scene_id = int(smart_scene_id)
             smart_scene_id = int(smart_scene_id)
-            scene_status = SCENE_STATUS_ON if is_enable == 'True' else SCENE_STATUS_OFF
+            scene_status = 1 if is_enable == 'True' else 0
             msg = {
             msg = {
-                'scene_event': SCENE_EVENT_EDIT_STATUS,
                 'scene_id': smart_scene_id,
                 'scene_id': smart_scene_id,
                 'scene_status': scene_status
                 'scene_status': scene_status
             }
             }
@@ -510,7 +493,7 @@ class SmartSceneView(View):
                     return response.json(10044)
                     return response.json(10044)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def scene_detail(request_dict, response):
     def scene_detail(request_dict, response):
@@ -554,7 +537,7 @@ class SmartSceneView(View):
             return response.json(0, res)
             return response.json(0, res)
 
 
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def edit_smart_scene(request_dict, user_id, response):
     def edit_smart_scene(request_dict, user_id, response):
@@ -602,8 +585,7 @@ class SmartSceneView(View):
 
 
             scene_status = 1 if smart_scene_qs[0].is_enable else 0
             scene_status = 1 if smart_scene_qs[0].is_enable else 0
             msg = {
             msg = {
-                'scene_id': smart_scene_id,
-                'scene_event': SCENE_EVENT_EDIT,
+                'smart_scene_id': smart_scene_id,
                 'scene_status': scene_status
                 'scene_status': scene_status
             }
             }
             if conditions_dict['type'] == 2:  # 条件为选择子设备
             if conditions_dict['type'] == 2:  # 条件为选择子设备
@@ -633,13 +615,13 @@ class SmartSceneView(View):
                     msg['sensor_data'] = float(value)
                     msg['sensor_data'] = float(value)
 
 
                 device_id = ''
                 device_id = ''
-                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('ieee_addr',
+                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr',
                                                                                          'device__serial_number')
                                                                                          'device__serial_number')
                 if not sub_device_qs.exists():
                 if not sub_device_qs.exists():
                     return response.json(173)
                     return response.json(173)
                 serial_number = sub_device_qs[0]['device__serial_number']
                 serial_number = sub_device_qs[0]['device__serial_number']
                 msg['sensor_type'] = int(conditions_dict['sensor']['device_type'])
                 msg['sensor_type'] = int(conditions_dict['sensor']['device_type'])
-                msg['sensor_ieee_addr'] = sub_device_qs[0]['ieee_addr']
+                msg['sensor_src'] = int(sub_device_qs[0]['src_addr'], 16)
                 msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
                 msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
             else:
             else:
                 if not device_id:
                 if not device_id:
@@ -652,33 +634,20 @@ class SmartSceneView(View):
 
 
             task_list = []
             task_list = []
             for task in tasks_list:
             for task in tasks_list:
-                sensor_type = int(task['device_type'])
                 task_temp = {
                 task_temp = {
-                    'sensor_type': sensor_type
+                    'sensor_type': int(task['device_type']),
+                    'sensor_action': int(task['event_type'])
                 }
                 }
-                if sensor_type != -1:   # 不为-1时需要其他数据
-                    task_temp['sensor_action'] = int(task['event_type'])
 
 
-                    # 延时
-                    if 'delay_time' in task and task['delay_time'] != 0:
-                        task_temp['sensor_delay'] = task['delay_time']
-
-                    # 子设备返回长地址
-                    task_sub_device_id = task.get('subDeviceId', None)
-                    if task_sub_device_id:
-                        sub_device_qs = GatewaySubDevice.objects.filter(id=task_sub_device_id).values('ieee_addr').first()
-                        task_temp['sensor_ieee_addr'] = sub_device_qs['ieee_addr']
-                    # 网关添加报警类型数据
-                    else:
-                        task_temp['voice_type'] = task.get('voice_type')
-                        task_temp['voice_id'] = task.get('voice_id')
-                        task_temp['count'] = task.get('count')
-                        task_temp['delay_time'] = task.get('delay_time')
-                        task_temp['duration'] = task.get('duration')
-                        task_temp['value_type'] = task.get('value_type')
+                # 延时
+                if 'delay_time' in task and task['delay_time'] != 0:
+                    task_temp['sensor_delay'] = task['delay_time']
 
 
+                task_sub_device_id = task.get('subDeviceId', None)
+                if task_sub_device_id:
+                    sub_device_qs = GatewaySubDevice.objects.filter(id=task_sub_device_id).values('src_addr').first()
+                    task_temp['sensor_src'] = int(sub_device_qs['src_addr'], 16)
                 task_list.append(task_temp)
                 task_list.append(task_temp)
-
             msg['task'] = task_list
             msg['task'] = task_list
 
 
             with transaction.atomic():
             with transaction.atomic():
@@ -736,7 +705,7 @@ class SmartSceneView(View):
             return response.json(0, res)
             return response.json(0, res)
 
 
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def delete_smart_scene(request_dict, response):
     def delete_smart_scene(request_dict, response):
@@ -768,8 +737,7 @@ class SmartSceneView(View):
                 for smart_scene_id in smart_scene_id_list:
                 for smart_scene_id in smart_scene_id_list:
                     # 通知设备删除场景id
                     # 通知设备删除场景id
                     msg = {
                     msg = {
-                        'scene_event': SCENE_EVENT_DELETE,
-                        'scene_id': int(smart_scene_id)
+                        'smart_scene_delete': int(smart_scene_id)
                     }
                     }
                     success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                     success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                     try:
                     try:
@@ -779,7 +747,7 @@ class SmartSceneView(View):
                     time.sleep(0.3)
                     time.sleep(0.3)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def scene_log(request_dict, response):
     def scene_log(request_dict, response):
@@ -815,19 +783,17 @@ class SmartSceneView(View):
                     device_list.append(device['device'])
                     device_list.append(device['device'])
                 if device['sub_device']:
                 if device['sub_device']:
                     sub_device_list.append(device['sub_device'])
                     sub_device_list.append(device['sub_device'])
-        elif sub_device_id:  # 查询子设备
-            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id,
-                                                                    sub_device=sub_device_id).values('device_id')
-            for device in family_room_device_qs:
-                device_list.append(device['device_id'])
+        elif sub_device_id:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=sub_device_id)
             sub_device_list.append(sub_device_id)
             sub_device_list.append(sub_device_id)
-        else:  # 查询网关
-            family_room_device_qs = FamilyRoomDevice.objects.filter(Q(family_id=family_id) & Q(device=device_id) &
-                                                                    ~Q(sub_device=0)).values(
+        else:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, device=device_id).values(
                 'sub_device')
                 'sub_device')
             device_list.append(device_id)
             device_list.append(device_id)
             for device in family_room_device_qs:
             for device in family_room_device_qs:
                 sub_device_list.append(device['sub_device'])
                 sub_device_list.append(device['sub_device'])
+        if not family_room_device_qs.exists():
+            return response.json(173)
         try:
         try:
             page, size = int(page), int(size)
             page, size = int(page), int(size)
             scene_log_qs = SceneLog.objects.filter(Q(device_id__in=device_list) | Q(sub_device_id__in=sub_device_list))
             scene_log_qs = SceneLog.objects.filter(Q(device_id__in=device_list) | Q(sub_device_id__in=sub_device_list))
@@ -862,13 +828,11 @@ class SmartSceneView(View):
                 else:
                 else:
                     device_qs = Device_Info.objects.filter(id=item['device_id']).values('Type')
                     device_qs = Device_Info.objects.filter(id=item['device_id']).values('Type')
                     item['device_type'] = device_qs[0]['Type'] if device_qs.exists() else ''
                     item['device_type'] = device_qs[0]['Type'] if device_qs.exists() else ''
-                if item['tasks'] != '':
-                    item['tasks'] = eval(item['tasks'])
-            scene_log_list = list(scene_log_qs)
-            return response.json(0, scene_log_list)
+                item['tasks'] = eval(item['tasks'])
+            return response.json(0, list(scene_log_qs))
         except Exception as e:
         except Exception as e:
-            print('error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            print(repr(e))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def scene_log_date(request_dict, response):
     def scene_log_date(request_dict, response):
@@ -922,7 +886,7 @@ class SmartSceneView(View):
                 })
                 })
             return response.json(0, log_date_list)
             return response.json(0, log_date_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_scene_data(request_dict, response):
     def get_scene_data(request_dict, response):
@@ -967,14 +931,14 @@ class SmartSceneView(View):
             # 下发智能按钮数据
             # 下发智能按钮数据
             smart_button_qs = GatewaySubDevice.objects.filter(device_id=device_id,
             smart_button_qs = GatewaySubDevice.objects.filter(device_id=device_id,
                                                               device_type=SENSOR_TYPE['smart_button']).values(
                                                               device_type=SENSOR_TYPE['smart_button']).values(
-                'ieee_addr', 'is_tampered')
+                'src_addr', 'is_tampered')
             if smart_button_qs.exists():
             if smart_button_qs.exists():
                 sos_count = smart_button_qs.count()
                 sos_count = smart_button_qs.count()
                 for index, smart_button in enumerate(smart_button_qs):
                 for index, smart_button in enumerate(smart_button_qs):
                     msg = {
                     msg = {
                         'sos_count': sos_count,  # 该网关下的智能按钮数量
                         'sos_count': sos_count,  # 该网关下的智能按钮数量
                         'sos_num': index + 1,  # 第几个按钮
                         'sos_num': index + 1,  # 第几个按钮
-                        'sensor_ieee_addr': smart_button['ieee_addr'],
+                        'sensor_src': int(smart_button['src_addr'], 16),
                         'sos_select': smart_button['is_tampered']
                         'sos_select': smart_button['is_tampered']
                     }
                     }
                     success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
                     success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
@@ -986,7 +950,7 @@ class SmartSceneView(View):
 
 
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 #
 #
 #                   ___====-_  _-====___
 #                   ___====-_  _-====___

+ 7 - 7
Controller/SensorGateway/SmartSocketController.py

@@ -502,7 +502,7 @@ class SmartSocketView(View):
                 data['electricityYesterday'] = 0
                 data['electricityYesterday'] = 0
             return response.json(0, data)
             return response.json(0, data)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_socket_schedule(request_dict, response):
     def get_socket_schedule(request_dict, response):
@@ -552,7 +552,7 @@ class SmartSocketView(View):
                 })
                 })
             return response.json(0, schedule_list)
             return response.json(0, schedule_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_log(request_dict, response):
     def get_log(request_dict, response):
@@ -602,7 +602,7 @@ class SmartSocketView(View):
                 log_list.append(data)
                 log_list.append(data)
             return response.json(0, log_list)
             return response.json(0, log_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def splittings_time(cls, startTime, endTime, unit):
     def splittings_time(cls, startTime, endTime, unit):
@@ -770,7 +770,7 @@ class SmartSocketView(View):
             data['week_or_month_or_year'] = new_list
             data['week_or_month_or_year'] = new_list
             return response.json(0, data)
             return response.json(0, data)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def get_subscript(cls, unit, time_stamp):
     def get_subscript(cls, unit, time_stamp):
@@ -825,7 +825,7 @@ class SmartSocketView(View):
                 })
                 })
             return response.json(0, schedule_date_list)
             return response.json(0, schedule_date_list)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def alexa_socket_switch(cls, request_dict, response):
     def alexa_socket_switch(cls, request_dict, response):
@@ -851,7 +851,7 @@ class SmartSocketView(View):
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def get_socket_state(cls, request_dict, response):
     def get_socket_state(cls, request_dict, response):
@@ -877,7 +877,7 @@ class SmartSocketView(View):
             return response.json(173)
             return response.json(173)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def delete_alexa_socket(cls, serial_number):
     def delete_alexa_socket(cls, serial_number):

+ 56 - 0
Controller/SensorGateway/SubDeviceController.py

@@ -655,6 +655,62 @@ class GatewaySubDeviceView(View):
             print(e)
             print(e)
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
+    @staticmethod
+    def get_device_list(request_dict, response):
+        """
+        获取设备信息
+        @param request_dict: 请求参数
+        @request_dict familyId: 家庭id
+        @param response: 响应对象
+        @return: response
+        """
+        family_id = request_dict.get('familyId', None)
+        room_id = request_dict.get('roomId', None)
+        if not family_id:
+            return response.json(444, {'error param': 'familyId'})
+
+        try:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=0,
+                                                                    device__Type=200).values(
+                'device_id', 'device__NickName').order_by('-device__data_joined')
+            if room_id:
+                family_room_device_qs = family_room_device_qs.filter(room_id=room_id)
+            device_list = []
+            for item in family_room_device_qs:
+                device_dict = {
+                    'deviceId': item['device_id'],
+                    'deviceType': 200,
+                    'deviceNickName': item['device__NickName'],
+                }
+                sub_device = []
+                family_room_sub_device_qs = FamilyRoomDevice.objects.filter(Q(family_id=family_id), ~Q(sub_device=0),
+                                                                            Q(device_id=item['device_id'])).values(
+                    'sub_device', 'room_id').order_by('sort')
+                if family_room_sub_device_qs.exists():
+                    for each in family_room_sub_device_qs:
+                        room_qs = FamilyRoom.objects.filter(id=each['room_id']).values('name')
+                        room_name = room_qs[0]['name'] if room_qs.exists() else ''
+                        device_qs = GatewaySubDevice.objects.filter(id=each['sub_device']).values('id', 'nickname',
+                                                                                                  'device_type',
+                                                                                                  'src_addr',
+                                                                                                  'status',
+                                                                                                  'created_time')
+                        if device_qs.exists():
+                            sub_device.append({
+                                'gatewaySubId': device_qs[0]['id'],
+                                'nickName': device_qs[0]['nickname'],
+                                'deviceType': device_qs[0]['device_type'],
+                                'srcAddr': device_qs[0]['src_addr'],
+                                'status': device_qs[0]['status'],
+                                'createdTime': device_qs[0]['created_time'],
+                                'roomName': room_name,
+                                'familyId': family_id
+                            })
+                    device_dict['subDevice'] = sub_device
+                    device_list.append(device_dict)
+            return response.json(0, device_list)
+        except Exception as e:
+            return response.json(500, repr(e))
 #
 #
 #                   ___====-_  _-====___
 #                   ___====-_  _-====___
 #             _--^^^#####//      \\#####^^^--_
 #             _--^^^#####//      \\#####^^^--_

+ 125 - 24
Controller/SerialNumberController.py

@@ -2,6 +2,7 @@ import json
 import logging
 import logging
 import threading
 import threading
 import time
 import time
+from datetime import datetime
 
 
 import requests
 import requests
 from django.db import transaction
 from django.db import transaction
@@ -10,13 +11,15 @@ from django.views import View
 from Ansjer.config import CRCKey, CONFIG_INFO, CONFIG_US, CONFIG_EUR, \
 from Ansjer.config import CRCKey, CONFIG_INFO, CONFIG_US, CONFIG_EUR, \
     CONFIG_CN, USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, SERVER_DOMAIN_US, REGION_ID_LIST, SERVER_DOMAIN_TEST, \
     CONFIG_CN, USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, SERVER_DOMAIN_US, REGION_ID_LIST, SERVER_DOMAIN_TEST, \
     SERVER_DOMAIN_LIST, SERVER_DOMAIN_CN, SERVER_DOMAIN_EUR, RESET_REGION_ID_SERIAL_REDIS_LIST, LOGGER
     SERVER_DOMAIN_LIST, SERVER_DOMAIN_CN, SERVER_DOMAIN_EUR, RESET_REGION_ID_SERIAL_REDIS_LIST, LOGGER
+from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
 from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
     iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
     iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
     Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
     Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
-    AiService, DeviceDomainRegionModel, RegionModel, UidPushModel
+    AiService, DeviceDomainRegionModel, RegionModel, UidPushModel, UnicomDeviceInfo
 from Object.AWS.S3Email import S3Email
 from Object.AWS.S3Email import S3Email
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
+from Object.UnicomObject import UnicomObjeect
 from Object.uidManageResponseObject import uidManageResponseObject
 from Object.uidManageResponseObject import uidManageResponseObject
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -59,12 +62,14 @@ class SerialNumberView(View):
             return self.get_domain(request_dict, response)
             return self.get_domain(request_dict, response)
         elif operation == 'resetRegionId':  # 重置地区id
         elif operation == 'resetRegionId':  # 重置地区id
             return self.reset_region_id(request_dict, response)
             return self.reset_region_id(request_dict, response)
-        elif operation == 'get-status':  # 重置地区id
+        elif operation == 'get-status':  # 获取序列号绑定信息
             return self.check_serial_status(request_dict, response)
             return self.check_serial_status(request_dict, response)
         elif operation == 'getUidRegion':  # 根据序列号获取uid地区
         elif operation == 'getUidRegion':  # 根据序列号获取uid地区
             return self.get_uid_region(request_dict, response)
             return self.get_uid_region(request_dict, response)
         elif operation == 'getGlobalUidRegion':  # 获取序列号在全球服绑定uid的地区
         elif operation == 'getGlobalUidRegion':  # 获取序列号在全球服绑定uid的地区
             return self.get_global_uid_region(request_dict, response)
             return self.get_global_uid_region(request_dict, response)
+        elif operation == 'getIoTCoreBySerialNumber':  # 根据序列号获取iot core
+            return self.get_iot_core_by_serial_number(request_dict, response)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -339,7 +344,7 @@ class SerialNumberView(View):
                 warning_count = 2000
                 warning_count = 2000
                 if unused_uid_count < warning_count:
                 if unused_uid_count < warning_count:
                     # 限制一天提醒一次
                     # 限制一天提醒一次
-                    redis_obj.set_data('uid_count_warning_time_limit', 1, 60*60*24)
+                    redis_obj.set_data('uid_count_warning_time_limit', 1, 60 * 60 * 24)
                     platform = '尚云' if p2p_type == 1 else 'tutk'
                     platform = '尚云' if p2p_type == 1 else 'tutk'
                     email_content = '{}服{}的uid数量少于{}个,请及时处理'.format(CONFIG_INFO, platform, warning_count)
                     email_content = '{}服{}的uid数量少于{}个,请及时处理'.format(CONFIG_INFO, platform, warning_count)
                     S3Email().faEmail(email_content, 'servers@ansjer.com')
                     S3Email().faEmail(email_content, 'servers@ansjer.com')
@@ -349,7 +354,7 @@ class SerialNumberView(View):
     @staticmethod
     @staticmethod
     def log_and_send_email(request, company_serial_id, serial, now_time):
     def log_and_send_email(request, company_serial_id, serial, now_time):
         """
         """
-        记录序列号占用操作日志及发送邮件通知
+        记录序列号占用操作日志及发送邮件通知,(美服、欧服已占用序列号将执行数据同步)
         @param company_serial_id: 企业关联序列号 ID
         @param company_serial_id: 企业关联序列号 ID
         @param request: 请求
         @param request: 请求
         @param serial: 序列号
         @param serial: 序列号
@@ -357,18 +362,20 @@ class SerialNumberView(View):
         """
         """
         send_email = S3Email()
         send_email = S3Email()
         try:
         try:
-            if CONFIG_INFO != 'us':
+            if CONFIG_INFO == 'cn' or CONFIG_INFO == 'test':
                 return {}
                 return {}
             # 判断当前序列号是否绑定UID
             # 判断当前序列号是否绑定UID
             uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id)
             uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id)
             if uid_serial_qs.exists():
             if uid_serial_qs.exists():
                 email_content = '{}序列号已占用当前数据库已绑定UID: {}'.format(CONFIG_INFO, serial)
                 email_content = '{}序列号已占用当前数据库已绑定UID: {}'.format(CONFIG_INFO, serial)
                 send_email.faEmail(email_content, 'servers@ansjer.com')
                 send_email.faEmail(email_content, 'servers@ansjer.com')
-                send_email.faEmail(email_content, 'antony@ansjer.com')
                 return {}
                 return {}
-            # 请求国内服获取UID数据
-            response = requests.post("https://www.zositechc.cn/serialNumber/get-status",
-                                     data={'serial_number': serial}, timeout=3)
+            if CONFIG_INFO == 'eur':  # 查美服
+                response = requests.get("https://www.dvema.com/serialNumber/get-status",
+                                        params={'serial_number': serial}, timeout=3)
+            else:  # 查国服
+                response = requests.get("https://www.zositechc.cn/serialNumber/get-status",
+                                        params={'serial_number': serial}, timeout=3)
             ip = CommonService.get_ip_address(request)
             ip = CommonService.get_ip_address(request)
             operation = '{}序列号占用:{}'.format(CONFIG_INFO, serial)
             operation = '{}序列号占用:{}'.format(CONFIG_INFO, serial)
             log = {
             log = {
@@ -380,48 +387,52 @@ class SerialNumberView(View):
                 'url': 'serialNumber/attachUID',
                 'url': 'serialNumber/attachUID',
             }
             }
             if not response.status_code == 200:
             if not response.status_code == 200:
-                operation += '国内UID数据异常响应状态:{}'.format(response.status_code)
+                operation += '查询其它服UID数据异常响应状态:{}'.format(response.status_code)
                 log['operation'] = operation
                 log['operation'] = operation
                 LogModel.objects.create(**log)
                 LogModel.objects.create(**log)
                 return {}
                 return {}
             results = json.loads(response.text)
             results = json.loads(response.text)
-            if not results:
-                operation += '查询UID数据解析为空'
-                log['operation'] = operation
-                LogModel.objects.create(**log)
-                return {}
             if not results['result_code'] == 0:
             if not results['result_code'] == 0:
-                operation += '国内绑定UID数据result_code: {}'.format(results['result_code'])
+                operation += '其它服绑定UID数据result_code: {}'.format(results['result_code'])
                 log['operation'] = operation
                 log['operation'] = operation
                 LogModel.objects.create(**log)
                 LogModel.objects.create(**log)
                 return {}
                 return {}
-            # 解析从国内获取的UID数据
+            # 解析从其它服获取的UID数据
             uid_info = results['result']['uidInfo']
             uid_info = results['result']['uidInfo']
             if uid_info:
             if uid_info:
                 if uid_info['p2p_type'] == 1:  # 尚云UID不进行同步只进行 邮寄警报
                 if uid_info['p2p_type'] == 1:  # 尚云UID不进行同步只进行 邮寄警报
                     # 邮件通知
                     # 邮件通知
                     email_content = '国内uid同步国外服类型为尚云不操作: {}'.format(serial)
                     email_content = '国内uid同步国外服类型为尚云不操作: {}'.format(serial)
                     send_email.faEmail(email_content, 'servers@ansjer.com')
                     send_email.faEmail(email_content, 'servers@ansjer.com')
-                    send_email.faEmail(email_content, 'antony@ansjer.com')
                 else:
                 else:
                     # 同步UID数据
                     # 同步UID数据
-                    uid_vo = UIDModel.objects.create(**uid_info)
+                    uid_id = ''
+                    uid_qs = UIDModel.objects.filter(uid=uid_info['uid'])
+                    if uid_qs.exists():
+                        if uid_qs.first().status == 2:  # 判断uid是否被使用
+                            email_content = '{}序列号已占用且{}已被使用:{}'.format(CONFIG_INFO, uid_info['uid'], serial)
+                            send_email.faEmail(email_content, 'servers@ansjer.com')
+                            return {}
+                        else:
+                            uid_qs.update(status=2, update_time=now_time)
+                            uid_id = uid_qs.first().id
+                    if not uid_id:
+                        uid_id = UIDModel.objects.create(**uid_info).id
                     # 企业序列号关联 uid
                     # 企业序列号关联 uid
-                    UIDCompanySerialModel.objects.create(uid_id=uid_vo.id, company_serial_id=company_serial_id,
+                    UIDCompanySerialModel.objects.create(uid_id=uid_id, company_serial_id=company_serial_id,
                                                          add_time=now_time, update_time=now_time)
                                                          add_time=now_time, update_time=now_time)
                     # 成功后 修改企业序列号状态为2(已分配)
                     # 成功后 修改企业序列号状态为2(已分配)
                     CompanySerialModel.objects.filter(id=company_serial_id) \
                     CompanySerialModel.objects.filter(id=company_serial_id) \
                         .update(status=2, update_time=now_time)
                         .update(status=2, update_time=now_time)
-                    email_content = '{}序列号已占用已将国内UID数据同步完成: {}'.format(CONFIG_INFO, serial)
+                    SerialNumberView.sync_iot_core_data(serial)
+                    email_content = '{}序列号已占用已将其它服UID数据同步完成: {}'.format(CONFIG_INFO, serial)
                     send_email.faEmail(email_content, 'servers@ansjer.com')
                     send_email.faEmail(email_content, 'servers@ansjer.com')
-                    send_email.faEmail(email_content, 'antony@ansjer.com')
                     operation += '同步成功'
                     operation += '同步成功'
                     log['operation'] = operation
                     log['operation'] = operation
                     LogModel.objects.create(**log)
                     LogModel.objects.create(**log)
                     return 'success'
                     return 'success'
-            email_content = '序列号已占用国内没有绑定UID: {}'.format(serial)
+            email_content = '{}序列号已占用其它服没有绑定UID: {}'.format(CONFIG_INFO, serial)
             send_email.faEmail(email_content, 'servers@ansjer.com')
             send_email.faEmail(email_content, 'servers@ansjer.com')
-            send_email.faEmail(email_content, 'antony@ansjer.com')
             return {}
             return {}
         except Exception as e:
         except Exception as e:
             email_content = '序列号占用同步数据异常: {},errLine:{}, errMsg:{}' \
             email_content = '序列号占用同步数据异常: {},errLine:{}, errMsg:{}' \
@@ -596,6 +607,7 @@ class SerialNumberView(View):
 
 
         try:
         try:
             if company_serial.status == 0 or company_serial.status == 1:  # 未使用
             if company_serial.status == 0 or company_serial.status == 1:  # 未使用
+                self.is_4g_device(serial_number, request_dict, request)
                 return response.json(173)
                 return response.json(173)
             elif company_serial.status == 2:  # 返回uid
             elif company_serial.status == 2:  # 返回uid
                 res = self.get_uid_info_by_serial(company_serial.id)
                 res = self.get_uid_info_by_serial(company_serial.id)
@@ -827,3 +839,92 @@ class SerialNumberView(View):
             return response.json(0, uid_list)
             return response.json(0, uid_list)
         except Exception as e:
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @classmethod
+    def get_iot_core_by_serial_number(cls, request_dict, response):
+        """
+        根据序列号查询iot core
+        """
+        try:
+            serial_number = request_dict.get('serialNumber', None)
+            if not serial_number:
+                return response.json(444)
+            serial = serial_number[0:6]
+            LOGGER.info('根据序列号查询IoTC:{}'.format(serial_number))
+            device_iot_qs = iotdeviceInfoModel.objects.filter(serial_number=serial)
+            if not device_iot_qs.exists():
+                return response.json(173)
+            iot_vo = device_iot_qs.first()
+            iot_dto = {
+                'serial_number': iot_vo.serial_number,
+                'uid': iot_vo.uid,
+                'certificate_id': iot_vo.certificate_id,
+                'certificate_pem': iot_vo.certificate_pem,
+                'public_key': iot_vo.public_key,
+                'private_key': iot_vo.private_key,
+                'thing_name': iot_vo.thing_name,
+                'thing_groups': iot_vo.thing_groups,
+                'endpoint': iot_vo.endpoint,
+                'token_iot_number': iot_vo.token_iot_number,
+                'add_time': iot_vo.add_time.strftime("%Y-%m-%d %H:%M:%S"),
+                'update_time': iot_vo.update_time.strftime("%Y-%m-%d %H:%M:%S")
+            }
+            return response.json(0, {'iotInfo': iot_dto})
+        except Exception as e:
+            LOGGER.info('查询序列号异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(176, str(e))
+
+    @staticmethod
+    def sync_iot_core_data(serial_number):
+        """
+        同步iot core 数据,目前只同步美服到欧服
+        @param serial_number: 序列号
+        """
+        try:
+            if not CONFIG_INFO == 'eur':
+                return False
+            response = requests.get("https://www.dvema.com/serialNumber/getIoTCoreBySerialNumber",
+                                    params={'serialNumber': serial_number}, timeout=3)
+            if response.status_code != 200:
+                return False
+            results = json.loads(response.text)
+            if results['result_code'] != 0:
+                return False
+            iot_vo = results['result']['iotInfo']
+            iot_vo['add_time'] = datetime.strptime(iot_vo['add_time'], "%Y-%m-%d %H:%M:%S")
+            iot_vo['update_time'] = datetime.strptime(iot_vo['update_time'], "%Y-%m-%d %H:%M:%S")
+            iotdeviceInfoModel.objects.create(**iot_vo)
+            return True
+        except Exception as e:
+            LOGGER.info('{}同步iot异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
+            return False
+
+    @staticmethod
+    def is_4g_device(serial_number, request_dict, request):
+        """
+        判断是否4G设备
+        """
+        try:
+            serial_no = serial_number[0:9]
+            key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_no}'
+            redis = RedisObject()
+            if redis.get_data(key):
+                return True
+            # 根据序列号查询联通iccid
+            unicom_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no, status=1, card_type=0) \
+                .values('iccid', 'status')
+            if not unicom_qs.exists():
+                return False
+            unicom_qs = unicom_qs.first()
+            unicom_api = UnicomObjeect()
+            unicom_api.change_device_to_activate(unicom_qs['iccid'])
+            redis.CONN.setnx(key, str(unicom_qs['iccid']))
+            redis.CONN.expire(key, 7200)  # 已调用过激活两个小时内不可调用
+            ip = CommonService.get_ip_address(request)
+            describe = '{}获取uid请求激活4G卡,{}'.format(serial_no, unicom_qs['iccid'])
+            UnicomComboView().create_operation_log('serialNumber/get-uid', ip, request_dict, describe)
+            return True
+        except Exception as e:
+            LOGGER.info('{}判断是否4G设备异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
+            return False
+

+ 15 - 14
Controller/ShadowController.py

@@ -1,9 +1,9 @@
-import logging
+import json
 import time
 import time
 
 
 from django.http import JsonResponse
 from django.http import JsonResponse
 
 
-from Ansjer.config import SERVER_TYPE
+from Ansjer.config import SERVER_TYPE, LOGGER
 from Model.models import Device_Info, UidSetModel, UID_Preview, VoicePromptModel, UID_Bucket, UidChannelSetModel, \
 from Model.models import Device_Info, UidSetModel, UID_Preview, VoicePromptModel, UID_Bucket, UidChannelSetModel, \
     AiService, CountryModel
     AiService, CountryModel
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
@@ -19,16 +19,16 @@ def update_device_shadow(request):
         request_dict = request.GET
         request_dict = request.GET
     else:
     else:
         return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
         return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
-
-    logger = logging.getLogger('info')
-    logger.info('---更新设备影子---, 使用配置:{}, 参数:{}'.format(SERVER_TYPE, request_dict.dict()))
+    LOGGER.info('---更新设备影子---,使用配置:{}, 参数:{}'.format(SERVER_TYPE,
+                                                     json.dumps(request_dict.dict())))
 
 
     try:
     try:
         etk = request_dict.get('etk', None)
         etk = request_dict.get('etk', None)
         eto = ETkObject(etk)
         eto = ETkObject(etk)
         uid = eto.uid
         uid = eto.uid
         if not uid:
         if not uid:
-            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+            return JsonResponse(status=200, data={'code': 400001, 'msg': 'The UID length or format is incorrect.',
+                                                  'data': {}})
 
 
         nowTime = int(time.time())
         nowTime = int(time.time())
 
 
@@ -36,7 +36,7 @@ def update_device_shadow(request):
         is_reset = request_dict.get('is_reset', None)
         is_reset = request_dict.get('is_reset', None)
         # 传1则重置设备信息
         # 传1则重置设备信息
         if is_reset == '1':
         if is_reset == '1':
-            logger.info('设备重置: {}'.format(uid))
+            LOGGER.info('设备重置: {}'.format(uid))
 
 
             # 重置语音提示
             # 重置语音提示
             uid_channel_qs = UidChannelSetModel.objects.filter(uid__uid=uid)
             uid_channel_qs = UidChannelSetModel.objects.filter(uid__uid=uid)
@@ -50,7 +50,7 @@ def update_device_shadow(request):
             uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=nowTime).values('id', 'has_unused').order_by(
             uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=nowTime).values('id', 'has_unused').order_by(
                 'addTime')
                 'addTime')
             if not uid_bucket.exists():
             if not uid_bucket.exists():
-                Device_Info.objects.filter(UID=uid).update(isExist=2)
+                Device_Info.objects.filter(UID=uid).update(isExist=2, vodPrimaryUserID='', vodPrimaryMaster='')
             # 删除预览图
             # 删除预览图
             uid_pre_qs = UID_Preview.objects.filter(uid=uid)
             uid_pre_qs = UID_Preview.objects.filter(uid=uid)
             if uid_pre_qs.exists():
             if uid_pre_qs.exists():
@@ -61,12 +61,13 @@ def update_device_shadow(request):
             if voice_qs.exists():
             if voice_qs.exists():
                 voice_qs.delete()
                 voice_qs.delete()
 
 
-            # 关闭移动侦测的消息提醒
+            # 关闭移动侦测推送
+            UidSetModel.objects.filter(uid=uid).update(detect_status=0)
             Device_Info.objects.filter(UID=uid).update(NotificationMode=0)
             Device_Info.objects.filter(UID=uid).update(NotificationMode=0)
 
 
             # 关闭AI
             # 关闭AI
             AiService.objects.filter(uid=uid, use_status=1).update(detect_status=0, detect_group='')
             AiService.objects.filter(uid=uid, use_status=1).update(detect_status=0, detect_group='')
-            logger.info('{}重置成功'.format(uid))
+            LOGGER.info('{}重置成功'.format(uid))
 
 
         ucode = request_dict.get('ucode', None)
         ucode = request_dict.get('ucode', None)
         version = request_dict.get('version', None)
         version = request_dict.get('version', None)
@@ -133,7 +134,7 @@ def update_device_shadow(request):
         if country_qs.exists():
         if country_qs.exists():
             country = country_qs[0]['id']
             country = country_qs[0]['id']
             qs_dict['tb_country'] = country
             qs_dict['tb_country'] = country
-        logger.info('{} qs_dict: {}'.format(uid, qs_dict))
+        LOGGER.info('{} qs_dict: {}'.format(uid, qs_dict))
 
 
         us_qs = UidSetModel.objects.filter(uid=uid)
         us_qs = UidSetModel.objects.filter(uid=uid)
         if us_qs.exists():
         if us_qs.exists():
@@ -147,8 +148,8 @@ def update_device_shadow(request):
             qs_dict['uid'] = uid
             qs_dict['uid'] = uid
             qs_dict['addTime'] = nowTime
             qs_dict['addTime'] = nowTime
             UidSetModel.objects.create(**qs_dict)
             UidSetModel.objects.create(**qs_dict)
-        logger.info('***设备影子保存成功{}'.format(uid))
+        LOGGER.info('***设备影子保存成功{}'.format(uid))
         return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
         return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
     except Exception as e:
     except Exception as e:
-        logger.info('更新设备影子异常: {}'.format(repr(e)))
-        return JsonResponse(status=200, data={'code': 0, 'update_shadow_error': repr(e)})
+        LOGGER.info('更新设备影子异常: {}'.format(repr(e)))
+        return JsonResponse(status=200, data={'code': 1000001, 'update_shadow_error': repr(e)})

+ 3 - 11
Controller/SysMsg.py

@@ -12,7 +12,6 @@
 @Contact: chanjunkai@163.com
 @Contact: chanjunkai@163.com
 """
 """
 import time
 import time
-import re
 
 
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
@@ -134,7 +133,7 @@ class SysMsgView(View):
                         SysMsgModel.objects.create(**create_data)
                         SysMsgModel.objects.create(**create_data)
                         fb_qs.update(status=1)
                         fb_qs.update(status=1)
                     except Exception as e:
                     except Exception as e:
-                        return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+                        return response.json(500, repr(e))
                     else:
                     else:
                         return response.json(0, {'status': 1, 'updTime': nowTime})
                         return response.json(0, {'status': 1, 'updTime': nowTime})
                 else:
                 else:
@@ -155,8 +154,7 @@ class SysMsgView(View):
         try:
         try:
             # 如果没有系统消息,周视ios用户暂时生成消息并返回
             # 如果没有系统消息,周视ios用户暂时生成消息并返回
             if not sm_qs.exists():
             if not sm_qs.exists():
-                user_ex_qs = UserExModel.objects.filter(userID_id=userID, appBundleId='com.ansjer.zccloud').values(
-                    'region')
+                user_ex_qs = UserExModel.objects.filter(userID_id=userID, appBundleId='com.ansjer.zccloud').values('region')
                 if not user_ex_qs.exists():
                 if not user_ex_qs.exists():
                     return response.json(0, [])
                     return response.json(0, [])
                 now_time = int(time.time())
                 now_time = int(time.time())
@@ -192,12 +190,6 @@ class SysMsgView(View):
                 sm_q['jumpLink'] = ''
                 sm_q['jumpLink'] = ''
                 if sm_q['eventType'] > 0:
                 if sm_q['eventType'] > 0:
                     uid_list.append(sm_q['uid'])
                     uid_list.append(sm_q['uid'])
-                if sm_q['eventType'] == 2:
-                    msg = sm_q['msg']
-                    number_list = re.findall('\d+', msg)
-                    for number in number_list:
-                        if len(number) == 6:
-                            sm_q['code'] = number
                 data_res.append(sm_q)
                 data_res.append(sm_q)
             if uid_list:
             if uid_list:
                 uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'nickname')
                 uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'nickname')
@@ -209,7 +201,7 @@ class SysMsgView(View):
                     data_res.append(sm_q)
                     data_res.append(sm_q)
             return response.json(0, {'data': data_res, 'count': count})
             return response.json(0, {'data': data_res, 'count': count})
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     def do_query_by_admin(self, userID, request_dict, response):
     def do_query_by_admin(self, userID, request_dict, response):
         own_perm = ModelService.check_perm(userID, 30)
         own_perm = ModelService.check_perm(userID, 30)

+ 83 - 119
Controller/TestApi.py

@@ -1,47 +1,67 @@
-import json
-import logging
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: Ansjer
+@software: PyCharm
+@DATE: 2018/5/22 13:58
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: Test.py
+@Contact: chanjunkai@163.com
+"""
 import os
 import os
-import time
 import traceback
 import traceback
-import urllib
 
 
-import boto3
 import botocore
 import botocore
 import cv2
 import cv2
-import oss2
-import paypalrestsdk
+from botocore import client
+from django.db import transaction
+
+from Ansjer.cn_config.config_formal import CONFIG_INFO
+from Ansjer.config import CONFIG_INFO
+from Controller.DeviceConfirmRegion import Device_Region
+from Object.AWS.AmazonS3Util import AmazonS3Util
+from Object.RedisObject import RedisObject
+from Service.VodHlsService import SplitVodHlsObject
+
+'''
+http://192.168.136.40:8077/Test
+'''
+import json
+import time
+import urllib
 import requests
 import requests
+from Object.AliPayObject import AliPayObject
+import boto3
 from boto3.session import Session
 from boto3.session import Session
-from botocore import client
-from django.contrib.auth.hashers import make_password  # 对密码加密模块
-from django.db import transaction, connection
+import oss2
+import paypalrestsdk
+import logging
 from django.http import JsonResponse, HttpResponse
 from django.http import JsonResponse, HttpResponse
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
-
-from Ansjer.config import CONFIG_INFO
+from django.contrib.auth.hashers import make_password  # 对密码加密模块
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, \
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, \
     AWS_SECRET_ACCESS_KEY, SERVER_TYPE, AWS_SES_ACCESS_REGION
     AWS_SECRET_ACCESS_KEY, SERVER_TYPE, AWS_SES_ACCESS_REGION
-from Ansjer.config import SERVER_DOMAIN_SSL
-from Controller.DeviceConfirmRegion import Device_Region
-from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel
 from Model.models import Order_Model, Store_Meal, DeviceLogModel, VodBucketModel, \
 from Model.models import Order_Model, Store_Meal, DeviceLogModel, VodBucketModel, \
-    TestSerialRepetition, TestDeviceFindSerial, UIDCompanySerialModel, CompanySerialModel, LogModel, Device_User
-from Object.AWS.AmazonS3Util import AmazonS3Util
-from Object.AliPayObject import AliPayObject
-from Object.RedisObject import RedisObject
+    TestSerialRepetition, UIDCompanySerialModel, CompanySerialModel, LogModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
-from Object.m3u8generate import PlaylistGenerator
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
-from Service.VodHlsService import SplitVodHlsObject
+from Object.m3u8generate import PlaylistGenerator
+from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel
+from Ansjer.config import SERVER_DOMAIN_SSL
 
 
+SERVER_DOMAIN = 'http://test.dvema.com/'
 ACCESS_KEY = "AKIA2E67UIMD3CYTIWPA"
 ACCESS_KEY = "AKIA2E67UIMD3CYTIWPA"
 SECRET_KEY = "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"
 SECRET_KEY = "mHl79oiKxEf+89friTtwIcF8FUFIdVksUwySixwQ"
 LOGGER = logging.getLogger('info')
 LOGGER = logging.getLogger('info')
 
 
 
 
+# 测试接口sdk
 class testView(View):
 class testView(View):
     @method_decorator(csrf_exempt)
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
     def dispatch(self, *args, **kwargs):
@@ -65,6 +85,7 @@ class testView(View):
 
 
     def validation(self, request_dict, request, operation):
     def validation(self, request_dict, request, operation):
         response = ResponseObject()
         response = ResponseObject()
+        # operation => cloudVod/path
         if operation is None:
         if operation is None:
             return response.json(444, 'error path')
             return response.json(444, 'error path')
         elif operation == 'tests':
         elif operation == 'tests':
@@ -72,25 +93,40 @@ class testView(View):
             logger.info('测试打印')
             logger.info('测试打印')
             res = make_password(123456)
             res = make_password(123456)
             return JsonResponse(status=200, data=res, safe=False)
             return JsonResponse(status=200, data=res, safe=False)
+        elif operation == 'testMiddleWare':
+            a = int('a')
+            return JsonResponse(status=200, safe=False)
+        elif operation == 'testMiddleWare2':
+            try:
+                a = int('a')
+                return JsonResponse(status=200, safe=False)
+            except Exception as e:
+                return response.json(500, repr(e))
         elif operation == 'cbu':
         elif operation == 'cbu':
             return self.createBucket()
             return self.createBucket()
         elif operation == 'vodList':
         elif operation == 'vodList':
             ip = CommonService.get_ip_address(request)
             ip = CommonService.get_ip_address(request)
-            return self.do_test_query_vod_list(ip, request_dict, response)
+            userID = '158943594633713800138000'
+            return self.do_test_query_vod_list(userID, ip, request_dict, response)
         elif operation == 'signplaym3u8':
         elif operation == 'signplaym3u8':
             return self.do_sign_play_m3u8(request_dict, response)
             return self.do_sign_play_m3u8(request_dict, response)
         elif operation == 'get_sign_sts':
         elif operation == 'get_sign_sts':
             ip = CommonService.get_ip_address(request)
             ip = CommonService.get_ip_address(request)
             return self.do_test_get_sign_sts(request_dict, ip, response)
             return self.do_test_get_sign_sts(request_dict, ip, response)
         elif operation == 'eqi_query':
         elif operation == 'eqi_query':
-            return self.queryInterface(request_dict, response)
+            userID = '158943594633713800138000'
+            return self.queryInterface(request_dict, userID, response)
+        elif operation == 'getAlexa':
+            userID = '158943594633713800138000'
+            return self.queryInterface(request_dict, userID, response)
         elif operation == 'generateToken':
         elif operation == 'generateToken':
-            return self.generate_token(request_dict)
-        elif operation == 'analysisToken':
-            return self.analysis_token(request_dict, response)
+            userID = '158943604783713800138000'
+            return self.generate_token(request_dict, userID)
         elif operation == 'test_upload_s3':
         elif operation == 'test_upload_s3':
+            userID = '158943604783713800138000'
             return self.test_upload_s3(request_dict, response)
             return self.test_upload_s3(request_dict, response)
         elif operation == 'rekognition':
         elif operation == 'rekognition':
+            userID = '158943604783713800138000'
             return self.testRekognition(request, request_dict)
             return self.testRekognition(request, request_dict)
         elif operation == 'ip':
         elif operation == 'ip':
             return self.ip(response)
             return self.ip(response)
@@ -104,8 +140,6 @@ class testView(View):
             return self.do_comb(request_dict, response)
             return self.do_comb(request_dict, response)
         elif operation == 'count_ts':
         elif operation == 'count_ts':
             return self.count_ts(request_dict, response)
             return self.count_ts(request_dict, response)
-        elif operation == 'tsCount':
-            return self.ts_count(request_dict, response)
         elif operation == 'upload-s3':
         elif operation == 'upload-s3':
             return self.file_upload_s3(request, request_dict, response)
             return self.file_upload_s3(request, request_dict, response)
         elif operation == 'v2/upload-s3':
         elif operation == 'v2/upload-s3':
@@ -136,8 +170,6 @@ class testView(View):
             return self.getSerialNumberInfo(request_dict, response)
             return self.getSerialNumberInfo(request_dict, response)
         elif operation == 'get-serial-details':  # 序列号信息查询
         elif operation == 'get-serial-details':  # 序列号信息查询
             return self.get_serial_details(request_dict, response, request)
             return self.get_serial_details(request_dict, response, request)
-        elif operation == 'find_device_serial':  # 查找设备序列号接口:306低功耗无Wi-Fi产品
-            return self.find_device_serial(request_dict, response)
         else:
         else:
             return 123
             return 123
 
 
@@ -407,7 +439,7 @@ class testView(View):
             f.write(resp['Body'].read())
             f.write(resp['Body'].read())
 
 
     # 新查询设备字段
     # 新查询设备字段
-    def queryInterface(self, request_dict, response):
+    def queryInterface(self, request_dict, userID, response):
         page = request_dict.get('page', None)
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         line = request_dict.get('line', None)
         NickName = request_dict.get('NickName', None)
         NickName = request_dict.get('NickName', None)
@@ -415,7 +447,7 @@ class testView(View):
         page = int(page)
         page = int(page)
         line = int(line)
         line = int(line)
         response.lang = 'cn'
         response.lang = 'cn'
-        userID = ''
+        userID = userID
         dvqs = Device_Info.objects.filter(userID_id=userID)
         dvqs = Device_Info.objects.filter(userID_id=userID)
         # # 已重置的设备
         # # 已重置的设备
         # dvqs = dvqs.filter(~Q(isExist=2))
         # dvqs = dvqs.filter(~Q(isExist=2))
@@ -479,7 +511,7 @@ class testView(View):
         return response.json(0, data)
         return response.json(0, data)
 
 
     # 获取播放列表
     # 获取播放列表
-    def do_test_query_vod_list(self, ip, request_dict, response):
+    def do_test_query_vod_list(self, userID, ip, request_dict, response):
         uid = 'GZL2PEFJPLY7W6BG111A'
         uid = 'GZL2PEFJPLY7W6BG111A'
         channel = 2
         channel = 2
         userID = '158943594633713800138000'
         userID = '158943594633713800138000'
@@ -677,21 +709,21 @@ class testView(View):
                 {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
                 {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
         return response.json(0, vod_play_list)
         return response.json(0, vod_play_list)
 
 
-    @staticmethod
-    def generate_token(request_dict):
+    def generate_token(self, request_dict, userID):
+        # UserIdToken
         tko = TokenObject()
         tko = TokenObject()
         userID = request_dict.get('userID', None)
         userID = request_dict.get('userID', None)
         username = request_dict.get('username', None)
         username = request_dict.get('username', None)
-        res = tko.generate(data={'userID': userID, 'lang': 'cn', 'user': username, 'm_code': username})
-        return JsonResponse(status=200, data=res, safe=False)
+        res = tko.generate(
+            data={'userID': userID, 'lang': 'cn', 'user': username, 'm_code': username})
+        # uidToken
+        # utko = UidTokenObject()
+        # res = utko.generate(data={'uid': '4UZSEDP93MJ3X7YB111A','channel': 1})
 
 
-    @staticmethod
-    def analysis_token(request_dict, response):
-        token = request_dict.get('token', None)
-        token = TokenObject(token)
-        user_id = token.userID
-        username = Device_User.objects.get(userID=user_id).username
-        return response.json(0, username)
+        # from Object.ETkObject import ETkObject
+        # etkObj = ETkObject(etk='')
+        # res = etkObj.encrypt("4UZSEDP93MJ3X7YB111A")
+        return JsonResponse(status=200, data=res, safe=False)
 
 
     def test_upload_s3(self, request_dict, response):
     def test_upload_s3(self, request_dict, response):
         aws_s3_guonei = boto3.client(
         aws_s3_guonei = boto3.client(
@@ -785,35 +817,11 @@ class testView(View):
                 sumSec += (fg >> shift) & 0xf
                 sumSec += (fg >> shift) & 0xf
         size = 0
         size = 0
         return HttpResponse(
         return HttpResponse(
-            "{year}年{month}月 </br>上传的TS总数:{sumTs} </br> 总秒数:{sumSec} </br> 总大小:{size}GB (1秒约等150KB计算)".format(
-                year=year,
-                month=month,
-                sumTs=sumTs,
-                sumSec=sumSec,
-                size=size))
-
-    @staticmethod
-    def ts_count(request_dict, response):
-        uid = request_dict.get('uid', None)
-        start_time = request_dict.get('start_time', None)
-        end_time = request_dict.get('end_time', None)
-
-        cursor = connection.cursor()
-        sql = 'SELECT fg FROM `vod_hls_mon` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800 UNION ALL SELECT fg FROM `vod_hls_tues` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800 UNION ALL SELECT fg FROM `vod_hls_wed` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800 UNION ALL SELECT fg FROM `vod_hls_thur` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800 UNION ALL SELECT fg FROM `vod_hls_fri` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800 UNION ALL SELECT fg FROM `vod_hls_sat` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800 UNION ALL SELECT fg FROM `vod_hls_sun` WHERE uid=%s AND start_time BETWEEN 1685289600 AND 1685548800'
-        print(sql)
-        try:
-            cursor.execute(sql, ['7TR9XE46NHXL5921111A', '7TR9XE46NHXL5921111A', '7TR9XE46NHXL5921111A',
-                                 '7TR9XE46NHXL5921111A', '7TR9XE46NHXL5921111A', '7TR9XE46NHXL5921111A',
-                                 '7TR9XE46NHXL5921111A'])
-            result = cursor.fetchall()
-            cursor.close()
-            ts_count = 0
-            for fg in result:
-                ts_count += int(fg[0]) & 0xf
-            return response.json(0, ts_count)
-        except Exception as e:
-            print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            "{year}年{month}月 </br>上传的TS总数:{sumTs} </br> 总秒数:{sumSec} </br> 总大小:{size}GB (1秒约等150KB计算)".format(year=year,
+                                                                                                              month=month,
+                                                                                                              sumTs=sumTs,
+                                                                                                              sumSec=sumSec,
+                                                                                                              size=size))
 
 
     @staticmethod
     @staticmethod
     def write_redis_list(response):
     def write_redis_list(response):
@@ -886,7 +894,7 @@ class testView(View):
             return response
             return response
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def getSerialNumberInfo(cls, request_dict, response):
     def getSerialNumberInfo(cls, request_dict, response):
@@ -976,7 +984,7 @@ class testView(View):
             if not serial_number:
             if not serial_number:
                 return response.json(0)
                 return response.json(0)
             results_data = []
             results_data = []
-            if CONFIG_INFO != 'cn':
+            if not CONFIG_INFO == 'cn':
                 return response.json(0, results_data)
                 return response.json(0, results_data)
             local_response = cls.getSerialNumberInfo(request_dict, response)
             local_response = cls.getSerialNumberInfo(request_dict, response)
             res = json.loads(local_response.content)
             res = json.loads(local_response.content)
@@ -1026,47 +1034,3 @@ class testView(View):
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'
                         .format(e.__traceback__.tb_lineno, repr(e)))
                         .format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500)
             return response.json(500)
-
-    @classmethod
-    def find_device_serial(cls, request_dict, response):
-        try:
-            firmware_time_code_no = request_dict.get('firmwareTimeCode', None)
-            function_type_str = request_dict.get('functionType', None)
-            serial_no = request_dict.get('serialNo', None)
-            time_stamp = request_dict.get('timeStamp', None)
-            sign = request_dict.get('sign', None)
-            if not CommonService.check_time_stamp_token(sign, time_stamp):
-                return response.json(13)
-            if not function_type_str:
-                return response.json(444)
-            with transaction.atomic():
-                first_firmwares_qs = TestDeviceFindSerial.objects.filter(firmware_time_code=firmware_time_code_no)
-                if function_type_str == 'device_save_serial':  # 设备上报序列号绑定固件码  get_device_serial
-                    if not all([firmware_time_code_no, serial_no]):
-                        return response.json(444)
-                    if first_firmwares_qs.exists():
-                        return response.json(174)
-                    nowtime = int(time.time())
-                    params = {'firmware_time_code': firmware_time_code_no,
-                              'serial_number': serial_no,
-                              'created_time': nowtime}
-                    TestDeviceFindSerial.objects.create(**params)
-                    return response.json(0)
-                elif function_type_str == 'get_device-serial':  # 根据固件码获取序列号
-                    if not firmware_time_code_no:
-                        return response.json(444)
-                    if first_firmwares_qs.exists():
-                        result = {'Id': first_firmwares_qs.first().id,
-                                  'firmwareTimeCode': firmware_time_code_no,
-                                  'serialNumber': first_firmwares_qs.first().serial_number,
-                                  'createdTime': first_firmwares_qs.first().created_time}
-                        print('返回结果 : %s', result)
-                        return response.json(0, result)
-                    else:
-                        return response.json(173)
-                else:
-                    return response.json(444)
-
-        except Exception as e:
-            LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(178, e)

+ 41 - 21
Controller/UnicomCombo/UnicomComboController.py

@@ -21,6 +21,7 @@ from django.views.generic.base import View
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, Order_Model, Store_Meal, AiStoreMeal, \
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, Order_Model, Store_Meal, AiStoreMeal, \
     UnicomComboOrderInfo, UnicomComboExperienceHistory, UnicomDeviceStatusChangePush, SysMsgModel, UnicomFlowPush, \
     UnicomComboOrderInfo, UnicomComboExperienceHistory, UnicomDeviceStatusChangePush, SysMsgModel, UnicomFlowPush, \
     LogModel
     LogModel
+from Object.EIoTClubObject import EIoTClubObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
@@ -384,13 +385,6 @@ class UnicomComboView(View):
                 # 待完善代码 根据uid与用户id验证系统设备mdcmd
                 # 待完善代码 根据uid与用户id验证系统设备mdcmd
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(iccid=iccid)
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(iccid=iccid)
                 if unicom_device_qs.exists():
                 if unicom_device_qs.exists():
-                    # if unicom_device_qs.first().status == 1:
-                    #     key = 'ASJ:UNICOM:RESET:{}'.format(serial_no)
-                    #     reset_cache = redis.get_data(key)
-                    #     if reset_cache:
-                    #         logger.info('--->三十分后再次访问接口生效赠送流量套餐')
-                    #         return response.json(0, 'Thirty minutes later to visit again take effect')
-                    #     cls.user_activate_flow(iccid)
                     if unicom_device_qs.first().serial_no != serial_no:
                     if unicom_device_qs.first().serial_no != serial_no:
                         unicom_device_qs.update(main_card=sim, updated_time=n_time, serial_no=serial_no)
                         unicom_device_qs.update(main_card=sim, updated_time=n_time, serial_no=serial_no)
                         cls.create_operation_log('unicom/api/device-bind',
                         cls.create_operation_log('unicom/api/device-bind',
@@ -400,25 +394,22 @@ class UnicomComboView(View):
                     return response.json(0)
                     return response.json(0)
                 if sim == 0:
                 if sim == 0:
                     return response.json(0, '外置卡不保存相关信息{}'.format(serial_no))
                     return response.json(0, '外置卡不保存相关信息{}'.format(serial_no))
-                unicom_obj = UnicomObjeect()
                 params = {'iccid': iccid, 'serial_no': serial_no, 'updated_time': n_time,
                 params = {'iccid': iccid, 'serial_no': serial_no, 'updated_time': n_time,
                           'created_time': n_time, 'main_card': sim}
                           'created_time': n_time, 'main_card': sim}
-                if cls.check_iccid(iccid):
-                    params['card_type'] = 1
+                if cls.is_unicom_sim(iccid):  # 联通卡
+                    UnicomDeviceInfo.objects.create(**params)
+                    cls.create_operation_log('unicom/api/device-bind',
+                                             ip, request_dict, '4G序列号{}绑定{}'.format(serial_no, iccid))
+                    return response.json(0)
+                elif cls.is_dingxin_iot(iccid):  # 鼎芯物联卡
+                    params['card_type'] = 5  # 国际
                     params['status'] = 2
                     params['status'] = 2
                     UnicomDeviceInfo.objects.create(**params)
                     UnicomDeviceInfo.objects.create(**params)
                     return response.json(0)
                     return response.json(0)
-                result = unicom_obj.verify_device(iccid=iccid)
-                if result.status_code == 200 and result.text:
-                    res_dict = json.loads(result.text)
-                    if res_dict['success']:
-                        if res_dict['data']['status'] == 0:
-                            logger.info('--->设备请求绑定{}验证不存在{}'.format(iccid, res_dict))
-                            return response.json(173)
-                        # unicom_obj.change_device_to_activate(iccid)
-                        UnicomDeviceInfo.objects.create(**params)
-                        cls.create_operation_log('unicom/api/device-bind',
-                                                 ip, request_dict, '4G序列号{}绑定{}'.format(serial_no, iccid))
+                elif cls.check_iccid(iccid):  # 五兴物联卡
+                    params['card_type'] = 1
+                    params['status'] = 2
+                    UnicomDeviceInfo.objects.create(**params)
                     return response.json(0)
                     return response.json(0)
                 else:
                 else:
                     logger.info('--->设备请求绑定{}验证失败'.format(iccid))
                     logger.info('--->设备请求绑定{}验证失败'.format(iccid))
@@ -429,6 +420,35 @@ class UnicomComboView(View):
             logger.info('--->设备调用4G注册接口异常:{}'.format(ex))
             logger.info('--->设备调用4G注册接口异常:{}'.format(ex))
             return response.json(177, repr(e))
             return response.json(177, repr(e))
 
 
+    @classmethod
+    def is_unicom_sim(cls, iccid):
+        """
+        判断是否联通SIM卡
+        @param iccid: iccid
+        @return: 是否联通卡结果
+        """
+        result = UnicomObjeect().verify_device(iccid=iccid)
+        if result.status_code == 200 and result.text:
+            res_dict = json.loads(result.text)
+            if res_dict['success'] and res_dict['data']['status'] != 0:
+                return True
+        return False
+
+    @classmethod
+    def is_dingxin_iot(cls, iccid):
+        """
+        根据iccid判断是否鼎芯国际卡
+        """
+        try:
+            dx_iot = EIoTClubObject()
+            params = {'iccid': iccid}
+            result = dx_iot.get_cards_info('v3', **params)
+            assert result['code'] == '200'
+            return True
+        except Exception as e:
+            print(repr(e))
+            return False
+
     @classmethod
     @classmethod
     def check_iccid(cls, iccid):
     def check_iccid(cls, iccid):
         """
         """

+ 47 - 22
Controller/UnicomCombo/WXTechController.py

@@ -65,7 +65,7 @@ class WXTechController(View):
             elif operation == 'getExperiencePackage':
             elif operation == 'getExperiencePackage':
                 return self.get_experience_package(request_dict, response)
                 return self.get_experience_package(request_dict, response)
             elif operation == 'createOrder':
             elif operation == 'createOrder':
-                return self.create_order_package(request_dict, response)
+                return self.create_order_package(user_id, request_dict, response)
             elif operation == 'exchangePackage':
             elif operation == 'exchangePackage':
                 return self.wx_exchange_package(request_dict, response, request, user_id)
                 return self.wx_exchange_package(request_dict, response, request, user_id)
 
 
@@ -128,6 +128,7 @@ class WXTechController(View):
                 serial_no = request_dict.get('serialNo', None)
                 serial_no = request_dict.get('serialNo', None)
                 if not serial_no:
                 if not serial_no:
                     return response.json(444)
                     return response.json(444)
+                serial_no = serial_no[0:9]
                 # 查询是否注册iccid
                 # 查询是否注册iccid
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
                     .values('serial_no', 'user_id', 'iccid')
                     .values('serial_no', 'user_id', 'iccid')
@@ -151,7 +152,7 @@ class WXTechController(View):
                 return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
                 return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
         @classmethod
         @classmethod
-        def create_order_package(cls, request_dict, response):
+        def create_order_package(cls, user_id, request_dict, response):
             """
             """
             五兴电信领取1G15天流量体验包
             五兴电信领取1G15天流量体验包
             """
             """
@@ -161,12 +162,12 @@ class WXTechController(View):
                 operator = request_dict.get('operator', None)
                 operator = request_dict.get('operator', None)
                 if not all([operator, serial_no]):
                 if not all([operator, serial_no]):
                     return response.json(444)
                     return response.json(444)
+                serial_no = serial_no[0:9]
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
                     .values('serial_no', 'user_id', 'iccid')
                     .values('serial_no', 'user_id', 'iccid')
                 if not unicom_device_qs.exists():
                 if not unicom_device_qs.exists():
                     return response.json(173)
                     return response.json(173)
                 unicom_device_qs = unicom_device_qs.first()
                 unicom_device_qs = unicom_device_qs.first()
-                user_id = unicom_device_qs['user_id']
                 iccid = unicom_device_qs['iccid']
                 iccid = unicom_device_qs['iccid']
                 # 查看是否体验过免费套餐
                 # 查看是否体验过免费套餐
                 experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
@@ -183,6 +184,8 @@ class WXTechController(View):
                     experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
                     experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
                     UnicomComboExperienceHistory.objects.create(**experience_history_vo)
                     UnicomComboExperienceHistory.objects.create(**experience_history_vo)
                     order_res = cls.created_order(serial_no, user_id, trade_no, pay_type=10)
                     order_res = cls.created_order(serial_no, user_id, trade_no, pay_type=10)
+                    UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
+                        .update(user_id=user_id, updated_time=int(time.time()))
                     LOGGER.info('*****系统创建体验订单:{}'.format(order_res))
                     LOGGER.info('*****系统创建体验订单:{}'.format(order_res))
                     return response.json(0)
                     return response.json(0)
                 return response.json(10063)
                 return response.json(10063)
@@ -220,7 +223,7 @@ class WXTechController(View):
                           'store_meal_name': combo_info_vo['combo_name'],
                           'store_meal_name': combo_info_vo['combo_name'],
                           'trade_no': trade_no}
                           'trade_no': trade_no}
             Order_Model.objects.create(**order_dict)
             Order_Model.objects.create(**order_dict)
-            return True
+            return order_id
 
 
         @classmethod
         @classmethod
         def delete_card_package(cls, request_dict, response):
         def delete_card_package(cls, request_dict, response):
@@ -267,14 +270,13 @@ class WXTechController(View):
                 # 校验兑换码格式是否正确
                 # 校验兑换码格式是否正确
                 if not (code.isalnum() and len(code) == 10):
                 if not (code.isalnum() and len(code) == 10):
                     return response.json(10040)  # 兑换码格式错误
                     return response.json(10040)  # 兑换码格式错误
-                card_type = 1
-                device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number, card_type=card_type) \
-                    .values('iccid')
+                device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number) \
+                    .values('iccid', 'card_type')
                 if not device_info_qs.exists():
                 if not device_info_qs.exists():
                     return response.json(173)  # 设备信息不存在
                     return response.json(173)  # 设备信息不存在
                 #  查询兑换码信息
                 #  查询兑换码信息
-                exchange_code_qs = ExchangeCode.objects.filter(code=code, status=False, package_type=card_type) \
-                    .values('package_id', 'expire_time')
+                exchange_code_qs = ExchangeCode.objects.filter(code=code, status=False) \
+                    .values('package_id', 'expire_time', 'package_type')
                 if not exchange_code_qs.exists():
                 if not exchange_code_qs.exists():
                     return response.json(10040)  # 兑换码无效
                     return response.json(10040)  # 兑换码无效
                 combo_id = exchange_code_qs[0]['package_id']
                 combo_id = exchange_code_qs[0]['package_id']
@@ -285,19 +287,29 @@ class WXTechController(View):
                     return response.json(173)
                     return response.json(173)
                 package_code = package_info_qs[0]['package_id']
                 package_code = package_info_qs[0]['package_id']
                 iccid = device_info_qs[0]['iccid']
                 iccid = device_info_qs[0]['iccid']
-                # 五兴订购流量包请求参数
-                data = {'iccid': iccid, 'operator': WXOperatorEnum.TELECOM.value,
-                        'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': package_code}
-                wx_tech = WXTechObject()
-                # 请求五兴API订购套餐接口
-                res = wx_tech.create_order_package(**data)
-                LOGGER.info('*****五兴订购年卡套餐结果:{}'.format(res))
-                if res['code'] == '0':
-                    trade_no = res['data']['orderNumber']
-                    cls.created_order(serial_number, user_id, trade_no, combo_id, 11)
-                    exchange_code_qs.update(status=True, updated_time=int(time.time()))
-                    cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
-                    return response.json(0)
+                # 兑换码套餐类型
+                card_type = device_info_qs[0]['card_type']
+                if card_type == 0:  # 联通无限流量兑换码
+                    result = cls.exchange_unicom_package(serial_number, iccid,
+                                                         user_id, combo_id)
+                    if result:
+                        exchange_code_qs.update(status=True, updated_time=int(time.time()))
+                        cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
+                        return response.json(0)
+                elif card_type == 1:  # 五兴电信无限流量兑换码
+                    # 五兴订购流量包请求参数
+                    data = {'iccid': iccid, 'operator': WXOperatorEnum.TELECOM.value,
+                            'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': package_code}
+                    wx_tech = WXTechObject()
+                    # 请求五兴API订购套餐接口
+                    res = wx_tech.create_order_package(**data)
+                    LOGGER.info('*****五兴订购年卡套餐结果:{}'.format(res))
+                    if res['code'] == '0':
+                        trade_no = res['data']['orderNumber']
+                        cls.created_order(serial_number, user_id, trade_no, combo_id, 11)
+                        exchange_code_qs.update(status=True, updated_time=int(time.time()))
+                        cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
+                        return response.json(0)
                 cls.save_log(ip, 10040, '兑换失败{},{}'.format(serial_number, code))
                 cls.save_log(ip, 10040, '兑换失败{},{}'.format(serial_number, code))
                 return response.json(10040)
                 return response.json(10040)
             except Exception as e:
             except Exception as e:
@@ -306,6 +318,19 @@ class WXTechController(View):
                 cls.save_log(ip, 500, '兑换内部错误')
                 cls.save_log(ip, 500, '兑换内部错误')
                 return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
                 return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
+        @classmethod
+        def exchange_unicom_package(cls, serial_number, iccid, user_id, combo_id):
+            try:
+                # 通过兑换码创建订单记录
+                order_id = cls.created_order(serial_number, user_id, 'ansjer', combo_id, 11)
+                # 根据订单信息创建流量套餐包
+                UnicomComboView.create_combo_order_info(order_id, 0, iccid, combo_id)
+                return True
+            except Exception as e:
+                LOGGER.info('*****WXTechController.exchange_unicom_package:errLine:{}, errMsg:{}'
+                            .format(e.__traceback__.tb_lineno, repr(e)))
+                return False
+
         @staticmethod
         @staticmethod
         def save_log(ip, code, operation):
         def save_log(ip, code, operation):
             """
             """

+ 25 - 50
Controller/UserController.py

@@ -37,13 +37,12 @@ from django.views.generic import View
 from jwt.algorithms import RSAAlgorithm
 from jwt.algorithms import RSAAlgorithm
 from ratelimit import limits
 from ratelimit import limits
 
 
-from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN, \
-    LOGGER
+from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN, LOGGER
 from Ansjer.config import BASE_DIR, CONFIG_EUR, CONFIG_INFO, SERVER_DOMAIN_EUR, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
 from Ansjer.config import BASE_DIR, CONFIG_EUR, CONFIG_INFO, SERVER_DOMAIN_EUR, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
     UserAppFrequencyModel, CountryIPModel, CountryModel, UidChannelSetModel, Order_Model, UID_Bucket, Unused_Uid_Meal, \
     UserAppFrequencyModel, CountryIPModel, CountryModel, UidChannelSetModel, Order_Model, UID_Bucket, Unused_Uid_Meal, \
-    GatewayPush, CountryLanguageModel, LanguageModel, IcloudUseDetails, IcloudStorageRecord, VodBucketModel
+    GatewayPush, CountryLanguageModel, LanguageModel, VodBucketModel
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.AliSmsObject import AliSmsObject
@@ -490,7 +489,7 @@ class createPwd(TemplateView):
             djangoLogger = logging.getLogger('django')
             djangoLogger = logging.getLogger('django')
             djangoLogger.exception(e)
             djangoLogger.exception(e)
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 class ForgetPwdView(TemplateView):
 class ForgetPwdView(TemplateView):
@@ -749,7 +748,7 @@ class refreshTokenViewV3(TemplateView):
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 # 获取验证码
 # 获取验证码
@@ -2150,8 +2149,6 @@ class v3LoginView(TemplateView):
                 GatewayPush.objects.create(user_id=userID, app_bundle_id=app_bundle_id, app_type=app_type,
                 GatewayPush.objects.create(user_id=userID, app_bundle_id=app_bundle_id, app_type=app_type,
                                            push_type=push_type, token_val=token_val, m_code=m_code, lang=lang, tz=tz)
                                            push_type=push_type, token_val=token_val, m_code=m_code, lang=lang, tz=tz)
             UidPushModel.objects.filter(userID=userID, m_code=m_code).update(token_val=token_val, push_type=push_type)
             UidPushModel.objects.filter(userID=userID, m_code=m_code).update(token_val=token_val, push_type=push_type)
-            if app_bundle_id == 0 or app_bundle_id == '0':
-                LOGGER.info('v3/account/login接口推送数据:{}'.format(request_dict))
         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
         region_country = users['region_country']
         region_country = users['region_country']
         # 语言不存在返回英文
         # 语言不存在返回英文
@@ -2291,7 +2288,7 @@ class oneClickLoginView(TemplateView):
             djangoLogger = logging.getLogger('django')
             djangoLogger = logging.getLogger('django')
             djangoLogger.exception(e)
             djangoLogger.exception(e)
             print(e)
             print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 # 用户登录后初始化接口
 # 用户登录后初始化接口
@@ -2322,6 +2319,7 @@ class InitInfoView(View):
     def init_info(self, request_dict, userID, response, request):
     def init_info(self, request_dict, userID, response, request):
         # 未读的系统消息
         # 未读的系统消息
         token_val = request_dict.get('token_val', None)
         token_val = request_dict.get('token_val', None)
+        jg_token_val = request_dict.get('jg_token_val', '')
         m_code = request_dict.get('m_code', None)
         m_code = request_dict.get('m_code', None)
         push_type = request_dict.get('push_type', None)
         push_type = request_dict.get('push_type', None)
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
@@ -2332,7 +2330,8 @@ class InitInfoView(View):
             m_code = m_code[4:]
             m_code = m_code[4:]
         if all([token_val, push_type, appBundleId, userID]):
         if all([token_val, push_type, appBundleId, userID]):
             self.save_push_config(userID, appBundleId, push_type, token_val, m_code, lang, tz)
             self.save_push_config(userID, appBundleId, push_type, token_val, m_code, lang, tz)
-            self.save_or_creat_uid_push(userID, appBundleId, push_type, token_val, m_code, lang, tz, now_time)
+            self.save_or_creat_uid_push(userID, appBundleId, push_type, token_val, m_code, lang, tz, now_time,
+                                        jg_token_val)
             if appBundleId:
             if appBundleId:
                 user_ex_qs = UserExModel.objects.filter(userID_id=userID)
                 user_ex_qs = UserExModel.objects.filter(userID_id=userID)
                 user_ex = None
                 user_ex = None
@@ -2395,13 +2394,14 @@ class InitInfoView(View):
             print('出错了~异步保存配置信息错误,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             print('出错了~异步保存配置信息错误,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
     @staticmethod
     @staticmethod
-    def save_or_creat_uid_push(user_id, app_bundle_id, push_type, token_val, m_code, lang, tz, now_time):
+    def save_or_creat_uid_push(user_id, app_bundle_id, push_type, token_val, m_code, lang, tz, now_time, jg_token_val):
         """
         """
         异步保存推送配置
         异步保存推送配置
         @param user_id: 用户id
         @param user_id: 用户id
         @param app_bundle_id: app版本包id
         @param app_bundle_id: app版本包id
         @param push_type: 推送类型 0:Ios,1:Google,2:国内极光
         @param push_type: 推送类型 0:Ios,1:Google,2:国内极光
         @param token_val: 推送token
         @param token_val: 推送token
+        @param jg_token_val: 极光推送token
         @param m_code: 手机唯一标识
         @param m_code: 手机唯一标识
         @param lang: 语言
         @param lang: 语言
         @param tz: 时区
         @param tz: 时区
@@ -2416,16 +2416,12 @@ class InitInfoView(View):
                 for item in uid_set:
                 for item in uid_set:
                     uid_push_qs = UidPushModel.objects.filter(userID=user_id, m_code=m_code, uid_set_id=item['id'])
                     uid_push_qs = UidPushModel.objects.filter(userID=user_id, m_code=m_code, uid_set_id=item['id'])
                     if uid_push_qs.exists():
                     if uid_push_qs.exists():
-                        if uid_push_qs.first().token_val != token_val:
-                            uid_push_qs.update(token_val=token_val, push_type=push_type)
+                        uid_push_qs.update(token_val=token_val, push_type=push_type, jg_token_val=jg_token_val)
                     else:
                     else:
                         UidPushModel.objects.create(userID_id=user_id, appBundleId=app_bundle_id, app_type=app_type,
                         UidPushModel.objects.create(userID_id=user_id, appBundleId=app_bundle_id, app_type=app_type,
                                                     push_type=push_type, token_val=token_val, m_code=m_code, lang=lang,
                                                     push_type=push_type, token_val=token_val, m_code=m_code, lang=lang,
-                                                    tz=tz, addTime=now_time, updTime=now_time, uid_set_id=item['id'])
-                    if app_bundle_id == 0 or app_bundle_id == '0':
-                        LOGGER.info(
-                            'user/initInfo接口推送数据:appBundleId:{},app_type:{},push_type:{},token_val:{},m_code:{}'.format(
-                                app_bundle_id, app_type, push_type, token_val, m_code))
+                                                    tz=tz, addTime=now_time, updTime=now_time, uid_set_id=item['id'],
+                                                    jg_token_val=jg_token_val)
         except Exception as e:
         except Exception as e:
             LOGGER.info('出错了~保存推送配置信息错误,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             LOGGER.info('出错了~保存推送配置信息错误,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
@@ -3190,30 +3186,26 @@ class alexaAuthView(TemplateView):
     def valid_login(self, user_qs, password, response):
     def valid_login(self, user_qs, password, response):
         if not user_qs.exists():
         if not user_qs.exists():
             return response.json(104)
             return response.json(104)
-        users = user_qs.values('userID', 'password', 'region_country')[0]
+        users = user_qs.values('userID', 'password')[0]
         if not check_password(password, users['password']):
         if not check_password(password, users['password']):
             return response.json(111)
             return response.json(111)
         userID = users['userID']
         userID = users['userID']
-        region_country = users['region_country']
-
-        # 确认用户地区
-        region_code = 'US'
-        country_qs = CountryModel.objects.filter(id=region_country).values('region_id')
-        if country_qs.exists():
-            region_id = country_qs[0]['region_id']
-            if region_id == 4:
-                region_code = 'EU'
-
+        # uid_qs = Device_Info.objects.filter(userID_id=userID, isExist=1).values('UID', 'NickName', 'View_Password')
+        # uid_arr = []
+        # for uid_q in uid_qs:
+        #     uid_arr.append({'uid': uid_q['UID'], 'nick': uid_q['NickName'], 'password': uid_q['View_Password']})
         res = {
         res = {
             'userID': userID,
             'userID': userID,
-            'region_code': region_code
+            #     'uid_arr': uid_arr
         }
         }
         return response.json(0, res)
         return response.json(0, res)
+        # return response.json(0, res)
 
 
 
 
 class alexaUidView(TemplateView):
 class alexaUidView(TemplateView):
     def post(self, request, *args, **kwargs):
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
+        # request_dict = json.loads(request.body.decode('utf-8'))
         request_dict = request.POST
         request_dict = request.POST
         response = ResponseObject()
         response = ResponseObject()
         return self.validates(request_dict, response)
         return self.validates(request_dict, response)
@@ -3295,7 +3287,7 @@ class alexaUidView(TemplateView):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 class alexaSwitchView(TemplateView):
 class alexaSwitchView(TemplateView):
@@ -3339,7 +3331,7 @@ class alexaSwitchView(TemplateView):
             }
             }
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 # 登出
 # 登出
@@ -4388,25 +4380,8 @@ def deleteAccount(request):
         hadUnUseSevice = Unused_Uid_Meal.objects.filter(uid__in=orderUserIds)
         hadUnUseSevice = Unused_Uid_Meal.objects.filter(uid__in=orderUserIds)
         if hadUnUseSevice.exists():
         if hadUnUseSevice.exists():
             return response.json(10046)
             return response.json(10046)
+        # return HttpResponse(list(hadUseSevice.values()))
         delUser.delete()
         delUser.delete()
-        # 删除云盘记录
-        icloud_record = IcloudStorageRecord.objects.filter(user_id=userID).values('bucket_id')
-        if icloud_record.exists():
-            bucket_id = icloud_record[0]['bucket_id']
-            bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
-            bucket_name = bucket_qs[0]['bucket']
-            bucket_region = bucket_qs[0]['region']
-            mold = bucket_qs[0]['mold']
-            s3_obj = AmazonS3Util(
-                AWS_ACCESS_KEY_ID[mold],
-                AWS_SECRET_ACCESS_KEY[mold],
-                bucket_region
-            )
-            object_list = s3_obj.get_object_list(bucket_name, userID)
-            for obj in object_list:
-                s3_obj.delete_obj(bucket_name, obj['Key'])
-            icloud_record.delete()
-        IcloudUseDetails.objects.filter(user_id=userID).update(use_size=0)
         return response.json(0)
         return response.json(0)
 
 
 
 
@@ -4480,4 +4455,4 @@ class DeleteUser(View):
             Device_Info.objects.filter(userID=user_id).delete()
             Device_Info.objects.filter(userID=user_id).delete()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))

+ 2 - 2
Controller/UserDevice/UserDeviceShareController.py

@@ -88,7 +88,7 @@ class UserDeviceShareView(View):
             return response.json(0, data)
             return response.json(0, data)
         except Exception as e:
         except Exception as e:
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def user_channel_permission_save(cls, request_dict, response):
     def user_channel_permission_save(cls, request_dict, response):
@@ -137,7 +137,7 @@ class UserDeviceShareView(View):
                 return response.json(0)
                 return response.json(0)
         except Exception as e:
         except Exception as e:
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def qrcode_share_channel_permission_save(user_id, uid):
     def qrcode_share_channel_permission_save(user_id, uid):

+ 4 - 13
Controller/UserManger.py

@@ -12,8 +12,7 @@ from django.views.generic import TemplateView, View
 
 
 from Ansjer.config import BASE_DIR, ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, AVATAR_BUCKET
 from Ansjer.config import BASE_DIR, ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, AVATAR_BUCKET
 from Ansjer.config import SERVER_DOMAIN
 from Ansjer.config import SERVER_DOMAIN
-from Model.models import Role, Device_User, UserOauth2Model, UserExModel, CountryLanguageModel, LanguageModel, App_Info, \
-    IcloudUseDetails
+from Model.models import Role, Device_User, UserOauth2Model, UserExModel, CountryLanguageModel, LanguageModel, App_Info
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
@@ -75,9 +74,6 @@ class showUserMoreView(TemplateView):
                         userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
                         userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
                         sqlDict['datas'][k]['fields']['userIconUrl'] = userIconUrl
                         sqlDict['datas'][k]['fields']['userIconUrl'] = userIconUrl
 
 
-                # 判断用户是否开通云盘
-                icloud_user_qs = IcloudUseDetails.objects.filter(user_id=user_id)
-                v['fields']['is_cloudDrive'] = 1 if icloud_user_qs.exists() else 0
                 # 确认地区字段
                 # 确认地区字段
                 sqlDict['datas'][k]['fields']['region_status'] = 1 if region_status else 0
                 sqlDict['datas'][k]['fields']['region_status'] = 1 if region_status else 0
 
 
@@ -115,7 +111,7 @@ class showUserMoreView(TemplateView):
                     region_country = sqlDict['datas'][k]['fields']['region_country']
                     region_country = sqlDict['datas'][k]['fields']['region_country']
                     language_qs = LanguageModel.objects.filter(lang=lang).values('id')
                     language_qs = LanguageModel.objects.filter(lang=lang).values('id')
                     region_qs = CountryLanguageModel.objects.filter(country_id=region_country,
                     region_qs = CountryLanguageModel.objects.filter(country_id=region_country,
-                                                                    language_id=language_qs[0]['id']). \
+                                                                    language_id=language_qs[0]['id']).\
                         values('country_name')
                         values('country_name')
                     sqlDict['datas'][k]['fields']['region'] = region_qs[0]['country_name'] if region_qs.exists() else ''
                     sqlDict['datas'][k]['fields']['region'] = region_qs[0]['country_name'] if region_qs.exists() else ''
 
 
@@ -124,7 +120,7 @@ class showUserMoreView(TemplateView):
             sqlDict['oauth2'] = list(ua_qs)
             sqlDict['oauth2'] = list(ua_qs)
             return response.json(0, sqlDict)
             return response.json(0, sqlDict)
         except Exception as e:
         except Exception as e:
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500, repr(e))
 
 
 
 
 class perfectUserInfoView(TemplateView):
 class perfectUserInfoView(TemplateView):
@@ -217,11 +213,6 @@ class perfectUserInfoView(TemplateView):
             for k, v in enumerate(res["datas"]):
             for k, v in enumerate(res["datas"]):
                 res['datas'][k]['fields'].pop('password')
                 res['datas'][k]['fields'].pop('password')
                 userIconPath = res['datas'][k]['fields']['userIconPath']
                 userIconPath = res['datas'][k]['fields']['userIconPath']
-                region_status = res['datas'][k]['fields']['region_status']
-                if region_status is True:
-                    res['datas'][k]['fields']['region_status'] = 1
-                else:
-                    res['datas'][k]['fields']['region_status'] = 0
                 if userIconPath and userIconUrl != '':
                 if userIconPath and userIconUrl != '':
                     res['datas'][k]['fields']['userIconUrl'] = userIconUrl
                     res['datas'][k]['fields']['userIconUrl'] = userIconUrl
             return response.json(0, res)
             return response.json(0, res)
@@ -262,7 +253,7 @@ class getAvatarView(TemplateView):
                 return HttpResponse(get_object_response['Body'], content_type="image/jpeg")
                 return HttpResponse(get_object_response['Body'], content_type="image/jpeg")
             except Exception as e:
             except Exception as e:
                 print(e)
                 print(e)
-                return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+                return response.json(500, repr(e))
 
 
         fullPath = os.path.join(BASE_DIR, "static", filePath).replace('\\', '/')
         fullPath = os.path.join(BASE_DIR, "static", filePath).replace('\\', '/')
         if os.path.isfile(fullPath):
         if os.path.isfile(fullPath):

+ 12 - 201
Model/models.py

@@ -754,9 +754,9 @@ class Store_Meal(models.Model):
     lang = models.ManyToManyField(to='Lang', verbose_name='套餐语言', db_table='store_meal_lang')
     lang = models.ManyToManyField(to='Lang', verbose_name='套餐语言', db_table='store_meal_lang')
     cycle_config_id = models.IntegerField(null=True, verbose_name='周期付款配置表id')
     cycle_config_id = models.IntegerField(null=True, verbose_name='周期付款配置表id')
     sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')  # 单位月
     sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')  # 单位月
-    is_beta = models.SmallIntegerField(default=0, verbose_name=u'是否显示beta')  # 0: 否, 1: 是
-    is_ai = models.SmallIntegerField(default=0, verbose_name=u'是否支持AI')  # 0: 否, 1: 是
-    icloud_store_meal_id = models.IntegerField(default=0, verbose_name='关联云盘套餐id')
+    # 备用字段
+    spare_3 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段3')
+    spare_4 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段4')
 
 
     def __str__(self):
     def __str__(self):
         return self.id
         return self.id
@@ -815,7 +815,6 @@ class Lang(models.Model):
     title = models.CharField(blank=True, max_length=320, verbose_name='标题')
     title = models.CharField(blank=True, max_length=320, verbose_name='标题')
     content = models.TextField(blank=True, null=True, verbose_name='描述')
     content = models.TextField(blank=True, null=True, verbose_name='描述')
     discount_content = models.CharField(blank=True, max_length=320, verbose_name=u'优惠信息描述')
     discount_content = models.CharField(blank=True, max_length=320, verbose_name=u'优惠信息描述')
-    type = models.SmallIntegerField(default=0, verbose_name='类型')  # 0:云存 1:AI 2:4G 3:云盘
 
 
     def __str__(self):
     def __str__(self):
         return self.id
         return self.id
@@ -849,7 +848,6 @@ class Equipment_Version(models.Model):
     mci = models.CharField(default='', blank=True, max_length=10, verbose_name='设备类型')
     mci = models.CharField(default='', blank=True, max_length=10, verbose_name='设备类型')
     img = models.CharField(max_length=300, blank=True, default='', verbose_name=u'图片路径')
     img = models.CharField(max_length=300, blank=True, default='', verbose_name=u'图片路径')
     max_ver = models.CharField(default='', max_length=16, verbose_name='最大版本号')
     max_ver = models.CharField(default='', max_length=16, verbose_name='最大版本号')
-    is_popup = models.SmallIntegerField(default=0, verbose_name=u'是否弹窗')
 
 
     def __str__(self):
     def __str__(self):
         return self.eid
         return self.eid
@@ -935,7 +933,7 @@ class Order_Model(models.Model):
     rank = models.ForeignKey(Store_Meal, to_field='id', default='', on_delete=models.CASCADE, verbose_name='关联云存套餐表')
     rank = models.ForeignKey(Store_Meal, to_field='id', default='', on_delete=models.CASCADE, verbose_name='关联云存套餐表')
     ai_rank = models.ForeignKey(AiStoreMeal, to_field='id', default='', on_delete=models.CASCADE,
     ai_rank = models.ForeignKey(AiStoreMeal, to_field='id', default='', on_delete=models.CASCADE,
                                 verbose_name='关联ai套餐表')
                                 verbose_name='关联ai套餐表')
-    order_type = models.SmallIntegerField(default=0, verbose_name='订单类型:0:云存,1:云存ai,2:联通4G,3:五兴,4:云盘')
+    order_type = models.SmallIntegerField(default=0, verbose_name='订单类型:0:云存,1:ai,2:联通4G')
     unify_combo_id = models.CharField(blank=True, default='', max_length=32, verbose_name=u'统一套餐id')
     unify_combo_id = models.CharField(blank=True, default='', max_length=32, verbose_name=u'统一套餐id')
     nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
     nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
     uid_bucket_id = models.IntegerField(default=0, verbose_name='关联uid_bucket的字段')
     uid_bucket_id = models.IntegerField(default=0, verbose_name='关联uid_bucket的字段')
@@ -1272,7 +1270,7 @@ class UID_Bucket(models.Model):
     uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
     uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
     channel = models.SmallIntegerField(default=0, verbose_name='通道')
     channel = models.SmallIntegerField(default=0, verbose_name='通道')
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, verbose_name='存储空间')
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE, verbose_name='存储空间')
-    status = models.SmallIntegerField(default=0, verbose_name='状态[0:关闭,1:开启]')  # 修改2023/5/15(原状态[0:开启,1:关闭])
+    status = models.SmallIntegerField(default=0, verbose_name='状态[0:关闭,1:开启]')
     endTime = models.BigIntegerField(verbose_name='套餐结束时间', db_index=True, default=0)
     endTime = models.BigIntegerField(verbose_name='套餐结束时间', db_index=True, default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updateTime = models.BigIntegerField(verbose_name='更新时间', default=0)
     updateTime = models.BigIntegerField(verbose_name='更新时间', default=0)
@@ -1385,7 +1383,6 @@ class UidSetModel(models.Model):
     tb_country = models.IntegerField(blank=True, default=0, verbose_name='国家')
     tb_country = models.IntegerField(blank=True, default=0, verbose_name='国家')
     device_type = models.SmallIntegerField(default=0, verbose_name='设备类型')
     device_type = models.SmallIntegerField(default=0, verbose_name='设备类型')
     ai_type = models.SmallIntegerField(default=0, verbose_name='检测类型')
     ai_type = models.SmallIntegerField(default=0, verbose_name='检测类型')
-    msg_notify = models.JSONField(null=True, verbose_name='消息通知Json')
 
 
     class Meta:
     class Meta:
         db_table = 'uid_set'
         db_table = 'uid_set'
@@ -1404,6 +1401,7 @@ class UidPushModel(models.Model):
     push_type = models.IntegerField(default=0,
     push_type = models.IntegerField(default=0,
                                     verbose_name=u'推送类型')  # 0: apns, 1: 安卓gcm, 2: 极光, 3:华为, 4:小米, 5:vivo, 6:oppo, 7:魅族
                                     verbose_name=u'推送类型')  # 0: apns, 1: 安卓gcm, 2: 极光, 3:华为, 4:小米, 5:vivo, 6:oppo, 7:魅族
     token_val = models.CharField(default='', max_length=500, verbose_name=u'设备验证令牌')
     token_val = models.CharField(default='', max_length=500, verbose_name=u'设备验证令牌')
+    jg_token_val = models.CharField(default='', max_length=500, verbose_name=u'极光推送令牌')
     m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
     m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
@@ -2497,8 +2495,8 @@ class AiService(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
     uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
     channel = models.SmallIntegerField(default=0, verbose_name='通道')
     channel = models.SmallIntegerField(default=0, verbose_name='通道')
-    # orders = models.ForeignKey(Order_Model, to_field='orderID', default='', on_delete=models.CASCADE,
-    #                           verbose_name='关联订单表')
+    orders = models.ForeignKey(Order_Model, to_field='orderID', default='', on_delete=models.CASCADE,
+                               verbose_name='关联订单表')
     detect_status = models.SmallIntegerField(default=0, verbose_name='状态')  # 0:关闭, 1:开启
     detect_status = models.SmallIntegerField(default=0, verbose_name='状态')  # 0:关闭, 1:开启
     endTime = models.BigIntegerField(verbose_name='套餐结束时间', db_index=True, default=0)
     endTime = models.BigIntegerField(verbose_name='套餐结束时间', db_index=True, default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
@@ -2762,7 +2760,7 @@ class GatewaySubDevice(models.Model):
     nickname = models.CharField(default='', max_length=32, verbose_name=u'设备名称')
     nickname = models.CharField(default='', max_length=32, verbose_name=u'设备名称')
     ieee_addr = models.CharField(default='', max_length=64, verbose_name=u'长地址')
     ieee_addr = models.CharField(default='', max_length=64, verbose_name=u'长地址')
     src_addr = models.CharField(default='', max_length=16, verbose_name=u'短地址')
     src_addr = models.CharField(default='', max_length=16, verbose_name=u'短地址')
-    status = models.SmallIntegerField(default=1, verbose_name='在线状态')  # 1:在线, 0:离线
+    status = models.SmallIntegerField(default=0, verbose_name='状态')  # 0:关闭, 1:开启
     # 0:正常, 1:被拆动, 智能按钮紧急开关状态: 0:关闭, 1:开启
     # 0:正常, 1:被拆动, 智能按钮紧急开关状态: 0:关闭, 1:开启
     is_tampered = models.SmallIntegerField(default=0, verbose_name='拆动状态')
     is_tampered = models.SmallIntegerField(default=0, verbose_name='拆动状态')
     mac = models.CharField(default='', max_length=32, verbose_name=u'mac地址')
     mac = models.CharField(default='', max_length=32, verbose_name=u'mac地址')
@@ -2942,9 +2940,9 @@ class UnicomDeviceInfo(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记Id')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记Id')
     iccid = models.CharField(db_index=True, unique=True, max_length=32, verbose_name=u'完整的20位纯数字ICCID')
     iccid = models.CharField(db_index=True, unique=True, max_length=32, verbose_name=u'完整的20位纯数字ICCID')
     status = models.SmallIntegerField(default=0, verbose_name=u'状态{0:可测试,1:测试完成,2:已使用}')
     status = models.SmallIntegerField(default=0, verbose_name=u'状态{0:可测试,1:测试完成,2:已使用}')
-    serial_no = models.CharField(default='', max_length=32, verbose_name=u'设备序列号')
+    serial_no = models.CharField(default='', db_index=True, max_length=32, verbose_name=u'设备序列号')
     user_id = models.CharField(blank=True, max_length=32, verbose_name=u'用户id')
     user_id = models.CharField(blank=True, max_length=32, verbose_name=u'用户id')
-    card_type = models.SmallIntegerField(default=0, verbose_name=u'状态{0:联通,1:电信,2:移动}')
+    card_type = models.SmallIntegerField(default=0, verbose_name=u'状态{0:联通,1:电信,2:移动,4:其它,5:国际}')
     main_card = models.SmallIntegerField(default=0, verbose_name=u'SIM卡类型{0:拔插卡,1:贴片卡}')
     main_card = models.SmallIntegerField(default=0, verbose_name=u'SIM卡类型{0:拔插卡,1:贴片卡}')
     sim_used_flow = models.DecimalField(default=0, max_digits=10, decimal_places=2, verbose_name=u'sim卡已用总流量(MB)')
     sim_used_flow = models.DecimalField(default=0, max_digits=10, decimal_places=2, verbose_name=u'sim卡已用总流量(MB)')
     sim_cycle_used_flow = models.DecimalField(default=0, max_digits=10, decimal_places=2,
     sim_cycle_used_flow = models.DecimalField(default=0, max_digits=10, decimal_places=2,
@@ -3537,58 +3535,6 @@ class SocketSchedule(models.Model):
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
 
 
 
 
-class SwitchInfo(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='自增id')
-    device_id = models.CharField(max_length=32, default='', verbose_name='设备id')
-    model = models.CharField(max_length=32, default='', verbose_name='型号')
-    hardware_version = models.CharField(max_length=32, default='', verbose_name='硬件版本')
-    firmware_version = models.CharField(max_length=32, default='', verbose_name='固件版本')
-    mac = models.CharField(max_length=32, default='', verbose_name='mac地址')
-
-    class Meta:
-        db_table = 'switch_info'
-        verbose_name = '智能开关信息'
-        verbose_name_plural = verbose_name
-
-
-class SwitchDimmingSettings(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='自增id')
-    device_id = models.CharField(max_length=32, default='', verbose_name='设备id')
-    click_turn_on_speed = models.SmallIntegerField(default=0, verbose_name='单击开启速度')
-    click_turn_off_speed = models.SmallIntegerField(default=0, verbose_name='单击关闭速度')
-    double_click = models.CharField(max_length=8, default='', verbose_name='双击')  # 0: 无, 1: 缓慢开/关, x%: 预设亮度
-    press = models.CharField(max_length=8, default='', verbose_name='长按')  # 0: 无, 1: 缓慢开/关, x%: 预设亮度
-    double_press_click_turn_on_speed = models.SmallIntegerField(default=0, verbose_name='双击/长按开启速度')
-    double_press_click_turn_off_speed = models.SmallIntegerField(default=0, verbose_name='双击/长按单击关闭速度')
-    led = models.BooleanField(default=False, verbose_name='LED指示灯')  # True: 开, False: 关
-    dimming_correction = models.CharField(max_length=8, default='', verbose_name='调光校正')
-
-    class Meta:
-        db_table = 'switch_dimming_settings'
-        verbose_name = '智能开关调光设置'
-        verbose_name_plural = verbose_name
-
-
-class SwitchChronopher(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='自增id')
-    device_id = models.CharField(max_length=32, default='', verbose_name='设备id')
-    time_type_radio = models.SmallIntegerField(default=0, verbose_name='切换时间点/时间段')  # 1: 按时间点, 2: 按时间段
-    time_point = models.IntegerField(default=0, verbose_name='时间点')
-    time_quantum_start_time = models.IntegerField(default=0, verbose_name='时间段开始时间')
-    time_quantum_end_time = models.IntegerField(default=0, verbose_name='时间段结束时间')
-    time_point_device_will_doing = models.CharField(max_length=8, default='',
-                                                    verbose_name='设备将会')  # 0: 开启, 1: 关闭, x%: 预设亮度
-    time_quantum_device_will_doing = models.SmallIntegerField(default=0,
-                                                              verbose_name='设备将会')  # 0: 开启, 1: 关闭, x: 开启/关闭切换间隔
-    slow_open_or_close_speed = models.SmallIntegerField(default=0, verbose_name='缓慢开/关速度')
-    repeat = models.SmallIntegerField(default=0, verbose_name=u'重复周期')
-
-    class Meta:
-        db_table = 'switch_chronopher'
-        verbose_name = '定时计划'
-        verbose_name_plural = verbose_name
-
-
 class ExchangeCode(models.Model):
 class ExchangeCode(models.Model):
     id = models.AutoField(primary_key=True)
     id = models.AutoField(primary_key=True)
     code = models.CharField(max_length=32, unique=True, verbose_name='兑换码')
     code = models.CharField(max_length=32, unique=True, verbose_name='兑换码')
@@ -3608,141 +3554,6 @@ class ExchangeCode(models.Model):
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
 
 
 
 
-class ICloudStoreMeal(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增ID')
-    currency = models.CharField(blank=True, default='$', max_length=32, verbose_name=u'货币符号')
-    symbol = models.CharField(blank=True, default='$', max_length=32, verbose_name=u'符号')
-    price = models.CharField(blank=True, max_length=32, verbose_name=u'价格')
-    expire = models.IntegerField(default=0, blank=True, verbose_name=u'有效期')  # 单位月
-    add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
-    pay_type = models.ManyToManyField(to='Pay_Type', verbose_name='付款类型', db_table='icloud_store_meal_pay')
-    update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
-    is_show = models.SmallIntegerField(default=0, verbose_name=u'是否隐藏 [0=隐藏,1展示]')
-    is_delete = models.SmallIntegerField(default=0, verbose_name=u'是否删除 [0=否,1=是]')
-    lang = models.ManyToManyField(to='Lang', verbose_name='套餐语言', db_table='icloud_store_meal_lang')
-    size = models.IntegerField(null=True, default=0, verbose_name='云盘容量大小')  # 单位GB
-    bucket_id = models.SmallIntegerField(default=0, verbose_name='关联存储桶id')
-    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
-
-    def __str__(self):
-        return self.id
-
-    class Meta:
-        db_table = 'icloud_store_meal'
-        verbose_name = u'云盘套餐'
-        verbose_name_plural = verbose_name
-        ordering = ('id',)
-
-
-class IcloudUseDetails(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    use_size = models.DecimalField(default=0, max_digits=10, decimal_places=2, verbose_name='已使用容量大小')  # 单位MB
-    add_time = models.IntegerField(verbose_name='添加时间', default=0)
-    upd_time = models.BigIntegerField(verbose_name='更新时间', default=0)
-    detect_status = models.SmallIntegerField(default=0, verbose_name='开关状态')  # 0:关闭, 1:开启
-    user_id = models.CharField(blank=True, max_length=32, verbose_name=u'用户id')
-    bucket_id = models.SmallIntegerField(default=0, verbose_name='关联存储桶id')
-
-    class Meta:
-        db_table = 'icloud_use_details'
-        verbose_name = '云盘使用表'
-        verbose_name_plural = verbose_name
-        ordering = ('id',)
-
-
-class IcloudService(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    size = models.IntegerField(default=0, verbose_name='容量大小')  # 单位GB
-    end_time = models.IntegerField(verbose_name='套餐结束时间', db_index=True, default=0)
-    add_time = models.IntegerField(verbose_name='添加时间', default=0)
-    upd_time = models.IntegerField(verbose_name='更新时间', default=0)
-    use_status = models.IntegerField(verbose_name='使用状态', default=0)  # 0:使用中, 1:已过期
-    use_details_id = models.IntegerField(default=0, verbose_name='关联云盘使用表id')
-    type = models.SmallIntegerField(default=0, verbose_name='云盘购买类型')  # 0:注册永久送,1:购买云存附送,2:单独购买套餐
-    order_id = models.CharField(default='', max_length=20, verbose_name='关联订单id')
-
-    class Meta:
-        db_table = 'icloud_service'
-        verbose_name = '云盘服务表'
-        verbose_name_plural = verbose_name
-        ordering = ('id',)
-
-
-class IcloudStorageRecord(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='回放列表主键')
-    user_id = models.CharField(blank=True, max_length=32, verbose_name=u'用户id')
-    uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
-    nickname = models.CharField(max_length=20, verbose_name='设备昵称', db_index=True)
-    channel = models.SmallIntegerField(default=0, verbose_name='通道')
-    time_stamp = models.BigIntegerField(verbose_name='视频/图片名字时间戳', default=0, db_index=True)  # 单位毫秒
-    sec = models.IntegerField(verbose_name='秒数', default=0)
-    bucket_id = models.IntegerField(verbose_name='关联存储桶id', default=0)
-    fg = models.CharField(max_length=20, verbose_name='ts个数,时间描述片段数',
-                          default='')  # 阿里为时间片段数,亚马逊为一个32bit整型,前28bit代表ts文件的时长
-    size = models.DecimalField(default=0, max_digits=4, decimal_places=2, verbose_name='视频/图片大小')  # 单位MB
-    file_type = models.SmallIntegerField(default=0, verbose_name='文件类型')  # 0:图片, 1:ts视频, 2:MP4视频
-
-    def __str__(self):
-        return self.id
-
-    class Meta:
-        db_table = 'icloud_storage_record'
-        verbose_name = u'云盘信息记录表'
-        verbose_name_plural = verbose_name
-        ordering = ('-id',)
-
-
-class VseesDeviceType(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='列表主键')
-    name = models.CharField(max_length=50, default='', verbose_name='设备类型名称')
-    icon_url = models.CharField(max_length=200, default='', verbose_name='图标地址')
-
-    def __str__(self):
-        return self.id
-
-    class Meta:
-        db_table = 'vsees_device_type'
-        verbose_name = u'微瞳设备类型表'
-        verbose_name_plural = verbose_name
-        ordering = ('-id',)
-
-
-class vseesProductInfo(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='列表主键')
-    file_name = models.CharField(max_length=120, default='', verbose_name='文件名')
-    vsees = models.ForeignKey(VseesDeviceType, to_field='id', on_delete=models.CASCADE, verbose_name='关联微瞳设备类型表')
-    title = models.CharField(max_length=32, default='', verbose_name='标题')
-    type = models.SmallIntegerField(default=0, verbose_name='类型{0:视频链接, 1:说明书, 2:固件}')
-    url = models.CharField(max_length=200, default='', verbose_name='路径')
-    add_time = models.IntegerField(verbose_name='添加时间', default=0)
-    upd_time = models.IntegerField(verbose_name='更新时间', default=0)
-    status = models.SmallIntegerField(default=0, verbose_name='状态0:已上架, 1: 已下架')
-    is_del = models.BooleanField(blank=True, default=False, verbose_name=u'是否删除')
-
-    def __str__(self):
-        return self.id
-
-    class Meta:
-        db_table = 'vsees_product_info'
-        verbose_name = u'微瞳产品信息记录表'
-        verbose_name_plural = verbose_name
-        ordering = ('-id',)
-
-
-class EnterpriseUserInfo(models.Model):
-    userID = models.IntegerField(primary_key=True, verbose_name=u'企业用户ID', unique=True)
-    name = models.CharField(blank=True, max_length=32, verbose_name=u'名字')
-    position = models.CharField(blank=True, max_length=64, verbose_name=u'岗位')
-    status = models.SmallIntegerField(default=0, verbose_name='用户状态')  # 1:已激活,2:已禁用,4:未激活,5:退出企业
-    add_time = models.IntegerField(default=0, verbose_name='创建时间')
-    upd_time = models.IntegerField(default=0, verbose_name='修改时间')
-
-    class Meta:
-        db_table = 'enterprise_user_info'
-        verbose_name = '企业用户信息'
-        verbose_name_plural = verbose_name
-
-
 class IotCardUsageHistory(models.Model):
 class IotCardUsageHistory(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='列表主键')
     id = models.AutoField(primary_key=True, verbose_name='列表主键')
     iccid = models.CharField(default='', max_length=32, verbose_name=u'ICCID号')
     iccid = models.CharField(default='', max_length=32, verbose_name=u'ICCID号')
@@ -3759,4 +3570,4 @@ class IotCardUsageHistory(models.Model):
     class Meta:
     class Meta:
         db_table = 'iot_card_usage_history'
         db_table = 'iot_card_usage_history'
         verbose_name = '物联网卡用量历史'
         verbose_name = '物联网卡用量历史'
-        verbose_name_plural = verbose_name
+        verbose_name_plural = verbose_name

+ 0 - 94
Object/AWS/AmazonS3Util.py

@@ -149,97 +149,3 @@ class AmazonS3Util:
             'Key': file_key
             'Key': file_key
         }
         }
         self.session_conn.meta.client.copy(source_dict, to_bucket, file_key)
         self.session_conn.meta.client.copy(source_dict, to_bucket, file_key)
-
-    def copy_single_obj(self, source_bucket, source_object, target_bucket, target_object, StorageClass=None):
-        """
-        单个对象复制
-        @param source_bucket:源存储桶
-        @param source_object:源对象
-        @param target_bucket:目标存储桶
-        @param target_object:目标对象
-        @param StorageClass:存储类
-        @return: None
-        """
-        s3 = self.session_conn
-        copy_source = {
-            'Bucket': source_bucket,
-            'Key': source_object
-        }
-        target_object = s3.Object(target_bucket, target_object)
-        if StorageClass:
-            target_object.copy_from(CopySource=copy_source, StorageClass=StorageClass)
-        else:
-            target_object.copy_from(CopySource=copy_source)
-
-    def generate_put_obj_url(self, bucket_name, obj_key, storage_class=None):
-        """
-        生成预签名对象URL
-        @param bucket_name: 存储桶名称
-        @param obj_key: 对象key
-        @param storage_class: 存储类 例
-        @return: 对象URL
-        """
-        params = {
-            'Bucket': bucket_name,
-            'Key': obj_key,
-        }
-        if storage_class:
-            params['StorageClass'] = storage_class
-        return self.session_conn.meta.client.generate_presigned_url('put_object',
-                                                                    Params=params,
-                                                                    ExpiresIn=7200)
-
-    def batch_copy_obj(self, source_bucket, target_bucket, prefix, target_prefix, storage_class=None):
-        """
-        批量拷贝对象
-        @param source_bucket: 源存储桶
-        @param target_bucket: 目标存储桶
-        @param prefix: 需要搜索的对象前缀 例:AUS000247LTCLY/vod1/1686043996
-        @param target_prefix: 目标对象前缀 例:app/algorithm-shop/1686043996
-        @param storage_class: 存储类
-        @return: None
-        """
-        s3 = self.session_conn
-        # 遍历源存储桶中指定前缀下的所有对象,依次进行复制操作
-        for obj in s3.Bucket(source_bucket).objects.filter(Prefix=prefix):
-            key = obj.key  # 对象键名
-            target_key = f'{target_prefix}/' + key.split('/')[-1]  # 新的对象键名,此处为 "new_path/" + 原有文件名
-            copy_source = {
-                'Bucket': source_bucket,
-                'Key': key
-            }
-            # 将对象复制到目标存储桶,并设置存储类型和新的对象键名
-            if storage_class:
-                s3.Object(target_bucket, target_key).copy_from(CopySource=copy_source, StorageClass=storage_class)
-            else:
-                s3.Object(target_bucket, target_key).copy_from(CopySource=copy_source)
-
-    def get_object_size(self,bucket_name, object_key):
-        """
-        获取存储桶中指定对象的大小
-
-        :param bucket_name: string,存储桶名称
-        :param object_key: string,对象键名
-        :return: int,指定对象的大小,单位为字节
-        """
-        s3 = self.session_conn
-        obj = s3.Object(bucket_name, object_key)
-        try:
-            return obj.content_length
-        except Exception as e:
-            return 0
-
-    def get_object_list(self, bucket_name, prefix):
-        """
-        获取指定路径所有对象
-
-        :param bucket_name: string,存储桶名称
-        :param prefix: string,路径
-        :return: int,指定对象的大小,单位为字节
-        """
-        try:
-            s3 = self.client_conn
-            obj = s3.list_objects_v2(Bucket=bucket_name, Prefix=prefix)
-            return obj['Contents']
-        except Exception as e:
-            return []

+ 17 - 13
Object/UnicomObject.py

@@ -359,16 +359,20 @@ class UnicomObjeect:
         @param icc_id:20位数字iccid
         @param icc_id:20位数字iccid
         @return: traffic
         @return: traffic
         """
         """
-        redis = RedisObject()
-        traffic_key = 'ASJ:UNICOM:FLOW:{}'.format(icc_id)
-        traffic_sys = 'ASJ:SIM:TRAFFIC:{}'.format(icc_id)
-        traffic_val = redis.get_data(traffic_key)
-        if traffic_val:
-            traffic_dict = json.loads(traffic_val)
-            redis.set_data(key=traffic_sys, val=traffic_val, expire=60 * 60 * 24)
-        else:
-            traffic_val = redis.get_data(traffic_sys)
-            if not traffic_val:
-                return 0
-            traffic_dict = json.loads(traffic_val)
-        return traffic_dict['data']['flowTotalUsage']
+        try:
+            redis = RedisObject()
+            traffic_key = 'ASJ:UNICOM:FLOW:{}'.format(icc_id)
+            traffic_sys = 'ASJ:SIM:TRAFFIC:{}'.format(icc_id)
+            traffic_val = redis.get_data(traffic_key)
+            if traffic_val:
+                traffic_dict = json.loads(traffic_val)
+                redis.set_data(key=traffic_sys, val=traffic_val, expire=60 * 60 * 24)
+            else:
+                traffic_val = redis.get_data(traffic_sys)
+                if not traffic_val:
+                    return 0
+                traffic_dict = json.loads(traffic_val)
+            return traffic_dict['data']['flowTotalUsage']
+        except Exception as e:
+            meg = '异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e))
+            return meg

+ 9 - 0
Object/WXTechObject.py

@@ -109,6 +109,15 @@ class WXTechObject:
         assert response.status_code == 200
         assert response.status_code == 200
         return UnicomObjeect().get_text_dict(response)
         return UnicomObjeect().get_text_dict(response)
 
 
+    def get_package_order_record(self, **params):
+        """
+        根据卡号,获取该卡片的套餐订购记录
+        @param params: iccid、operator
+        @return: 卡篇套餐订购记录
+        """
+        url = WX_TECH_URL + '/api/v2/package/packageOrderRecord'
+        return self.wx_service_api(url, **params)
+
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     pass
     pass

+ 4 - 26
Service/CommonService.py

@@ -17,7 +17,7 @@ from pyipip import IPIPDatabase
 from Ansjer.config import BASE_DIR, SERVER_DOMAIN_SSL, CONFIG_INFO, CONFIG_TEST, CONFIG_CN, SERVER_DOMAIN_TEST, \
 from Ansjer.config import BASE_DIR, SERVER_DOMAIN_SSL, CONFIG_INFO, CONFIG_TEST, CONFIG_CN, SERVER_DOMAIN_TEST, \
     SERVER_DOMAIN_CN, SERVER_DOMAIN_US, CONFIG_US, CONFIG_EUR, SERVER_DOMAIN_LIST, SERVER_DOMAIN_EUR
     SERVER_DOMAIN_CN, SERVER_DOMAIN_US, CONFIG_US, CONFIG_EUR, SERVER_DOMAIN_LIST, SERVER_DOMAIN_EUR
 from Controller.CheckUserData import RandomStr
 from Controller.CheckUserData import RandomStr
-from Model.models import iotdeviceInfoModel, Device_Info, UIDModel, AppDeviceType
+from Model.models import iotdeviceInfoModel, Device_Info, UIDModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 
 
@@ -549,7 +549,7 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
         """
         """
         根据uid查询返回完整序列号
         根据uid查询返回完整序列号
         @param uid: uid
         @param uid: uid
-        @param serial_number: 9位序列号
+        @param serial_number: 序列号
         @param device_type: 设备类型
         @param device_type: 设备类型
         @return: full_serial_number
         @return: full_serial_number
         """
         """
@@ -683,8 +683,8 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
 
 
         if CONFIG_INFO == CONFIG_TEST:
         if CONFIG_INFO == CONFIG_TEST:
             domain_name_list = [SERVER_DOMAIN_TEST[:-1]]
             domain_name_list = [SERVER_DOMAIN_TEST[:-1]]
-        elif CONFIG_INFO == CONFIG_CN or CONFIG_INFO == CONFIG_US:
-            domain_name_list = [SERVER_DOMAIN_US[:-1], SERVER_DOMAIN_CN[:-1]]
+        elif CONFIG_INFO == CONFIG_CN or CONFIG_INFO == CONFIG_US or CONFIG_INFO == CONFIG_EUR:
+            domain_name_list = [SERVER_DOMAIN_US[:-1], SERVER_DOMAIN_CN[:-1], SERVER_DOMAIN_EUR[:-1]]
         else:
         else:
             domain_name_list = []
             domain_name_list = []
         return domain_name_list
         return domain_name_list
@@ -727,28 +727,6 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
             return content
             return content
         elif order_type == 2:
         elif order_type == 2:
             pass
             pass
-        elif order_type == 4:
-            content = content + '(' + '云盘' + ')'
-            return content
-
-
-    @staticmethod
-    def is_cloud_device(ucode, device_type):
-        """
-        设备是否支持云存
-        @param ucode: 设备版本
-        @param device_type: 设备类型
-        """
-        if len(ucode) > 4:
-            number = ucode[-4]
-        else:
-            return False
-        device_type_qs = AppDeviceType.objects.filter(type=device_type).values('model')
-        model = device_type_qs[0]['model'] if device_type_qs.exists() else ''
-        #  判断设备是否为ipc设备和是否支持云存
-        if model == 2 and number in ['4', '5']:
-            return True
-        return False
 
 
     @staticmethod
     @staticmethod
     def negative_number_judgment(number_list):
     def negative_number_judgment(number_list):

BIN
requirements.txt