Browse Source

二维码分享设备默认全部通道权限

zhangdongming 2 years ago
parent
commit
4f2616454d
2 changed files with 43 additions and 3 deletions
  1. 2 1
      Controller/DeviceShare.py
  2. 41 2
      Controller/UserDevice/UserDeviceShareController.py

+ 2 - 1
Controller/DeviceShare.py

@@ -19,6 +19,7 @@ from django.views.generic.base import View
 
 from Ansjer.config import SERVER_DOMAIN
 from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
+from Controller.UserDevice.UserDeviceShareController import UserDeviceShareView
 from Model.models import Device_Info, Device_User, DeviceChannelUserSet, DeviceChannelUserPermission
 from Model.models import UID_Bucket
 from Object.RedisObject import RedisObject
@@ -183,7 +184,7 @@ class DeviceShareView(View):
                     sharerDvqs.primaryMaster = primaryMaster
                     sharerDvqs.data_joined = None
                     sharerDvqs.save()
-
+                    UserDeviceShareView.qrcode_share_channel_permission_save(userID, UID)
                     # redisObj = RedisObject(db=8)
                     # redisObj.del_data(key='uid_qs_' + userID)
                 except Exception as e:

+ 41 - 2
Controller/UserDevice/UserDeviceShareController.py

@@ -12,7 +12,7 @@ import time
 from django.db import transaction
 from django.views import View
 
-from Model.models import DeviceSharePermission, DeviceChannelUserSet, DeviceChannelUserPermission
+from Model.models import DeviceSharePermission, DeviceChannelUserSet, DeviceChannelUserPermission, UidChannelSetModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 
@@ -67,7 +67,7 @@ class UserDeviceShareView(View):
                 .values('permission_id', 'channel_user_id')
             if not channel_permission_qs.exists():
                 return response.json(0, {})
-            channel_list = list(range(1, int(channel_count)+1))
+            channel_list = list(range(1, int(channel_count) + 1))
             share_channel_list = user_permission_qs[0]['channels'].split(',')
             c_list = []
             for channel in channel_list:
@@ -133,3 +133,42 @@ class UserDeviceShareView(View):
         except Exception as e:
             LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, repr(e))
+
+    @staticmethod
+    def qrcode_share_channel_permission_save(user_id, uid):
+        """
+        二维码分享保存通道权限
+        @param user_id: 用户id
+        @param uid: 用户设备ID
+        @return: True | False
+        """
+        try:
+            if not all([user_id, uid]):
+                return False
+            channel_qs = UidChannelSetModel.objects.filter(uid).values('channel')
+            if not channel_qs.exists():
+                return False
+            channel_list = list(channel_qs)
+            channel_str = ','.join(channel_list)
+            with transaction.atomic():
+                now_time = int(time.time())
+                device_set = {'uid': uid, 'user_id': user_id, 'channels': channel_str,
+                              'created_time': now_time, 'updated_time': now_time}
+                ds_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
+                if ds_qs.exists():
+                    return True
+                device_user_set = DeviceChannelUserSet.objects.create(**device_set)
+                channel_permission_qs = DeviceSharePermission.objects \
+                    .all().values('id', 'code').order_by('sort')
+                user_set_id = device_user_set.id
+                channel_permission_list = []
+                for item in channel_permission_qs:
+                    channel_permission_list.append(DeviceChannelUserPermission(
+                        permission_id=item['id'],
+                        channel_user_id=user_set_id,
+                        created_time=now_time))
+                DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
+            return True
+        except Exception as e:
+            LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return False