UserDeviceShareController.py 8.1 KB

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