EquipmentManager.py 50 KB

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