EquipmentManager.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. import re
  2. import time
  3. import traceback
  4. import simplejson as json
  5. from Model.models import Device_Info, UID_Bucket
  6. from Object.ResponseObject import ResponseObject
  7. from Object.TokenObject import TokenObject
  8. from Service.CommonService import CommonService
  9. from Service.ModelService import ModelService
  10. # 查询用户设备
  11. def queryUserEquipmentInterface(request):
  12. request.encoding = 'utf-8'
  13. response = ResponseObject()
  14. if request.method == 'POST':
  15. request_dict = request.POST
  16. elif request.method == 'GET':
  17. request_dict = request.GET
  18. else:
  19. return response.json(444)
  20. token = request_dict.get('token', None)
  21. tko = TokenObject(token)
  22. response.lang = tko.lang
  23. if tko.code != 0:
  24. return response.json(tko.code)
  25. userID = tko.userID
  26. if not userID:
  27. return response.json(309)
  28. dvqs = Device_Info.objects.filter(userID_id=userID)
  29. dvdict = CommonService.qs_to_dict(dvqs)
  30. uid_list = Device_Info.objects.filter(userID_id=userID, isShare=False). \
  31. values_list('UID', flat=True)
  32. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  33. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  34. res = []
  35. nowTime = int(time.time())
  36. for p in dvdict['datas']:
  37. p['fields']['vod'] = []
  38. for dm in ubqs:
  39. if p['fields']['UID'] == dm['uid']:
  40. if dm['endTime'] > nowTime:
  41. p['fields']['vod'].append(dm)
  42. # dm['valid'] = 1
  43. # else:
  44. # dm['valid'] = 0
  45. # p['fields']['primaryUserID'] = ''
  46. res.append(p)
  47. return response.json(0, {'datas': res})
  48. def addNewUserEquipmentInterface(request):
  49. request.encoding = 'utf-8'
  50. response = ResponseObject()
  51. if request.method == 'POST':
  52. request_dict = request.POST
  53. elif request.method == 'GET':
  54. request_dict = request.GET
  55. else:
  56. return response.json(444)
  57. token = request_dict.get('token', None)
  58. deviceContent = request_dict.get('content', None)
  59. if not deviceContent:
  60. return response.json(444, 'content')
  61. tko = TokenObject(token)
  62. response.lang = tko.lang
  63. if tko.code != 0:
  64. return response.json(tko.code)
  65. userID = tko.userID
  66. try:
  67. deviceData = json.loads(deviceContent)
  68. UID = deviceData.get('UID', None)
  69. if not UID:
  70. return response.json(444, 'content')
  71. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  72. if dValid:
  73. return response.json(174)
  74. else:
  75. UID = deviceData.get('UID', '')
  76. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  77. if re_uid.match(UID):
  78. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  79. **deviceData)
  80. userDevice.save()
  81. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  82. # # 判断是否有已绑定用户
  83. # if not is_bind.exists():
  84. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  85. # **deviceData)
  86. # userDevice.save()
  87. # else:
  88. # # 分享添加
  89. # if 'isShare' in deviceData:
  90. # deviceData['isShare'] = True
  91. # else:
  92. # deviceData['isShare'] = True
  93. # bind_userID = is_bind[0].userID_id
  94. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  95. # userID_id=userID,
  96. # primaryUserID=bind_userID,
  97. # primaryMaster=ModelService.get_user_name(bind_userID),
  98. # **deviceData)
  99. # userDevice.save()
  100. else:
  101. return response.json(444, 'UID')
  102. except Exception as e:
  103. errorInfo = traceback.format_exc()
  104. print('添加设备错误: %s ' % errorInfo)
  105. return response.json(178, repr(e))
  106. else:
  107. sqlDict = CommonService.qs_to_dict([userDevice])
  108. return response.json(0, sqlDict)
  109. def delUserEquipmentInterface(request):
  110. '''
  111. 删除用户设备
  112. :param request:
  113. :return:
  114. '''
  115. response = ResponseObject()
  116. request.encoding = 'utf-8'
  117. if request.method == 'POST':
  118. request_dict = request.POST
  119. elif request.method == 'GET':
  120. request_dict = request.GET
  121. else:
  122. return response.json(444)
  123. token = request_dict.get('token', None)
  124. id = request_dict.get('id', None)
  125. if not id:
  126. return response.json(444, 'id')
  127. tko = TokenObject(token)
  128. response.lang = tko.lang
  129. if tko.code != 0:
  130. return response.json(tko.code)
  131. userID = tko.userID
  132. # 主用户删除设备全部删除
  133. try:
  134. Device_Info.objects.filter(userID_id=userID, id=id).delete()
  135. except Exception as e:
  136. errorInfo = traceback.format_exc()
  137. print('删除数据库记录错误: %s' % errorInfo)
  138. return response.json(176, repr(e))
  139. else:
  140. return response.json(0)
  141. def modifyUserEquipmentInterface(request):
  142. '''
  143. 修改用户设备
  144. :param request:
  145. :return:
  146. '''
  147. response = ResponseObject()
  148. if request.method == 'POST':
  149. request.encoding = 'utf-8'
  150. request_dict = request.POST
  151. elif request.method == 'GET':
  152. request.encoding = 'utf-8'
  153. request_dict = request.GET
  154. else:
  155. return response.json(444)
  156. token = request_dict.get('token', None)
  157. deviceContent = request_dict.get('content', None)
  158. id = request_dict.get('id', None)
  159. if not deviceContent or not id:
  160. return response.json(444, 'content,id')
  161. tko = TokenObject(token)
  162. response.lang = tko.lang
  163. if tko.code != 0:
  164. return response.json(tko.code)
  165. userID = tko.userID
  166. if userID is None:
  167. return response.json(309)
  168. try:
  169. deviceData = json.loads(deviceContent)
  170. Device_Info.objects.filter(userID_id=userID, id=id).update(**deviceData)
  171. except Exception as e:
  172. return response.json(177, repr(e))
  173. else:
  174. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  175. res = CommonService.qs_to_dict(qs)
  176. return response.json(0, res)
  177. def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs):
  178. request.encoding = 'utf-8'
  179. response = ResponseObject()
  180. if request.method == 'POST':
  181. fieldDict = request.POST
  182. elif request.method == 'GET':
  183. fieldDict = request.GET
  184. else:
  185. return response.json(444)
  186. token = request.POST.get('token', None)
  187. type = request.POST.get('type', None)
  188. tko = TokenObject(token)
  189. response.lang = tko.lang
  190. if tko.code != 0:
  191. return response.json(tko.code)
  192. userID = tko.userID
  193. if not userID:
  194. return response.json(309)
  195. own_perm = ModelService.check_perm(userID=userID, permID=30)
  196. if not own_perm:
  197. return response.json(404)
  198. if type == 'PC':
  199. page = int(fieldDict['page'])
  200. line = int(fieldDict['line'])
  201. qs = Device_Info.objects.all()
  202. count = qs.count()
  203. res = qs[(page - 1) * line:page * line]
  204. sqlDict = CommonService.qs_to_dict(query_set=res)
  205. sqlDict['count'] = count
  206. return response.json(0, sqlDict)
  207. else:
  208. qs = Device_Info.objects.all()
  209. res = CommonService.qs_to_dict(qs)
  210. return response.json(0, res)
  211. def findEquipmentInfoInterface(request, *callback_args, **callback_kwargs):
  212. request.encoding = 'utf-8'
  213. response = ResponseObject()
  214. if request.method == 'GET':
  215. fieldDict = request.GET
  216. elif request.method == 'POST':
  217. fieldDict = request.POST
  218. else:
  219. return response.json(444)
  220. deviceContent = fieldDict.get('content', None)
  221. token = fieldDict.get('token', None)
  222. tko = TokenObject(token)
  223. response.lang = tko.lang
  224. if tko.code != 0:
  225. return response.json(tko.code)
  226. if deviceContent:
  227. try:
  228. searchCondition = json.loads(deviceContent)
  229. except Exception as e:
  230. print(repr(e))
  231. return response.json(10, repr(e))
  232. else:
  233. kwargs = CommonService.get_kwargs(data=searchCondition)
  234. qs = Device_Info.objects.filter(**kwargs)
  235. page = int(fieldDict['page'])
  236. line = int(fieldDict['line'])
  237. count = qs.count()
  238. res = qs[(page - 1) * line:page * line]
  239. send_dict = CommonService.qs_to_dict(query_set=res)
  240. for k, v in enumerate(send_dict["datas"]):
  241. for val in res:
  242. if v['pk'] == val.id:
  243. username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
  244. send_dict["datas"][k]['fields']['username'] = username
  245. primary = ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
  246. send_dict["datas"][k]['fields']['primaryusername'] = primary
  247. send_dict['count'] = count
  248. return response.json(0, send_dict)
  249. else:
  250. qs = Device_Info.objects.all()
  251. page = int(fieldDict['page'])
  252. line = int(fieldDict['line'])
  253. count = qs.count()
  254. res = qs[(page - 1) * line:page * line]
  255. send_dict = CommonService.qs_to_dict(query_set=res)
  256. for k, v in enumerate(send_dict["datas"]):
  257. for val in res:
  258. if v['pk'] == val.id:
  259. username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
  260. send_dict["datas"][k]['fields']['username'] = username
  261. primary = ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
  262. send_dict["datas"][k]['fields']['primaryusername'] = primary
  263. send_dict['count'] = count
  264. return response.json(0, send_dict)
  265. # 添加设备字段
  266. def addInterface(request):
  267. request.encoding = 'utf-8'
  268. response = ResponseObject()
  269. if request.method == 'POST':
  270. request_dict = request.POST
  271. elif request.method == 'GET':
  272. request_dict = request.GET
  273. else:
  274. return response.json(444)
  275. token = request_dict.get('token', None)
  276. UID = request_dict.get('UID', None)
  277. NickName = request_dict.get('NickName', None)
  278. View_Account = request_dict.get('View_Account', None)
  279. View_Password = request_dict.get('View_Password', None)
  280. Type = request_dict.get('Type', None)
  281. ChannelIndex = request_dict.get('ChannelIndex', None)
  282. if all([UID, NickName, View_Account, View_Password, Type, ChannelIndex]):
  283. tko = TokenObject(token)
  284. response.lang = tko.lang
  285. if tko.code == 0:
  286. userID = tko.userID
  287. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  288. if re_uid.match(UID):
  289. is_exist = Device_Info.objects.filter(UID=UID, userID_id=userID)
  290. if is_exist:
  291. return response.json(174)
  292. else:
  293. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  294. # # 判断是否有已绑定用户
  295. # if is_bind:
  296. # return response.json(15)
  297. try:
  298. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID, UID=UID,
  299. NickName=NickName, View_Account=View_Account,
  300. View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
  301. userDevice.save()
  302. except Exception as e:
  303. return response.json(10, repr(10))
  304. else:
  305. return response.json(0)
  306. else:
  307. return response.json(444, {'param': 'UID'})
  308. else:
  309. return response.json(tko.code)
  310. else:
  311. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
  312. # 新删除设备
  313. def deleteInterface(request):
  314. '''
  315. 删除用户设备
  316. :param request:
  317. :return:
  318. '''
  319. response = ResponseObject()
  320. request.encoding = 'utf-8'
  321. if request.method == 'POST':
  322. request_dict = request.POST
  323. elif request.method == 'GET':
  324. request_dict = request.GET
  325. else:
  326. return response.json(444)
  327. token = request_dict.get('token', None)
  328. id = request_dict.get('id', None)
  329. if not id:
  330. return response.json(444, 'id')
  331. tko = TokenObject(token)
  332. response.lang = tko.lang
  333. if tko.code != 0:
  334. return response.json(tko.code)
  335. userID = tko.userID
  336. # 主用户删除设备全部删除
  337. if not userID:
  338. return response.json(309)
  339. try:
  340. dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  341. uid = dv_qs[0].UID
  342. if dv_qs[0].isShare:
  343. dv_qs.delete()
  344. else:
  345. # 主用户删除设备
  346. dv_qs.delete()
  347. # 分享获得用户假删除
  348. ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True)
  349. if ud_dv_qs.exists():
  350. ud_dv_qs.update(isExist=0)
  351. except Exception as e:
  352. errorInfo = traceback.format_exc()
  353. print('删除数据库记录错误: %s' % errorInfo)
  354. return response.json(176, repr(e))
  355. else:
  356. return response.json(0)
  357. # 新查询设备字段
  358. def queryInterface(request):
  359. request.encoding = 'utf-8'
  360. response = ResponseObject()
  361. if request.method == 'POST':
  362. request_dict = request.POST
  363. elif request.method == 'GET':
  364. request_dict = request.GET
  365. else:
  366. return response.json(444)
  367. token = request_dict.get('token', None)
  368. page = request_dict.get('page', None)
  369. line = request_dict.get('line', None)
  370. NickName = request_dict.get('NickName', None)
  371. page = int(page)
  372. line = int(line)
  373. tko = TokenObject(token)
  374. response.lang = tko.lang
  375. if tko.code == 0:
  376. userID = tko.userID
  377. dvqs = Device_Info.objects.filter(userID_id=userID)
  378. if NickName:
  379. dvqs.filter(NickName__icontains=NickName)
  380. count = dvqs.count()
  381. dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
  382. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  383. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  384. 'isVod', 'isExist')
  385. dvls = CommonService.qs_to_list(dvql)
  386. uid_list = []
  387. for dvl in dvls:
  388. if dvl['isShare'] is False:
  389. uid_list.append(dvl['UID'])
  390. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  391. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  392. nowTime = int(time.time())
  393. data = []
  394. for p in dvls:
  395. p['vod'] = []
  396. for dm in ubqs:
  397. if p['UID'] == dm['uid']:
  398. if dm['endTime'] > nowTime:
  399. p['vod'].append(dm)
  400. data.append(p)
  401. return response.json(0, {'data': data, 'count': count})
  402. else:
  403. return response.json(tko.code)