#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import hashlib from django.views.generic.base import View from Ansjer.config import BASE_DIR from Model.models import Equipment_Version from Object.TokenObject import TokenObject from Object.ResponseObject import ResponseObject from Service.CommonService import CommonService class VersionManagement(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): language = request_dict.get('language', 'en') response = ResponseObject(language, 'pc') if operation == 'upLoadFile': return self.upLoadFile(request, request_dict, response) else: tko = TokenObject( request.META.get('HTTP_AUTHORIZATION'), returntpye='pc') if tko.code != 0: return response.json(tko.code) response.lang = tko.lang userID = tko.userID if operation == 'getEquipmentVersionList': return self.getEquipmentVersionList(request_dict, response) elif operation == 'editVersionInformation': return self.editVersionInformation(request_dict, response) elif operation == 'deleteEquipmentVersion': return self.deleteEquipmentVersion(request_dict, response) else: return response.json(404) def getEquipmentVersionList(self, request_dict, response): mci = request_dict.get('mci', None) lang = request_dict.get('lang', None) version = request_dict.get('version', None) pageNo = request_dict.get('pageNo', None) pageSize = request_dict.get('pageSize', None) if not all([pageNo, pageSize]): return response.json(444) page = int(pageNo) line = int(pageSize) try: equipment_version_qs = Equipment_Version.objects.filter() if mci: equipment_version_qs = equipment_version_qs.filter(mci=mci) if lang: equipment_version_qs = equipment_version_qs.filter(lang=lang) if version: equipment_version_qs = equipment_version_qs.filter(version__contains=version) total = equipment_version_qs.count() equipment_version_qs = equipment_version_qs.values()[(page - 1) * line:page * line] equipment_version_list = CommonService.qs_to_list(equipment_version_qs) return response.json(0, {'list': equipment_version_list, 'total': total}) except Exception as e: print(e) return response.json(500, repr(e)) def upLoadFile(self, request, request_dict, response): file = request.FILES.get('file', None) mci = request_dict.get('mci', '') lang = request_dict.get('lang', '') ESN = request_dict.get('ESN', '') max_ver = request_dict.get('max_ver', '') channel = request_dict.get('channel', '') resolutionRatio = request_dict.get('resolutionRatio', '') Description = request_dict.get('Description', '') status = request_dict.get('status', 0) fileSize = request_dict.get('fileSize', '') if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]): return response.json(444) try: channel = int(channel) resolutionRatio = int(resolutionRatio) status = int(status) # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称 # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA file_name = str(file) # 文件名 version = file_name[:file_name.rindex('.')] # 设备版本 rpoint = version.rindex('.') softwareVersion = version[1:rpoint] # 软件版本 code = version[rpoint+1:] # 设备规格名称 chipModelList2Code = code[:4] # 主芯片 type = code[-3:-1] # 设备机型 companyCode = code[-1:] # 公司代码 fileSize = fileSize filePath = '/'.join(('static/otapack', mci, lang, file_name)) file_data = file.read() fileMd5 = hashlib.md5(file_data).hexdigest() data_dict = {'mci': mci, 'lang': lang, 'ESN': ESN, 'max_ver': max_ver, 'channel': channel, 'resolutionRatio': resolutionRatio, 'Description': Description, 'status': status, 'softwareVersion': softwareVersion, 'code': code, 'chipModelList2Code': chipModelList2Code, 'type': type, 'companyCode': companyCode, 'fileSize': fileSize, 'filePath': filePath, 'fileMd5': fileMd5} # Equipment_Version表创建或更新数据 equipment_version_qs = Equipment_Version.objects.filter(code=code, lang=lang) if not equipment_version_qs.exists(): Equipment_Version.objects.create(eid=CommonService.getUserID(getUser=False, setOTAID=True), **data_dict) else: equipment_version_qs.update(**data_dict) # 上传文件到服务器 upload_path = '/'.join((BASE_DIR, 'static/otapack', mci, lang)).replace('\\', '/') + '/' if not os.path.exists(upload_path): # 上传目录不存在则创建 os.makedirs(upload_path) # 文件上传 full_name = upload_path + file_name if os.path.exists(full_name): # 删除同名文件 os.remove(full_name) with open(full_name, 'wb+') as write_file: for chunk in file.chunks(): write_file.write(chunk) return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def editVersionInformation(self, request_dict, response): eid = request_dict.get('eid', None) ESN = request_dict.get('ESN', '') max_ver = request_dict.get('max_ver', '') status = request_dict.get('status', '') channel = request_dict.get('channel', '') resolutionRatio = request_dict.get('resolutionRatio', '') Description = request_dict.get('Description', '') if not eid: return response.json(444) status = 1 if status == 'true' else 0 try: equipment_version_qs = Equipment_Version.objects.filter(eid=eid) if not equipment_version_qs.exists(): return response.json(173) data_dict = {'ESN': ESN, 'max_ver': max_ver, 'status': status, 'channel': channel, 'resolutionRatio': resolutionRatio, 'Description': Description} equipment_version_qs.update(**data_dict) return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def deleteEquipmentVersion(self, request_dict, response): eid = request_dict.get('eid', None) if not eid: return response.json(444) try: equipment_version_qs = Equipment_Version.objects.filter(eid=eid) filePath = equipment_version_qs.values('filePath')[0]['filePath'] equipment_version_qs.delete() # 删除文件 full_name = '/'.join((BASE_DIR, filePath)).replace('\\', '/') if os.path.exists(full_name): os.remove(full_name) return response.json(0) except Exception as e: print(e) return response.json(500, repr(e))