EquipmentManager.py 41 KB

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