EquipmentManager.py 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040
  1. import re
  2. import time
  3. import traceback
  4. import threading
  5. import logging
  6. import simplejson as json
  7. from django.utils import timezone
  8. from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidPushModel
  9. from django.db.models import Q
  10. from Object.ResponseObject import ResponseObject
  11. from Object.TokenObject import TokenObject
  12. from Service.CommonService import CommonService
  13. from Service.ModelService import ModelService
  14. from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
  15. from Object.ETkObject import ETkObject
  16. import oss2
  17. from django.http import JsonResponse
  18. from Object.RedisObject import RedisObject
  19. # 查询用户设备
  20. def queryUserEquipmentInterface(request):
  21. request.encoding = 'utf-8'
  22. response = ResponseObject()
  23. if request.method == 'POST':
  24. request_dict = request.POST
  25. elif request.method == 'GET':
  26. request_dict = request.GET
  27. else:
  28. return response.json(444)
  29. token = request_dict.get('token', None)
  30. tko = TokenObject(token)
  31. response.lang = tko.lang
  32. if tko.code != 0:
  33. return response.json(tko.code)
  34. userID = tko.userID
  35. if not userID:
  36. return response.json(309)
  37. dvqs = Device_Info.objects.filter(userID_id=userID)
  38. dvdict = CommonService.qs_to_dict(dvqs)
  39. uid_list = Device_Info.objects.filter(userID_id=userID, isShare=False). \
  40. values_list('UID', flat=True)
  41. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  42. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  43. res = []
  44. nowTime = int(time.time())
  45. for p in dvdict['datas']:
  46. p['fields']['vod'] = []
  47. for dm in ubqs:
  48. if p['fields']['UID'] == dm['uid']:
  49. if dm['endTime'] > nowTime:
  50. p['fields']['vod'].append(dm)
  51. # dm['valid'] = 1
  52. # else:
  53. # dm['valid'] = 0
  54. # p['fields']['primaryUserID'] = ''
  55. res.append(p)
  56. return response.json(0, {'datas': res})
  57. def addNewUserEquipmentInterface(request):
  58. request.encoding = 'utf-8'
  59. response = ResponseObject()
  60. if request.method == 'POST':
  61. request_dict = request.POST
  62. elif request.method == 'GET':
  63. request_dict = request.GET
  64. else:
  65. return response.json(444)
  66. token = request_dict.get('token', None)
  67. deviceContent = request_dict.get('content', None)
  68. if not deviceContent:
  69. return response.json(444, 'content')
  70. tko = TokenObject(token)
  71. response.lang = tko.lang
  72. if tko.code != 0:
  73. return response.json(tko.code)
  74. userID = tko.userID
  75. try:
  76. deviceData = json.loads(deviceContent)
  77. UID = deviceData.get('UID', None)
  78. if not UID:
  79. return response.json(444, 'content')
  80. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  81. if dValid:
  82. return response.json(174)
  83. else:
  84. # redisObj = RedisObject(db=8)
  85. # redisObj.del_data(key='uid_qs_' + userID)
  86. UID = deviceData.get('UID', '')
  87. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  88. if re_uid.match(UID):
  89. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  90. **deviceData)
  91. userDevice.save()
  92. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  93. # # 判断是否有已绑定用户
  94. # if not is_bind.exists():
  95. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  96. # **deviceData)
  97. # userDevice.save()
  98. # else:
  99. # # 分享添加
  100. # if 'isShare' in deviceData:
  101. # deviceData['isShare'] = True
  102. # else:
  103. # deviceData['isShare'] = True
  104. # bind_userID = is_bind[0].userID_id
  105. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  106. # userID_id=userID,
  107. # primaryUserID=bind_userID,
  108. # primaryMaster=ModelService.get_user_name(bind_userID),
  109. # **deviceData)
  110. # userDevice.save()
  111. else:
  112. return response.json(444, 'UID')
  113. except Exception as e:
  114. errorInfo = traceback.format_exc()
  115. print('添加设备错误: %s ' % errorInfo)
  116. return response.json(178, repr(e))
  117. else:
  118. sqlDict = CommonService.qs_to_dict([userDevice])
  119. return response.json(0, sqlDict)
  120. def delUserEquipmentInterface(request):
  121. '''
  122. 删除用户设备
  123. :param request:
  124. :return:
  125. '''
  126. response = ResponseObject()
  127. request.encoding = 'utf-8'
  128. if request.method == 'POST':
  129. request_dict = request.POST
  130. elif request.method == 'GET':
  131. request_dict = request.GET
  132. else:
  133. return response.json(444)
  134. token = request_dict.get('token', None)
  135. id = request_dict.get('id', None)
  136. if not id:
  137. return response.json(444, 'id')
  138. tko = TokenObject(token)
  139. response.lang = tko.lang
  140. if tko.code != 0:
  141. return response.json(tko.code)
  142. userID = tko.userID
  143. # 主用户删除设备全部删除
  144. try:
  145. dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  146. # redisObj = RedisObject(db=8)
  147. # redisObj.del_data(key='uid_qs_' + userID)
  148. if dv_qs.exists():
  149. uid = dv_qs[0].UID
  150. print('删除')
  151. UID_Preview.objects.filter(uid=uid).delete()
  152. dv_qs.delete()
  153. asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
  154. asy.start()
  155. except Exception as e:
  156. errorInfo = traceback.format_exc()
  157. print('删除数据库记录错误: %s' % errorInfo)
  158. return response.json(176, repr(e))
  159. else:
  160. return response.json(0)
  161. def modifyUserEquipmentInterface(request):
  162. '''
  163. 修改用户设备
  164. :param request:
  165. :return:
  166. '''
  167. response = ResponseObject()
  168. if request.method == 'POST':
  169. request.encoding = 'utf-8'
  170. request_dict = request.POST
  171. elif request.method == 'GET':
  172. request.encoding = 'utf-8'
  173. request_dict = request.GET
  174. else:
  175. return response.json(444)
  176. token = request_dict.get('token', None)
  177. deviceContent = request_dict.get('content', None)
  178. id = request_dict.get('id', None)
  179. if not deviceContent or not id:
  180. return response.json(444, 'content,id')
  181. tko = TokenObject(token)
  182. response.lang = tko.lang
  183. if tko.code != 0:
  184. return response.json(tko.code)
  185. userID = tko.userID
  186. if userID is None:
  187. return response.json(309)
  188. try:
  189. deviceData = json.loads(deviceContent)
  190. dev_info_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  191. dev_info_qs.update(**deviceData)
  192. except Exception as e:
  193. return response.json(177, repr(e))
  194. else:
  195. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  196. res = CommonService.qs_to_dict(qs)
  197. if qs.exists():
  198. uid = qs[0].UID
  199. nickname = qs[0].NickName
  200. # 增加设备影子信息修改昵称 start
  201. us_qs = UidSetModel.objects.filter(uid=uid)
  202. if us_qs.exists():
  203. us_qs.update(nickname=nickname)
  204. else:
  205. ChannelIndex = qs[0].ChannelIndex
  206. nowTime = int(time.time())
  207. uid_set_create_dict = {
  208. 'uid': uid,
  209. 'addTime': nowTime,
  210. 'updTime': nowTime,
  211. 'ip': CommonService.get_ip_address(request),
  212. 'channel': ChannelIndex,
  213. 'nickname': nickname,
  214. }
  215. UidSetModel.objects.create(**uid_set_create_dict)
  216. Device_Info.objects.filter(UID=uid).update(NickName=nickname)
  217. # redisObj = RedisObject(db=8)
  218. # redisObj.del_data(key='uid_qs_' + userID)
  219. return response.json(0, res)
  220. def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs):
  221. request.encoding = 'utf-8'
  222. response = ResponseObject()
  223. if request.method == 'POST':
  224. fieldDict = request.POST
  225. elif request.method == 'GET':
  226. fieldDict = request.GET
  227. else:
  228. return response.json(444)
  229. token = request.POST.get('token', None)
  230. type = request.POST.get('type', None)
  231. tko = TokenObject(token)
  232. response.lang = tko.lang
  233. if tko.code != 0:
  234. return response.json(tko.code)
  235. userID = tko.userID
  236. if not userID:
  237. return response.json(309)
  238. own_perm = ModelService.check_perm(userID=userID, permID=30)
  239. if not own_perm:
  240. return response.json(404)
  241. if type == 'PC':
  242. page = int(fieldDict['page'])
  243. line = int(fieldDict['line'])
  244. qs = Device_Info.objects.all()
  245. count = qs.count()
  246. res = qs[(page - 1) * line:page * line]
  247. sqlDict = CommonService.qs_to_dict(query_set=res)
  248. sqlDict['count'] = count
  249. return response.json(0, sqlDict)
  250. else:
  251. qs = Device_Info.objects.all()
  252. res = CommonService.qs_to_dict(qs)
  253. return response.json(0, res)
  254. def findEquipmentInfoInterface(request, *callback_args, **callback_kwargs):
  255. request.encoding = 'utf-8'
  256. response = ResponseObject()
  257. if request.method == 'GET':
  258. fieldDict = request.GET
  259. elif request.method == 'POST':
  260. fieldDict = request.POST
  261. else:
  262. return response.json(444)
  263. deviceContent = fieldDict.get('content', None)
  264. token = fieldDict.get('token', None)
  265. tko = TokenObject(token)
  266. response.lang = tko.lang
  267. if tko.code != 0:
  268. return response.json(tko.code)
  269. if deviceContent:
  270. try:
  271. searchCondition = json.loads(deviceContent)
  272. except Exception as e:
  273. print(repr(e))
  274. return response.json(10, repr(e))
  275. else:
  276. kwargs = CommonService.get_kwargs(data=searchCondition)
  277. qs = Device_Info.objects.filter(**kwargs)
  278. page = int(fieldDict['page'])
  279. line = int(fieldDict['line'])
  280. count = qs.count()
  281. res = qs[(page - 1) * line:page * line]
  282. send_dict = CommonService.qs_to_dict(query_set=res)
  283. for k, v in enumerate(send_dict["datas"]):
  284. for val in res:
  285. if v['pk'] == val.id:
  286. send_dict["datas"][k]['fields']['username'] = \
  287. ModelService.get_user_mark(send_dict["datas"][k]['fields']['userID'])
  288. send_dict["datas"][k]['fields']['primaryusername'] = \
  289. ModelService.get_user_mark(send_dict["datas"][k]['fields']['primaryUserID'])
  290. send_dict['count'] = count
  291. return response.json(0, send_dict)
  292. else:
  293. qs = Device_Info.objects.all()
  294. page = int(fieldDict['page'])
  295. line = int(fieldDict['line'])
  296. count = qs.count()
  297. res = qs[(page - 1) * line:page * line]
  298. send_dict = CommonService.qs_to_dict(query_set=res)
  299. for k, v in enumerate(send_dict["datas"]):
  300. for val in res:
  301. if v['pk'] == val.id:
  302. username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
  303. send_dict["datas"][k]['fields']['username'] = username
  304. send_dict["datas"][k]['fields']['primaryusername'] = \
  305. ModelService.get_user_mark(send_dict["datas"][k]['fields']['primaryUserID'])
  306. send_dict['count'] = count
  307. return response.json(0, send_dict)
  308. # 添加设备字段
  309. def addInterface(request):
  310. request.encoding = 'utf-8'
  311. response = ResponseObject()
  312. if request.method == 'POST':
  313. request_dict = request.POST
  314. elif request.method == 'GET':
  315. request_dict = request.GET
  316. else:
  317. return response.json(444)
  318. token = request_dict.get('token', None)
  319. UID = request_dict.get('UID', None)
  320. NickName = request_dict.get('NickName', None)
  321. View_Account = request_dict.get('View_Account', None)
  322. View_Password = request_dict.get('View_Password', '')
  323. Type = request_dict.get('Type', None)
  324. ChannelIndex = request_dict.get('ChannelIndex', None)
  325. if all([UID, NickName, View_Account, Type, ChannelIndex]):
  326. tko = TokenObject(token)
  327. response.lang = tko.lang
  328. if tko.code == 0:
  329. userID = tko.userID
  330. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  331. if re_uid.match(UID):
  332. is_exist = Device_Info.objects.filter(UID=UID, userID_id=userID)
  333. if is_exist:
  334. # 判断设备是否已存在
  335. if is_exist[0].isExist == 1:
  336. return response.json(174)
  337. else:
  338. is_exist.delete()
  339. pass
  340. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  341. # # 判断是否有已绑定用户
  342. # if is_bind:
  343. # return response.json(15)
  344. try:
  345. # 判断是否有用户绑定
  346. nowTime = int(time.time())
  347. us_qs = UidSetModel.objects.filter(uid=UID)
  348. if not us_qs.exists():
  349. uid_set_create_dict = {
  350. 'uid': UID,
  351. 'addTime': nowTime,
  352. 'updTime': nowTime,
  353. 'ip': CommonService.get_ip_address(request),
  354. 'channel': ChannelIndex,
  355. 'nickname': NickName,
  356. }
  357. UidSetModel.objects.create(**uid_set_create_dict)
  358. else:
  359. us_qs.update(nickname=NickName)
  360. pk = CommonService.getUserID(getUser=False)
  361. userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
  362. NickName=NickName, View_Account=View_Account,
  363. View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
  364. userDevice.save()
  365. # redisObj = RedisObject(db=8)
  366. # redisObj.del_data(key='uid_qs_' + userID)
  367. except Exception as e:
  368. return response.json(10, repr(e))
  369. else:
  370. dvqs = Device_Info.objects.filter(id=pk).values('id', 'userID', 'NickName', 'UID',
  371. 'View_Account',
  372. 'View_Password', 'ChannelIndex', 'Type',
  373. 'isShare',
  374. 'primaryUserID', 'primaryMaster',
  375. 'data_joined', 'version',
  376. 'isVod', 'isExist')
  377. dvql = CommonService.qs_to_list(dvqs)
  378. ubqs = UID_Bucket.objects.filter(uid=UID). \
  379. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  380. res = dvql[0]
  381. res['vod'] = list(ubqs)
  382. return response.json(0, res)
  383. else:
  384. return response.json(444, {'param': 'UID'})
  385. else:
  386. return response.json(tko.code)
  387. else:
  388. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
  389. # 添加设备字段
  390. def judgeInterface(request):
  391. request.encoding = 'utf-8'
  392. response = ResponseObject()
  393. if request.method == 'POST':
  394. request_dict = request.POST
  395. elif request.method == 'GET':
  396. request_dict = request.GET
  397. else:
  398. return response.json(444)
  399. token = request_dict.get('token', None)
  400. uid = request_dict.get('uid', None)
  401. if all([uid, token]):
  402. tko = TokenObject(token)
  403. response.lang = tko.lang
  404. if tko.code == 0:
  405. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  406. if re_uid.match(uid):
  407. is_bind = Device_Info.objects.filter(UID=uid, isShare=False)
  408. # 判断是否有已绑定用户
  409. if is_bind:
  410. qs = is_bind.values('userID__NickName', 'NickName')
  411. nickname = qs[0]['NickName']
  412. us_qs = UidSetModel.objects.filter(uid=uid).values('nickname')
  413. if us_qs.exists():
  414. nickname = us_qs[0]['NickName']
  415. res = {
  416. 'bind_user': qs[0]['userID__NickName'],
  417. 'bind_device_name': nickname,
  418. }
  419. return response.json(15, res=res)
  420. else:
  421. return response.json(0, 'no bind user')
  422. else:
  423. return response.json(444, {'param': 'UID'})
  424. else:
  425. return response.json(tko.code)
  426. else:
  427. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
  428. # 管理员添加
  429. def admin_addInterface(request):
  430. request.encoding = 'utf-8'
  431. response = ResponseObject()
  432. if request.method == 'POST':
  433. request_dict = request.POST
  434. elif request.method == 'GET':
  435. request_dict = request.GET
  436. else:
  437. return response.json(444)
  438. token = request_dict.get('token', None)
  439. deviceContent = request_dict.get('content', None)
  440. username = request_dict.get('username', None)
  441. if not username:
  442. return response.json(444, 'username')
  443. if not deviceContent:
  444. return response.json(444, 'content')
  445. tko = TokenObject(token)
  446. response.lang = tko.lang
  447. if tko.code != 0:
  448. return response.json(tko.code)
  449. userID = tko.userID
  450. own_perm = ModelService.check_perm(userID, 40)
  451. # 权限判断
  452. if own_perm is not True:
  453. return response.json(404)
  454. # 查询id
  455. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  456. if user.exists():
  457. user_dict = CommonService.qs_to_dict(user)
  458. userID = user_dict.get('datas')[0].get('pk')
  459. else:
  460. return response.json(104)
  461. print(deviceContent)
  462. try:
  463. deviceData = json.loads(deviceContent)
  464. UID = deviceData.get('UID', None)
  465. if not UID:
  466. return response.json(444, 'content')
  467. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  468. if dValid:
  469. return response.json(174)
  470. else:
  471. UID = deviceData.get('UID', '')
  472. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  473. # redisObj = RedisObject(db=8)
  474. # redisObj.del_data(key='uid_qs_' + userID)
  475. if re_uid.match(UID):
  476. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  477. **deviceData)
  478. userDevice.save()
  479. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  480. # # 判断是否有已绑定用户
  481. # if not is_bind.exists():
  482. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  483. # **deviceData)
  484. # userDevice.save()
  485. # else:
  486. # # 分享添加
  487. # if 'isShare' in deviceData:
  488. # deviceData['isShare'] = True
  489. # else:
  490. # deviceData['isShare'] = True
  491. # bind_userID = is_bind[0].userID_id
  492. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  493. # userID_id=userID,
  494. # primaryUserID=bind_userID,
  495. # primaryMaster=ModelService.get_user_name(bind_userID),
  496. # **deviceData)
  497. # userDevice.save()
  498. else:
  499. return response.json(444, 'UID')
  500. except Exception as e:
  501. errorInfo = traceback.format_exc()
  502. print('添加设备错误: %s ' % errorInfo)
  503. return response.json(178, repr(e))
  504. else:
  505. sqlDict = CommonService.qs_to_dict([userDevice])
  506. return response.json(0, sqlDict)
  507. # 超级管理员修改设备
  508. def admin_modifyInterface(request):
  509. response = ResponseObject()
  510. if request.method == 'POST':
  511. request.encoding = 'utf-8'
  512. request_dict = request.POST
  513. elif request.method == 'GET':
  514. request.encoding = 'utf-8'
  515. request_dict = request.GET
  516. else:
  517. return response.json(444)
  518. token = request_dict.get('token', None)
  519. deviceContent = request_dict.get('content', None)
  520. username = request_dict.get('username', None)
  521. if not username:
  522. return response.json(444, 'username')
  523. id = request_dict.get('id', None)
  524. print(deviceContent)
  525. if not deviceContent or not id:
  526. return response.json(444, 'content,id')
  527. tko = TokenObject(token)
  528. response.lang = tko.lang
  529. if tko.code != 0:
  530. return response.json(tko.code)
  531. userID = tko.userID
  532. if userID is None:
  533. return response.json(309)
  534. own_perm = ModelService.check_perm(userID, 50)
  535. # 权限判断
  536. if own_perm is not True:
  537. return response.json(404)
  538. deviceData = json.loads(deviceContent)
  539. print(deviceData['UID'])
  540. # redisObj = RedisObject(db=8)
  541. # redisObj.del_data(key='uid_qs_' + userID)
  542. dValid = Device_Info.objects.filter(userID_id=userID, UID=deviceData['UID'])
  543. if dValid.exists():
  544. dValid_dict = CommonService.qs_to_dict(dValid)
  545. print(dValid_dict.get('datas')[0].get('pk'))
  546. if dValid_dict.get('datas')[0].get('pk') == id:
  547. print('可以编辑')
  548. else:
  549. return response.json(174)
  550. # 查询id
  551. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  552. if user.exists():
  553. user_dict = CommonService.qs_to_dict(user)
  554. userID = user_dict.get('datas')[0].get('pk')
  555. try:
  556. # 更改的时间
  557. update_time = timezone.localtime(timezone.now())
  558. Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData)
  559. except Exception as e:
  560. return response.json(177, repr(e))
  561. else:
  562. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  563. res = CommonService.qs_to_dict(qs)
  564. return response.json(0, res)
  565. else:
  566. # 查询id
  567. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  568. if user.exists():
  569. user_dict = CommonService.qs_to_dict(user)
  570. userID = user_dict.get('datas')[0].get('pk')
  571. try:
  572. # 更改的时间
  573. update_time = timezone.localtime(timezone.now())
  574. Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData)
  575. except Exception as e:
  576. return response.json(177, repr(e))
  577. else:
  578. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  579. res = CommonService.qs_to_dict(qs)
  580. return response.json(0, res)
  581. # 新删除设备
  582. def deleteInterface(request):
  583. '''
  584. 删除用户设备
  585. :param request:
  586. :return:
  587. '''
  588. response = ResponseObject()
  589. request.encoding = 'utf-8'
  590. if request.method == 'POST':
  591. request_dict = request.POST
  592. elif request.method == 'GET':
  593. request_dict = request.GET
  594. else:
  595. return response.json(444)
  596. token = request_dict.get('token', None)
  597. id = request_dict.get('id', None)
  598. if not id:
  599. return response.json(444, 'id')
  600. tko = TokenObject(token)
  601. response.lang = tko.lang
  602. if tko.code != 0:
  603. return response.json(tko.code)
  604. userID = tko.userID
  605. # 主用户删除设备全部删除
  606. if not userID:
  607. return response.json(309)
  608. try:
  609. dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  610. if dv_qs.exists():
  611. uid = dv_qs[0].UID
  612. if dv_qs[0].isShare:
  613. dv_qs.delete()
  614. else:
  615. # a.主用户删除设备
  616. dv_qs.delete()
  617. # 删除设备影子信息uid_set 外键关联删除设备推送配置信息 uid_push
  618. up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
  619. if up_qs.count() > 1:
  620. UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
  621. else:
  622. up_qs.delete()
  623. # b.分享获得用户假删除
  624. ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID)
  625. if ud_dv_qs.exists():
  626. ud_dv_qs.update(isExist=0)
  627. # 异步删除推送消息
  628. asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
  629. asy.start()
  630. # redisObj = RedisObject(db=8)
  631. # redisObj.del_data(key='uid_qs_' + userID)
  632. else:
  633. return response.json(14)
  634. except Exception as e:
  635. errorInfo = traceback.format_exc()
  636. print('删除数据库记录错误: %s' % errorInfo)
  637. return response.json(176, repr(e))
  638. else:
  639. return response.json(0)
  640. # 新查询设备字段
  641. def queryInterface(request):
  642. request.encoding = 'utf-8'
  643. response = ResponseObject()
  644. if request.method == 'POST':
  645. request_dict = request.POST
  646. elif request.method == 'GET':
  647. request_dict = request.GET
  648. else:
  649. return response.json(444)
  650. token = request_dict.get('token', None)
  651. page = request_dict.get('page', None)
  652. line = request_dict.get('line', None)
  653. NickName = request_dict.get('NickName', None)
  654. uid = request_dict.get('uid', None)
  655. page = int(page)
  656. line = int(line)
  657. tko = TokenObject(token)
  658. response.lang = tko.lang
  659. if page <= 0:
  660. return response.json(0)
  661. if tko.code == 0:
  662. userID = tko.userID
  663. dvqs = Device_Info.objects.filter(userID_id=userID)
  664. # # 已重置的设备
  665. # dvqs = dvqs.filter(~Q(isExist=2))
  666. if NickName:
  667. dvqs = dvqs.filter(NickName__icontains=NickName)
  668. if uid:
  669. dvqs = dvqs.filter(UID=uid)
  670. # count = dvqs.count()
  671. dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
  672. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  673. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  674. 'isVod', 'isExist', 'NotificationMode')
  675. dvls = CommonService.qs_to_list(dvql)
  676. uid_list = []
  677. for dvl in dvls:
  678. uid_list.append(dvl['UID'])
  679. # if dvl['isShare'] is False:
  680. # uid_list.append(dvl['UID'])
  681. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  682. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  683. upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
  684. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  685. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  686. nowTime = int(time.time())
  687. data = []
  688. # 设备拓展信息表
  689. us_qs = UidSetModel.objects.filter(uid__in=uid_list).\
  690. values('uid', 'version', 'nickname', 'detect_interval')
  691. uv_dict = {}
  692. for us in us_qs:
  693. uv_dict[us['uid']] = {'version': us['version'],
  694. 'nickname': us['nickname'],
  695. 'detect_interval': us['detect_interval']}
  696. for p in dvls:
  697. p['vod'] = []
  698. for dm in ubqs:
  699. if p['UID'] == dm['uid']:
  700. if dm['endTime'] > nowTime:
  701. p['vod'].append(dm)
  702. p['preview'] = []
  703. for up in upqs:
  704. if p['UID'] == up['uid']:
  705. obj = 'uid_preview/{uid}/channel_{channel}.png'.\
  706. format(uid=up['uid'], channel=up['channel'])
  707. img_sign = bucket.sign_url('GET', obj, 300)
  708. p['preview'].append(img_sign)
  709. p_uid = p['UID']
  710. if p_uid in uv_dict:
  711. # 设备版本号
  712. p['uid_version'] = uv_dict[p_uid]['version']
  713. p['detect_interval'] = uv_dict[p_uid]['detect_interval']
  714. # 设备昵称 调用影子信息昵称,先阶段不可
  715. if uv_dict[p_uid]['nickname']:
  716. p['NickName'] = uv_dict[p_uid]['nickname']
  717. else:
  718. # 设备版本号
  719. p['uid_version'] = ''
  720. data.append(p)
  721. return response.json(0, data)
  722. else:
  723. return response.json(tko.code)
  724. def uid_status(request):
  725. request.encoding = 'utf-8'
  726. response = ResponseObject()
  727. if request.method == 'POST':
  728. request_dict = request.POST
  729. elif request.method == 'GET':
  730. request_dict = request.GET
  731. else:
  732. return response.json(444)
  733. token = request_dict.get('token', None)
  734. uid = request_dict.get('uid', None)
  735. tko = TokenObject(token)
  736. response.lang = tko.lang
  737. if tko.code != 0:
  738. return response.json(tko.code)
  739. userID = tko.userID
  740. # 调试
  741. logger = logging.getLogger('django')
  742. debugOne = int(time.time())
  743. # 判断用户是否绑定设备
  744. qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
  745. 'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
  746. 'detect_group', 'is_alexa', 'region_alexa')
  747. # 调试
  748. debugOnes = int(time.time())
  749. logger.error('————————debugOne_sec:', debugOnes - debugOne)
  750. # 判断uid配置表信息是否存在
  751. if qs.exists():
  752. # 获取uid推送是否添加过
  753. us_id = qs[0]['id']
  754. # 调试
  755. debugTwo = int(time.time())
  756. if UidPushModel.objects.filter(uid_set_id=us_id, userID_id=userID).exists():
  757. detect_status = qs[0]['detect_status']
  758. else:
  759. detect_status = 0
  760. data = {
  761. 'push_status': detect_status, # 推送状态
  762. 'push_interval': qs[0]['detect_interval'], # 推送间隔
  763. 'ucode': qs[0]['ucode'],
  764. 'version': qs[0]['version'],
  765. 'p2p_region': qs[0]['p2p_region'],
  766. 'tz': qs[0]['tz'],
  767. 'video_code': qs[0]['video_code'],
  768. 'channel': qs[0]['channel'],
  769. 'cloud_vod': qs[0]['cloud_vod'],
  770. 'detect_group': qs[0]['detect_group'], # 推送组
  771. 'is_alexa': qs[0]['is_alexa'], # 推送组
  772. 'region_alexa': qs[0]['region_alexa'], # 推送组
  773. }
  774. # 调试
  775. debugTwos = int(time.time())
  776. logger.error('————————debugTwo_sec:', debugTwos - debugTwo)
  777. # 调试
  778. debugThere = int(time.time())
  779. # 查询云存储相关信息
  780. ubqs = UID_Bucket.objects.filter(uid=uid). \
  781. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  782. # 调试
  783. debugTheres = int(time.time())
  784. logger.error('————————debugTheres_sec:', debugTheres - debugThere)
  785. nowTime = int(time.time())
  786. if ubqs.exists():
  787. if ubqs[0]['endTime'] > nowTime:
  788. data['vod'] = list(ubqs)
  789. return response.json(0, data)
  790. else:
  791. return response.json(0)
  792. def uid_status_test(request):
  793. request.encoding = 'utf-8'
  794. response = ResponseObject()
  795. if request.method == 'POST':
  796. request_dict = request.POST
  797. elif request.method == 'GET':
  798. request_dict = request.GET
  799. else:
  800. return response.json(444)
  801. token = request_dict.get('token', None)
  802. uid = request_dict.get('uid', None)
  803. tko = TokenObject(token)
  804. response.lang = tko.lang
  805. if tko.code != 0:
  806. return response.json(tko.code)
  807. userID = tko.userID
  808. # 判断用户是否绑定设备
  809. print(100000000000)
  810. qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
  811. 'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
  812. 'detect_group', 'is_alexa', 'region_alexa')
  813. # 判断uid配置表信息是否存在
  814. if qs.exists():
  815. # 获取uid推送是否添加过
  816. print(1111111111111)
  817. us_id = qs[0]['id']
  818. if UidPushModel.objects.filter(uid_set_id=us_id, userID_id=userID).exists():
  819. detect_status = qs[0]['detect_status']
  820. else:
  821. detect_status = 0
  822. data = {
  823. 'push_status': detect_status, # 推送状态
  824. 'push_interval': qs[0]['detect_interval'], # 推送间隔
  825. 'ucode': qs[0]['ucode'],
  826. 'version': qs[0]['version'],
  827. 'p2p_region': qs[0]['p2p_region'],
  828. 'tz': qs[0]['tz'],
  829. 'video_code': qs[0]['video_code'],
  830. 'channel': qs[0]['channel'],
  831. 'cloud_vod': qs[0]['cloud_vod'],
  832. 'detect_group': qs[0]['detect_group'], # 推送组
  833. 'is_alexa': qs[0]['is_alexa'], # 推送组
  834. 'region_alexa': qs[0]['region_alexa'], # 推送组
  835. }
  836. print(22222222222)
  837. # 查询云存储相关信息
  838. ubqs = UID_Bucket.objects.filter(uid=uid). \
  839. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  840. nowTime = int(time.time())
  841. if ubqs.exists():
  842. if ubqs[0]['endTime'] > nowTime:
  843. data['vod'] = list(ubqs)
  844. print(3333333333333)
  845. return response.json(0, data)
  846. else:
  847. return response.json(0)
  848. def update_uid_set(request):
  849. request.encoding = 'utf-8'
  850. response = ResponseObject()
  851. if request.method == 'POST':
  852. request_dict = request.POST
  853. elif request.method == 'GET':
  854. request_dict = request.GET
  855. else:
  856. return response.json(444)
  857. token = request_dict.get('token', None)
  858. uid = request_dict.get('uid', None)
  859. version = request_dict.get('version', '')
  860. ucode = request_dict.get('ucode', '')
  861. tko = TokenObject(token)
  862. response.lang = tko.lang
  863. if tko.code == 0:
  864. userID = tko.userID
  865. nowTime = int(time.time())
  866. dvqs = Device_Info.objects.filter(userID_id=userID)
  867. # redisObj = RedisObject(db=8)
  868. # redisObj.del_data(key='uid_qs_' + userID)
  869. if dvqs.exists():
  870. us_qs = UidSetModel.objects.filter(uid=uid)
  871. if us_qs.exists():
  872. uid_set_update_dict = {
  873. 'updTime': nowTime,
  874. 'version': version,
  875. 'ucode': ucode,
  876. }
  877. us_qs.update(**uid_set_update_dict)
  878. else:
  879. uid_set_create_dict = {
  880. 'uid': uid,
  881. 'addTime': nowTime,
  882. 'updTime': nowTime,
  883. 'version': version,
  884. 'ucode': ucode,
  885. }
  886. UidSetModel.objects.create(**uid_set_create_dict)
  887. return response.json(0)
  888. else:
  889. return response.json(14)
  890. else:
  891. return response.json(tko.code)
  892. # 测试环境
  893. # test.shadow.dvema.com
  894. # 生产环境
  895. # shadow.dvema.com
  896. # http://test.dvema.com/deviceShadow/update?etk=JVJWbFpFU0VOV1FsbEVTMFpOU2xKWFFURXhNVUU9Xz0=&ucode=1234&version=1324&p2p_region=CN
  897. # 设备影子更新
  898. def update_device_shadow(request):
  899. request.encoding = 'utf-8'
  900. response = ResponseObject()
  901. if request.method == 'POST':
  902. request_dict = request.POST
  903. elif request.method == 'GET':
  904. request_dict = request.GET
  905. else:
  906. return response.json(444)
  907. etk = request_dict.get('etk', None)
  908. eto = ETkObject(etk)
  909. uid = eto.uid
  910. if uid:
  911. # 重置按钮
  912. is_reset = request_dict.get('is_reset', None)
  913. # 传1则重置设备信息
  914. if is_reset == '1':
  915. UidSetModel.objects.filter(uid=uid).delete()
  916. # 重置设备,判断设备为已删除
  917. di_qs = Device_Info.objects.filter(UID=uid)
  918. di_qs.update(isExist=2)
  919. # 清除redis缓存
  920. # data = di_qs.values()
  921. # redisObj = RedisObject(db=8)
  922. # for di in data:
  923. # key = 'uid_qs_' + di['userID_id']
  924. # redis_value = redisObj.get_data(key=key)
  925. # if redis_value is not False:
  926. # redisObj.del_data(key)
  927. ucode = request_dict.get('ucode', None)
  928. version = request_dict.get('version', None)
  929. p2p_region = request_dict.get('p2p_region', None)
  930. tz = request_dict.get('tz', None)
  931. video_code = request_dict.get('video_code', None)
  932. ip = CommonService.get_ip_address(request)
  933. channel = request_dict.get('channel', None)
  934. cloud_vod = request_dict.get('cloud_vod', None)
  935. push_status = request_dict.get('push_status', None)
  936. pwd = request_dict.get('pwd', None)
  937. resetTime = request_dict.get('resetTime', None)
  938. is_alexa = request_dict.get('is_alexa', None)
  939. us_qs = UidSetModel.objects.filter(uid=uid)
  940. # 更新
  941. nowTime = int(time.time())
  942. print('-------')
  943. print(resetTime)
  944. print('-------')
  945. qs_dict = {
  946. 'updTime': nowTime,
  947. 'ip': ip
  948. }
  949. if channel:
  950. qs_dict['channel'] = channel
  951. if p2p_region:
  952. qs_dict['p2p_region'] = p2p_region
  953. if ucode:
  954. qs_dict['ucode'] = ucode
  955. if version:
  956. qs_dict['version'] = version
  957. if tz:
  958. qs_dict['tz'] = tz
  959. if video_code:
  960. qs_dict['video_code'] = video_code
  961. if cloud_vod:
  962. qs_dict['cloud_vod'] = cloud_vod
  963. if push_status:
  964. qs_dict['detect_status'] = push_status
  965. if pwd:
  966. qs_dict['pwd'] = pwd
  967. if is_alexa:
  968. qs_dict['is_alexa'] = is_alexa
  969. if us_qs.exists():
  970. us_qs.update(**qs_dict)
  971. # 如果推送状态开启,返回推送url
  972. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
  973. # 新增
  974. else:
  975. qs_dict['uid'] = uid
  976. qs_dict['addTime'] = nowTime
  977. UidSetModel.objects.create(**qs_dict)
  978. # 如果推送状态开启,返回推送url
  979. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
  980. else:
  981. return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})