UserDeviceShareController.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDeviceShareController.py
  4. @Time : 2023/1/7 15:05
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import logging
  10. import time
  11. from django.db import transaction
  12. from django.views import View
  13. from Model.models import DeviceSharePermission, DeviceChannelUserSet, DeviceChannelUserPermission, UidChannelSetModel
  14. from Object.ResponseObject import ResponseObject
  15. from Object.TokenObject import TokenObject
  16. from Service.UserDeviceService import UserDeviceService
  17. LOGGER = logging.getLogger('info')
  18. class UserDeviceShareView(View):
  19. def get(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.GET, request, operation)
  23. def post(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.POST, request, operation)
  27. def validation(self, request_dict, request, operation):
  28. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  29. lang = request_dict.get('lang', token.lang)
  30. response = ResponseObject(lang)
  31. if token.code != 0:
  32. return response.json(token.code)
  33. if operation == 'user-permissions':
  34. return self.get_user_share_permission(request_dict, response)
  35. elif operation == 'permissions-save':
  36. return self.user_channel_permission_save(request_dict, response)
  37. else:
  38. return response.json(404)
  39. @classmethod
  40. def get_user_share_permission(cls, request_dict, response):
  41. """
  42. 获取用户分享权限
  43. @param request_dict: 设备uid
  44. @param response: 响应对象
  45. @return: permission List
  46. """
  47. try:
  48. uid = request_dict.get('uid', None)
  49. user_id = request_dict.get('userId', None)
  50. channel_count = request_dict.get('channelCount', None)
  51. if not all([user_id, uid, channel_count]):
  52. return response(444, 'uid, userId and channelCount is required')
  53. user_permission_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid) \
  54. .values('id', 'channels')
  55. if not user_permission_qs.exists():
  56. return response.json(0, {})
  57. up_id = user_permission_qs[0]['id']
  58. channel_permission_qs = DeviceChannelUserPermission.objects.filter(channel_user_id=up_id) \
  59. .values('permission_id', 'channel_user_id')
  60. if not channel_permission_qs.exists():
  61. return response.json(0, {})
  62. channel_list = list(range(1, int(channel_count) + 1))
  63. share_channel_list = user_permission_qs[0]['channels'].split(',')
  64. c_list = []
  65. for channel in channel_list:
  66. is_select = 1 if str(channel) in share_channel_list else 0
  67. c_list.append({'channelIndex': channel, 'isSelect': is_select})
  68. p_list = []
  69. permission_qs = DeviceSharePermission.objects.all()
  70. share_permission_list = [item['permission_id'] for item in channel_permission_qs]
  71. for item in permission_qs:
  72. is_select = 1 if item.id in share_permission_list else 0
  73. p_list.append({'permissionId': item.id, 'code': item.code, 'isSelect': is_select})
  74. data = {'channels': c_list, 'permissions': p_list}
  75. return response.json(0, data)
  76. except Exception as e:
  77. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  78. return response.json(500, repr(e))
  79. @classmethod
  80. def user_channel_permission_save(cls, request_dict, response):
  81. """
  82. 主用户分享设备时设置通道权限保存
  83. """
  84. try:
  85. uid = request_dict.get('uid', None)
  86. channels = request_dict.get('channels', None) # 通道集合,多个','隔开
  87. user_id = request_dict.get('userId', None)
  88. permission_ids = request_dict.get('permissionIds', None) # 权限集合,多个','隔开
  89. if not all([user_id, uid, channels, permission_ids]):
  90. return response.json(444)
  91. p_ids = []
  92. device_user_set = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
  93. now_time = int(time.time())
  94. with transaction.atomic():
  95. is_delete = False
  96. if not device_user_set.exists():
  97. device_set = {'uid': uid, 'user_id': user_id, 'channels': channels,
  98. 'created_time': now_time, 'updated_time': now_time}
  99. device_user_set = DeviceChannelUserSet.objects.create(**device_set)
  100. channel_user_id = device_user_set.id
  101. else:
  102. DeviceChannelUserSet.objects.update(channels=channels, updated_time=now_time)
  103. channel_user_id = device_user_set.first().id
  104. is_delete = True
  105. if ',' in permission_ids:
  106. p_ids = [int(val) for val in permission_ids.split(',')]
  107. if is_delete:
  108. DeviceChannelUserPermission.objects.filter(
  109. channel_user_id=channel_user_id).delete()
  110. if not p_ids:
  111. channel_permission = {'permission_id': int(permission_ids),
  112. 'channel_user_id': channel_user_id,
  113. 'created_time': now_time}
  114. DeviceChannelUserPermission.objects.create(**channel_permission)
  115. else:
  116. channel_permission_list = []
  117. for item in p_ids:
  118. channel_permission_list.append(DeviceChannelUserPermission(
  119. permission_id=int(item),
  120. channel_user_id=channel_user_id,
  121. created_time=now_time))
  122. DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
  123. return response.json(0)
  124. except Exception as e:
  125. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  126. return response.json(500, repr(e))
  127. @staticmethod
  128. def qrcode_share_channel_permission_save(user_id, uid):
  129. """
  130. 二维码分享保存通道权限
  131. @param user_id: 用户id
  132. @param uid: 用户设备ID
  133. @return: True | False
  134. """
  135. try:
  136. if not all([user_id, uid]):
  137. return False
  138. UserDeviceService.update_device_channel(uid)
  139. channel_qs = UidChannelSetModel.objects.filter(uid__uid=uid).values('channel')
  140. if not channel_qs.exists():
  141. return False
  142. channel_list = [str(val['channel']) for val in channel_qs]
  143. channel_str = ','.join(channel_list)
  144. with transaction.atomic():
  145. now_time = int(time.time())
  146. device_set = {'uid': uid, 'user_id': user_id, 'channels': channel_str,
  147. 'created_time': now_time, 'updated_time': now_time}
  148. ds_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
  149. if ds_qs.exists():
  150. return True
  151. device_user_set = DeviceChannelUserSet.objects.create(**device_set)
  152. channel_permission_qs = DeviceSharePermission.objects \
  153. .all().values('id', 'code').order_by('sort')
  154. user_set_id = device_user_set.id
  155. channel_permission_list = []
  156. for item in channel_permission_qs:
  157. channel_permission_list.append(DeviceChannelUserPermission(
  158. permission_id=item['id'],
  159. channel_user_id=user_set_id,
  160. created_time=now_time))
  161. DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
  162. return True
  163. except Exception as e:
  164. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  165. return False