#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import hashlib import time from django.views.generic.base import View from Ansjer.config import BASE_DIR from Model.models import Equipment_Version, App_Info, AppSetModel 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) elif operation == 'getAppVersionList': return self.getAppVersionList(request_dict, response) elif operation == 'addOrEditAppInfo': return self.addOrEditAppInfo(request_dict, response) elif operation == 'deleteAppVersion': return self.deleteAppVersion(request_dict, response) elif operation == 'getAppSet': return self.getAppSet(request_dict, response) elif operation == 'editAppSet': return self.editAppSet(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, 'version': version, '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)) def getAppVersionList(self, request_dict, response): app_type = request_dict.get('app_type', None) appName = request_dict.get('appName', 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: app_info_qs = App_Info.objects.filter() if app_type: if app_type == 'IOS': app_type = 1 elif app_type == '安卓': app_type = 2 else: app_type = 3 app_info_qs = app_info_qs.filter(app_type=app_type) if appName: app_info_qs = app_info_qs.filter(appName__contains=appName) if version: app_info_qs = app_info_qs.filter(version__contains=version) total = app_info_qs.count() app_info_qs = app_info_qs.values()[(page - 1) * line:page * line] app_info_list = CommonService.qs_to_list(app_info_qs) return response.json(0, {'list': app_info_list, 'total': total}) except Exception as e: print(e) return response.json(500, repr(e)) def addOrEditAppInfo(self, request_dict, response): id = request_dict.get('id', None) appName = request_dict.get('appName', '') appBundleId = request_dict.get('appBundleId', '') bundleVersion = request_dict.get('bundleVersion', '') newAppversion = request_dict.get('newAppversion', '') minAppversion = request_dict.get('minAppversion', '') content = request_dict.get('content', '') app_type = request_dict.get('app_type', '') downloadLink = request_dict.get('downloadLink', '') try: app_type = int(app_type) data_dict = {'appName': appName, 'appBundleId': appBundleId, 'bundleVersion': bundleVersion, 'newAppversion': newAppversion, 'minAppversion': minAppversion, 'content': content, 'app_type': app_type, 'downloadLink': downloadLink} if not id: # 添加 App_Info.objects.create(**data_dict) else: # 编辑 app_info_qs = App_Info.objects.filter(id=id) if not app_info_qs.exists(): return response.json(173) app_info_qs.update(**data_dict) return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def deleteAppVersion(self, request_dict, response): appBundleId = request_dict.get('appBundleId', None) if not appBundleId: return response.json(444) try: App_Info.objects.filter(appBundleId=appBundleId).delete() AppSetModel.objects.filter(appBundleId=appBundleId).delete() return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def getAppSet(self, request_dict, response): appBundleId = request_dict.get('appBundleId', None) if not appBundleId: return response.json(444) try: app_set_qs = AppSetModel.objects.filter(appBundleId=appBundleId).values('content') if app_set_qs.exists(): content = app_set_qs[0]['content'] return response.json(0, {'content': content}) else: nowTime = int(time.time()) AppSetModel.objects.create( appBundleId=appBundleId, addTime=nowTime, updTime=nowTime ) return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def editAppSet(self, request_dict, response): appBundleId = request_dict.get('appBundleId', None) content = request_dict.get('content', None) if not all([appBundleId, content]): return response.json(444) try: AppSetModel.objects.filter(appBundleId=appBundleId).update(content=content) return response.json(0) except Exception as e: print(e) return response.json(500, repr(e))