UserDeviceShareController.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. if not all([user_id, uid]):
  50. return response(444, 'uid and userId is required')
  51. user_permission_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid) \
  52. .values('id', 'channels')
  53. if not user_permission_qs.exists():
  54. return response.json(0, [])
  55. up_id = user_permission_qs[0]['id']
  56. channel_permission_qs = DeviceChannelUserPermission.objects.filter(channel_user_id=up_id) \
  57. .values('permission_id', 'channel_user_id')
  58. if not channel_permission_qs.exists():
  59. return response.json(0, [])
  60. data = {'channels': [int(val) for val in user_permission_qs[0]['channels'].split(',')]}
  61. p_list = []
  62. for item in channel_permission_qs:
  63. permission_qs = DeviceSharePermission.objects.filter(id=item['permission_id']) \
  64. .values('code')
  65. if not permission_qs.exists():
  66. continue
  67. p_list.append({'permissionId': item['permission_id'], 'code': permission_qs[0]['code']})
  68. data['permissions'] = p_list
  69. return response.json(0, data)
  70. except Exception as e:
  71. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  72. return response.json(500, repr(e))
  73. @classmethod
  74. def user_channel_permission_save(cls, request_dict, response):
  75. """
  76. 主用户分享设备时设置通道权限保存
  77. """
  78. try:
  79. uid = request_dict.get('uid', None)
  80. channels = request_dict.get('channels', None) # 通道集合,多个','隔开
  81. user_id = request_dict.get('userId', None)
  82. permission_ids = request_dict.get('permissionIds', None) # 权限集合,多个','隔开
  83. if not all([user_id, uid, channels, permission_ids]):
  84. return response.json(444)
  85. p_ids = []
  86. device_user_set = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
  87. now_time = int(time.time())
  88. with transaction.atomic():
  89. is_delete = False
  90. if not device_user_set.exists():
  91. device_set = {'uid': uid, 'user_id': user_id, 'channels': channels,
  92. 'created_time': now_time, 'updated_time': now_time}
  93. device_user_set = DeviceChannelUserSet.objects.create(**device_set)
  94. channel_user_id = device_user_set.id
  95. else:
  96. DeviceChannelUserSet.objects.update(channels=channels, updated_time=now_time)
  97. channel_user_id = device_user_set.first().id
  98. is_delete = True
  99. if ',' in permission_ids:
  100. p_ids = [int(val) for val in permission_ids.split(',')]
  101. if is_delete:
  102. DeviceChannelUserPermission.objects.filter(
  103. channel_user_id=channel_user_id).delete()
  104. if not p_ids:
  105. channel_permission = {'permission_id': int(permission_ids),
  106. 'channel_user_id': channel_user_id,
  107. 'created_time': now_time}
  108. DeviceChannelUserPermission.objects.create(**channel_permission)
  109. else:
  110. channel_permission_list = []
  111. for item in p_ids:
  112. channel_permission_list.append(DeviceChannelUserPermission(
  113. permission_id=int(item),
  114. channel_user_id=channel_user_id,
  115. created_time=now_time))
  116. DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
  117. return response.json(0)
  118. except Exception as e:
  119. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  120. return response.json(500, repr(e))