shareUserPermission.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  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.core.exceptions import FieldError
  7. from django.views.decorators.csrf import csrf_exempt
  8. from django.utils.decorators import method_decorator
  9. from Model.models import Device_User, Device_Info, Role
  10. from Service.CommonService import CommonService
  11. from Object.ResponseObject import ResponseObject
  12. from Object.TokenObject import TokenObject
  13. from django.db.models import Q
  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. device_user_queryset = Device_User.objects.filter(**searchCondition).order_by('-data_joined')
  84. else:
  85. device_user_queryset = Device_User.objects.all().order_by('-data_joined')
  86. except FieldError:
  87. return response.json(502)
  88. except Exception as e:
  89. errorInfo = traceback.format_exc()
  90. print('查询数据库错误: %s' % errorInfo)
  91. return response.json(500, {"details": repr(e)})
  92. else:
  93. if device_user_queryset:
  94. device_user_count = device_user_queryset.count()
  95. device_user_res = device_user_queryset[(page - 1) * line:page * line]
  96. sqlDict = CommonService.qs_to_dict(device_user_res)
  97. for k, v in enumerate(sqlDict["datas"]):
  98. for val in device_user_res:
  99. if v['pk'] == val.userID:
  100. device_info_query_set = val.device_info_set.all()
  101. device_info_list = CommonService.qs_to_dict(device_info_query_set)
  102. # device_user关联到device_info
  103. sqlDict["datas"][k]['device_info'] = device_info_list
  104. if len(v['fields']['role']) > 0:
  105. role_query_set = Role.objects.get(rid=v['fields']['role'][0])
  106. sqlDict["datas"][k]['fields']['role'].append(role_query_set.roleName)
  107. sqlDict['count'] = device_user_count
  108. return response.json(0, sqlDict)
  109. else:
  110. return response.json(0, {"datas": ""})
  111. def searchUser(self, fieldDict, *args, **kwargs):
  112. response = ResponseObject()
  113. token = fieldDict.get('token', None)
  114. if token != None:
  115. tko = TokenObject(token)
  116. tko.valid()
  117. response.lang = tko.lang
  118. if tko.code == 0:
  119. fieldDict = fieldDict.dict()
  120. fieldDict.pop('token')
  121. type = fieldDict.get('type', None)
  122. if type == 'PC':
  123. return self.searchUserPCSQL(fieldDict, response)
  124. else:
  125. return self.searchUserSQL(fieldDict, response, args, kwargs)
  126. else:
  127. return response.json(tko.code)
  128. else:
  129. return response.json(444)
  130. class shareUserEquipmentView(View):
  131. @method_decorator(csrf_exempt)
  132. def dispatch(self, *args, **kwargs):
  133. return super(shareUserEquipmentView, self).dispatch(*args, **kwargs)
  134. def post(self, request, *args, **kwargs):
  135. request.encoding = 'utf-8'
  136. queryDict = request.POST
  137. return self.shareUser(queryDict, args, kwargs)
  138. def get(self, request, *args, **kwargs):
  139. request.encoding = 'gb2312'
  140. queryDict = request.GET
  141. return self.shareUser(queryDict, args, kwargs)
  142. def shareUser(self, queryDict, *args, **kwargs):
  143. token = queryDict.get('token', None)
  144. GuestID = queryDict.get('guestID', None)
  145. content = queryDict.get('content', None)
  146. sharedAll = queryDict.get('sharedAll', False)
  147. if sharedAll in ('1', '0'):
  148. sharedAll = bool(int(sharedAll))
  149. elif sharedAll in ('true', 'false'):
  150. if sharedAll == 'true':
  151. sharedAll = 1
  152. else:
  153. sharedAll = 0
  154. response = ResponseObject()
  155. if token != None and GuestID != None:
  156. tko = TokenObject(token)
  157. tko.valid()
  158. response.lang = tko.lang
  159. if tko.code == 0:
  160. MasterID = tko.userID
  161. if sharedAll and MasterID != None:
  162. return self.shareUserSQL(MasterID, GuestID, True, response, args, kwargs)
  163. if content != None and MasterID != None:
  164. return self.shareUserSQL(MasterID, GuestID, False, response, args, content=content)
  165. else:
  166. return response.json(804)
  167. else:
  168. return response.json(tko.code)
  169. else:
  170. return response.json(800)
  171. def shareUserSQL(self, MasterID, GuestID, sharedAll, response, *args, **kwargs):
  172. try:
  173. Guest = Device_User.objects.filter(userID=GuestID).order_by('-data_joined')
  174. Master = Device_Info.objects.filter(userID_id=MasterID).order_by('-data_joined')
  175. except Exception as e:
  176. errorInfo = traceback.format_exc()
  177. print('查询数据库错误: %s' % errorInfo)
  178. return response.json(500, {"details": repr(e)})
  179. else:
  180. if Master:
  181. if Guest:
  182. querysetList = []
  183. dictLen = 0
  184. if sharedAll:
  185. for equipment in Master:
  186. eqDict = equipment.model_to_dict(exclude=['id', 'data_joined', 'primaryUserID'])
  187. shareEquipment = Device_Info.objects.filter(userID_id=GuestID, primaryUserID= \
  188. MasterID, UID=eqDict.get('UID', None)).order_by('-data_joined')
  189. if shareEquipment:
  190. dictLen += 1
  191. continue
  192. else:
  193. eqDict['primaryUserID'] = eqDict.pop('userID')
  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. eqDict['primaryUserID'] = eqDict.pop('userID')
  214. eqDict['isShare'] = True
  215. eqDict['userID_id'] = GuestID
  216. eqDict['id'] = CommonService.getUserID(getUser=False)
  217. querysetList.append(Device_Info(**eqDict))
  218. else:
  219. continue
  220. if len(querysetList) == 0:
  221. if sharedAll:
  222. return response.json(160)
  223. else:
  224. if len(UID) > 0:
  225. return response.json(160, {'error_UID': UID})
  226. else:
  227. return response.json(160)
  228. else:
  229. try:
  230. equipmentCount = Device_Info.objects.bulk_create(querysetList)
  231. except Exception as e:
  232. errorInfo = traceback.format_exc()
  233. print('添加数据库记录错误: %s' % errorInfo)
  234. return response.json(500, {"details": repr(e)})
  235. else:
  236. if dictLen > 0:
  237. return response.json(0, {
  238. 'Shared': dictLen,
  239. 'Sharing': len(querysetList),
  240. 'errormsg': u'A part of the equipment has been shared!',
  241. })
  242. else:
  243. if sharedAll:
  244. return response.json(0, {
  245. 'Sharing': len(querysetList)
  246. })
  247. else:
  248. if len(UID) > 0:
  249. return response.json(0, {
  250. 'error_UID': UID,
  251. 'Sharing': len(querysetList),
  252. })
  253. else:
  254. return response.json(0, {
  255. 'Sharing': len(querysetList),
  256. })
  257. else:
  258. return response.json(113)
  259. else:
  260. return response.json(172)
  261. class unsharedUserEquipmentView(View):
  262. @method_decorator(csrf_exempt)
  263. def dispatch(self, *args, **kwargs):
  264. return super(unsharedUserEquipmentView, self).dispatch(*args, **kwargs)
  265. def post(self, request, *args, **kwargs):
  266. request.encoding = 'utf-8'
  267. queryset = request.POST
  268. return self.unsharedUserEquipment(queryset, args, kwargs)
  269. def get(self, request, *args, **kwargs):
  270. request.encoding = 'gb2312'
  271. queryset = request.GET
  272. return self.unsharedUserEquipment(queryset, args, kwargs)
  273. def unsharedUserEquipment(self, queryset, *args, **kwargs):
  274. token = queryset.get('token', None)
  275. GuestID = queryset.get('guestID', None)
  276. content = queryset.get('content', None)
  277. unsharedAll = queryset.get('unsharedAll', False)
  278. response = ResponseObject()
  279. if unsharedAll in ('1', '0'):
  280. unsharedAll = bool(int(unsharedAll))
  281. elif unsharedAll in ('true', 'false'):
  282. if unsharedAll == 'true':
  283. unsharedAll = 1
  284. else:
  285. unsharedAll = 0
  286. if token != None and GuestID != None and len(GuestID) > 0:
  287. tko = TokenObject(token)
  288. tko.valid()
  289. response.lang = tko.lang
  290. if tko.code == 0:
  291. MasterID = tko.userID
  292. if unsharedAll and MasterID != None:
  293. return self.unsharedUserEquipmentSQL(MasterID, GuestID, True, response, args, kwargs)
  294. else:
  295. if content != None and MasterID != None:
  296. return self.unsharedUserEquipmentSQL(MasterID, GuestID, False, response, args, content=content)
  297. else:
  298. return response.json(805)
  299. else:
  300. return response.json(tko.code)
  301. else:
  302. return response.json(800)
  303. def unsharedUserEquipmentSQL(self, MasterID, GuestID, unsharedAll, response, *args, **kwargs):
  304. if unsharedAll:
  305. try:
  306. equipmentCount = Device_Info.objects.filter(userID_id=GuestID, primaryUserID=MasterID).delete()
  307. except Exception as e:
  308. errorInfo = traceback.format_exc()
  309. print('删除设备更新数据库错误: %s' % errorInfo)
  310. return response.json(171, {"details": repr(e)})
  311. else:
  312. return response.json(0, {'removeCount': equipmentCount[0]})
  313. else:
  314. content = kwargs.get('content', None)
  315. if content != None:
  316. removeCount = 0
  317. errorRemove = []
  318. errorUID = []
  319. contentDict = json.loads(content)
  320. uidlist = contentDict.get('UID', None)
  321. for index in range(len(uidlist)):
  322. uid = uidlist[index]
  323. try:
  324. equipment = Device_Info.objects.filter(userID_id=GuestID, primaryUserID=MasterID, UID=uid)
  325. if equipment:
  326. equipmentCount = equipment.delete()
  327. else:
  328. errorUID.append(uid)
  329. continue
  330. except Exception as e:
  331. errorInfo = traceback.format_exc()
  332. print('查询数据库错误: %s' % errorInfo)
  333. errorRemove.append(uid)
  334. continue
  335. else:
  336. removeCount += equipmentCount[0]
  337. if len(errorRemove) > 0:
  338. return response.json(171, {'removeCount': removeCount,'error_UID': errorRemove})
  339. else:
  340. if len(errorUID) > 0:
  341. return response.json(173, {'removeCount': removeCount,'error_UID': errorUID})
  342. else:
  343. return response.json(0, {'removeCount': removeCount})