Эх сурвалжийг харах

优化序列号绑定uid代码

locky 4 жил өмнө
parent
commit
5df11f7796

+ 74 - 77
Controller/SerialNumberController.py

@@ -204,94 +204,91 @@ class SerialNumberView(View):
         mark = serial_number[6:9]
         serial = serial_number[0:6]
 
-        savePoint = transaction.savepoint()
         try:
-            try:
-                if not country_id:
-                    ip = CommonService.get_ip_address(request)
-                    country_id = Device_Region().get_device_region(ip)
+            if not country_id:
+                ip = CommonService.get_ip_address(request)
+                country_id = Device_Region().get_device_region(ip)
 
-                # 判断序列号是否已和企业关联
-                company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id, serial_number=serial)
-                if not company_serial_qs.exists():
-                    return response.json(173)
+            # 判断序列号是否已和企业关联
+            company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id, serial_number=serial)
+            if not company_serial_qs.exists():
+                return response.json(173)
 
-                # 当序列号已关联UID
-                company_serial = company_serial_qs[0]
+            # 当序列号已关联UID
+            company_serial = company_serial_qs[0]
 
-                if company_serial.status == 0:  # 该序列号未绑定企业
-                    return response.json(173)
-                elif company_serial.status == 1:    # 绑定uid
-                    count = 0
-                    while count < 3:
-                        p2p = SerialNumberModel.objects.filter(serial_number=serial).values('p2p')
-                        print('此序列号的p2p类型:', p2p[0]['p2p'])
-                        uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id,
-                                                         vpg__region_id=country_id,
-                                                         status=0, p2p_type=p2p[0]['p2p']).order_by('id')[0:10]
-                        # uid_qs:未进行绑定的uid列表
-                        if not uid_qs.exists():
-                            return response.json(173)
-                        uid = uid_qs[0]
-                        result = UIDModel.objects.filter(id=uid.id, status=0).\
-                            update(**{'status': 2, 'update_time': int(time.time())})
-
-                        if int(result) <= 0:    # 更新失败
-                            count += 1
-                            continue
-
-                        uid_serial = UIDCompanySerialModel(uid_id=uid.id, company_serial_id=company_serial.id,
-                                                           add_time=now_time, update_time=now_time)
-                        uid_serial.save()
-
-                        company_serial.status = 2
-                        company_serial.save()
-
-                        dev = Device_Info.objects.filter(UID=uid.uid)
-                        if dev.exists():
-                            dev.update(serial_number=serial_number)
-
-                        full_uid_code = uid.uid__full_uid_code
-                        if uid.platform in CRCKey.keys():
-                            full_uid_code += ':'+CRCKey[uid.platform]
-
-                        res = {
-                            'full_uid_code': CommonService.encode_data(full_uid_code),
-                            'uid': CommonService.encode_data(uid.uid),
-                            'mac': CommonService.encode_data(uid.mac),
-                            'extra': uid.uid_extra,
-                            'platform': uid.platform,
-                            'initString': uid.init_string,
-                            'initStringApp': uid.init_string_app,
-                        }
-                        return response.json(0, res)
-                    return response.json(5)
-                else:
-                    uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial.id)
+            if company_serial.status == 0:  # 该序列号未绑定企业
+                return response.json(173)
+            elif company_serial.status == 1:    # 绑定uid
+                save_point = transaction.savepoint()    # 设置事务保存点
+                count = 0
+                # 获取序列号的p2p类型
+                p2p = SerialNumberModel.objects.filter(serial_number=serial).values('p2p')[0]['p2p']
+                while count < 3:
+                    # 查询是否存在未绑定序列号的uid
+                    uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id,
+                                                     vpg__region_id=country_id, status=0, p2p_type=p2p). \
+                                                     order_by('id')
                     if not uid_qs.exists():
                         return response.json(173)
-                    uid = uid_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__full_uid_code',
-                                        'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
-                    full_uid_code = uid['uid__full_uid_code']
-                    if uid['uid__platform'] in CRCKey.keys():
-                        full_uid_code += ':'+CRCKey[uid['uid__platform']]
+
+                    uid = uid_qs[0]
+                    result = UIDModel.objects.filter(id=uid.id, status=0).\
+                        update(status=2, update_time=now_time)
+
+                    if int(result) <= 0:    # 更新失败
+                        count += 1
+                        continue
+
+                    # UID关联【企业关联序列号】表创建数据
+                    UIDCompanySerialModel.objects.create(uid_id=uid.id, company_serial_id=company_serial.id,
+                                                         add_time=now_time, update_time=now_time)
+
+                    company_serial.status = 2
+                    company_serial.save()
+
+                    dev = Device_Info.objects.filter(UID=uid.uid)
+                    if dev.exists():
+                        dev.update(serial_number=serial_number)
+
+                    full_uid_code = uid.uid__full_uid_code
+                    if uid.platform in CRCKey.keys():
+                        full_uid_code += ':'+CRCKey[uid.platform]
+
                     res = {
                         'full_uid_code': CommonService.encode_data(full_uid_code),
-                        'uid': CommonService.encode_data(uid['uid__uid']),
-                        'mac': CommonService.encode_data(uid['uid__mac']),
-                        'extra': uid['uid__uid_extra'],
-                        'platform': uid['uid__platform'],
-                        'initString': uid['uid__init_string'],
-                        'initStringApp': uid['uid__init_string_app'],
+                        'uid': CommonService.encode_data(uid.uid),
+                        'mac': CommonService.encode_data(uid.mac),
+                        'extra': uid.uid_extra,
+                        'platform': uid.platform,
+                        'initString': uid.init_string,
+                        'initStringApp': uid.init_string_app,
                     }
+                    transaction.savepoint_commit(save_point)    # 提交事务
                     return response.json(0, res)
-            except Exception as e:
-                if savePoint:
-                    transaction.rollback(savePoint)
-                djangoLogger = logging.getLogger('django')
-                djangoLogger.exception(repr(e))
-                return response.json(176, str(e))
+                return response.json(5)
+            else:
+                uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial.id)
+                if not uid_qs.exists():
+                    return response.json(173)
+                uid = uid_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__full_uid_code',
+                                    'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
+                full_uid_code = uid['uid__full_uid_code']
+                if uid['uid__platform'] in CRCKey.keys():
+                    full_uid_code += ':'+CRCKey[uid['uid__platform']]
+                res = {
+                    'full_uid_code': CommonService.encode_data(full_uid_code),
+                    'uid': CommonService.encode_data(uid['uid__uid']),
+                    'mac': CommonService.encode_data(uid['uid__mac']),
+                    'extra': uid['uid__uid_extra'],
+                    'platform': uid['uid__platform'],
+                    'initString': uid['uid__init_string'],
+                    'initStringApp': uid['uid__init_string_app'],
+                }
+                return response.json(0, res)
         except Exception as e:
+            if save_point:
+                transaction.savepoint_rollback(save_point)  # 事务回滚
             djangoLogger = logging.getLogger('django')
             djangoLogger.exception(repr(e))
             return response.json(176, str(e))