UidUser.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2019/11/15 16:45
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: UserUid.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. # 添加设备字段
  15. import oss2
  16. import re
  17. import time
  18. import simplejson as json
  19. from django.utils.decorators import method_decorator
  20. from django.views.decorators.csrf import csrf_exempt
  21. from django.views.generic.base import View
  22. from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
  23. from Model.models import UID_Bucket, UID_Preview, UidSetModel
  24. from Model.models import UidUserModel
  25. from Object.ResponseObject import ResponseObject
  26. from Object.TokenObject import TokenObject
  27. from Service.CommonService import CommonService
  28. from Service.ModelService import ModelService
  29. '''
  30. http://192.168.136.40:8077/uiduser/add?token=local&UID=z123asdfqwerzxcvqw12&NickName=xxoxox&View_Account=user&View_Password=password&ChannelIndex=8&is_ap=1&Type=5&NickName=1234zcxv
  31. http://192.168.136.40:8077/uiduser/query?token=local&page=1&line=10&is_ap=1&NickName=1234zcxv&uid=zxcvasdfqwerzxcvqwer
  32. http://192.168.136.40:8077/uiduser/delete?token=local&id=138001380001573884997393980&is_ap=1
  33. '''
  34. # 添加设备字段
  35. def addInterface(request):
  36. request.encoding = 'utf-8'
  37. response = ResponseObject()
  38. if request.method == 'POST':
  39. request_dict = request.POST
  40. elif request.method == 'GET':
  41. request_dict = request.GET
  42. else:
  43. return response.json(444)
  44. token = request_dict.get('token', None)
  45. UID = request_dict.get('UID', None)
  46. NickName = request_dict.get('NickName', None)
  47. View_Account = request_dict.get('View_Account', None)
  48. View_Password = request_dict.get('View_Password', '')
  49. Type = request_dict.get('Type', None)
  50. ChannelIndex = request_dict.get('ChannelIndex', None)
  51. is_ap = request_dict.get('is_ap', None)
  52. if all([UID, NickName, View_Account, Type, ChannelIndex]):
  53. tko = TokenObject(token)
  54. response.lang = tko.lang
  55. if tko.code == 0:
  56. userID = tko.userID
  57. re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
  58. if re_uid.match(UID):
  59. is_ap = int(is_ap)
  60. is_exist = UidUserModel.objects.filter(UID=UID, userID_id=userID, is_ap=is_ap)
  61. if is_exist:
  62. return response.json(174)
  63. else:
  64. try:
  65. pk = CommonService.getUserID(getUser=False)
  66. create_data = {
  67. 'id': pk, 'userID_id': userID, 'UID': UID,
  68. 'NickName': NickName, 'View_Account': View_Account,
  69. 'View_Password': View_Password, 'Type': Type, 'ChannelIndex': ChannelIndex
  70. }
  71. UidUserModel.objects.create(**create_data)
  72. # 判断影子信息
  73. nowTime = int(time.time())
  74. us_qs = UidSetModel.objects.filter(uid=UID)
  75. if not us_qs.exists():
  76. uid_set_create_dict = {
  77. 'uid': UID,
  78. 'addTime': nowTime,
  79. 'updTime': nowTime,
  80. 'ip': CommonService.get_ip_address(request),
  81. 'channel': ChannelIndex,
  82. 'nickname': NickName}
  83. UidSetModel.objects.create(**uid_set_create_dict)
  84. except Exception as e:
  85. return response.json(10, repr(e))
  86. else:
  87. uid_user_qs = UidUserModel.objects.filter(id=pk). \
  88. values('id', 'userID', 'NickName', 'UID', 'View_Account', 'View_Password',
  89. 'ChannelIndex', 'Type', 'isShare', 'primaryUserID', 'primaryMaster',
  90. 'data_joined', 'version', 'isVod', 'isExist','is_ap')
  91. uid_user_ql = CommonService.qs_to_list(uid_user_qs)
  92. ubqs = UID_Bucket.objects.filter(uid=UID). \
  93. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  94. res = uid_user_ql[0]
  95. res['vod'] = list(ubqs)
  96. return response.json(0, res)
  97. else:
  98. return response.json(444, {'param': 'UID'})
  99. else:
  100. return response.json(tko.code)
  101. else:
  102. return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
  103. # 新查询设备字段
  104. def queryInterface(request):
  105. request.encoding = 'utf-8'
  106. response = ResponseObject()
  107. if request.method == 'POST':
  108. request_dict = request.POST
  109. elif request.method == 'GET':
  110. request_dict = request.GET
  111. else:
  112. return response.json(444)
  113. token = request_dict.get('token', None)
  114. page = request_dict.get('page', None)
  115. line = request_dict.get('line', None)
  116. NickName = request_dict.get('NickName', None)
  117. uid = request_dict.get('uid', None)
  118. is_ap = request_dict.get('is_ap', None)
  119. page = int(page)
  120. line = int(line)
  121. tko = TokenObject(token)
  122. response.lang = tko.lang
  123. if page <= 0:
  124. return response.json(0)
  125. if tko.code == 0:
  126. userID = tko.userID
  127. uid_user_qs = UidUserModel.objects.filter(userID_id=userID)
  128. if is_ap:
  129. is_ap = int(is_ap)
  130. uid_user_qs = uid_user_qs.filter(is_ap=is_ap)
  131. if NickName:
  132. uid_user_qs = uid_user_qs.filter(NickName__icontains=NickName)
  133. if uid:
  134. uid_user_qs = uid_user_qs.filter(UID=uid)
  135. uid_user_ql = uid_user_qs[(page - 1) * line:page * line]. \
  136. values('id', 'userID', 'NickName', 'UID', 'View_Account',
  137. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  138. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  139. 'isVod', 'isExist', 'NotificationMode','is_ap')
  140. uid_user_ls = CommonService.qs_to_list(uid_user_ql)
  141. uid_list = []
  142. for uid_user in uid_user_ls:
  143. uid_list.append(uid_user['UID'])
  144. ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
  145. values('bucket__content', 'status', 'channel', 'endTime', 'uid')
  146. upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
  147. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  148. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  149. nowTime = int(time.time())
  150. data = []
  151. # 设备拓展信息表
  152. us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname')
  153. uv_dict = {}
  154. for us in us_qs:
  155. uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname']}
  156. for p in uid_user_ls:
  157. p['vod'] = []
  158. for dm in ubqs:
  159. if p['UID'] == dm['uid']:
  160. if dm['endTime'] > nowTime:
  161. p['vod'].append(dm)
  162. p['preview'] = []
  163. for up in upqs:
  164. if p['UID'] == up['uid']:
  165. obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
  166. img_sign = bucket.sign_url('GET', obj, 300)
  167. p['preview'].append(img_sign)
  168. p_uid = p['UID']
  169. if p_uid in uv_dict:
  170. # 设备版本号
  171. p['uid_version'] = uv_dict[p_uid]['version']
  172. # 设备昵称
  173. if uv_dict[p_uid]['nickname']:
  174. p['NickName'] = uv_dict[p_uid]['nickname']
  175. else:
  176. # 设备版本号
  177. p['uid_version'] = ''
  178. data.append(p)
  179. return response.json(0, data)
  180. else:
  181. return response.json(tko.code)
  182. # http://192.168.136.40:8077/uiduser/update?token=local&id=138001380001573885065588328&View_Account=12&View_Password=555&NickName=555
  183. # 添加设备字段
  184. def updateInterface(request):
  185. request.encoding = 'utf-8'
  186. response = ResponseObject()
  187. if request.method == 'POST':
  188. request_dict = request.POST
  189. elif request.method == 'GET':
  190. request_dict = request.GET
  191. else:
  192. return response.json(444)
  193. token = request_dict.get('token', None)
  194. NickName = request_dict.get('NickName', None)
  195. View_Account = request_dict.get('View_Account', None)
  196. View_Password = request_dict.get('View_Password', None)
  197. tko = TokenObject(token)
  198. response.lang = tko.lang
  199. if tko.code == 0:
  200. userID = tko.userID
  201. uid_user_qs = UidUserModel.objects.filter(userID_id=userID,)
  202. if uid_user_qs.exists():
  203. update_dict = {}
  204. if NickName:
  205. update_dict['NickName'] = NickName
  206. if View_Account is not None:
  207. update_dict['View_Account'] = View_Account
  208. if View_Password is not None:
  209. update_dict['View_Password'] = View_Password
  210. is_update = uid_user_qs.update(**update_dict)
  211. if is_update:
  212. return response.json(0)
  213. else:
  214. return response.json(177)
  215. else:
  216. return response.json(174)
  217. else:
  218. return response.json(tko.code)
  219. # 新删除设备
  220. def deleteInterface(request):
  221. '''
  222. 删除用户设备
  223. :param request:
  224. :return:
  225. '''
  226. response = ResponseObject()
  227. request.encoding = 'utf-8'
  228. if request.method == 'POST':
  229. request_dict = request.POST
  230. elif request.method == 'GET':
  231. request_dict = request.GET
  232. else:
  233. return response.json(444)
  234. token = request_dict.get('token', None)
  235. id = request_dict.get('id', None)
  236. is_ap = request_dict.get('is_ap', None)
  237. if all([token, id, is_ap]):
  238. tko = TokenObject(token)
  239. response.lang = tko.lang
  240. if tko.code == 0:
  241. userID = tko.userID
  242. uid_user_qs = UidUserModel.objects.filter(userID_id=userID, id=id)
  243. if uid_user_qs.exists():
  244. uid_user_qs.delete()
  245. return response.json(0)
  246. else:
  247. return response.json(173)
  248. else:
  249. return response.json(tko.code)
  250. else:
  251. return response.json(444, {'param': 'token,id,is_ap'})
  252. # 设备信息添加
  253. class UidUserView(View):
  254. @method_decorator(csrf_exempt)
  255. def dispatch(self, *args, **kwargs):
  256. return super(UidUserView, self).dispatch(*args, **kwargs)
  257. def get(self, request, *args, **kwargs):
  258. request.encoding = 'utf-8'
  259. operation = kwargs.get('operation')
  260. return self.validation(request.GET, request, operation)
  261. def post(self, request, *args, **kwargs):
  262. request.encoding = 'utf-8'
  263. operation = kwargs.get('operation')
  264. return self.validation(request.POST, request, operation)
  265. def validation(self, request_dict, request, operation):
  266. response = ResponseObject()
  267. if operation is None:
  268. return response.json(444, 'error path')
  269. token = request_dict.get('token', None)
  270. # 设备主键uid
  271. tko = TokenObject(token)
  272. response.lang = tko.lang
  273. if tko.code != 0:
  274. return response.json(tko.code)
  275. userID = tko.userID
  276. if operation == 'adminDelete':
  277. return self.do_admin_delete(request_dict, userID, response)
  278. elif operation == 'adminQuery':
  279. return self.do_admin_query(request_dict, userID, response)
  280. else:
  281. return response.json(444, 'error path')
  282. # 管理员删除
  283. def do_admin_delete(self, request_dict, userID, response):
  284. own_perm = ModelService.check_perm(userID, 20)
  285. if own_perm is True:
  286. id = request_dict.getlist('id', None)
  287. uid_user_qs = UidUserModel.objects.filter(id__in=id)
  288. if uid_user_qs.exists():
  289. uid_user_qs.delete()
  290. return response.json(0)
  291. else:
  292. return response.json(173)
  293. else:
  294. return response.json(404)
  295. # 管理员查询接口
  296. def do_admin_query(self, request_dict, userID, response):
  297. own_perm = ModelService.check_perm(userID, 20)
  298. if own_perm is True:
  299. page = request_dict.get('page', None)
  300. line = request_dict.get('line', None)
  301. page = int(page)
  302. line = int(line)
  303. deviceContent = request_dict.get('content', None)
  304. if deviceContent:
  305. try:
  306. searchCondition = json.loads(deviceContent)
  307. except Exception as e:
  308. return response.json(10, repr(e))
  309. else:
  310. kwargs = CommonService.get_kwargs(data=searchCondition)
  311. uid_user_qs = UidUserModel.objects.filter(**kwargs).order_by('-id')
  312. if not uid_user_qs.exists():
  313. return response.json(0, [])
  314. count = uid_user_qs.count()
  315. uid_user_ql = uid_user_qs[(page - 1) * line:page * line]. \
  316. values('id', 'userID', 'userID__username', 'userID__userEmail', 'userID__NickName' 'NickName',
  317. 'UID', 'View_Account',
  318. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  319. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  320. 'isVod', 'isExist', 'NotificationMode', 'is_ap')
  321. uid_user_ls = CommonService.qs_to_list(uid_user_ql)
  322. return response.json(0, {'datas': uid_user_ls, 'count': count})
  323. else:
  324. uid_user_qs = UidUserModel.objects.all().order_by('-id')
  325. if not uid_user_qs.exists():
  326. return response.json(0, [])
  327. count = uid_user_qs.count()
  328. uid_user_ql = uid_user_qs[(page - 1) * line:page * line]. \
  329. values('id', 'userID', 'userID__username', 'userID__userEmail', 'userID__NickName', 'NickName',
  330. 'UID', 'View_Account',
  331. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  332. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  333. 'isVod', 'isExist', 'NotificationMode', 'is_ap')
  334. uid_user_ls = CommonService.qs_to_list(uid_user_ql)
  335. return response.json(0, {'datas' : uid_user_ls, 'count': count})
  336. else:
  337. return response.json(404)