EquipmentInfo.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. import traceback
  2. from django.utils.decorators import method_decorator
  3. from django.views.decorators.csrf import csrf_exempt
  4. from django.views.generic import TemplateView
  5. from django.views.generic.base import View
  6. from Ansjer.config import SERVER_DOMAIN
  7. from Model.models import Equipment_Info, Device_Info, Device_User
  8. from Object.ResponseObject import ResponseObject
  9. from Object.TokenObject import TokenObject
  10. from Object.UidTokenObject import UidTokenObject
  11. from Service.CommonService import CommonService
  12. from Service.ModelService import ModelService
  13. import time
  14. '''
  15. http://192.168.136.45:8077/equipment/info?token=test&operation=add&devUid=2N1K3LE78TYJ38CE111A&Channel=0&eventType=1&eventTime=1234567890&operation=add&alarm=21342134&receiveTime=1234567891234567
  16. http://test.dvema.com/equipment/info?token=test&operation=query&page=1&line=10
  17. http://192.168.136.45:8077/equipment/info?token=test&operation=delete&devUid=UKPAH63V23U4ZHEB111A&id=5&id=6&id=7
  18. http://192.168.136.40:8077/equipment/info?token=test&operation=update&devUid=UKPAH63V23U4ZHEB111A&id=3&id=4
  19. http://192.168.136.45:8077/equipment/info?token=test&operation=queryByAdmin&page=1&line=10&userID_id=151547867345163613800138001
  20. http://192.168.136.45:8077/equipment/info?token=test&operation=deleteByAdmin&id=5&id=6&id=7
  21. '''
  22. class EquipmentInfo(View):
  23. @method_decorator(csrf_exempt)
  24. def dispatch(self, *args, **kwargs):
  25. return super(EquipmentInfo, self).dispatch(*args, **kwargs)
  26. def get(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. return self.validation(request_dict=request.GET)
  29. def post(self, request, *args, **kwargs):
  30. request.encoding = 'utf-8'
  31. return self.validation(request_dict=request.POST)
  32. def validation(self, request_dict, *args, **kwargs):
  33. token = request_dict.get('token', None)
  34. response = ResponseObject()
  35. tko = TokenObject(token)
  36. if tko.code != 0:
  37. return response.json(tko.code)
  38. userID = tko.userID
  39. operation = request_dict.get('operation', None)
  40. if not userID:
  41. return response.json(309)
  42. if operation == 'query':
  43. return self.query_info(request_dict, userID, response)
  44. elif operation == 'add':
  45. return self.add_info(request_dict, userID, response)
  46. elif operation == 'update':
  47. return self.update_info(request_dict, userID, response)
  48. elif operation == 'delete':
  49. return self.delete_info(request_dict, userID, response)
  50. elif operation == 'findByTime':
  51. return self.findByTime_info(request_dict, userID, response)
  52. if operation == 'queryByAdmin':
  53. return self.query_all_info(request_dict, userID, response)
  54. if operation == 'deleteByAdmin':
  55. return self.delete_by_admin(request_dict, userID, response)
  56. else:
  57. return response.json(444, {"parm": "operation"})
  58. def add_info(self, request_dict, userID, response):
  59. devUid = request_dict.get('devUid', None)
  60. Channel = request_dict.get('Channel', None)
  61. eventType = request_dict.get('eventType', None)
  62. eventTime = request_dict.get('eventTime', None)
  63. receiveTime = request_dict.get('receiveTime', None)
  64. alarm = request_dict.get('alarm', None)
  65. if not devUid or not Channel or not eventType or not eventTime or not alarm or not receiveTime:
  66. return response.json(444, 'devUid, Channel, eventType, eventTime, alarm, receiveTime')
  67. own_device = ModelService.check_own_device(userID, UID=devUid)
  68. if own_device is not True:
  69. return response.json(14)
  70. device_info = Device_Info.objects.filter(UID=devUid, userID_id=userID)
  71. if not device_info.exists():
  72. return response.json(14)
  73. try:
  74. nowTime = int(time.time())
  75. equipment_info = Equipment_Info(
  76. userID=Device_User.objects.get(userID=userID),
  77. devUid=devUid,
  78. Channel=Channel,
  79. eventType=eventType,
  80. receiveTime=receiveTime,
  81. eventTime=eventTime,
  82. devNickName=device_info[0].NickName,
  83. addTime=nowTime,
  84. alarm=alarm)
  85. equipment_info.save()
  86. except Exception:
  87. errorInfo = traceback.format_exc()
  88. print(errorInfo)
  89. return response.json(500, errorInfo)
  90. else:
  91. if equipment_info.id:
  92. return response.json(0, {'infoID': equipment_info.id,
  93. 'devUid': devUid,
  94. 'Channel': Channel,
  95. 'alarm': alarm,
  96. 'eventType': eventType,
  97. 'eventTime': eventTime,
  98. 'receiveTime': receiveTime,
  99. 'devNickName': equipment_info.devNickName})
  100. else:
  101. return response.json(500)
  102. def query_info(self, request_dict, userID, response):
  103. page = int(request_dict.get('page', None))
  104. line = int(request_dict.get('line', None))
  105. if not page or not line:
  106. return response.json(444, 'page,line')
  107. qs = Equipment_Info.objects.filter(userID_id=userID)
  108. uid = request_dict.get('uid', None)
  109. if uid:
  110. qs.filter(devUid=uid)
  111. if not qs.exists():
  112. return response.json(0, {'datas': [], 'count': 0})
  113. count = qs.count()
  114. res = qs[(page - 1) * line:page * line]
  115. send_json = CommonService.qs_to_dict(res)
  116. res = []
  117. for p in send_json['datas']:
  118. p['fields']['viewAccont'] = ''
  119. p['fields']['viewPwd'] = ''
  120. res.append(p)
  121. return response.json(0, {'datas': res, 'count': count})
  122. # return response.json(0, send_json)
  123. def update_info(self, request_dict, userID, response):
  124. id_list = request_dict.getlist('id[]', None)
  125. if id_list is None or len(id_list) < 1:
  126. id_list = request_dict.getlist('id', None)
  127. param_flag = CommonService.get_param_flag(data=[id_list])
  128. if param_flag is True:
  129. count = 0
  130. for id in id_list:
  131. try:
  132. eq = Equipment_Info.objects.filter(id=int(id))
  133. if eq.exists():
  134. own_dev = ModelService.check_own_device(userID, eq[0].devUid)
  135. if own_dev is True:
  136. count += 1
  137. eq.update(status=1)
  138. except Exception as e:
  139. print(repr(e))
  140. return response.json(0, {'update_success': count})
  141. else:
  142. return response.json(444)
  143. def delete_info(self, request_dict, userID, response):
  144. id_list = request_dict.getlist('id[]', None)
  145. if id_list is None or len(id_list) < 1:
  146. id_list = request_dict.getlist('id', None)
  147. param_flag = CommonService.get_param_flag(data=[id_list])
  148. if param_flag is True:
  149. try:
  150. for id in id_list:
  151. eq = Equipment_Info.objects.filter(id=id)
  152. if eq.exists():
  153. own_dev = ModelService.check_own_device(userID, eq[0].devUid)
  154. if own_dev is True:
  155. eq.delete()
  156. except Exception as e:
  157. errorInfo = traceback.format_exc()
  158. print(errorInfo)
  159. return response.json(424, repr(e))
  160. else:
  161. return response.json(0)
  162. else:
  163. return response.json(444)
  164. def findByTime_info(self, request_dict, userID, response):
  165. startTime = request_dict.get('startTime')
  166. endTime = request_dict.get('endTime')
  167. page = int(request_dict.get('page', None))
  168. line = int(request_dict.get('line', None))
  169. if not startTime or not endTime or not page or not line:
  170. return response.json(444, 'startTime, endTime, page, line')
  171. uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
  172. if not len(uid_list):
  173. return response.json(0, {'datas': [], 'count': 0})
  174. qs = Equipment_Info.objects.filter(userID_id=userID,
  175. eventTime__range=(startTime, endTime)).order_by('-id')
  176. if qs.exists():
  177. count = qs.count()
  178. res = qs[(page - 1) * line:page * line]
  179. send_json = CommonService.qs_to_dict(res)
  180. send_json['count'] = count
  181. return response.json(0, send_json)
  182. # 管理员查询指定用户的推送信息接口
  183. def query_all_info(self, request_dict, userID, response):
  184. page = int(request_dict.get('page', None))
  185. line = int(request_dict.get('line', None))
  186. username = request_dict.get('username', None)
  187. uid = request_dict.get('uid', None)
  188. devNickName = request_dict.get('devNickName', None)
  189. Channel = request_dict.get('Channel', None)
  190. if not page or not line:
  191. return response.json(444, 'page,line')
  192. check_perm = ModelService.check_perm(userID=userID, permID=30)
  193. if not check_perm:
  194. return response.json(404)
  195. if not username and not uid and not devNickName and not Channel:
  196. qs = Equipment_Info.objects.all().order_by('-id')
  197. elif username:
  198. user = Device_User.objects.filter(username=username)
  199. users = CommonService.qs_to_dict(user)
  200. # 从字典类型中找到对应的pk值,即是userID
  201. user_id = users.get('datas')[0].get('pk')
  202. if not user.exists():
  203. return response.json(104)
  204. uid_list = Device_Info.objects.filter(userID_id=user_id).values_list('UID', flat=True)
  205. if not len(uid_list):
  206. return response.json(0, {'datas': [], 'count': 0})
  207. qs = Equipment_Info.objects.filter(userID_id=user_id).order_by('-id')
  208. elif uid:
  209. qs = Equipment_Info.objects.filter(devUid=uid).order_by('-id')
  210. elif devNickName:
  211. qs = Equipment_Info.objects.filter(devNickName=devNickName).order_by('-id')
  212. elif Channel:
  213. qs = Equipment_Info.objects.filter(Channel=Channel).order_by('-id')
  214. if not qs.exists():
  215. return response.json(0, {'datas': [], 'count': 0})
  216. count = qs.count()
  217. res = qs[(page - 1) * line:page * line]
  218. send_json = CommonService.qs_to_dict(res)
  219. send_json['count'] = count
  220. return response.json(0, send_json)
  221. # 管理员的删除推送信息的接口
  222. def delete_by_admin(self, request_dict, userID, response):
  223. id_list = request_dict.getlist('id', None)
  224. if not len(id_list):
  225. return response.json(444, 'id is None or not list')
  226. check_perm = ModelService.check_perm(userID=userID, permID=10)
  227. if check_perm is True:
  228. try:
  229. is_delete = Equipment_Info.objects.filter(id__in=id_list).delete()
  230. except Exception as e:
  231. errorInfo = traceback.format_exc()
  232. print(errorInfo)
  233. return response.json(424, {'details': repr(e)})
  234. else:
  235. return response.json(0, {'delete_count': is_delete[0]})
  236. else:
  237. return response.json(404)
  238. # http://192.168.136.40:8077/detect/add?UID=FTSLL8HM437Z38WU111A&Channel=0&eventType=1&eventTime=1234567890
  239. # 设备推送信息添加接口
  240. class AddDetectionView(TemplateView):
  241. @method_decorator(csrf_exempt)
  242. def dispatch(self, *args, **kwargs):
  243. return super(AddDetectionView, self).dispatch(*args, **kwargs)
  244. def get(self, request, *args, **kwargs):
  245. request.encoding = 'utf-8'
  246. return self.validation(request_dict=request.GET)
  247. def post(self, request, *args, **kwargs):
  248. request.encoding = 'utf-8'
  249. return self.validation(request_dict=request.POST)
  250. def validation(self, request_dict, *args, **kwargs):
  251. response = ResponseObject()
  252. # 设备添加token
  253. uidToken = request_dict.get('uidToken', None)
  254. Channel = request_dict.get('Channel', None)
  255. eventType = request_dict.get('eventType', None)
  256. eventTime = request_dict.get('eventTime', None)
  257. utko = UidTokenObject(uidToken)
  258. if utko.flag is False:
  259. return response.json(444, 'tidToken is wrong')
  260. UID = utko.UID
  261. if not Channel or not eventType or not eventTime:
  262. return response.json(444, 'uidToken,Channel,eventType,eventTime')
  263. dv_qs = Device_Info.objects.filter(UID=UID, iSNotification=True).values("userID_id", "NickName")
  264. if not dv_qs.exists():
  265. return response.json(10, 'device not detect')
  266. qs_list = []
  267. for dv in dv_qs:
  268. add_data = {
  269. 'userID_id': dv["userID_id"],
  270. 'devUid': UID,
  271. 'Channel': Channel,
  272. 'eventType': eventType,
  273. 'eventTime': eventTime,
  274. 'devNickName': dv["NickName"],
  275. }
  276. qs_list.append(Equipment_Info(**add_data))
  277. if qs_list:
  278. print(1)
  279. Equipment_Info.objects.bulk_create(qs_list)
  280. print(2)
  281. return response.json(0)
  282. else:
  283. return response.json(10, '无设备开启')
  284. # http://192.168.136.40:8077/detect/status?token=local&id=138001380001543918745881545&iSNotification=0
  285. # 设备推送开关
  286. class DetectStatusView(View):
  287. @method_decorator(csrf_exempt)
  288. def dispatch(self, *args, **kwargs):
  289. return super(DetectStatusView, self).dispatch(*args, **kwargs)
  290. def get(self, request, *args, **kwargs):
  291. request.encoding = 'utf-8'
  292. return self.validation(request_dict=request.GET)
  293. def post(self, request, *args, **kwargs):
  294. request.encoding = 'utf-8'
  295. return self.validation(request_dict=request.POST)
  296. def validation(self, request_dict, *args, **kwargs):
  297. token = request_dict.get('token', None)
  298. id = request_dict.get('id', None)
  299. iSNotification = request_dict.get('iSNotification', None)
  300. response = ResponseObject()
  301. if token is None:
  302. return response.json(309)
  303. tko = TokenObject(token)
  304. response.lang = tko.lang
  305. if tko.code != 0:
  306. return response.json(tko.code)
  307. userID = tko.userID
  308. return self.do_update(userID, id, iSNotification, response)
  309. def do_update(self, userID, id, iSNotification, response):
  310. qs = Device_Info.objects.filter(id=id, userID_id=userID)
  311. if qs.exists():
  312. qs.update(iSNotification=iSNotification)
  313. data = {'uid': qs[0].UID}
  314. utko = UidTokenObject()
  315. uid_token = utko.generate(data)
  316. return response.json(0, {'uid_token': uid_token,
  317. 'push_url': '{SERVER_DOMAIN}detect/add'.format(SERVER_DOMAIN=SERVER_DOMAIN)})
  318. else:
  319. return response.json(173)
  320. # 按季度删除访问日志
  321. def deleteExpireEquipmentInfo(request):
  322. response = ResponseObject()
  323. i = int(request.GET.get('i', 10))
  324. import time
  325. nowTime = int(time.time())
  326. for i in range(5):
  327. ei = Equipment_Info.objects.filter(addTime__lte=str(nowTime - 3600 * 24 * 30))[0:10000]
  328. id_list = ei.values_list("id", flat=True)
  329. print(id_list)
  330. Equipment_Info.objects.filter(id__in=list(id_list)).delete()
  331. return response.json(0)