shareUserPermission.py 18 KB

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