EquipmentManager.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568
  1. import re
  2. import time
  3. import traceback
  4. import simplejson as json
  5. from django.utils import timezone
  6. from Model.models import Device_User,Device_Info, UID_Bucket
  7. from django.db.models import Q
  8. from Object.ResponseObject import ResponseObject
  9. from Object.TokenObject import TokenObject
  10. from Service.CommonService import CommonService
  11. from Service.ModelService import ModelService
  12. # 查询用户设备
  13. def queryUserEquipmentInterface(request):
  14. request.encoding = 'utf-8'
  15. response = ResponseObject()
  16. if request.method == 'POST':
  17. request_dict = request.POST
  18. elif request.method == 'GET':
  19. request_dict = request.GET
  20. else:
  21. return response.json(444)
  22. token = request_dict.get('token', None)
  23. tko = TokenObject(token)
  24. response.lang = tko.lang
  25. if tko.code != 0:
  26. return response.json(tko.code)
  27. userID = tko.userID
  28. if not userID:
  29. return response.json(309)
  30. dvqs = Device_Info.objects.filter(userID_id=userID)
  31. dvdict = CommonService.qs_to_dict(dvqs)
  32. uid_list = Device_Info.objects.filter(userID_id=userID, isShare=False). \
  33. values_list('UID', flat=True)
  34. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  35. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  36. res = []
  37. nowTime = int(time.time())
  38. for p in dvdict['datas']:
  39. p['fields']['vod'] = []
  40. for dm in ubqs:
  41. if p['fields']['UID'] == dm['uid']:
  42. if dm['endTime'] > nowTime:
  43. p['fields']['vod'].append(dm)
  44. # dm['valid'] = 1
  45. # else:
  46. # dm['valid'] = 0
  47. # p['fields']['primaryUserID'] = ''
  48. res.append(p)
  49. return response.json(0, {'datas': res})
  50. def addNewUserEquipmentInterface(request):
  51. request.encoding = 'utf-8'
  52. response = ResponseObject()
  53. if request.method == 'POST':
  54. request_dict = request.POST
  55. elif request.method == 'GET':
  56. request_dict = request.GET
  57. else:
  58. return response.json(444)
  59. token = request_dict.get('token', None)
  60. deviceContent = request_dict.get('content', None)
  61. if not deviceContent:
  62. return response.json(444, 'content')
  63. tko = TokenObject(token)
  64. response.lang = tko.lang
  65. if tko.code != 0:
  66. return response.json(tko.code)
  67. userID = tko.userID
  68. try:
  69. deviceData = json.loads(deviceContent)
  70. UID = deviceData.get('UID', None)
  71. if not UID:
  72. return response.json(444, 'content')
  73. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  74. if dValid:
  75. return response.json(174)
  76. else:
  77. UID = deviceData.get('UID', '')
  78. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  79. if re_uid.match(UID):
  80. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  81. **deviceData)
  82. userDevice.save()
  83. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  84. # # 判断是否有已绑定用户
  85. # if not is_bind.exists():
  86. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  87. # **deviceData)
  88. # userDevice.save()
  89. # else:
  90. # # 分享添加
  91. # if 'isShare' in deviceData:
  92. # deviceData['isShare'] = True
  93. # else:
  94. # deviceData['isShare'] = True
  95. # bind_userID = is_bind[0].userID_id
  96. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  97. # userID_id=userID,
  98. # primaryUserID=bind_userID,
  99. # primaryMaster=ModelService.get_user_name(bind_userID),
  100. # **deviceData)
  101. # userDevice.save()
  102. else:
  103. return response.json(444, 'UID')
  104. except Exception as e:
  105. errorInfo = traceback.format_exc()
  106. print('添加设备错误: %s ' % errorInfo)
  107. return response.json(178, repr(e))
  108. else:
  109. sqlDict = CommonService.qs_to_dict([userDevice])
  110. return response.json(0, sqlDict)
  111. def delUserEquipmentInterface(request):
  112. '''
  113. 删除用户设备
  114. :param request:
  115. :return:
  116. '''
  117. response = ResponseObject()
  118. request.encoding = 'utf-8'
  119. if request.method == 'POST':
  120. request_dict = request.POST
  121. elif request.method == 'GET':
  122. request_dict = request.GET
  123. else:
  124. return response.json(444)
  125. token = request_dict.get('token', None)
  126. id = request_dict.get('id', None)
  127. if not id:
  128. return response.json(444, 'id')
  129. tko = TokenObject(token)
  130. response.lang = tko.lang
  131. if tko.code != 0:
  132. return response.json(tko.code)
  133. userID = tko.userID
  134. # 主用户删除设备全部删除
  135. try:
  136. Device_Info.objects.filter(userID_id=userID, id=id).delete()
  137. except Exception as e:
  138. errorInfo = traceback.format_exc()
  139. print('删除数据库记录错误: %s' % errorInfo)
  140. return response.json(176, repr(e))
  141. else:
  142. return response.json(0)
  143. def modifyUserEquipmentInterface(request):
  144. '''
  145. 修改用户设备
  146. :param request:
  147. :return:
  148. '''
  149. response = ResponseObject()
  150. if request.method == 'POST':
  151. request.encoding = 'utf-8'
  152. request_dict = request.POST
  153. elif request.method == 'GET':
  154. request.encoding = 'utf-8'
  155. request_dict = request.GET
  156. else:
  157. return response.json(444)
  158. token = request_dict.get('token', None)
  159. deviceContent = request_dict.get('content', None)
  160. id = request_dict.get('id', None)
  161. if not deviceContent or not id:
  162. return response.json(444, 'content,id')
  163. tko = TokenObject(token)
  164. response.lang = tko.lang
  165. if tko.code != 0:
  166. return response.json(tko.code)
  167. userID = tko.userID
  168. if userID is None:
  169. return response.json(309)
  170. try:
  171. deviceData = json.loads(deviceContent)
  172. Device_Info.objects.filter(userID_id=userID, id=id).update(**deviceData)
  173. except Exception as e:
  174. return response.json(177, repr(e))
  175. else:
  176. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  177. res = CommonService.qs_to_dict(qs)
  178. return response.json(0, res)
  179. def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs):
  180. request.encoding = 'utf-8'
  181. response = ResponseObject()
  182. if request.method == 'POST':
  183. fieldDict = request.POST
  184. elif request.method == 'GET':
  185. fieldDict = request.GET
  186. else:
  187. return response.json(444)
  188. token = request.POST.get('token', None)
  189. type = request.POST.get('type', None)
  190. tko = TokenObject(token)
  191. response.lang = tko.lang
  192. if tko.code != 0:
  193. return response.json(tko.code)
  194. userID = tko.userID
  195. if not userID:
  196. return response.json(309)
  197. own_perm = ModelService.check_perm(userID=userID, permID=30)
  198. if not own_perm:
  199. return response.json(404)
  200. if type == 'PC':
  201. page = int(fieldDict['page'])
  202. line = int(fieldDict['line'])
  203. qs = Device_Info.objects.all()
  204. count = qs.count()
  205. res = qs[(page - 1) * line:page * line]
  206. sqlDict = CommonService.qs_to_dict(query_set=res)
  207. sqlDict['count'] = count
  208. return response.json(0, sqlDict)
  209. else:
  210. qs = Device_Info.objects.all()
  211. res = CommonService.qs_to_dict(qs)
  212. return response.json(0, res)
  213. def findEquipmentInfoInterface(request, *callback_args, **callback_kwargs):
  214. request.encoding = 'utf-8'
  215. response = ResponseObject()
  216. if request.method == 'GET':
  217. fieldDict = request.GET
  218. elif request.method == 'POST':
  219. fieldDict = request.POST
  220. else:
  221. return response.json(444)
  222. deviceContent = fieldDict.get('content', None)
  223. token = fieldDict.get('token', None)
  224. tko = TokenObject(token)
  225. response.lang = tko.lang
  226. if tko.code != 0:
  227. return response.json(tko.code)
  228. if deviceContent:
  229. try:
  230. searchCondition = json.loads(deviceContent)
  231. except Exception as e:
  232. print(repr(e))
  233. return response.json(10, repr(e))
  234. else:
  235. kwargs = CommonService.get_kwargs(data=searchCondition)
  236. qs = Device_Info.objects.filter(**kwargs)
  237. page = int(fieldDict['page'])
  238. line = int(fieldDict['line'])
  239. count = qs.count()
  240. res = qs[(page - 1) * line:page * line]
  241. send_dict = CommonService.qs_to_dict(query_set=res)
  242. for k, v in enumerate(send_dict["datas"]):
  243. for val in res:
  244. if v['pk'] == val.id:
  245. username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
  246. send_dict["datas"][k]['fields']['username'] = username
  247. primary = ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
  248. send_dict["datas"][k]['fields']['primaryusername'] = primary
  249. send_dict['count'] = count
  250. return response.json(0, send_dict)
  251. else:
  252. qs = Device_Info.objects.all()
  253. page = int(fieldDict['page'])
  254. line = int(fieldDict['line'])
  255. count = qs.count()
  256. res = qs[(page - 1) * line:page * line]
  257. send_dict = CommonService.qs_to_dict(query_set=res)
  258. for k, v in enumerate(send_dict["datas"]):
  259. for val in res:
  260. if v['pk'] == val.id:
  261. username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
  262. send_dict["datas"][k]['fields']['username'] = username
  263. primary = ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
  264. send_dict["datas"][k]['fields']['primaryusername'] = primary
  265. send_dict['count'] = count
  266. return response.json(0, send_dict)
  267. # 添加设备字段
  268. def addInterface(request):
  269. request.encoding = 'utf-8'
  270. response = ResponseObject()
  271. if request.method == 'POST':
  272. request_dict = request.POST
  273. elif request.method == 'GET':
  274. request_dict = request.GET
  275. else:
  276. return response.json(444)
  277. token = request_dict.get('token', None)
  278. UID = request_dict.get('UID', None)
  279. NickName = request_dict.get('NickName', None)
  280. View_Account = request_dict.get('View_Account', None)
  281. View_Password = request_dict.get('View_Password', None)
  282. Type = request_dict.get('Type', None)
  283. ChannelIndex = request_dict.get('ChannelIndex', None)
  284. if all([UID, NickName, View_Account, Type, ChannelIndex]):
  285. tko = TokenObject(token)
  286. response.lang = tko.lang
  287. if tko.code == 0:
  288. userID = tko.userID
  289. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  290. if re_uid.match(UID):
  291. is_exist = Device_Info.objects.filter(UID=UID, userID_id=userID)
  292. if is_exist:
  293. return response.json(174)
  294. else:
  295. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  296. # # 判断是否有已绑定用户
  297. # if is_bind:
  298. # return response.json(15)
  299. try:
  300. pk = CommonService.getUserID(getUser=False)
  301. userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
  302. NickName=NickName, View_Account=View_Account,
  303. View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
  304. userDevice.save()
  305. except Exception as e:
  306. return response.json(10, repr(e))
  307. else:
  308. dvqs = Device_Info.objects.filter(id=pk).values('id', 'userID', 'NickName', 'UID',
  309. 'View_Account',
  310. 'View_Password', 'ChannelIndex', 'Type',
  311. 'isShare',
  312. 'primaryUserID', 'primaryMaster',
  313. 'data_joined', 'version',
  314. 'isVod', 'isExist')
  315. dvql = CommonService.qs_to_list(dvqs)
  316. ubqs = UID_Bucket.objects.filter(uid=UID). \
  317. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  318. res = dvql[0]
  319. res['vod'] = list(ubqs)
  320. return response.json(0, res)
  321. else:
  322. return response.json(444, {'param': 'UID'})
  323. else:
  324. return response.json(tko.code)
  325. else:
  326. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
  327. # 管理员添加
  328. def admin_addInterface(request):
  329. request.encoding = 'utf-8'
  330. response = ResponseObject()
  331. if request.method == 'POST':
  332. request_dict = request.body
  333. if request.method == 'GET':
  334. request_dict = request.body
  335. else:
  336. return response.json(444)
  337. token = request_dict.get('token', None)
  338. deviceContent = request_dict.get('content', None)
  339. username = request_dict.get('username', None)
  340. if not username:
  341. return response.json(444, 'username')
  342. if not deviceContent:
  343. return response.json(444, 'content')
  344. tko = TokenObject(token)
  345. response.lang = tko.lang
  346. if tko.code != 0:
  347. return response.json(tko.code)
  348. userID = tko.userID
  349. own_perm = ModelService.check_perm(userID, 40)
  350. # 权限判断
  351. if own_perm is not True:
  352. return response.json(404)
  353. # 查询id
  354. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  355. if user.exists():
  356. user_dict = CommonService.qs_to_dict(user)
  357. userID = user_dict.get('datas')[0].get('pk')
  358. else:
  359. return response.json(104)
  360. try:
  361. deviceData = json.loads(deviceContent)
  362. UID = deviceData.get('UID', None)
  363. if not UID:
  364. return response.json(444, 'content')
  365. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  366. if dValid:
  367. return response.json(174)
  368. else:
  369. UID = deviceData.get('UID', '')
  370. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  371. if re_uid.match(UID):
  372. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  373. **deviceData)
  374. userDevice.save()
  375. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  376. # # 判断是否有已绑定用户
  377. # if not is_bind.exists():
  378. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  379. # **deviceData)
  380. # userDevice.save()
  381. # else:
  382. # # 分享添加
  383. # if 'isShare' in deviceData:
  384. # deviceData['isShare'] = True
  385. # else:
  386. # deviceData['isShare'] = True
  387. # bind_userID = is_bind[0].userID_id
  388. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  389. # userID_id=userID,
  390. # primaryUserID=bind_userID,
  391. # primaryMaster=ModelService.get_user_name(bind_userID),
  392. # **deviceData)
  393. # userDevice.save()
  394. else:
  395. return response.json(444, 'UID')
  396. except Exception as e:
  397. errorInfo = traceback.format_exc()
  398. print('添加设备错误: %s ' % errorInfo)
  399. return response.json(178, repr(e))
  400. else:
  401. sqlDict = CommonService.qs_to_dict([userDevice])
  402. return response.json(0, sqlDict)
  403. # 超级管理员修改设备
  404. def admin_modifyInterface(request):
  405. response = ResponseObject()
  406. if request.method == 'POST':
  407. request.encoding = 'utf-8'
  408. request_dict = request.POST
  409. elif request.method == 'GET':
  410. request.encoding = 'utf-8'
  411. request_dict = request.GET
  412. else:
  413. return response.json(444)
  414. token = request_dict.get('token', None)
  415. deviceContent = request_dict.get('content', None)
  416. username = request_dict.get('username', None)
  417. if not username:
  418. return response.json(444, 'username')
  419. id = request_dict.get('id', None)
  420. print (deviceContent)
  421. if not deviceContent or not id:
  422. return response.json(444, 'content,id')
  423. tko = TokenObject(token)
  424. response.lang = tko.lang
  425. if tko.code != 0:
  426. return response.json(tko.code)
  427. userID = tko.userID
  428. if userID is None:
  429. return response.json(309)
  430. own_perm = ModelService.check_perm(userID, 50)
  431. # 权限判断
  432. if own_perm is not True:
  433. return response.json(404)
  434. # 查询id
  435. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  436. if user.exists():
  437. user_dict = CommonService.qs_to_dict(user)
  438. userID = user_dict.get('datas')[0].get('pk')
  439. try:
  440. deviceData = json.loads(deviceContent)
  441. # 更改的时间
  442. update_time = timezone.localtime(timezone.now())
  443. Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time,**deviceData)
  444. except Exception as e:
  445. return response.json(177, repr(e))
  446. else:
  447. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  448. res = CommonService.qs_to_dict(qs)
  449. return response.json(0, res)
  450. # 新删除设备
  451. def deleteInterface(request):
  452. '''
  453. 删除用户设备
  454. :param request:
  455. :return:
  456. '''
  457. response = ResponseObject()
  458. request.encoding = 'utf-8'
  459. if request.method == 'POST':
  460. request_dict = request.POST
  461. elif request.method == 'GET':
  462. request_dict = request.GET
  463. else:
  464. return response.json(444)
  465. token = request_dict.get('token', None)
  466. id = request_dict.get('id', None)
  467. if not id:
  468. return response.json(444, 'id')
  469. tko = TokenObject(token)
  470. response.lang = tko.lang
  471. if tko.code != 0:
  472. return response.json(tko.code)
  473. userID = tko.userID
  474. # 主用户删除设备全部删除
  475. if not userID:
  476. return response.json(309)
  477. try:
  478. dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  479. uid = dv_qs[0].UID
  480. if dv_qs[0].isShare:
  481. dv_qs.delete()
  482. else:
  483. # 主用户删除设备
  484. dv_qs.delete()
  485. # 分享获得用户假删除
  486. ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True)
  487. if ud_dv_qs.exists():
  488. ud_dv_qs.update(isExist=0)
  489. except Exception as e:
  490. errorInfo = traceback.format_exc()
  491. print('删除数据库记录错误: %s' % errorInfo)
  492. return response.json(176, repr(e))
  493. else:
  494. return response.json(0)
  495. # 新查询设备字段
  496. def queryInterface(request):
  497. request.encoding = 'utf-8'
  498. response = ResponseObject()
  499. if request.method == 'POST':
  500. request_dict = request.POST
  501. elif request.method == 'GET':
  502. request_dict = request.GET
  503. else:
  504. return response.json(444)
  505. token = request_dict.get('token', None)
  506. page = request_dict.get('page', None)
  507. line = request_dict.get('line', None)
  508. NickName = request_dict.get('NickName', None)
  509. page = int(page)
  510. line = int(line)
  511. tko = TokenObject(token)
  512. response.lang = tko.lang
  513. if tko.code == 0:
  514. userID = tko.userID
  515. dvqs = Device_Info.objects.filter(userID_id=userID)
  516. if NickName:
  517. dvqs.filter(NickName__icontains=NickName)
  518. count = dvqs.count()
  519. dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
  520. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  521. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  522. 'isVod', 'isExist')
  523. dvls = CommonService.qs_to_list(dvql)
  524. uid_list = []
  525. for dvl in dvls:
  526. if dvl['isShare'] is False:
  527. uid_list.append(dvl['UID'])
  528. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  529. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  530. nowTime = int(time.time())
  531. data = []
  532. for p in dvls:
  533. p['vod'] = []
  534. for dm in ubqs:
  535. if p['UID'] == dm['uid']:
  536. if dm['endTime'] > nowTime:
  537. p['vod'].append(dm)
  538. data.append(p)
  539. return response.json(0, {'data': data, 'count': count})
  540. else:
  541. return response.json(tko.code)