EquipmentManager.py 20 KB

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