Bladeren bron

保存用户设备网络信息

locky 5 maanden geleden
bovenliggende
commit
e3742a2fd5
3 gewijzigde bestanden met toevoegingen van 146 en 8 verwijderingen
  1. 6 6
      Ansjer/cn_config/test_settings.py
  2. 128 2
      Controller/SerialNumberController.py
  3. 12 0
      Model/models.py

+ 6 - 6
Ansjer/cn_config/test_settings.py

@@ -75,15 +75,15 @@ WSGI_APPLICATION = 'Ansjer.cn_config.test_wsgi.application'
 
 # 业务数据库
 DATABASE_DATA = 'ansjer_server_test'
-SERVER_HOST = 'server-cn.cvp7gfpnmziz.rds.cn-northwest-1.amazonaws.com.cn'
-DATABASES_USER = 'aws_rds'
-DATABASES_PASS = 'H84NQ8NARr9e39tn6aW5'
+SERVER_HOST = '124.70.222.33'
+DATABASES_USER = 'root'
+DATABASES_PASS = 'Ansjer123'
 
 # 推送数据库
 DATABASE_DATA2 = 'ansjer_push_test'
-SERVER_HOST2 = 'push-cn.cvp7gfpnmziz.rds.cn-northwest-1.amazonaws.com.cn'
-DATABASES_USER2 = 'aws_rds'
-DATABASES_PASS2 = 'Dil02uKDyd5Mxv7fhhHJ'
+SERVER_HOST2 = '124.70.222.33'
+DATABASES_USER2 = 'root'
+DATABASES_PASS2 = 'Ansjer123'
 
 DATABASES = {
     'default': {

+ 128 - 2
Controller/SerialNumberController.py

@@ -6,16 +6,20 @@ from datetime import datetime
 
 import requests
 from django.db import transaction
+from django.db.models import Q
 from django.views import View
 
 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, \
-    SERVER_DOMAIN_LIST, SERVER_DOMAIN_CN, SERVER_DOMAIN_EUR, RESET_REGION_ID_SERIAL_REDIS_LIST, LOGGER, CONFIG_TEST
+    SERVER_DOMAIN_LIST, SERVER_DOMAIN_CN, SERVER_DOMAIN_EUR, RESET_REGION_ID_SERIAL_REDIS_LIST, LOGGER, CONFIG_TEST, \
+    SERVER_DOMAIN
+from Controller.CheckUserData import DataValid
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
     iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
     Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
-    AiService, DeviceDomainRegionModel, RegionModel, UidPushModel, AppScannedSerial, Device_User, SerialUnbindUID
+    AiService, DeviceDomainRegionModel, RegionModel, UidPushModel, AppScannedSerial, Device_User, SerialUnbindUID, \
+    DeviceNetInfo
 from Object.AWS.S3Email import S3Email
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
@@ -70,6 +74,8 @@ class SerialNumberView(View):
             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)
+        elif operation == 'saveUserNetInfo':
+            return self.save_user_net_info(request_dict, response)
         else:
             return response.json(414)
 
@@ -969,3 +975,123 @@ class SerialNumberView(View):
         except Exception as e:
             LOGGER.info('{}同步iot异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
             return False
+
+    @classmethod
+    def save_user_net_info(cls, request_dict, response):
+        """
+        保存用户网络信息
+        @return:
+        """
+        serial = request_dict.get('serial', None)
+        username = request_dict.get('username', None)
+        wifi_name = request_dict.get('wifi_name', None)
+        wifi_password = request_dict.get('wifi_password', None)
+        time_stamp = request_dict.get('time_stamp', None)
+        token = request_dict.get('time_stamp_token', None)
+
+        if not all([serial, username, wifi_name, wifi_password, time_stamp, token]):
+            return response.json(444)
+
+        if len(serial) < 14:
+            return response.json(444, '序列号长度小于14')
+        # 根据序列号获取p2p类型,设备类型信息
+        serial_number = serial[:9]
+        p2p_type = serial[9:10]
+        device_type = int(serial[10:14], 16)
+
+        # 请求绑定uid或查询uid
+        data = {
+            'serial_number': serial_number,
+            'p2ptype': p2p_type,
+            'time_stamp': time_stamp,
+            'token': token,
+            'is_verify': '1'
+        }
+        url = SERVER_DOMAIN + 'serialNumber/attachUID'
+        try:
+            r = requests.post(url=url, data=data, timeout=30)
+            assert r.status_code == 200
+            r = r.json()
+            if r['result_code'] != 0:
+                return response.json(r['result_code'])
+            uid = CommonService.decode_data(r['result']['uid'])
+
+            # 查询用户是否存在,不存在则创建
+            device_user_qs = Device_User.objects.filter(username=username).values('userID')
+            if device_user_qs.exists():
+                user_id = device_user_qs[0]['userID']
+                # 判断设备是否已被其他账号添加
+                device_info_qs = Device_Info.objects.filter(~Q(userID_id=user_id), UID=uid).values('id')
+                if device_info_qs.exists():
+                    return response.json(174)
+                # 已保存过,更新网络信息
+                device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid).values('id')
+                if device_info_qs.exists():
+                    device_id = device_info_qs[0]['id']
+                    device_net_info_qs = DeviceNetInfo.objects.filter(device_id=device_id)
+                    if device_net_info_qs.exists():
+                        device_net_info_qs.update(wifi_name=wifi_name, wifi_password=wifi_password)
+                else:
+                    # 创建用户设备和设备网络数据
+                    cls.creat_device_data(user_id, serial, uid, device_type, username, wifi_name, wifi_password)
+            else:
+                # 判断设备是否已被其他账号添加
+                device_info_qs = Device_Info.objects.filter(UID=uid).values('id')
+                if device_info_qs.exists():
+                    return response.json(174)
+                password = ''
+                user_id = CommonService.getUserID(μs=False, setOTAID=True)
+                user_data = {
+                    'userID': user_id,
+                    'username': username,
+                    'NickName': username,
+                    'password': password,
+                    'is_active': True,
+                    'user_isValid': True
+                }
+                # 判断用户名是手机号还是邮箱
+                if DataValid().mobile_validate(username):
+                    user_data['phone'] = username
+                elif DataValid().email_validate(username):
+                    user_data['userEmail'] = username
+                else:
+                    return response.json(444)
+                Device_User.objects.create(**user_data)
+
+                # 创建用户设备和设备网络数据
+                cls.creat_device_data(user_id, serial, uid, device_type, username, wifi_name, wifi_password)
+
+            # 生成或更新扫码记录
+            serial = serial[:6]
+            now_time = int(time.time())
+            app_scanned_serial_qs = AppScannedSerial.objects.filter(serial=serial)
+            if app_scanned_serial_qs.exists():
+                app_scanned_serial_qs.update(update_time=now_time)
+            else:
+                AppScannedSerial.objects.create(serial=serial, add_time=now_time, update_time=now_time)
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def creat_device_data(user_id, serial, uid, device_type, username, wifi_name, wifi_password):
+        """
+
+        @param user_id:
+        @param serial:
+        @param uid:
+        @param device_type:
+        @param username:
+        @param wifi_name:
+        @param wifi_password:
+        @return:
+        """
+        device_id = CommonService.getUserID(getUser=False)
+        Device_Info.objects.create(
+            id=device_id, userID_id=user_id, serial_number=serial[:9], UID=uid, NickName=serial[:6],
+            Type=device_type, View_Account='admin', View_Password='admin', vodPrimaryMaster=username,
+            vodPrimaryUserID=user_id
+        )
+        DeviceNetInfo.objects.create(
+            device_id=device_id, wifi_name=wifi_name, wifi_password=wifi_password
+        )

+ 12 - 0
Model/models.py

@@ -5499,3 +5499,15 @@ class CountryAPN(models.Model):
     class Meta:
         db_table = 'country_apn'
         verbose_name = 'APN配置表'
+
+
+class DeviceNetInfo(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    device_id = models.CharField(default='', max_length=32, verbose_name='关联设备信息表id')
+    wifi_name = models.CharField(default='', max_length=64, verbose_name='wifi名称')
+    wifi_password = models.CharField(default='', max_length=64, verbose_name='wifi密码')
+
+    class Meta:
+        db_table = 'device_net_info'
+        verbose_name = '设备网络信息'
+