소스 검색

扫码保存国家id,新增返回中东地区uid,绑定uid传参is_verify: '1'时跳过查询扫码记录

locky 11 달 전
부모
커밋
a1a7052d24
4개의 변경된 파일40개의 추가작업 그리고 18개의 파일을 삭제
  1. 3 1
      Ansjer/config.py
  2. 26 11
      Controller/SerialNumberController.py
  3. 3 2
      Model/models.py
  4. 8 4
      Service/CommonService.py

+ 3 - 1
Ansjer/config.py

@@ -25,7 +25,9 @@ UNUSED_SERIAL_REDIS_LIST = 'unused_serial_redis_list'
 RESET_REGION_ID_SERIAL_REDIS_LIST = 'reset_region_id_serial_redis_list'
 
 # 地区id列表
-REGION_ID_LIST = [1, 2, 3, 4, 5]
+REGION_ID_LIST = [1, 2, 3, 4, 5, 6]
+# 中东西亚国家id列表
+ME_COUNTRY_ID_LIST = [31, 32, 36, 39, 48]
 
 # 支付类型
 PAY_TYPE_PAYPAL = 1

+ 26 - 11
Controller/SerialNumberController.py

@@ -15,7 +15,7 @@ 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
+    AiService, DeviceDomainRegionModel, RegionModel, UidPushModel, AppScannedSerial, Device_User
 from Object.AWS.S3Email import S3Email
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
@@ -48,7 +48,10 @@ class SerialNumberView(View):
         elif operation == 'detachUID':  # 解绑uid
             return self.do_detach_uid(request, request_dict, response)
         elif operation == 'get-uid':  # app获取uid
-            return self.get_uid(request_dict, response, request)
+            token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
+            if token_code != 0:
+                return response.json(token_code)
+            return self.get_uid(request_dict, response, request, user_id)
         elif operation == 'create':  # 创建序列号
             return self.do_create(request_dict, response)
         elif operation == 'getUID':  # 根据序列号获取uid
@@ -105,6 +108,7 @@ class SerialNumberView(View):
         serial_number = request_dict.get('serial_number', None)
         token = request_dict.get('token', None)
         time_stamp = request_dict.get('time_stamp', None)
+        is_verify = request_dict.get('is_verify', None)
 
         if not all([serial_number, token, time_stamp]):
             return response.json(444)
@@ -144,12 +148,16 @@ class SerialNumberView(View):
             if company_serial.status == 0:  # 该序列号未绑定企业
                 return response.json(173)
             elif company_serial.status == 1:  # 绑定uid
-
-                # 查询app是否已扫码,未扫码不能进行绑定
-                app_scanned_serial_qs = AppScannedSerial.objects.filter(serial=serial)
-                if not app_scanned_serial_qs.exists():
-                    LOGGER.info(f'{serial}当前序列号未进行APP扫码')
-                    return response.json(5)
+                # is_verify: '1',跳过查询扫码记录
+                if is_verify == '1':
+                    region_country = 0
+                else:
+                    # 查询app是否已扫码,未扫码不能进行绑定
+                    app_scanned_serial_qs = AppScannedSerial.objects.filter(serial=serial).values('region_country')
+                    if not app_scanned_serial_qs.exists():
+                        LOGGER.info(f'{serial}当前序列号未进行APP扫码')
+                        return response.json(5)
+                    region_country = app_scanned_serial_qs[0]['region_country']
 
                 # redis加锁,防止同一个序列号重复绑定
                 key = serial + 'do_attach_uid'
@@ -159,7 +167,7 @@ class SerialNumberView(View):
                 redisObj.CONN.expire(key, 60)
 
                 # 获取并判断region_id
-                region_id = CommonService.confirm_region_id()
+                region_id = CommonService.confirm_region_id(region_country)
                 if region_id not in REGION_ID_LIST:
                     return response.json(444, {'invalid region_id': region_id})
 
@@ -628,12 +636,13 @@ class SerialNumberView(View):
             LogModel.objects.create(**log)
             return response.json(176, str(e))
 
-    def get_uid(self, request_dict, response, request):
+    def get_uid(self, request_dict, response, request, user_id):
         """
         app获取序列号
         @param request_dict:
         @param response:
         @param request:
+        @param user_id:
         @return:
         """
         token = request_dict.get('token', None)
@@ -660,9 +669,15 @@ class SerialNumberView(View):
         try:
             # 添加或更新扫码记录
             ip = CommonService.get_ip_address(request)
+            # 查询用户国家id
+            region_country = 0
+            device_user_qs = Device_User.objects.filter(userID=user_id).values('region_country')
+            if device_user_qs.exists():
+                region_country = device_user_qs[0]['region_country']
             data = {
                 'ip': ip,
-                'update_time': now_time
+                'update_time': now_time,
+                'region_country': region_country
             }
             app_scanned_serial_qs = AppScannedSerial.objects.filter(serial=serial)
             if app_scanned_serial_qs.exists():

+ 3 - 2
Model/models.py

@@ -354,7 +354,7 @@ class EquipmentInfo1(models.Model):
     alarm = models.CharField(default='', max_length=256, verbose_name='报警信息')
     # 0:无图, 1:单图, 3:多图
     is_st = models.PositiveSmallIntegerField(default=0, verbose_name='图片信息')
-    # 1: 阿里云, 2: AWS
+    # 1: 阿里云, 2: AWS, 3: oci美国凤凰城, 4: oci英国伦敦, 5: 华为云
     storage_location = models.PositiveSmallIntegerField(default=1, verbose_name='存储桶位置')
     border_coords = models.TextField(default='', verbose_name='ai类型图片边框位置信息')
     status = models.BooleanField(default=False, verbose_name='已读状态')  # 0: 未读, 1: 已读
@@ -1671,7 +1671,7 @@ class Store_Meal(models.Model):
     expire = models.IntegerField(default=0, blank=True, verbose_name=u'有效期')  # 单位月
     # content = models.TextField(blank=True, null=True, verbose_name=u'描述')
     add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
-    # type = models.SmallIntegerField(default=0, verbose_name='付款类型')  # 0是paypal,1为支付宝
+    # 1: PayPal, 2: 支付宝, 3: 微信, 4: 苹果支付, 5: 苹果内购, 10: 免费体验, 11: 激活码
     pay_type = models.ManyToManyField(to='Pay_Type', verbose_name='付款类型', db_table='store_meal_pay')
     update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id', on_delete=models.CASCADE,
@@ -3430,6 +3430,7 @@ class DeviceDomainRegionModel(models.Model):
 class AppScannedSerial(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
     serial = models.CharField(default='', max_length=9, db_index=True, verbose_name='序列号')
+    region_country = models.IntegerField(default=0, verbose_name='关联tb_country表id')
     ip = models.CharField(default='', max_length=32, verbose_name='ip')
     add_time = models.IntegerField(default=0, verbose_name='添加时间')
     update_time = models.IntegerField(default=0, verbose_name='更新时间')

+ 8 - 4
Service/CommonService.py

@@ -19,7 +19,8 @@ from django.utils.crypto import constant_time_compare
 from pyipip import IPIPDatabase
 
 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, ALEXA_DOMAIN
+    SERVER_DOMAIN_CN, SERVER_DOMAIN_US, CONFIG_US, CONFIG_EUR, SERVER_DOMAIN_LIST, SERVER_DOMAIN_EUR, ALEXA_DOMAIN, \
+    ME_COUNTRY_ID_LIST
 from Controller.CheckUserData import RandomStr
 from Model.models import iotdeviceInfoModel, Device_Info, UIDModel, AppDeviceType, UIDCompanySerialModel, GatewayPush, \
     Device_User
@@ -595,14 +596,17 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
             return thing_name_suffix
 
     @staticmethod
-    def confirm_region_id():
+    def confirm_region_id(region_country=0):
         """
-        根据配置信息确定region_id
+        根据配置信息和国家确定region_id
+        @param region_country: 用户国家id
         @return: region_id
         """
         region_id = 3
         if CONFIG_INFO == CONFIG_US:  # 美洲
-            region_id = 3
+            # '沙特阿拉伯', '‌阿拉伯联合酋长国','格鲁吉亚','土耳其','阿塞拜疆'返回中东地区id
+            if region_country in ME_COUNTRY_ID_LIST:
+                region_id = 6
         elif CONFIG_INFO == CONFIG_EUR:  # 欧洲
             region_id = 4
         elif CONFIG_INFO == CONFIG_CN:  # 中国