EquipmentManager.py 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327
  1. import re
  2. import time
  3. import traceback
  4. import threading
  5. import logging
  6. import requests
  7. import simplejson as json
  8. from django.utils import timezone
  9. from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidPushModel, \
  10. UIDCompanySerialModel, iotdeviceInfoModel, UIDMainUser, UidChannelSetModel, LogModel
  11. from django.db.models import Q
  12. from Object.ResponseObject import ResponseObject
  13. from Object.TokenObject import TokenObject
  14. from Service.CommonService import CommonService
  15. from Service.ModelService import ModelService
  16. from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY, BASE_DIR
  17. from Object.ETkObject import ETkObject
  18. import oss2
  19. from django.http import JsonResponse
  20. from Object.RedisObject import RedisObject
  21. from Controller.DetectController import DetectControllerView
  22. from Ansjer.config import PUSH_REDIS_ADDRESS
  23. # 查询用户设备
  24. def queryUserEquipmentInterface(request):
  25. request.encoding = 'utf-8'
  26. response = ResponseObject()
  27. if request.method == 'POST':
  28. request_dict = request.POST
  29. elif request.method == 'GET':
  30. request_dict = request.GET
  31. else:
  32. return response.json(444)
  33. token = request_dict.get('token', None)
  34. tko = TokenObject(token)
  35. response.lang = tko.lang
  36. if tko.code != 0:
  37. return response.json(tko.code)
  38. userID = tko.userID
  39. if not userID:
  40. return response.json(309)
  41. dvqs = Device_Info.objects.filter(userID_id=userID)
  42. dvdict = CommonService.qs_to_dict(dvqs)
  43. uid_list = Device_Info.objects.filter(userID_id=userID, isShare=False). \
  44. values_list('UID', flat=True)
  45. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  46. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  47. res = []
  48. nowTime = int(time.time())
  49. for p in dvdict['datas']:
  50. p['fields']['vod'] = []
  51. for dm in ubqs:
  52. if p['fields']['UID'] == dm['uid']:
  53. if dm['endTime'] > nowTime:
  54. p['fields']['vod'].append(dm)
  55. # dm['valid'] = 1
  56. # else:
  57. # dm['valid'] = 0
  58. # p['fields']['primaryUserID'] = ''
  59. res.append(p)
  60. return response.json(0, {'datas': res})
  61. def addNewUserEquipmentInterface(request):
  62. request.encoding = 'utf-8'
  63. response = ResponseObject()
  64. if request.method == 'POST':
  65. request_dict = request.POST
  66. elif request.method == 'GET':
  67. request_dict = request.GET
  68. else:
  69. return response.json(444)
  70. token = request_dict.get('token', None)
  71. deviceContent = request_dict.get('content', None)
  72. if not deviceContent:
  73. return response.json(444, 'content')
  74. tko = TokenObject(token)
  75. response.lang = tko.lang
  76. if tko.code != 0:
  77. return response.json(tko.code)
  78. userID = tko.userID
  79. try:
  80. deviceData = json.loads(deviceContent)
  81. UID = deviceData.get('UID', None)
  82. if not UID:
  83. return response.json(444, 'content')
  84. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  85. if dValid:
  86. return response.json(174)
  87. else:
  88. # redisObj = RedisObject(db=8)
  89. # redisObj.del_data(key='uid_qs_' + userID)
  90. UID = deviceData.get('UID', '')
  91. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  92. if re_uid.match(UID):
  93. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  94. **deviceData)
  95. userDevice.save()
  96. if UID == '98UXAA8BRPA35VAL111A':
  97. asy = threading.Thread(target=ModelService.add_log,
  98. args=(CommonService.get_ip_address(request), userID, 'addV0'))
  99. asy.start()
  100. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  101. # # 判断是否有已绑定用户
  102. # if not is_bind.exists():
  103. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  104. # **deviceData)
  105. # userDevice.save()
  106. # else:
  107. # # 分享添加
  108. # if 'isShare' in deviceData:
  109. # deviceData['isShare'] = True
  110. # else:
  111. # deviceData['isShare'] = True
  112. # bind_userID = is_bind[0].userID_id
  113. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  114. # userID_id=userID,
  115. # primaryUserID=bind_userID,
  116. # primaryMaster=ModelService.get_user_name(bind_userID),
  117. # **deviceData)
  118. # userDevice.save()
  119. else:
  120. return response.json(444, 'UID')
  121. except Exception as e:
  122. errorInfo = traceback.format_exc()
  123. print('添加设备错误: %s ' % errorInfo)
  124. return response.json(178, repr(e))
  125. else:
  126. sqlDict = CommonService.qs_to_dict([userDevice])
  127. return response.json(0, sqlDict)
  128. def delUserEquipmentInterface(request):
  129. '''
  130. 删除用户设备
  131. :param request:
  132. :return:
  133. '''
  134. response = ResponseObject()
  135. request.encoding = 'utf-8'
  136. if request.method == 'POST':
  137. request_dict = request.POST
  138. elif request.method == 'GET':
  139. request_dict = request.GET
  140. else:
  141. return response.json(444)
  142. token = request_dict.get('token', None)
  143. id = request_dict.get('id', None)
  144. if not id:
  145. return response.json(444, 'id')
  146. tko = TokenObject(token)
  147. response.lang = tko.lang
  148. if tko.code != 0:
  149. return response.json(tko.code)
  150. userID = tko.userID
  151. # 主用户删除设备全部删除
  152. try:
  153. dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  154. # redisObj = RedisObject(db=8)
  155. # redisObj.del_data(key='uid_qs_' + userID)
  156. if dv_qs.exists():
  157. uid = dv_qs[0].UID
  158. asy = threading.Thread(target=ModelService.add_log, args=(CommonService.get_ip_address(request), userID, 'deleteV1'))
  159. asy.start()
  160. print('删除')
  161. UID_Preview.objects.filter(uid=uid).delete()
  162. dv_qs.delete()
  163. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  164. asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
  165. asy.start()
  166. except Exception as e:
  167. errorInfo = traceback.format_exc()
  168. print('删除数据库记录错误: %s' % errorInfo)
  169. return response.json(176, repr(e))
  170. else:
  171. return response.json(0)
  172. def modifyUserEquipmentInterface(request):
  173. '''
  174. 修改用户设备
  175. :param request:
  176. :return:
  177. '''
  178. response = ResponseObject()
  179. if request.method == 'POST':
  180. request.encoding = 'utf-8'
  181. request_dict = request.POST
  182. elif request.method == 'GET':
  183. request.encoding = 'utf-8'
  184. request_dict = request.GET
  185. else:
  186. return response.json(444)
  187. token = request_dict.get('token', None)
  188. deviceContent = request_dict.get('content', None)
  189. id = request_dict.get('id', None)
  190. if not deviceContent or not id:
  191. return response.json(444, 'content,id')
  192. tko = TokenObject(token)
  193. response.lang = tko.lang
  194. if tko.code != 0:
  195. return response.json(tko.code)
  196. userID = tko.userID
  197. if userID is None:
  198. return response.json(309)
  199. try:
  200. deviceData = json.loads(deviceContent)
  201. if deviceData.__contains__('userID_id'):
  202. asy = threading.Thread(target=ModelService.update_log,
  203. args=(CommonService.get_ip_address(request), userID, 'modifyV0', deviceData, id))
  204. asy.start()
  205. return response.json(10, '110')
  206. if deviceData.__contains__('UID'):
  207. del deviceData['UID']
  208. dev_info_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  209. dev_info_qs.update(**deviceData)
  210. except Exception as e:
  211. return response.json(177, repr(e))
  212. else:
  213. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  214. res = CommonService.qs_to_dict(qs)
  215. if qs.exists():
  216. uid = qs[0].UID
  217. if uid == '98UXAA8BRPA35VAL111A':
  218. asy = threading.Thread(target=ModelService.update_log,
  219. args=(CommonService.get_ip_address(request), userID, 'modifyV0', deviceContent, id))
  220. asy.start()
  221. nickname = qs[0].NickName
  222. # 增加设备影子信息修改昵称 start
  223. us_qs = UidSetModel.objects.filter(uid=uid)
  224. if us_qs.exists():
  225. us_qs.update(nickname=nickname)
  226. else:
  227. ChannelIndex = qs[0].ChannelIndex
  228. nowTime = int(time.time())
  229. uid_set_create_dict = {
  230. 'uid': uid,
  231. 'addTime': nowTime,
  232. 'updTime': nowTime,
  233. 'ip': CommonService.get_ip_address(request),
  234. 'channel': ChannelIndex,
  235. 'nickname': nickname,
  236. }
  237. UidSetModel.objects.create(**uid_set_create_dict)
  238. Device_Info.objects.filter(UID=uid).update(NickName=nickname)
  239. if deviceData.__contains__('NickName') and us_qs[0].is_alexa == 1:
  240. encrypt_pwd = ''
  241. if deviceData.__contains__('View_Password'):
  242. encrypt_pwd = deviceData['View_Password']
  243. # 请求Alexa服务器更新事件网关
  244. url = 'https://www.zositech.xyz/deviceStatus/addOrUpdateV2'
  245. data_list = [{'userID': userID, 'UID': uid, 'uid_nick': nickname, 'password': encrypt_pwd}]
  246. data_list = json.dumps(data_list)
  247. data = {'data_list': data_list}
  248. requests.post(url, data=data, timeout=2)
  249. return response.json(0, res)
  250. def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs):
  251. request.encoding = 'utf-8'
  252. response = ResponseObject()
  253. if request.method == 'POST':
  254. fieldDict = request.POST
  255. elif request.method == 'GET':
  256. fieldDict = request.GET
  257. else:
  258. return response.json(444)
  259. token = request.POST.get('token', None)
  260. type = request.POST.get('type', None)
  261. tko = TokenObject(token)
  262. response.lang = tko.lang
  263. if tko.code != 0:
  264. return response.json(tko.code)
  265. userID = tko.userID
  266. if not userID:
  267. return response.json(309)
  268. own_perm = ModelService.check_perm(userID=userID, permID=30)
  269. if not own_perm:
  270. return response.json(404)
  271. if type == 'PC':
  272. page = int(fieldDict['page'])
  273. line = int(fieldDict['line'])
  274. qs = Device_Info.objects.all()
  275. count = qs.count()
  276. res = qs[(page - 1) * line:page * line]
  277. sqlDict = CommonService.qs_to_dict(query_set=res)
  278. sqlDict['count'] = count
  279. return response.json(0, sqlDict)
  280. else:
  281. qs = Device_Info.objects.all()
  282. res = CommonService.qs_to_dict(qs)
  283. return response.json(0, res)
  284. def findEquipmentInfoInterface(request, *callback_args, **callback_kwargs):
  285. request.encoding = 'utf-8'
  286. response = ResponseObject()
  287. if request.method == 'GET':
  288. fieldDict = request.GET
  289. elif request.method == 'POST':
  290. fieldDict = request.POST
  291. else:
  292. return response.json(444)
  293. deviceContent = fieldDict.get('content', None)
  294. token = fieldDict.get('token', None)
  295. tko = TokenObject(token)
  296. response.lang = tko.lang
  297. if tko.code != 0:
  298. return response.json(tko.code)
  299. if deviceContent:
  300. try:
  301. searchCondition = json.loads(deviceContent)
  302. except Exception as e:
  303. print(repr(e))
  304. return response.json(10, repr(e))
  305. else:
  306. kwargs = CommonService.get_kwargs(data=searchCondition)
  307. qs = Device_Info.objects.filter(**kwargs)
  308. page = int(fieldDict['page'])
  309. line = int(fieldDict['line'])
  310. count = qs.count()
  311. res = qs[(page - 1) * line:page * line]
  312. send_dict = CommonService.qs_to_dict(query_set=res)
  313. for k, v in enumerate(send_dict["datas"]):
  314. for val in res:
  315. if v['pk'] == val.id:
  316. send_dict["datas"][k]['fields']['username'] = \
  317. ModelService.get_user_mark(send_dict["datas"][k]['fields']['userID'])
  318. send_dict["datas"][k]['fields']['primaryusername'] = \
  319. ModelService.get_user_mark(send_dict["datas"][k]['fields']['primaryUserID'])
  320. send_dict['count'] = count
  321. return response.json(0, send_dict)
  322. else:
  323. qs = Device_Info.objects.all()
  324. page = int(fieldDict['page'])
  325. line = int(fieldDict['line'])
  326. count = qs.count()
  327. res = qs[(page - 1) * line:page * line]
  328. send_dict = CommonService.qs_to_dict(query_set=res)
  329. for k, v in enumerate(send_dict["datas"]):
  330. for val in res:
  331. if v['pk'] == val.id:
  332. username = ModelService.get_user_name(send_dict["datas"][k]['fields']['userID'])
  333. send_dict["datas"][k]['fields']['username'] = username
  334. send_dict["datas"][k]['fields']['primaryusername'] = \
  335. ModelService.get_user_mark(send_dict["datas"][k]['fields']['primaryUserID'])
  336. send_dict['count'] = count
  337. return response.json(0, send_dict)
  338. # 添加设备字段
  339. def addInterface(request):
  340. request.encoding = 'utf-8'
  341. response = ResponseObject()
  342. if request.method == 'POST':
  343. request_dict = request.POST
  344. elif request.method == 'GET':
  345. request_dict = request.GET
  346. else:
  347. return response.json(444)
  348. token = request_dict.get('token', None)
  349. UID = request_dict.get('UID', None)
  350. NickName = request_dict.get('NickName', None)
  351. View_Account = request_dict.get('View_Account', None)
  352. View_Password = request_dict.get('View_Password', '')
  353. Type = request_dict.get('Type', None)
  354. ChannelIndex = request_dict.get('ChannelIndex', None)
  355. version = request_dict.get('version', '')
  356. isCheckMainUser = request_dict.get('isCheckMainUser', None)
  357. isMainUserExists = False
  358. if all([UID, NickName, View_Account, Type, ChannelIndex]):
  359. tko = TokenObject(token)
  360. response.lang = tko.lang
  361. if tko.code == 0:
  362. userID = tko.userID
  363. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  364. if re_uid.match(UID):
  365. is_exist = Device_Info.objects.filter(UID=UID, userID_id=userID)
  366. if is_exist:
  367. # 判断设备是否已存在
  368. if is_exist[0].isExist == 1:
  369. return response.json(174)
  370. else:
  371. is_exist.delete()
  372. if UID == '98UXAA8BRPA35VAL111A':
  373. asy = threading.Thread(target=ModelService.add_log,
  374. args=(CommonService.get_ip_address(request), userID, 'addV1'))
  375. asy.start()
  376. return response.json(10, 'illegal uid: {uid}'.format(uid=UID))
  377. pass
  378. pk = CommonService.getUserID(getUser=False)
  379. userName = Device_User.objects.get(userID=userID).username
  380. main_exist = Device_Info.objects.filter(UID=UID)
  381. main_exist = main_exist.filter(~Q(vodPrimaryUserID='')).values('vodPrimaryUserID', 'vodPrimaryMaster')
  382. vodPrimaryUserID = userID
  383. vodPrimaryMaster = userName
  384. primaryUserID = ''
  385. primaryMaster = ''
  386. isShare = False
  387. is_bind = Device_Info.objects.filter(UID=UID, isShare=False).values('userID__userID', 'primaryUserID', 'primaryMaster')
  388. if main_exist.exists():
  389. vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
  390. vodPrimaryMaster = main_exist[0]['vodPrimaryMaster']
  391. if is_bind.exists():
  392. primaryUserID = is_bind[0]['primaryUserID']
  393. primaryMaster = is_bind[0]['primaryMaster']
  394. isShare = True
  395. isusermain = False
  396. if (vodPrimaryUserID != userID and vodPrimaryUserID != '') or (primaryUserID != userID and primaryUserID != ''):
  397. isusermain = True
  398. # 判断是否有已绑定用户
  399. if isCheckMainUser == '1' and isusermain:
  400. res = {
  401. 'id': pk,
  402. 'userID': userID,
  403. 'NickName': NickName,
  404. 'UID': UID,
  405. 'View_Account': View_Account,
  406. 'View_Password': View_Password,
  407. 'ChannelIndex': ChannelIndex,
  408. 'Type': Type,
  409. 'isShare': isShare,
  410. 'primaryUserID': primaryUserID,
  411. 'primaryMaster': primaryMaster,
  412. 'vodPrimaryUserID': vodPrimaryUserID,
  413. 'vodPrimaryMaster': vodPrimaryMaster,
  414. 'data_joined': '',
  415. 'version': version,
  416. 'isVod': 0,
  417. 'isExist': 1,
  418. 'userID__userEmail': ''
  419. }
  420. res['vod'] = [
  421. {
  422. "status": 1,
  423. "channel": ChannelIndex,
  424. "endTime": '',
  425. "bucket__content": '',
  426. "uid": UID
  427. }
  428. ]
  429. res['isMainUserExists'] = 1
  430. return response.json(0, res)
  431. try:
  432. # 判断是否有用户绑定
  433. nowTime = int(time.time())
  434. us_qs = UidSetModel.objects.filter(uid=UID)
  435. if not us_qs.exists():
  436. uid_set_create_dict = {
  437. 'uid': UID,
  438. 'addTime': nowTime,
  439. 'updTime': nowTime,
  440. 'ip': CommonService.get_ip_address(request),
  441. 'channel': ChannelIndex,
  442. 'nickname': NickName,
  443. 'version': version,
  444. }
  445. UidSetModel.objects.create(**uid_set_create_dict)
  446. else:
  447. us_qs.update(nickname=NickName)
  448. userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
  449. NickName=NickName, View_Account=View_Account,
  450. View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex,
  451. version=version, vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
  452. userDevice.save()
  453. uid_serial_qs = UIDCompanySerialModel.objects.filter(
  454. uid__uid=UID)
  455. if uid_serial_qs.exists():
  456. uid_serial = uid_serial_qs[0]
  457. Device_Info.objects.filter(UID=UID).update(vodPrimaryUserID=vodPrimaryUserID,
  458. vodPrimaryMaster=vodPrimaryMaster,
  459. serial_number=uid_serial.company_serial.serial_number + uid_serial.company_serial.company.mark)
  460. else:
  461. Device_Info.objects.filter(UID=UID).update(vodPrimaryUserID=vodPrimaryUserID,
  462. vodPrimaryMaster=vodPrimaryMaster)
  463. if not us_qs.exists():
  464. us_qs = UidSetModel.objects.filter(uid=UID)
  465. if us_qs.exists() and us_qs[0].is_alexa == 1:
  466. if us_qs[0].channel > 1:
  467. data_list = []
  468. uid_channel_set_qs = UidChannelSetModel.objects.filter(uid_id=us_qs[0].id). \
  469. values('channel', 'channel_name')
  470. if uid_channel_set_qs.exists():
  471. # 多通道设备名为 UidChannelSetModel 的 channel_name
  472. for uid_channel_set in uid_channel_set_qs:
  473. data_list.append(
  474. {'userID': userID, 'UID': UID, 'uid_nick': uid_channel_set['channel_name'],
  475. 'channel': uid_channel_set['channel'], 'password': View_Password})
  476. else:
  477. data_list = [{'userID': userID, 'UID': UID, 'uid_nick': NickName, 'password': View_Password}]
  478. # 请求Alexa服务器更新事件网关
  479. data_list = json.dumps(data_list)
  480. data = {'data_list': data_list}
  481. url = 'https://www.zositech.xyz/deviceStatus/addOrUpdateV2'
  482. requests.post(url, data=data, timeout=2)
  483. except Exception as e:
  484. return response.json(10, repr(e))
  485. else:
  486. dvqs = Device_Info.objects.filter(id=pk).values('id', 'userID', 'NickName', 'UID',
  487. 'View_Account',
  488. 'View_Password', 'ChannelIndex', 'Type',
  489. 'isShare',
  490. 'primaryUserID', 'primaryMaster', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
  491. 'data_joined', 'version',
  492. 'isVod', 'isExist', 'isCameraOpenCloud', 'serial_number')
  493. dvql = CommonService.qs_to_list(dvqs)
  494. ubqs = UID_Bucket.objects.filter(uid=UID). \
  495. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  496. res = dvql[0]
  497. res['vod'] = list(ubqs)
  498. # 新增获取IOT证书内容
  499. iotqs = iotdeviceInfoModel.objects.filter(serial_number=dvql[0]['serial_number'])
  500. if iotqs.exists():
  501. res['iot'] = {
  502. 'endpoint': iotqs[0].endpoint,
  503. 'token_iot_number': iotqs[0].endpoint
  504. }
  505. if isMainUserExists:
  506. res['isMainUserExists'] = 1
  507. return response.json(0, res)
  508. else:
  509. return response.json(444, {'param': 'UID'})
  510. else:
  511. return response.json(tko.code)
  512. else:
  513. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex,version'})
  514. # 添加设备字段
  515. def judgeInterface(request):
  516. request.encoding = 'utf-8'
  517. response = ResponseObject()
  518. if request.method == 'POST':
  519. request_dict = request.POST
  520. elif request.method == 'GET':
  521. request_dict = request.GET
  522. else:
  523. return response.json(444)
  524. token = request_dict.get('token', None)
  525. uid = request_dict.get('uid', None)
  526. if all([uid, token]):
  527. tko = TokenObject(token)
  528. response.lang = tko.lang
  529. if tko.code == 0:
  530. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  531. if re_uid.match(uid):
  532. is_bind = Device_Info.objects.filter(UID=uid, isShare=False)
  533. # 判断是否有已绑定用户
  534. if is_bind:
  535. qs = is_bind.values('userID__NickName', 'NickName')
  536. nickname = qs[0]['NickName']
  537. us_qs = UidSetModel.objects.filter(uid=uid).values('nickname')
  538. if us_qs.exists():
  539. nickname = us_qs[0]['NickName']
  540. res = {
  541. 'bind_user': qs[0]['userID__NickName'],
  542. 'bind_device_name': nickname,
  543. }
  544. return response.json(15, res=res)
  545. else:
  546. return response.json(0, 'no bind user')
  547. else:
  548. return response.json(444, {'param': 'UID'})
  549. else:
  550. return response.json(tko.code)
  551. else:
  552. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
  553. # 管理员添加
  554. def admin_addInterface(request):
  555. request.encoding = 'utf-8'
  556. response = ResponseObject()
  557. if request.method == 'POST':
  558. request_dict = request.POST
  559. elif request.method == 'GET':
  560. request_dict = request.GET
  561. else:
  562. return response.json(444)
  563. token = request_dict.get('token', None)
  564. deviceContent = request_dict.get('content', None)
  565. ipdizhi = request_dict.get('ipdizhi', None)
  566. username = request_dict.get('username', None)
  567. if not username:
  568. return response.json(444, 'username')
  569. if not deviceContent:
  570. return response.json(444, 'content')
  571. tko = TokenObject(token)
  572. response.lang = tko.lang
  573. if tko.code != 0:
  574. return response.json(tko.code)
  575. userID = tko.userID
  576. own_perm = ModelService.check_perm(userID, 40)
  577. # 权限判断
  578. if own_perm is not True:
  579. return response.json(404)
  580. # 查询id
  581. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  582. if user.exists():
  583. user_dict = CommonService.qs_to_dict(user)
  584. userID = user_dict.get('datas')[0].get('pk')
  585. else:
  586. return response.json(104)
  587. print(deviceContent)
  588. try:
  589. deviceData = json.loads(deviceContent)
  590. UID = deviceData.get('UID', None)
  591. if not UID:
  592. return response.json(444, 'content')
  593. dValid = Device_Info.objects.filter(userID_id=userID, UID=UID)
  594. if dValid:
  595. return response.json(174)
  596. else:
  597. UID = deviceData.get('UID', '')
  598. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  599. # redisObj = RedisObject(db=8)
  600. # redisObj.del_data(key='uid_qs_' + userID)
  601. if re_uid.match(UID):
  602. userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  603. **deviceData)
  604. userDevice.save()
  605. file_path = '/'.join((BASE_DIR, 'static/test.log'))
  606. file = open(file_path, 'a+')
  607. file.write(ipdizhi + "; username:" + username + "; time:" + time.strftime("%Y-%m-%d %H:%M:%S",
  608. time.localtime()))
  609. file.write('\n')
  610. file.flush()
  611. file.close()
  612. # is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
  613. # # 判断是否有已绑定用户
  614. # if not is_bind.exists():
  615. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
  616. # **deviceData)
  617. # userDevice.save()
  618. # else:
  619. # # 分享添加
  620. # if 'isShare' in deviceData:
  621. # deviceData['isShare'] = True
  622. # else:
  623. # deviceData['isShare'] = True
  624. # bind_userID = is_bind[0].userID_id
  625. # userDevice = Device_Info(id=CommonService.getUserID(getUser=False),
  626. # userID_id=userID,
  627. # primaryUserID=bind_userID,
  628. # primaryMaster=ModelService.get_user_name(bind_userID),
  629. # **deviceData)
  630. # userDevice.save()
  631. else:
  632. return response.json(444, 'UID')
  633. except Exception as e:
  634. errorInfo = traceback.format_exc()
  635. print('添加设备错误: %s ' % errorInfo)
  636. return response.json(178, repr(e))
  637. else:
  638. sqlDict = CommonService.qs_to_dict([userDevice])
  639. return response.json(0, sqlDict)
  640. # 超级管理员修改设备
  641. def admin_modifyInterface(request):
  642. response = ResponseObject()
  643. if request.method == 'POST':
  644. request.encoding = 'utf-8'
  645. request_dict = request.POST
  646. elif request.method == 'GET':
  647. request.encoding = 'utf-8'
  648. request_dict = request.GET
  649. else:
  650. return response.json(444)
  651. token = request_dict.get('token', None)
  652. deviceContent = request_dict.get('content', None)
  653. username = request_dict.get('username', None)
  654. if not username:
  655. return response.json(444, 'username')
  656. id = request_dict.get('id', None)
  657. print(deviceContent)
  658. if not deviceContent or not id:
  659. return response.json(444, 'content,id')
  660. tko = TokenObject(token)
  661. response.lang = tko.lang
  662. if tko.code != 0:
  663. return response.json(tko.code)
  664. userID = tko.userID
  665. if userID is None:
  666. return response.json(309)
  667. own_perm = ModelService.check_perm(userID, 50)
  668. # 权限判断
  669. if own_perm is not True:
  670. return response.json(404)
  671. deviceData = json.loads(deviceContent)
  672. print(deviceData['UID'])
  673. # redisObj = RedisObject(db=8)
  674. # redisObj.del_data(key='uid_qs_' + userID)
  675. dValid = Device_Info.objects.filter(userID_id=userID, UID=deviceData['UID'])
  676. if dValid.exists():
  677. dValid_dict = CommonService.qs_to_dict(dValid)
  678. print(dValid_dict.get('datas')[0].get('pk'))
  679. if dValid_dict.get('datas')[0].get('pk') == id:
  680. print('可以编辑')
  681. else:
  682. return response.json(174)
  683. # 查询id
  684. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  685. if user.exists():
  686. user_dict = CommonService.qs_to_dict(user)
  687. userID = user_dict.get('datas')[0].get('pk')
  688. try:
  689. # 更改的时间
  690. update_time = timezone.localtime(timezone.now())
  691. Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData)
  692. except Exception as e:
  693. return response.json(177, repr(e))
  694. else:
  695. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  696. res = CommonService.qs_to_dict(qs)
  697. return response.json(0, res)
  698. else:
  699. # 查询id
  700. user = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
  701. if user.exists():
  702. user_dict = CommonService.qs_to_dict(user)
  703. userID = user_dict.get('datas')[0].get('pk')
  704. try:
  705. # 更改的时间
  706. update_time = timezone.localtime(timezone.now())
  707. Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData)
  708. except Exception as e:
  709. return response.json(177, repr(e))
  710. else:
  711. qs = Device_Info.objects.filter(userID_id=userID, id=id)
  712. res = CommonService.qs_to_dict(qs)
  713. return response.json(0, res)
  714. # 新删除设备
  715. def deleteInterface(request):
  716. '''
  717. 删除用户设备
  718. :param request:
  719. :return:
  720. '''
  721. response = ResponseObject()
  722. request.encoding = 'utf-8'
  723. if request.method == 'POST':
  724. request_dict = request.POST
  725. elif request.method == 'GET':
  726. request_dict = request.GET
  727. else:
  728. return response.json(444)
  729. token = request_dict.get('token', None)
  730. id = request_dict.get('id', None)
  731. if not id:
  732. return response.json(444, 'id')
  733. tko = TokenObject(token)
  734. response.lang = tko.lang
  735. if tko.code != 0:
  736. return response.json(tko.code)
  737. userID = tko.userID
  738. # 主用户删除设备全部删除
  739. if not userID:
  740. return response.json(309)
  741. try:
  742. dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
  743. if not dv_qs.exists():
  744. return response.json(14)
  745. uid = dv_qs[0].UID
  746. if userID == dv_qs[0].vodPrimaryUserID:
  747. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  748. if dv_qs[0].isShare:
  749. dv_qs.delete()
  750. else:
  751. # a.主用户删除设备
  752. dv_qs.delete()
  753. # 删除设备影子信息uid_set 外键关联删除设备推送配置信息 uid_push
  754. up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
  755. DetectControllerView().do_delete_redis(uid)
  756. if up_qs.count() > 1:
  757. UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
  758. redisObj = RedisObject(db=6, SERVER_HOST=PUSH_REDIS_ADDRESS)
  759. ykey = '{uid}_redis_qs'.format(uid=uid)
  760. if ykey:
  761. redisObj.del_data(key=ykey)
  762. else:
  763. up_qs.delete()
  764. # b.删除次用户设备
  765. Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID).delete()
  766. # 异步删除推送消息
  767. asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
  768. asy.start()
  769. # 记录操作日志
  770. now_time = int(time.time())
  771. ip = CommonService.get_ip_address(request)
  772. content = json.loads(json.dumps(request_dict))
  773. log = {
  774. 'ip': ip,
  775. 'user_id': 1,
  776. 'status': 200,
  777. 'time': now_time,
  778. 'content': json.dumps(content),
  779. 'url': 'equipment/delete',
  780. 'operation': '{}删除设备,uid:{}'.format(userID, uid),
  781. }
  782. LogModel.objects.create(**log)
  783. except Exception as e:
  784. errorInfo = traceback.format_exc()
  785. print('删除数据库记录错误: %s' % errorInfo)
  786. return response.json(176, repr(e))
  787. else:
  788. return response.json(0)
  789. # 批量删除设备
  790. def batchDeleteInterface(request):
  791. '''
  792. 批量删除用户设备
  793. :param request: token,ids
  794. :return:
  795. '''
  796. response = ResponseObject()
  797. request.encoding = 'utf-8'
  798. if request.method == 'POST':
  799. request_dict = request.POST
  800. elif request.method == 'GET':
  801. request_dict = request.GET
  802. else:
  803. return response.json(444)
  804. token = request_dict.get('token', None)
  805. ids = request_dict.get('ids', None)
  806. if not ids:
  807. return response.json(444, 'ids')
  808. tko = TokenObject(token)
  809. response.lang = tko.lang
  810. if tko.code != 0:
  811. return response.json(tko.code)
  812. userID = tko.userID
  813. # userID = request_dict.get('userID', None) # 调试
  814. # 主用户删除设备全部删除
  815. if not userID:
  816. return response.json(309)
  817. try:
  818. deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, id__in=ids.split(','))
  819. if not deviceInfo_qs.exists():
  820. return response.json(14)
  821. uid_list = []
  822. for deviceInfo in deviceInfo_qs:
  823. uid = deviceInfo.UID
  824. uid_list.append(uid)
  825. if userID == deviceInfo.vodPrimaryUserID:
  826. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  827. deviceInfo.delete()
  828. if not deviceInfo.isShare:
  829. # a.主用户删除设备
  830. # 删除设备影子信息uid_set 外键关联删除设备推送配置信息 uid_push
  831. up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
  832. DetectControllerView().do_delete_redis(uid)
  833. if up_qs.count() > 1:
  834. UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
  835. redisObj = RedisObject(db=6, SERVER_HOST=PUSH_REDIS_ADDRESS)
  836. ykey = '{uid}_redis_qs'.format(uid=uid)
  837. if ykey:
  838. redisObj.del_data(key=ykey)
  839. else:
  840. up_qs.delete()
  841. # b.删除次用户设备
  842. Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID).delete()
  843. # 异步删除推送消息
  844. asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
  845. asy.start()
  846. # 记录操作日志
  847. now_time = int(time.time())
  848. ip = CommonService.get_ip_address(request)
  849. content = json.loads(json.dumps(request_dict))
  850. log = {
  851. 'ip': ip,
  852. 'user_id': 1,
  853. 'status': 200,
  854. 'time': now_time,
  855. 'content': json.dumps(content),
  856. 'url': 'equipment/batchDelete',
  857. 'operation': '{}批量删除设备,uid:{}'.format(userID, uid_list),
  858. }
  859. LogModel.objects.create(**log)
  860. except Exception as e:
  861. errorInfo = traceback.format_exc()
  862. print('删除数据库记录错误: %s' % errorInfo)
  863. return response.json(176, repr(e))
  864. else:
  865. return response.json(0)
  866. # 新查询设备字段
  867. def queryInterface(request):
  868. request.encoding = 'utf-8'
  869. response = ResponseObject()
  870. if request.method == 'POST':
  871. request_dict = request.POST
  872. elif request.method == 'GET':
  873. request_dict = request.GET
  874. else:
  875. return response.json(444)
  876. token = request_dict.get('token', None)
  877. page = request_dict.get('page', None)
  878. line = request_dict.get('line', None)
  879. NickName = request_dict.get('NickName', None)
  880. uid = request_dict.get('uid', None)
  881. page = int(page)
  882. line = int(line)
  883. tko = TokenObject(token)
  884. response.lang = tko.lang
  885. if page <= 0:
  886. return response.json(0)
  887. if tko.code == 0:
  888. userID = tko.userID
  889. dvqs = Device_Info.objects.filter(userID_id=userID)
  890. # # 已重置的设备
  891. # dvqs = dvqs.filter(~Q(isExist=2))
  892. if NickName:
  893. dvqs = dvqs.filter(NickName__icontains=NickName)
  894. if uid:
  895. dvqs = dvqs.filter(UID=uid)
  896. # count = dvqs.count()
  897. dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
  898. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  899. 'primaryUserID', 'primaryMaster', 'data_joined', 'version', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
  900. 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud', 'serial_number')
  901. dvls = CommonService.qs_to_list(dvql)
  902. uid_list = []
  903. serial_number_list = []
  904. for dvl in dvls:
  905. if dvl['primaryUserID'] and dvl['id'] == dvl['primaryUserID']:
  906. dvl['isPrimaryUser'] = 1
  907. else:
  908. dvl['isPrimaryUser'] = 0
  909. uid_list.append(dvl['UID'])
  910. serial_number_list.append(dvl['serial_number'][0:6])
  911. #新增获取IOT证书内容
  912. iotqs = iotdeviceInfoModel.objects.filter(serial_number__in=serial_number_list)
  913. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  914. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  915. upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
  916. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  917. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  918. nowTime = int(time.time())
  919. data = []
  920. # 设备拓展信息表
  921. us_qs = UidSetModel.objects.filter(uid__in=uid_list).\
  922. values('uid', 'version', 'nickname', 'detect_interval', 'is_ptz')
  923. uv_dict = {}
  924. for us in us_qs:
  925. uv_dict[us['uid']] = {'version': us['version'],
  926. 'nickname': us['nickname'],
  927. 'is_ptz': us['is_ptz'],
  928. 'detect_interval': us['detect_interval']}
  929. for p in dvls:
  930. #新增IOT
  931. p['iot'] = []
  932. for iot in iotqs:
  933. if p['serial_number'][0:6] == iot.serial_number:
  934. p['iot'].append(
  935. {
  936. 'endpoint':iot.endpoint,
  937. 'token_iot_number':iot.token_iot_number
  938. }
  939. )
  940. p['vod'] = []
  941. for dm in ubqs:
  942. if p['UID'] == dm['uid']:
  943. if dm['endTime'] > nowTime:
  944. p['vod'].append(dm)
  945. p['preview'] = []
  946. for up in upqs:
  947. if p['UID'] == up['uid']:
  948. obj = 'uid_preview/{uid}/channel_{channel}.png'.\
  949. format(uid=up['uid'], channel=up['channel'])
  950. img_sign = bucket.sign_url('GET', obj, 300)
  951. p['preview'].append(img_sign)
  952. p_uid = p['UID']
  953. if p_uid in uv_dict:
  954. # 设备版本号
  955. p['uid_version'] = uv_dict[p_uid]['version']
  956. p['detect_interval'] = uv_dict[p_uid]['detect_interval']
  957. # 设备昵称 调用影子信息昵称,先阶段不可
  958. if uv_dict[p_uid]['nickname']:
  959. p['NickName'] = uv_dict[p_uid]['nickname']
  960. else:
  961. # 设备版本号
  962. p['uid_version'] = ''
  963. data.append(p)
  964. return response.json(0, data)
  965. else:
  966. return response.json(tko.code)
  967. def uid_status(request):
  968. request.encoding = 'utf-8'
  969. response = ResponseObject()
  970. if request.method == 'POST':
  971. request_dict = request.POST
  972. elif request.method == 'GET':
  973. request_dict = request.GET
  974. else:
  975. return response.json(444)
  976. token = request_dict.get('token', None)
  977. uid = request_dict.get('uid', None)
  978. tko = TokenObject(token)
  979. response.lang = tko.lang
  980. if tko.code != 0:
  981. return response.json(tko.code)
  982. userID = tko.userID
  983. # 调试
  984. logger = logging.getLogger('django')
  985. debugOne = int(time.time())
  986. # 判断用户是否绑定设备
  987. qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
  988. 'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
  989. 'detect_group', 'is_alexa', 'region_alexa','is_ptz')
  990. # 调试
  991. debugOnes = int(time.time())
  992. logger.error('————————debugOne_sec:', debugOnes - debugOne)
  993. # 判断uid配置表信息是否存在
  994. if qs.exists():
  995. # 获取uid推送是否添加过
  996. us_id = qs[0]['id']
  997. # 调试
  998. debugTwo = int(time.time())
  999. if UidPushModel.objects.filter(uid_set_id=us_id, userID_id=userID).exists():
  1000. detect_status = qs[0]['detect_status']
  1001. else:
  1002. detect_status = 0
  1003. data = {
  1004. 'push_status': detect_status, # 推送状态
  1005. 'push_interval': qs[0]['detect_interval'], # 推送间隔
  1006. 'ucode': qs[0]['ucode'],
  1007. 'version': qs[0]['version'],
  1008. 'p2p_region': qs[0]['p2p_region'],
  1009. 'tz': qs[0]['tz'],
  1010. 'video_code': qs[0]['video_code'],
  1011. 'channel': qs[0]['channel'],
  1012. 'cloud_vod': qs[0]['cloud_vod'],
  1013. 'detect_group': qs[0]['detect_group'], # 推送组
  1014. 'is_alexa': qs[0]['is_alexa'], # 推送组
  1015. 'region_alexa': qs[0]['region_alexa'], # 推送组
  1016. 'is_ptz': qs[0]['is_ptz']
  1017. }
  1018. # 调试
  1019. debugTwos = int(time.time())
  1020. logger.error('————————debugTwo_sec:', debugTwos - debugTwo)
  1021. # 调试
  1022. debugThere = int(time.time())
  1023. # 查询云存储相关信息
  1024. ubqs = UID_Bucket.objects.filter(uid=uid). \
  1025. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  1026. # 调试
  1027. debugTheres = int(time.time())
  1028. logger.error('————————debugTheres_sec:', debugTheres - debugThere)
  1029. nowTime = int(time.time())
  1030. if ubqs.exists():
  1031. if ubqs[0]['endTime'] > nowTime:
  1032. data['vod'] = list(ubqs)
  1033. return response.json(0, data)
  1034. else:
  1035. return response.json(0)
  1036. def uid_status_test(request):
  1037. request.encoding = 'utf-8'
  1038. response = ResponseObject()
  1039. if request.method == 'POST':
  1040. request_dict = request.POST
  1041. elif request.method == 'GET':
  1042. request_dict = request.GET
  1043. else:
  1044. return response.json(444)
  1045. token = request_dict.get('token', None)
  1046. uid = request_dict.get('uid', None)
  1047. tko = TokenObject(token)
  1048. response.lang = tko.lang
  1049. if tko.code != 0:
  1050. return response.json(tko.code)
  1051. userID = tko.userID
  1052. # 判断用户是否绑定设备
  1053. print(100000000000)
  1054. qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
  1055. 'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
  1056. 'detect_group', 'is_alexa', 'region_alexa')
  1057. # 判断uid配置表信息是否存在
  1058. if qs.exists():
  1059. # 获取uid推送是否添加过
  1060. print(1111111111111)
  1061. us_id = qs[0]['id']
  1062. if UidPushModel.objects.filter(uid_set_id=us_id, userID_id=userID).exists():
  1063. detect_status = qs[0]['detect_status']
  1064. else:
  1065. detect_status = 0
  1066. data = {
  1067. 'push_status': detect_status, # 推送状态
  1068. 'push_interval': qs[0]['detect_interval'], # 推送间隔
  1069. 'ucode': qs[0]['ucode'],
  1070. 'version': qs[0]['version'],
  1071. 'p2p_region': qs[0]['p2p_region'],
  1072. 'tz': qs[0]['tz'],
  1073. 'video_code': qs[0]['video_code'],
  1074. 'channel': qs[0]['channel'],
  1075. 'cloud_vod': qs[0]['cloud_vod'],
  1076. 'detect_group': qs[0]['detect_group'], # 推送组
  1077. 'is_alexa': qs[0]['is_alexa'], # 推送组
  1078. 'region_alexa': qs[0]['region_alexa'], # 推送组
  1079. }
  1080. print(22222222222)
  1081. # 查询云存储相关信息
  1082. ubqs = UID_Bucket.objects.filter(uid=uid). \
  1083. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  1084. nowTime = int(time.time())
  1085. if ubqs.exists():
  1086. if ubqs[0]['endTime'] > nowTime:
  1087. data['vod'] = list(ubqs)
  1088. print(3333333333333)
  1089. return response.json(0, data)
  1090. else:
  1091. return response.json(0)
  1092. def update_uid_set(request):
  1093. request.encoding = 'utf-8'
  1094. response = ResponseObject()
  1095. if request.method == 'POST':
  1096. request_dict = request.POST
  1097. elif request.method == 'GET':
  1098. request_dict = request.GET
  1099. else:
  1100. return response.json(444)
  1101. token = request_dict.get('token', None)
  1102. uid = request_dict.get('uid', None)
  1103. version = request_dict.get('version', '')
  1104. ucode = request_dict.get('ucode', '')
  1105. tko = TokenObject(token)
  1106. response.lang = tko.lang
  1107. if tko.code == 0:
  1108. userID = tko.userID
  1109. nowTime = int(time.time())
  1110. dvqs = Device_Info.objects.filter(userID_id=userID)
  1111. # redisObj = RedisObject(db=8)
  1112. # redisObj.del_data(key='uid_qs_' + userID)
  1113. if dvqs.exists():
  1114. us_qs = UidSetModel.objects.filter(uid=uid)
  1115. if us_qs.exists():
  1116. uid_set_update_dict = {
  1117. 'updTime': nowTime,
  1118. 'version': version,
  1119. 'ucode': ucode,
  1120. }
  1121. us_qs.update(**uid_set_update_dict)
  1122. else:
  1123. uid_set_create_dict = {
  1124. 'uid': uid,
  1125. 'addTime': nowTime,
  1126. 'updTime': nowTime,
  1127. 'version': version,
  1128. 'ucode': ucode,
  1129. }
  1130. UidSetModel.objects.create(**uid_set_create_dict)
  1131. return response.json(0)
  1132. else:
  1133. return response.json(14)
  1134. else:
  1135. return response.json(tko.code)
  1136. # 测试环境
  1137. # test.shadow.dvema.com
  1138. # 生产环境
  1139. # shadow.dvema.com
  1140. # http://test.dvema.com/deviceShadow/update?etk=JVJWbFpFU0VOV1FsbEVTMFpOU2xKWFFURXhNVUU9Xz0=&ucode=1234&version=1324&p2p_region=CN
  1141. # 设备影子更新
  1142. def update_device_shadow(request):
  1143. request.encoding = 'utf-8'
  1144. response = ResponseObject()
  1145. if request.method == 'POST':
  1146. request_dict = request.POST
  1147. elif request.method == 'GET':
  1148. request_dict = request.GET
  1149. else:
  1150. return response.json(444)
  1151. etk = request_dict.get('etk', None)
  1152. eto = ETkObject(etk)
  1153. uid = eto.uid
  1154. if uid:
  1155. # 重置按钮
  1156. is_reset = request_dict.get('is_reset', None)
  1157. # 传1则重置设备信息
  1158. if is_reset == '1':
  1159. UidSetModel.objects.filter(uid=uid).delete()
  1160. # 重置设备,判断设备为已删除
  1161. nowTime = int(time.time())
  1162. uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=nowTime).values('id', 'has_unused').order_by('addTime')
  1163. if not uid_bucket.exists():
  1164. di_qs = Device_Info.objects.filter(UID=uid)
  1165. di_qs.update(isExist=2)
  1166. # 清除redis缓存
  1167. # data = di_qs.values()
  1168. # redisObj = RedisObject(db=8)
  1169. # for di in data:
  1170. # key = 'uid_qs_' + di['userID_id']
  1171. # redis_value = redisObj.get_data(key=key)
  1172. # if redis_value is not False:
  1173. # redisObj.del_data(key)
  1174. ucode = request_dict.get('ucode', None)
  1175. version = request_dict.get('version', None)
  1176. p2p_region = request_dict.get('p2p_region', None)
  1177. tz = request_dict.get('tz', None)
  1178. video_code = request_dict.get('video_code', None)
  1179. ip = CommonService.get_ip_address(request)
  1180. channel = request_dict.get('channel', None)
  1181. cloud_vod = request_dict.get('cloud_vod', None)
  1182. push_status = request_dict.get('push_status', None)
  1183. pwd = request_dict.get('pwd', None)
  1184. resetTime = request_dict.get('resetTime', None)
  1185. is_ptz = request_dict.get('is_ptz', None)
  1186. is_alexa = request_dict.get('is_alexa', None)
  1187. is_ai = request_dict.get('is_ai', None)
  1188. us_qs = UidSetModel.objects.filter(uid=uid)
  1189. # 更新
  1190. nowTime = int(time.time())
  1191. print('-------')
  1192. print(resetTime)
  1193. print('-------')
  1194. qs_dict = {
  1195. 'updTime': nowTime,
  1196. 'ip': ip
  1197. }
  1198. if channel:
  1199. qs_dict['channel'] = channel
  1200. if p2p_region:
  1201. qs_dict['p2p_region'] = p2p_region
  1202. if ucode:
  1203. qs_dict['ucode'] = ucode
  1204. if version:
  1205. qs_dict['version'] = version
  1206. if tz:
  1207. qs_dict['tz'] = tz
  1208. if video_code:
  1209. qs_dict['video_code'] = video_code
  1210. if cloud_vod:
  1211. qs_dict['cloud_vod'] = cloud_vod
  1212. if push_status:
  1213. qs_dict['detect_status'] = push_status
  1214. if pwd:
  1215. qs_dict['pwd'] = pwd
  1216. if is_ptz:
  1217. qs_dict['is_ptz'] = is_ptz
  1218. if is_alexa:
  1219. qs_dict['is_alexa'] = is_alexa
  1220. if is_ai:
  1221. qs_dict['is_ai'] = is_ai
  1222. if us_qs.exists():
  1223. us_qs.update(**qs_dict)
  1224. # 如果推送状态开启,返回推送url
  1225. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
  1226. # 新增
  1227. else:
  1228. qs_dict['uid'] = uid
  1229. qs_dict['addTime'] = nowTime
  1230. UidSetModel.objects.create(**qs_dict)
  1231. # 如果推送状态开启,返回推送url
  1232. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
  1233. else:
  1234. return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})