EquipmentManager.py 52 KB

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