import os import simplejson as json from django.utils import timezone from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.views.generic.base import View from Ansjer.config import BASE_DIR from Model.models import Equipment_Version from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Service.CommonService import CommonService from Service.ModelService import ModelService ''' http://192.168.136.45:8077/equipment/OTA?token=test&operation=query&page=1&line=10 http://192.168.136.45:8077/equipment/OTA?token=test&operation=find&page=1&line=10&content={} http://192.168.136.40:8077/equipment/OTA?eid=138001524641441203480138000&token=test&operation=delete http://192.168.136.40:8077/equipment/OTA?eid=138001524641441203480138000&token=test&operation=update&status=1 ''' class EquipmentOTA(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(EquipmentOTA, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.GET) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.POST) def validation(self, request_dict, *args, **kwargs): token = request_dict.get('token', None) response = ResponseObject() if token is None: return response.json(309) tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID if userID is None: return response.json(309) operation = request_dict.get('operation', None) if operation == 'delete': return self.delete(request_dict, userID, response) elif operation == 'query': return self.query(request_dict, userID, response) elif operation == 'find': return self.find(request_dict, userID, response) elif operation == 'update': return self.update(request_dict, userID, response) else: return response.json(444, 'operation') def delete(self, request_dict, userID, response): eid = request_dict.get('eid', None) param_flag = CommonService.get_param_flag(data=[eid]) if param_flag is True: own_permission = ModelService.check_perm(userID=userID, permID=230) if own_permission is True: ev = Equipment_Version.objects.filter(eid=eid) if ev.exists(): try: has_ev = Equipment_Version.objects.filter(filePath=ev[0].filePath) if has_ev.exists(): pass else: filepath = os.path.join(BASE_DIR, ev[0].filePath) os.remove(filepath) except Exception as e: pass ev.delete() return response.json(0) else: return response.json(404) return response.json(444) def query(self, request_dict, userID, response): page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) lang = request_dict.get('lang', None) if page is None or line is None: return response.json(444, 'page,line') own_permission = ModelService.check_perm(userID=userID, permID=240) if own_permission is not True: return response.json(404) if lang is None: qs = Equipment_Version.objects.all().order_by('-data_joined') else: qs = Equipment_Version.objects.filter(lang=lang).order_by('-data_joined') if qs.exists(): count = qs.count() res = qs[(page - 1) * line:page * line] send_json = CommonService.qs_to_dict(res) send_json['count'] = count return response.json(0, send_json) return response.json(0) def find(self, request_dict, userID, response): page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) content = request_dict.get('content', None) if page is None or line is None or content is None: return response.json(444) own_permission = ModelService.check_perm(userID=userID, permID=250) if own_permission is not True: return response.json(404) content = json.loads(content) search_kwargs = CommonService.get_kwargs(data=content) qs = Equipment_Version.objects.filter(**search_kwargs) if not qs.exists(): return response.json(0, []) count = qs.count() res = qs[(page - 1) * line:page * line] send_json = CommonService.qs_to_dict(res) send_json['count'] = count return response.json(0, send_json) def update(self, request_dict, userID, response): eid = request_dict.get('eid', None) if eid is None: return response.json(444, 'eid') own_permission = ModelService.check_perm(userID=userID, permID=230) if own_permission is not True: return response.json(404) ev = Equipment_Version.objects.filter(eid=eid) if not ev.exists(): return response.json(10, 'ev none') status = request_dict.get('status', None) try: update_time = timezone.localtime(timezone.now()) ev.update(status=status, update_time=update_time) except Exception as e: print(repr(e)) pass else: return response.json(0, {'update_time': str(update_time)}) class EquipmentVersionView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): response = ResponseObject() if operation is None: return response.json(444, 'error path') token = request_dict.get('token', None) # 设备主键uid tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID own_perm = ModelService.check_perm(userID, 30) if own_perm is False: return response.json(404) if operation == 'query': return self.do_query(request_dict, response) else: return response.json(444, 'error path') def do_query(self, request_dict, response): mci = request_dict.get('mci', None) page = request_dict.get('page', None) line = request_dict.get('line', None) if not page or not line: return response.json(444, 'page,line') if mci is not None: ev_qs = Equipment_Version.objects.filter(mci=mci).values() else: ev_qs = Equipment_Version.objects.values() res = { 'datas': CommonService.qs_to_list(ev_qs[(page - 1) * line:page * line]), 'count': ev_qs.count() } return response.json(0, res)