UserDeviceShareController.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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
  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. channel_list = list(range(1, int(channel_count)+1))
  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. 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. permission_list = list(range(1, permission_qs.count()+1))
  70. share_permission_list = [item['permission_id'] for item in channel_permission_qs]
  71. for permission_id in permission_list:
  72. is_select = 0
  73. if permission_id in share_permission_list:
  74. is_select = 1
  75. permission_qs = DeviceSharePermission.objects.filter(id=permission_id).values('code')
  76. permission_name = permission_qs[0]['code']
  77. p_list.append({'permissionId': permission_id, 'code': permission_name, 'isSelect': is_select})
  78. data = {'channels': c_list, 'permissions': p_list}
  79. return response.json(0, data)
  80. except Exception as e:
  81. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  82. return response.json(500, repr(e))
  83. @classmethod
  84. def user_channel_permission_save(cls, request_dict, response):
  85. """
  86. 主用户分享设备时设置通道权限保存
  87. """
  88. try:
  89. uid = request_dict.get('uid', None)
  90. channels = request_dict.get('channels', None) # 通道集合,多个','隔开
  91. user_id = request_dict.get('userId', None)
  92. permission_ids = request_dict.get('permissionIds', None) # 权限集合,多个','隔开
  93. if not all([user_id, uid, channels, permission_ids]):
  94. return response.json(444)
  95. p_ids = []
  96. device_user_set = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
  97. now_time = int(time.time())
  98. with transaction.atomic():
  99. is_delete = False
  100. if not device_user_set.exists():
  101. device_set = {'uid': uid, 'user_id': user_id, 'channels': channels,
  102. 'created_time': now_time, 'updated_time': now_time}
  103. device_user_set = DeviceChannelUserSet.objects.create(**device_set)
  104. channel_user_id = device_user_set.id
  105. else:
  106. DeviceChannelUserSet.objects.update(channels=channels, updated_time=now_time)
  107. channel_user_id = device_user_set.first().id
  108. is_delete = True
  109. if ',' in permission_ids:
  110. p_ids = [int(val) for val in permission_ids.split(',')]
  111. if is_delete:
  112. DeviceChannelUserPermission.objects.filter(
  113. channel_user_id=channel_user_id).delete()
  114. if not p_ids:
  115. channel_permission = {'permission_id': int(permission_ids),
  116. 'channel_user_id': channel_user_id,
  117. 'created_time': now_time}
  118. DeviceChannelUserPermission.objects.create(**channel_permission)
  119. else:
  120. channel_permission_list = []
  121. for item in p_ids:
  122. channel_permission_list.append(DeviceChannelUserPermission(
  123. permission_id=int(item),
  124. channel_user_id=channel_user_id,
  125. created_time=now_time))
  126. DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
  127. return response.json(0)
  128. except Exception as e:
  129. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  130. return response.json(500, repr(e))