shareUserPermission.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from django.core import serializers
  4. import traceback, simplejson as json
  5. from django.views.generic.base import View
  6. from django.views.decorators.csrf import csrf_exempt
  7. from django.utils.decorators import method_decorator
  8. from Model.models import Device_User, Device_Info, Role, UserExModel
  9. from Service.CommonService import CommonService
  10. from Object.ResponseObject import ResponseObject
  11. from Object.TokenObject import TokenObject
  12. from django.db.models import Q
  13. from Service.ModelService import ModelService
  14. from Object.RedisObject import RedisObject
  15. class searchUserView(View):
  16. @method_decorator(csrf_exempt)
  17. def dispatch(self, *args, **kwargs):
  18. return super(searchUserView, self).dispatch(*args, **kwargs)
  19. def post(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. fieldDict = request.POST
  22. return self.validations(fieldDict, args, kwargs)
  23. def get(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. fieldDict = request.GET
  26. return self.validations(fieldDict, args, kwargs)
  27. def searchUserSQL(self, fieldDict, response, *args, **kwargs):
  28. if 'username' in fieldDict.keys():
  29. username = fieldDict.get('username', None)
  30. User = Device_User.objects.filter(
  31. Q(username=username) | Q(phone=username) | Q(userEmail=username)).order_by('-data_joined')
  32. elif 'userEmail' in fieldDict.keys():
  33. email = fieldDict.get('userEmail', None)
  34. User = Device_User.objects.filter(Q(userEmail=email) | Q(username=email)).order_by('-data_joined')
  35. elif 'userID' in fieldDict.keys():
  36. userID = fieldDict.get('userID', None)
  37. User = Device_User.objects.filter(userID=userID).order_by('-data_joined')
  38. elif 'roleName' in fieldDict.keys():
  39. roleName = fieldDict.get('roleName', None)
  40. User = Device_User.objects.filter(role__roleName__contains=roleName).order_by('-data_joined')
  41. else:
  42. User = Device_User.objects.filter(**fieldDict).order_by('-data_joined')
  43. if User.exists():
  44. ddUser = User[0].device_info_set.filter(isShare=False)
  45. sqlJSON = serializers.serialize('json', User)
  46. sqlList = json.loads(sqlJSON)
  47. if ddUser:
  48. sqlJSON1 = serializers.serialize('json', ddUser)
  49. sqlList1 = json.loads(sqlJSON1)
  50. device_Info_dict = {}
  51. device_Info_list = []
  52. for eachJson1 in sqlList1:
  53. device_Info_dict['primaryUserID'] = eachJson1['fields']['primaryUserID']
  54. device_Info_dict['Type'] = eachJson1['fields']['Type']
  55. device_Info_dict['UID'] = eachJson1['fields']['UID']
  56. device_Info_dict['pk'] = eachJson1['pk']
  57. device_Info_dict['NickName'] = eachJson1['fields']['NickName']
  58. device_Info_dict['View_Password'] = eachJson1['fields']['View_Password']
  59. device_Info_dict['View_Account'] = eachJson1['fields']['View_Account']
  60. device_Info_dict['Online'] = eachJson1['fields']['Online']
  61. device_Info_dict['EventNotification'] = eachJson1['fields']['EventNotification']
  62. device_Info_dict['ChannelIndex'] = eachJson1['fields']['ChannelIndex']
  63. device_Info_dict['EventNotification'] = eachJson1['fields']['EventNotification']
  64. device_Info_dict['NotificationMode'] = eachJson1['fields']['NotificationMode']
  65. device_Info_list.append(device_Info_dict)
  66. device_Info_dict = {}
  67. sqlList[0]['device_info'] = device_Info_list
  68. else:
  69. sqlList[0]['device_info'] = []
  70. if sqlList[0]['fields']['username'] is None:
  71. sqlList[0]['fields']['username'] = ''
  72. if sqlList[0]['fields']['userEmail'] is None:
  73. sqlList[0]['fields']['userEmail'] = ''
  74. sqlDict = dict(zip(["datas"], [sqlList]))
  75. return response.json(0, sqlDict)
  76. else:
  77. return response.json(102)
  78. def searchUserPCSQL(self, fieldDict, response):
  79. try:
  80. page = int(fieldDict['page'])
  81. line = int(fieldDict['line'])
  82. fieldDict.pop('page')
  83. fieldDict.pop('line')
  84. fieldDict.pop('type')
  85. if len(fieldDict) > 0:
  86. searchCondition = CommonService.get_kwargs(data=fieldDict)
  87. qs = Device_User.objects.filter(**searchCondition).order_by('-data_joined')
  88. else:
  89. qs = Device_User.objects.all().order_by('-data_joined')
  90. except Exception as e:
  91. errorInfo = traceback.format_exc()
  92. print('查询数据库错误: %s' % errorInfo)
  93. return response.json(500, {"details": repr(e)})
  94. else:
  95. if qs:
  96. device_user_count = qs.count()
  97. device_user_res = qs[(page - 1) * line:page * line]
  98. sqlDict = CommonService.qs_to_dict(device_user_res)
  99. redisObj = RedisObject(db=3)
  100. for k, v in enumerate(sqlDict["datas"]):
  101. for val in device_user_res:
  102. if v['pk'] == val.userID:
  103. dvqs = val.device_info_set.filter(isShare=False)
  104. device_info_list = CommonService.qs_to_dict(dvqs)
  105. # device_user关联到device_info
  106. sqlDict["datas"][k]['device_info'] = device_info_list
  107. if len(v['fields']['role']) > 0:
  108. role_query_set = Role.objects.get(rid=v['fields']['role'][0])
  109. sqlDict["datas"][k]['fields']['role'].append(role_query_set.roleName)
  110. if redisObj.get_data(key=v['pk']):
  111. sqlDict["datas"][k]['fields']['online'] = True
  112. else:
  113. sqlDict["datas"][k]['fields']['online'] = False
  114. ue = UserExModel.objects.filter(userID=v['pk'])
  115. if ue.exists():
  116. sqlDict["datas"][k]['fields']['appBundleId'] = ue[0].appBundleId
  117. else:
  118. sqlDict["datas"][k]['fields']['appBundleId'] = ''
  119. sqlDict['count'] = device_user_count
  120. return response.json(0, sqlDict)
  121. else:
  122. return response.json(0, {"datas": ""})
  123. def validations(self, fieldDict, *args, **kwargs):
  124. token = fieldDict.get('token', None)
  125. response = ResponseObject()
  126. tko = TokenObject(token)
  127. response.lang = tko.lang
  128. if tko.code != 0:
  129. return response.json(tko.code)
  130. fieldDict = fieldDict.dict()
  131. fieldDict.pop('token')
  132. type = fieldDict.get('type', None)
  133. if type == 'PC':
  134. return self.searchUserPCSQL(fieldDict, response)
  135. else:
  136. return self.searchUserSQL(fieldDict, response, args, kwargs)
  137. class shareUserEquipmentView(View):
  138. @method_decorator(csrf_exempt)
  139. def dispatch(self, *args, **kwargs):
  140. return super(shareUserEquipmentView, self).dispatch(*args, **kwargs)
  141. def post(self, request, *args, **kwargs):
  142. request.encoding = 'utf-8'
  143. queryDict = request.POST
  144. return self.shareUser(queryDict, args, kwargs)
  145. def get(self, request, *args, **kwargs):
  146. request.encoding = 'gb2312'
  147. queryDict = request.GET
  148. return self.shareUser(queryDict, args, kwargs)
  149. def shareUser(self, queryDict, *args, **kwargs):
  150. token = queryDict.get('token', None)
  151. GuestID = queryDict.get('guestID', None)
  152. content = queryDict.get('content', None)
  153. sharedAll = queryDict.get('sharedAll', False)
  154. if sharedAll in ('1', '0'):
  155. sharedAll = bool(int(sharedAll))
  156. elif sharedAll in ('true', 'false'):
  157. if sharedAll == 'true':
  158. sharedAll = 1
  159. else:
  160. sharedAll = 0
  161. response = ResponseObject()
  162. if not GuestID:
  163. return response.json(444, 'GuestID')
  164. tko = TokenObject(token)
  165. response.lang = tko.lang
  166. if tko.code != 0:
  167. return response.json(tko.code)
  168. MasterID = tko.userID
  169. if sharedAll and MasterID != None:
  170. return self.shareUserSQL(MasterID, GuestID, True, response, args, kwargs)
  171. if content != None and MasterID != None:
  172. return self.shareUserSQL(MasterID, GuestID, False, response, args, content=content)
  173. else:
  174. return response.json(444, 'sharedAll or content')
  175. def shareUserSQL(self, MasterID, GuestID, sharedAll, response, *args, **kwargs):
  176. Guest = Device_User.objects.filter(userID=GuestID).order_by('-data_joined')
  177. Master = Device_Info.objects.filter(userID_id=MasterID).order_by('-data_joined')
  178. if not Master or not Guest:
  179. return response.json(104)
  180. querysetList = []
  181. dictLen = 0
  182. if sharedAll:
  183. for equipment in Master:
  184. eqDict = equipment.model_to_dict(exclude=['id', 'data_joined', 'primaryUserID'])
  185. shareEquipment = Device_Info.objects.filter(userID_id=GuestID, primaryUserID= \
  186. MasterID, UID=eqDict.get('UID', None)).order_by('-data_joined')
  187. if shareEquipment:
  188. dictLen += 1
  189. continue
  190. else:
  191. puserId = eqDict.pop('userID')
  192. eqDict['primaryUserID'] = puserId
  193. eqDict['primaryMaster'] = ModelService.get_user_name(puserId)
  194. eqDict['isShare'] = True
  195. eqDict['userID_id'] = GuestID
  196. eqDict['id'] = CommonService.getUserID(getUser=False)
  197. querysetList.append(Device_Info(**eqDict))
  198. else:
  199. content = kwargs.get('content', None)
  200. if content != None:
  201. contentDict = json.loads(content)
  202. uidlist = UID = contentDict.get('UID', None)
  203. print(uidlist)
  204. for equipment in Master:
  205. eqDict = equipment.model_to_dict(exclude=['id', 'data_joined', 'primaryUserID'])
  206. if eqDict['UID'] in uidlist:
  207. UID.remove(eqDict['UID'])
  208. shareEquipment = Device_Info.objects.filter(userID_id=GuestID, primaryUserID= \
  209. MasterID, UID=eqDict.get('UID', None)).order_by('-data_joined')
  210. if shareEquipment:
  211. dictLen += 1
  212. else:
  213. puserId = eqDict.pop('userID')
  214. eqDict['primaryUserID'] = puserId
  215. eqDict['primaryMaster'] = ModelService.get_user_name(puserId)
  216. eqDict['isShare'] = True
  217. eqDict['userID_id'] = GuestID
  218. eqDict['id'] = CommonService.getUserID(getUser=False)
  219. querysetList.append(Device_Info(**eqDict))
  220. else:
  221. continue
  222. if len(querysetList) == 0:
  223. return response.json(174, {'error_UID': UID})
  224. else:
  225. try:
  226. Device_Info.objects.bulk_create(querysetList)
  227. except Exception as e:
  228. errorInfo = traceback.format_exc()
  229. print('添加数据库记录错误: %s' % errorInfo)
  230. return response.json(500, {"details": repr(e)})
  231. else:
  232. if dictLen > 0:
  233. res = {'Shared': dictLen, 'Sharing': len(querysetList), 'errormsg': 'some had share'}
  234. else:
  235. if sharedAll:
  236. res = {'Sharing': len(querysetList)}
  237. else:
  238. if len(UID) > 0:
  239. res = {'error_UID': UID, 'Sharing': len(querysetList)}
  240. else:
  241. res = {'Sharing': len(querysetList)}
  242. # redisObj = RedisObject(db=8)
  243. # redisObj.del_data(key='uid_qs_' + GuestID)
  244. return response.json(0, res)
  245. class unsharedUserEquipmentView(View):
  246. @method_decorator(csrf_exempt)
  247. def dispatch(self, *args, **kwargs):
  248. return super(unsharedUserEquipmentView, self).dispatch(*args, **kwargs)
  249. def post(self, request, *args, **kwargs):
  250. request.encoding = 'utf-8'
  251. queryset = request.POST
  252. return self.unsharedUserEquipment(queryset, args, kwargs)
  253. def get(self, request, *args, **kwargs):
  254. request.encoding = 'gb2312'
  255. queryset = request.GET
  256. return self.unsharedUserEquipment(queryset, args, kwargs)
  257. def unsharedUserEquipment(self, queryset, *args, **kwargs):
  258. token = queryset.get('token', None)
  259. GuestID = queryset.get('guestID', None)
  260. content = queryset.get('content', None)
  261. unsharedAll = queryset.get('unsharedAll', False)
  262. response = ResponseObject()
  263. if unsharedAll in ('1', '0'):
  264. unsharedAll = bool(int(unsharedAll))
  265. elif unsharedAll in ('true', 'false'):
  266. if unsharedAll == 'true':
  267. unsharedAll = 1
  268. else:
  269. unsharedAll = 0
  270. if token != None and GuestID != None and len(GuestID) > 0:
  271. tko = TokenObject(token)
  272. response.lang = tko.lang
  273. if tko.code == 0:
  274. MasterID = tko.userID
  275. if unsharedAll and MasterID != None:
  276. return self.unsharedUserEquipmentSQL(MasterID, GuestID, True, response, args, kwargs)
  277. else:
  278. if content != None and MasterID != None:
  279. return self.unsharedUserEquipmentSQL(MasterID, GuestID, False, response, args, content=content)
  280. else:
  281. return response.json(444, 'content or unsharedAll')
  282. else:
  283. return response.json(tko.code)
  284. else:
  285. return response.json(800)
  286. def unsharedUserEquipmentSQL(self, MasterID, GuestID, unsharedAll, response, *args, **kwargs):
  287. if unsharedAll:
  288. ec = Device_Info.objects.filter(userID_id=GuestID, primaryUserID=MasterID).delete()
  289. return response.json(0, {'removeCount': ec[0]})
  290. else:
  291. content = kwargs.get('content', None)
  292. if content != None:
  293. removeCount = 0
  294. errorRemove = []
  295. errorUID = []
  296. contentDict = json.loads(content)
  297. uidlist = contentDict.get('UID', None)
  298. for index in range(len(uidlist)):
  299. uid = uidlist[index]
  300. try:
  301. equipment = Device_Info.objects.filter(userID_id=GuestID, primaryUserID=MasterID, UID=uid)
  302. if equipment:
  303. equipmentCount = equipment.delete()
  304. else:
  305. errorUID.append(uid)
  306. continue
  307. except Exception as e:
  308. errorInfo = traceback.format_exc()
  309. print('查询数据库错误: %s' % errorInfo)
  310. errorRemove.append(uid)
  311. continue
  312. else:
  313. removeCount += equipmentCount[0]
  314. if len(errorRemove) > 0:
  315. return response.json(176, {'removeCount': removeCount, 'error_UID': errorRemove})
  316. else:
  317. if len(errorUID) > 0:
  318. return response.json(173, {'removeCount': removeCount, 'error_UID': errorUID})
  319. else:
  320. return response.json(0, {'removeCount': removeCount})