Selaa lähdekoodia

解绑uid添加事务,UIDModel修改mac字段属性

locky 4 vuotta sitten
vanhempi
commit
10b1ec1629
2 muutettua tiedostoa jossa 51 lisäystä ja 41 poistoa
  1. 50 40
      Controller/SerialNumberController.py
  2. 1 1
      Model/models.py

+ 50 - 40
Controller/SerialNumberController.py

@@ -374,6 +374,7 @@ class SerialNumberView(View):
         else:
             return response.json(444)
 
+    @transaction.atomic
     def do_detach_uid(self, request, request_dict, response):
         token = request_dict.get('token', None)
         time_stamp = request_dict.get('time_stamp', None)
@@ -396,46 +397,55 @@ class SerialNumberView(View):
             return response.json(173)
         uid_serial = uid_serial_qs[0]
 
-        # 删除iot设备信息表数据
-        iot = iotdeviceInfoModel.objects.filter(serial_number=serial)
-        if iot.exists():
-            iot.delete()
-
-        uid = uid_serial.uid.uid
-        company_serial_qs = CompanySerialModel.objects.filter(id=uid_serial.company_serial.id)
-        if company_serial_qs.exists():
-            company_serial = company_serial_qs[0]
-            company_serial.status = 1
-            company_serial.save()
-            dv_qs = Device_Info.objects.filter(UID=uid)
-            if dv_qs.exists():
-                # 删除设备
-                dv_qs.delete()
-                # 删除设备影子信息uid_set   外键关联删除设备推送配置信息 uid_push
-                up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
-                DetectControllerView().do_delete_redis(uid)
-                if up_qs.count() > 1:
-                    UidPushModel.objects.filter(uid_set__uid=uid).delete()
-                else:
-                    up_qs.delete()
-
-        UIDModel.objects.filter(uid=uid).update(status=0, mac='')    # 重置uid的使用状态为未分配
-        uid_serial.delete()
-
-        # 记录操作日志
-        ip = CommonService.get_ip_address(request)
-        content = json.loads(json.dumps(request_dict))
-        log = {
-            'ip': ip,
-            'user_id': 1,
-            'status': 200,
-            'time': now_time,
-            'content': json.dumps(content),
-            'url': 'serialNumber/detachUID',
-            'operation': '序列号{}解绑uid: {}'.format(serial, uid),
-        }
-        LogModel.objects.create(**log)
-        return response.json(0)
+        try:
+            save_point = transaction.savepoint()  # 设置事务保存点
+            # 删除iot设备信息表数据
+            iot = iotdeviceInfoModel.objects.filter(serial_number=serial)
+            if iot.exists():
+                iot.delete()
+
+            uid = uid_serial.uid.uid
+            company_serial_qs = CompanySerialModel.objects.filter(id=uid_serial.company_serial.id)
+            if company_serial_qs.exists():
+                company_serial = company_serial_qs[0]
+                company_serial.status = 1
+                company_serial.save()
+                dv_qs = Device_Info.objects.filter(UID=uid)
+                if dv_qs.exists():
+                    # 删除设备
+                    dv_qs.delete()
+                    # 删除设备影子信息uid_set   外键关联删除设备推送配置信息 uid_push
+                    up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
+                    DetectControllerView().do_delete_redis(uid)
+                    if up_qs.count() > 1:
+                        UidPushModel.objects.filter(uid_set__uid=uid).delete()
+                    else:
+                        up_qs.delete()
+
+            UIDModel.objects.filter(uid=uid).update(status=0, mac='')    # 重置uid的使用状态为未分配
+            uid_serial.delete()
+
+            # 记录操作日志
+            ip = CommonService.get_ip_address(request)
+            content = json.loads(json.dumps(request_dict))
+            log = {
+                'ip': ip,
+                'user_id': 1,
+                'status': 200,
+                'time': now_time,
+                'content': json.dumps(content),
+                'url': 'serialNumber/detachUID',
+                'operation': '序列号{}解绑uid: {}'.format(serial, uid),
+            }
+            LogModel.objects.create(**log)
+            transaction.savepoint_commit(save_point)  # 提交事务
+            return response.json(0)
+        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))
 
     def do_update(self, userID, request_dict, response):
         # perm = ModelService.check_perm_uid_manage(userID, 0)

+ 1 - 1
Model/models.py

@@ -1341,7 +1341,7 @@ class VPGModel(models.Model):
 class UIDModel(models.Model):
     id = models.AutoField(primary_key=True)
     uid = models.CharField(max_length=20, null=False, db_index=True, unique=True, verbose_name='设备id')
-    mac = models.CharField(max_length=17, null=False, default='', unique=True, verbose_name='设备id对应的mac地址')
+    mac = models.CharField(max_length=17, null=True, default='', unique=True, verbose_name='设备id对应的mac地址')
     uid_extra = models.TextField(default='', verbose_name='uid的额外描述')
     status = models.SmallIntegerField(default=0, verbose_name='使用状态')   # 0:未分配,1:已分配,2:已使用
     add_time = models.IntegerField(default=0, verbose_name='添加时间')