shareUserPermission.py 19 KB

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