shareUserPermission.py 14 KB

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