| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | 
							- # -*- encoding: utf-8 -*-
 
- """
 
- @File    : UserDeviceShareController.py
 
- @Time    : 2023/1/7 15:05
 
- @Author  : stephen
 
- @Email   : zhangdongming@asj6.wecom.work
 
- @Software: PyCharm
 
- """
 
- import logging
 
- import time
 
- from django.db import transaction
 
- from django.views import View
 
- from Model.models import DeviceSharePermission, DeviceChannelUserSet, DeviceChannelUserPermission, UidChannelSetModel
 
- from Object.ResponseObject import ResponseObject
 
- from Object.TokenObject import TokenObject
 
- LOGGER = logging.getLogger('info')
 
- class UserDeviceShareView(View):
 
-     def get(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         operation = kwargs.get('operation')
 
-         return self.validation(request.GET, request, operation)
 
-     def post(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         operation = kwargs.get('operation')
 
-         return self.validation(request.POST, request, operation)
 
-     def validation(self, request_dict, request, operation):
 
-         token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
 
-         lang = request_dict.get('lang', token.lang)
 
-         response = ResponseObject(lang)
 
-         if token.code != 0:
 
-             return response.json(token.code)
 
-         if operation == 'user-permissions':
 
-             return self.get_user_share_permission(request_dict, response)
 
-         elif operation == 'permissions-save':
 
-             return self.user_channel_permission_save(request_dict, response)
 
-         else:
 
-             return response.json(404)
 
-     @classmethod
 
-     def get_user_share_permission(cls, request_dict, response):
 
-         """
 
-         获取用户分享权限
 
-         @param request_dict: 设备uid
 
-         @param response: 响应对象
 
-         @return: permission List
 
-         """
 
-         try:
 
-             uid = request_dict.get('uid', None)
 
-             user_id = request_dict.get('userId', None)
 
-             channel_count = request_dict.get('channelCount', None)
 
-             if not all([user_id, uid, channel_count]):
 
-                 return response(444, 'uid, userId and channelCount is required')
 
-             user_permission_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid) \
 
-                 .values('id', 'channels')
 
-             if not user_permission_qs.exists():
 
-                 return response.json(0, {})
 
-             up_id = user_permission_qs[0]['id']
 
-             channel_permission_qs = DeviceChannelUserPermission.objects.filter(channel_user_id=up_id) \
 
-                 .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))
 
-             share_channel_list = user_permission_qs[0]['channels'].split(',')
 
-             c_list = []
 
-             for channel in channel_list:
 
-                 is_select = 1 if str(channel) in share_channel_list else 0
 
-                 c_list.append({'channelIndex': channel, 'isSelect': is_select})
 
-             p_list = []
 
-             permission_qs = DeviceSharePermission.objects.all()
 
-             share_permission_list = [item['permission_id'] for item in channel_permission_qs]
 
-             for item in permission_qs:
 
-                 is_select = 1 if item.id in share_permission_list else 0
 
-                 p_list.append({'permissionId': item.id, 'code': item.code, 'isSelect': is_select})
 
-             data = {'channels': c_list, 'permissions': p_list}
 
-             return response.json(0, data)
 
-         except Exception as e:
 
-             LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
-             return response.json(500, repr(e))
 
-     @classmethod
 
-     def user_channel_permission_save(cls, request_dict, response):
 
-         """
 
-         主用户分享设备时设置通道权限保存
 
-         """
 
-         try:
 
-             uid = request_dict.get('uid', None)
 
-             channels = request_dict.get('channels', None)  # 通道集合,多个','隔开
 
-             user_id = request_dict.get('userId', None)
 
-             permission_ids = request_dict.get('permissionIds', None)  # 权限集合,多个','隔开
 
-             if not all([user_id, uid, channels, permission_ids]):
 
-                 return response.json(444)
 
-             p_ids = []
 
-             device_user_set = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
 
-             now_time = int(time.time())
 
-             with transaction.atomic():
 
-                 is_delete = False
 
-                 if not device_user_set.exists():
 
-                     device_set = {'uid': uid, 'user_id': user_id, 'channels': channels,
 
-                                   'created_time': now_time, 'updated_time': now_time}
 
-                     device_user_set = DeviceChannelUserSet.objects.create(**device_set)
 
-                     channel_user_id = device_user_set.id
 
-                 else:
 
-                     DeviceChannelUserSet.objects.update(channels=channels, updated_time=now_time)
 
-                     channel_user_id = device_user_set.first().id
 
-                     is_delete = True
 
-                 if ',' in permission_ids:
 
-                     p_ids = [int(val) for val in permission_ids.split(',')]
 
-                 if is_delete:
 
-                     DeviceChannelUserPermission.objects.filter(
 
-                         channel_user_id=channel_user_id).delete()
 
-                 if not p_ids:
 
-                     channel_permission = {'permission_id': int(permission_ids),
 
-                                           'channel_user_id': channel_user_id,
 
-                                           'created_time': now_time}
 
-                     DeviceChannelUserPermission.objects.create(**channel_permission)
 
-                 else:
 
-                     channel_permission_list = []
 
-                     for item in p_ids:
 
-                         channel_permission_list.append(DeviceChannelUserPermission(
 
-                             permission_id=int(item),
 
-                             channel_user_id=channel_user_id,
 
-                             created_time=now_time))
 
-                     DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
 
-                 return response.json(0)
 
-         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__uid=uid).values('channel')
 
-             if not channel_qs.exists():
 
-                 return False
 
-             channel_list = [str(val['channel']) for val in 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
 
 
  |