UidUser.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  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. Type = request_dict.get('Type', None)
  198. tko = TokenObject(token)
  199. response.lang = tko.lang
  200. if tko.code == 0:
  201. userID = tko.userID
  202. uid_user_qs = UidUserModel.objects.filter(userID_id=userID,)
  203. if uid_user_qs.exists():
  204. update_dict = {}
  205. if NickName:
  206. update_dict['NickName'] = NickName
  207. if View_Account is not None:
  208. update_dict['View_Account'] = View_Account
  209. if View_Password is not None:
  210. update_dict['View_Password'] = View_Password
  211. if Type is not None:
  212. update_dict['Type'] = Type
  213. is_update = uid_user_qs.update(**update_dict)
  214. if is_update:
  215. return response.json(0)
  216. else:
  217. return response.json(177)
  218. else:
  219. return response.json(174)
  220. else:
  221. return response.json(tko.code)
  222. # 新删除设备
  223. def deleteInterface(request):
  224. '''
  225. 删除用户设备
  226. :param request:
  227. :return:
  228. '''
  229. response = ResponseObject()
  230. request.encoding = 'utf-8'
  231. if request.method == 'POST':
  232. request_dict = request.POST
  233. elif request.method == 'GET':
  234. request_dict = request.GET
  235. else:
  236. return response.json(444)
  237. token = request_dict.get('token', None)
  238. id = request_dict.get('id', None)
  239. is_ap = request_dict.get('is_ap', None)
  240. if all([token, id, is_ap]):
  241. tko = TokenObject(token)
  242. response.lang = tko.lang
  243. if tko.code == 0:
  244. userID = tko.userID
  245. uid_user_qs = UidUserModel.objects.filter(userID_id=userID, id=id)
  246. if uid_user_qs.exists():
  247. uid_user_qs.delete()
  248. return response.json(0)
  249. else:
  250. return response.json(173)
  251. else:
  252. return response.json(tko.code)
  253. else:
  254. return response.json(444, {'param': 'token,id,is_ap'})
  255. # 设备信息添加
  256. class UidUserView(View):
  257. @method_decorator(csrf_exempt)
  258. def dispatch(self, *args, **kwargs):
  259. return super(UidUserView, self).dispatch(*args, **kwargs)
  260. def get(self, request, *args, **kwargs):
  261. request.encoding = 'utf-8'
  262. operation = kwargs.get('operation')
  263. return self.validation(request.GET, request, operation)
  264. def post(self, request, *args, **kwargs):
  265. request.encoding = 'utf-8'
  266. operation = kwargs.get('operation')
  267. return self.validation(request.POST, request, operation)
  268. def validation(self, request_dict, request, operation):
  269. response = ResponseObject()
  270. if operation is None:
  271. return response.json(444, 'error path')
  272. token = request_dict.get('token', None)
  273. # 设备主键uid
  274. tko = TokenObject(token)
  275. response.lang = tko.lang
  276. if tko.code != 0:
  277. return response.json(tko.code)
  278. userID = tko.userID
  279. if operation == 'adminDelete':
  280. return self.do_admin_delete(request_dict, userID, response)
  281. elif operation == 'adminQuery':
  282. return self.do_admin_query(request_dict, userID, response)
  283. else:
  284. return response.json(444, 'error path')
  285. # 管理员删除
  286. def do_admin_delete(self, request_dict, userID, response):
  287. own_perm = ModelService.check_perm(userID, 20)
  288. if own_perm is True:
  289. id = request_dict.getlist('id', None)
  290. uid_user_qs = UidUserModel.objects.filter(id__in=id)
  291. if uid_user_qs.exists():
  292. uid_user_qs.delete()
  293. return response.json(0)
  294. else:
  295. return response.json(173)
  296. else:
  297. return response.json(404)
  298. # 管理员查询接口
  299. def do_admin_query(self, request_dict, userID, response):
  300. own_perm = ModelService.check_perm(userID, 20)
  301. if own_perm is True:
  302. page = request_dict.get('page', None)
  303. line = request_dict.get('line', None)
  304. page = int(page)
  305. line = int(line)
  306. deviceContent = request_dict.get('content', None)
  307. if deviceContent:
  308. try:
  309. searchCondition = json.loads(deviceContent)
  310. except Exception as e:
  311. return response.json(10, repr(e))
  312. else:
  313. kwargs = CommonService.get_kwargs(data=searchCondition)
  314. uid_user_qs = UidUserModel.objects.filter(**kwargs).order_by('-id')
  315. if not uid_user_qs.exists():
  316. return response.json(0, [])
  317. count = uid_user_qs.count()
  318. uid_user_ql = uid_user_qs[(page - 1) * line:page * line]. \
  319. values('id', 'userID', 'userID__username', 'userID__userEmail', 'userID__NickName' 'NickName',
  320. 'UID', 'View_Account',
  321. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  322. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  323. 'isVod', 'isExist', 'NotificationMode', 'is_ap')
  324. uid_user_ls = CommonService.qs_to_list(uid_user_ql)
  325. return response.json(0, {'datas': uid_user_ls, 'count': count})
  326. else:
  327. uid_user_qs = UidUserModel.objects.all().order_by('-id')
  328. if not uid_user_qs.exists():
  329. return response.json(0, [])
  330. count = uid_user_qs.count()
  331. uid_user_ql = uid_user_qs[(page - 1) * line:page * line]. \
  332. values('id', 'userID', 'userID__username', 'userID__userEmail', 'userID__NickName', 'NickName',
  333. 'UID', 'View_Account',
  334. 'View_Password', 'ChannelIndex', 'Type', 'isShare',
  335. 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
  336. 'isVod', 'isExist', 'NotificationMode', 'is_ap')
  337. uid_user_ls = CommonService.qs_to_list(uid_user_ql)
  338. return response.json(0, {'datas' : uid_user_ls, 'count': count})
  339. else:
  340. return response.json(404)