EquipmentInfo.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. import time
  2. import traceback
  3. from django.utils.decorators import method_decorator
  4. from django.views.decorators.csrf import csrf_exempt
  5. from django.views.generic.base import View
  6. from Model.models import Device_Info, Equipment_Info, UidPushModel
  7. from Model.models import Device_User
  8. from Object.ResponseObject import ResponseObject
  9. from Object.TokenObject import TokenObject
  10. from Service.CommonService import CommonService
  11. from Service.EquipmentInfoService import EquipmentInfoService
  12. from Service.ModelService import ModelService
  13. from Ansjer.config import LOGGER
  14. class EquipmentInfo(View):
  15. @method_decorator(csrf_exempt)
  16. def dispatch(self, *args, **kwargs):
  17. return super(EquipmentInfo, self).dispatch(*args, **kwargs)
  18. def get(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. return self.validation(request_dict=request.GET)
  21. def post(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. return self.validation(request_dict=request.POST)
  24. def validation(self, request_dict, *args, **kwargs):
  25. token = request_dict.get('token', None)
  26. response = ResponseObject()
  27. tko = TokenObject(token)
  28. if tko.code != 0:
  29. return response.json(tko.code)
  30. userID = tko.userID
  31. operation = request_dict.get('operation', None)
  32. if not userID:
  33. return response.json(309)
  34. if operation == 'query': # 查询推送消息
  35. return self.query_info(request_dict, userID, response)
  36. elif operation == 'add':
  37. return self.add_info(request_dict, userID, response)
  38. elif operation == 'update': # 已读推送消息
  39. return self.update_info(request_dict, userID, response)
  40. elif operation == 'update-answer-status': # 已接听一键通话消息
  41. return self.update_answer_status(request_dict, userID, response)
  42. elif operation == 'delete': # 删除推送消息
  43. return self.delete_info(request_dict, response)
  44. elif operation == 'findByTime':
  45. return self.findByTime_info(request_dict, userID, response)
  46. if operation == 'queryByAdmin':
  47. return self.query_all_info(request_dict, userID, response)
  48. if operation == 'deleteByAdmin':
  49. return self.delete_by_admin(request_dict, userID, response)
  50. else:
  51. return response.json(444, {"parm": "operation"})
  52. def add_info(self, request_dict, userID, response):
  53. return response.json(0)
  54. def query_info(self, request_dict, userID, response):
  55. page = int(request_dict.get('page', None))
  56. line = int(request_dict.get('line', None))
  57. if not page or not line:
  58. return response.json(444, 'page,line')
  59. qs = Equipment_Info.objects.filter(userID_id=userID)
  60. uid = request_dict.get('uid', None)
  61. if uid:
  62. qs = qs.filter(devUid=uid)
  63. dvqs = Device_Info.objects.filter(UID=uid).values('Type', 'NickName')
  64. uid_type_dict = {uid: {'type': dvqs[0]['Type'], 'NickName': dvqs[0]['NickName']}}
  65. else:
  66. dvqs = Device_Info.objects.filter(userID_id=userID).values('UID', 'Type', 'NickName')
  67. uid_type_dict = {}
  68. for dv in dvqs:
  69. uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
  70. if not qs.exists():
  71. return response.json(0, {'datas': [], 'count': 0})
  72. count = qs.count()
  73. res = qs[(page - 1) * line:page * line]
  74. send_json = CommonService.qs_to_dict(res)
  75. res = []
  76. for p in send_json['datas']:
  77. p['fields']['viewAccont'] = ''
  78. p['fields']['viewPwd'] = ''
  79. devUid = p['fields']['devUid']
  80. if devUid in uid_type_dict.keys():
  81. p['fields']['uid_type'] = uid_type_dict[devUid]['type']
  82. p['fields']['devNickName'] = uid_type_dict[devUid]['NickName']
  83. else:
  84. p['uid_type'] = ''
  85. res.append(p)
  86. return response.json(0, {'datas': res, 'count': count})
  87. @staticmethod
  88. def update_info(request_dict, userID, response):
  89. is_update_all = int(request_dict.get('is_update_all', 0))
  90. event_type = request_dict.get('eventType', None)
  91. if is_update_all == 1:
  92. kwargs = {
  93. 'device_user_id': userID,
  94. 'status': 0
  95. }
  96. if event_type:
  97. kwargs['event_type'] = int(event_type)
  98. try:
  99. EquipmentInfoService.all_read_equipment_info(**kwargs)
  100. except Exception as e:
  101. print(repr(e))
  102. else:
  103. id_list = request_dict.getlist('id[]', None)
  104. if id_list is None or len(id_list) < 1:
  105. id_list = request_dict.getlist('id', None)
  106. if not id_list:
  107. return response.json(444)
  108. for full_id in id_list:
  109. try:
  110. ei_id = int(full_id[2:])
  111. equipment_info_model = EquipmentInfoService.get_equipment_info_model_with_full_id(full_id)
  112. equipment_info_model.objects.filter(id=ei_id).update(status=1)
  113. except Exception as e:
  114. LOGGER.info('equipment/info/update接口报错:{}'.format(repr(e)))
  115. return response.json(0)
  116. @staticmethod
  117. def update_answer_status(request_dict, user_id, response):
  118. """
  119. 更新一键通话消息状态为已接听
  120. @param request_dict:
  121. @param user_id: 用户id
  122. @param response:
  123. @return:
  124. """
  125. uid = request_dict.get('uid', None)
  126. event_time = request_dict.get('event_time', None)
  127. if not all([uid, event_time]):
  128. return response.json(444)
  129. kwargs = {
  130. 'device_user_id': user_id,
  131. 'device_uid': uid,
  132. 'event_time': event_time,
  133. 'event_type__in': [606, 607]
  134. }
  135. try:
  136. EquipmentInfoService.update_equipment_info_answer_status(**kwargs)
  137. except Exception as e:
  138. print(repr(e))
  139. return response.json(0)
  140. @staticmethod
  141. def delete_info(request_dict, response):
  142. id_list = request_dict.getlist('id[]', None)
  143. if id_list is None or len(id_list) < 1:
  144. id_list = request_dict.getlist('id', None)
  145. if not id_list:
  146. return response.json(444)
  147. try:
  148. for full_id in id_list:
  149. ei_id = int(full_id[2:])
  150. equipment_info_model = EquipmentInfoService.get_equipment_info_model_with_full_id(full_id)
  151. equipment_info_model.objects.filter(id=ei_id).delete()
  152. except Exception as e:
  153. print(repr(e))
  154. return response.json(0)
  155. def findByTime_info(self, request_dict, userID, response):
  156. startTime = request_dict.get('startTime')
  157. endTime = request_dict.get('endTime')
  158. page = int(request_dict.get('page', None))
  159. line = int(request_dict.get('line', None))
  160. if not startTime or not endTime or not page or not line:
  161. return response.json(444, 'startTime, endTime, page, line')
  162. uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
  163. if not len(uid_list):
  164. return response.json(0, {'datas': [], 'count': 0})
  165. qs = Equipment_Info.objects.filter(userID_id=userID,
  166. eventTime__range=(startTime, endTime)).order_by('-id')
  167. if qs.exists():
  168. count = qs.count()
  169. res = qs[(page - 1) * line:page * line]
  170. send_json = CommonService.qs_to_dict(res)
  171. send_json['count'] = count
  172. return response.json(0, send_json)
  173. # 管理员查询指定用户的推送信息接口
  174. def query_all_info(self, request_dict, userID, response):
  175. page = int(request_dict.get('page', None))
  176. line = int(request_dict.get('line', None))
  177. username = request_dict.get('username', None)
  178. uid = request_dict.get('uid', None)
  179. devNickName = request_dict.get('devNickName', None)
  180. Channel = request_dict.get('Channel', None)
  181. if not page or not line:
  182. return response.json(444, 'page,line')
  183. check_perm = ModelService.check_perm(userID=userID, permID=30)
  184. if not check_perm:
  185. return response.json(404)
  186. if not username and not uid and not devNickName and not Channel:
  187. qs = Equipment_Info.objects.all().order_by('-id')
  188. elif username:
  189. user = Device_User.objects.filter(username=username)
  190. users = CommonService.qs_to_dict(user)
  191. # 从字典类型中找到对应的pk值,即是userID
  192. user_id = users.get('datas')[0].get('pk')
  193. if not user.exists():
  194. return response.json(104)
  195. uid_list = Device_Info.objects.filter(userID_id=user_id).values_list('UID', flat=True)
  196. if not len(uid_list):
  197. return response.json(0, {'datas': [], 'count': 0})
  198. qs = Equipment_Info.objects.filter(userID_id=user_id).order_by('-id')
  199. elif uid:
  200. qs = Equipment_Info.objects.filter(devUid=uid).order_by('-id')
  201. elif devNickName:
  202. qs = Equipment_Info.objects.filter(devNickName=devNickName).order_by('-id')
  203. elif Channel:
  204. qs = Equipment_Info.objects.filter(Channel=Channel).order_by('-id')
  205. if not qs.exists():
  206. return response.json(0, {'datas': [], 'count': 0})
  207. count = qs.count()
  208. res = qs[(page - 1) * line:page * line]
  209. send_json = CommonService.qs_to_dict(res)
  210. send_json['count'] = count
  211. return response.json(0, send_json)
  212. # 管理员的删除推送信息的接口
  213. def delete_by_admin(self, request_dict, userID, response):
  214. id_list = request_dict.getlist('id', None)
  215. if not len(id_list):
  216. return response.json(444, 'id is None or not list')
  217. check_perm = ModelService.check_perm(userID=userID, permID=10)
  218. if check_perm is True:
  219. try:
  220. is_delete = Equipment_Info.objects.filter(id__in=id_list).delete()
  221. except Exception as e:
  222. errorInfo = traceback.format_exc()
  223. print(errorInfo)
  224. return response.json(424, {'details': repr(e)})
  225. else:
  226. return response.json(0, {'delete_count': is_delete[0]})
  227. else:
  228. return response.json(404)
  229. '''
  230. use information_schema;
  231. select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='Ansjer81';
  232. '''
  233. # 按季度删除访问日志
  234. def deleteExpireEquipmentInfoById(request):
  235. response = ResponseObject()
  236. id = int(request.GET.get('id', None))
  237. if id is None:
  238. return response.json(0)
  239. Equipment_Info.objects.filter(id__lte=id).delete()
  240. return response.json(0)