shareUserPermission.py 15 KB

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