Bladeren bron

优化序列号绑定uid接口2

locky 9 maanden geleden
bovenliggende
commit
f9243e26bd
2 gewijzigde bestanden met toevoegingen van 42 en 14 verwijderingen
  1. 8 14
      Controller/SerialNumberController.py
  2. 34 0
      Controller/TestApi.py

+ 8 - 14
Controller/SerialNumberController.py

@@ -144,6 +144,13 @@ class SerialNumberView(View):
             if serial_unbind_uid_qs.exists():
                 return response.json(5)
 
+            # redis加锁,防止同一个序列号重复绑定
+            key = serial + 'do_attach_uid'
+            is_lock = redisObj.CONN.setnx(key, 1)
+            if not is_lock:
+                return response.json(5)
+            redisObj.CONN.expire(key, 60)
+
             # 判断序列号是否已和企业关联
             company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_secret, serial_number=serial)
             if not company_serial_qs.exists():
@@ -164,13 +171,6 @@ class SerialNumberView(View):
                         return response.json(5)
                     region_country = app_scanned_serial_qs[0]['region_country']
 
-                # redis加锁,防止同一个序列号重复绑定
-                key = serial + 'do_attach_uid'
-                is_lock = redisObj.CONN.setnx(key, 1)
-                if not is_lock:
-                    return response.json(5)
-                redisObj.CONN.expire(key, 60)
-
                 # 获取并判断region_id
                 region_id = CommonService.confirm_region_id(region_country)
                 if region_id not in REGION_ID_LIST:
@@ -218,10 +218,6 @@ class SerialNumberView(View):
                         company_serial.update_time = now_time
                         company_serial.save()
 
-                        dev = Device_Info.objects.filter(UID=uid.uid)
-                        if dev.exists():
-                            dev.update(serial_number=full_serial)
-
                         full_uid_code = uid.full_uid_code
                         if uid.platform in CRCKey.keys():
                             full_uid_code += ':' + CRCKey[uid.platform]
@@ -284,9 +280,7 @@ class SerialNumberView(View):
                     return response.json(10042)
                 return response.json(0, self.get_uid_info_by_serial(company_serial.id))
         except Exception as e:
-            djangoLogger = logging.getLogger('django')
-            djangoLogger.exception(repr(e))
-            return response.json(176, str(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     @classmethod
     def get_uid_info_by_serial(cls, company_serial_id):

+ 34 - 0
Controller/TestApi.py

@@ -197,6 +197,8 @@ class testView(View):
             return self.getObsSignedUrl(request_dict, response)
         elif operation == 'duplicateRemovalUidSet':
             return self.duplicate_removal_uid_set(request_dict, response)
+        elif operation == 'checkSerialUID':
+            return self.checkSerialUID(response)
         else:
             return response.json(414)
 
@@ -1480,3 +1482,35 @@ class testView(View):
             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 checkSerialUID(response):
+        try:
+            cursor = connection.cursor()
+            sql = 'SELECT company_serial_id FROM `tb_uid_company_serial` GROUP BY company_serial_id HAVING count(company_serial_id) >= 2'
+            cursor.execute(sql)
+            rows = cursor.fetchall()
+            for row in rows:
+                company_serial_id = row[0]
+                # 查询关联的uid
+                uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id).\
+                    values('company_serial__serial_number', 'uid__uid', 'uid_id', 'company_serial_id')
+                print(uid_qs[0]['company_serial__serial_number'])
+                pre_del_count = 0
+                pre_del_uid_id = 0
+                for uid_q in uid_qs:
+                    uid = uid_q['uid__uid']
+                    log_count = LogModel.objects.filter(operation__contains=uid).count()
+                    if log_count == 1:
+                        pre_del_count += 1
+                        pre_del_uid_id = uid_q['uid_id']
+                # 如果uid相关日志大于1的计数只有一次,删除该uid绑定数据
+                if pre_del_count == 1:
+                    print('序列号解绑uid,company_serial_id:{},uid_id:{}'.
+                          format(uid_qs[0]['company_serial_id'], pre_del_uid_id))
+                    UIDCompanySerialModel.objects.filter(uid_id=pre_del_uid_id).delete()
+            cursor.close()
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+