VersionManagementController.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import hashlib
  5. from django.views.generic.base import View
  6. from Ansjer.config import BASE_DIR
  7. from Model.models import Equipment_Version
  8. from Object.TokenObject import TokenObject
  9. from Object.ResponseObject import ResponseObject
  10. from Service.CommonService import CommonService
  11. class VersionManagement(View):
  12. def get(self, request, *args, **kwargs):
  13. request.encoding = 'utf-8'
  14. operation = kwargs.get('operation')
  15. return self.validation(request.GET, request, operation)
  16. def post(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.POST, request, operation)
  20. def validation(self, request_dict, request, operation):
  21. language = request_dict.get('language', 'en')
  22. response = ResponseObject(language, 'pc')
  23. if operation == 'upLoadFile':
  24. return self.upLoadFile(request, request_dict, response)
  25. else:
  26. tko = TokenObject(
  27. request.META.get('HTTP_AUTHORIZATION'),
  28. returntpye='pc')
  29. if tko.code != 0:
  30. return response.json(tko.code)
  31. response.lang = tko.lang
  32. userID = tko.userID
  33. if operation == 'getEquipmentVersionList':
  34. return self.getEquipmentVersionList(request_dict, response)
  35. elif operation == 'editVersionInformation':
  36. return self.editVersionInformation(request_dict, response)
  37. elif operation == 'deleteEquipmentVersion':
  38. return self.deleteEquipmentVersion(request_dict, response)
  39. else:
  40. return response.json(404)
  41. def getEquipmentVersionList(self, request_dict, response):
  42. mci = request_dict.get('mci', None)
  43. lang = request_dict.get('lang', None)
  44. version = request_dict.get('version', None)
  45. pageNo = request_dict.get('pageNo', None)
  46. pageSize = request_dict.get('pageSize', None)
  47. if not all([pageNo, pageSize]):
  48. return response.json(444)
  49. page = int(pageNo)
  50. line = int(pageSize)
  51. try:
  52. equipment_version_qs = Equipment_Version.objects.filter()
  53. if mci:
  54. equipment_version_qs = equipment_version_qs.filter(mci=mci)
  55. if lang:
  56. equipment_version_qs = equipment_version_qs.filter(lang=lang)
  57. if version:
  58. equipment_version_qs = equipment_version_qs.filter(version__contains=version)
  59. total = equipment_version_qs.count()
  60. equipment_version_qs = equipment_version_qs.values()[(page - 1) * line:page * line]
  61. equipment_version_list = CommonService.qs_to_list(equipment_version_qs)
  62. return response.json(0, {'list': equipment_version_list, 'total': total})
  63. except Exception as e:
  64. print(e)
  65. return response.json(500, repr(e))
  66. def upLoadFile(self, request, request_dict, response):
  67. file = request.FILES.get('file', None)
  68. mci = request_dict.get('mci', '')
  69. lang = request_dict.get('lang', '')
  70. ESN = request_dict.get('ESN', '')
  71. max_ver = request_dict.get('max_ver', '')
  72. channel = request_dict.get('channel', '')
  73. resolutionRatio = request_dict.get('resolutionRatio', '')
  74. Description = request_dict.get('Description', '')
  75. status = request_dict.get('status', 0)
  76. fileSize = request_dict.get('fileSize', '')
  77. if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
  78. return response.json(444)
  79. try:
  80. channel = int(channel)
  81. resolutionRatio = int(resolutionRatio)
  82. status = int(status)
  83. # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
  84. # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
  85. file_name = str(file) # 文件名
  86. version = file_name[:file_name.rindex('.')] # 设备版本
  87. rpoint = version.rindex('.')
  88. softwareVersion = version[1:rpoint] # 软件版本
  89. code = version[rpoint+1:] # 设备规格名称
  90. chipModelList2Code = code[:4] # 主芯片
  91. type = code[-3:-1] # 设备机型
  92. companyCode = code[-1:] # 公司代码
  93. fileSize = fileSize
  94. filePath = '/'.join(('static/otapack', mci, lang, file_name))
  95. file_data = file.read()
  96. fileMd5 = hashlib.md5(file_data).hexdigest()
  97. data_dict = {'mci': mci, 'lang': lang, 'ESN': ESN, 'max_ver': max_ver, 'channel': channel,
  98. 'resolutionRatio': resolutionRatio, 'Description': Description, 'status': status,
  99. 'version': version, 'softwareVersion': softwareVersion, 'code': code,
  100. 'chipModelList2Code': chipModelList2Code, 'type': type, 'companyCode': companyCode,
  101. 'fileSize': fileSize, 'filePath': filePath, 'fileMd5': fileMd5}
  102. # Equipment_Version表创建或更新数据
  103. equipment_version_qs = Equipment_Version.objects.filter(code=code, lang=lang)
  104. if not equipment_version_qs.exists():
  105. Equipment_Version.objects.create(eid=CommonService.getUserID(getUser=False, setOTAID=True), **data_dict)
  106. else:
  107. equipment_version_qs.update(**data_dict)
  108. # 上传文件到服务器
  109. upload_path = '/'.join((BASE_DIR, 'static/otapack', mci, lang)).replace('\\', '/') + '/'
  110. if not os.path.exists(upload_path): # 上传目录不存在则创建
  111. os.makedirs(upload_path)
  112. # 文件上传
  113. full_name = upload_path + file_name
  114. if os.path.exists(full_name): # 删除同名文件
  115. os.remove(full_name)
  116. with open(full_name, 'wb+') as write_file:
  117. for chunk in file.chunks():
  118. write_file.write(chunk)
  119. return response.json(0)
  120. except Exception as e:
  121. print(e)
  122. return response.json(500, repr(e))
  123. def editVersionInformation(self, request_dict, response):
  124. eid = request_dict.get('eid', None)
  125. ESN = request_dict.get('ESN', '')
  126. max_ver = request_dict.get('max_ver', '')
  127. status = request_dict.get('status', '')
  128. channel = request_dict.get('channel', '')
  129. resolutionRatio = request_dict.get('resolutionRatio', '')
  130. Description = request_dict.get('Description', '')
  131. if not eid:
  132. return response.json(444)
  133. status = 1 if status == 'true' else 0
  134. try:
  135. equipment_version_qs = Equipment_Version.objects.filter(eid=eid)
  136. if not equipment_version_qs.exists():
  137. return response.json(173)
  138. data_dict = {'ESN': ESN, 'max_ver': max_ver, 'status': status, 'channel': channel,
  139. 'resolutionRatio': resolutionRatio, 'Description': Description}
  140. equipment_version_qs.update(**data_dict)
  141. return response.json(0)
  142. except Exception as e:
  143. print(e)
  144. return response.json(500, repr(e))
  145. def deleteEquipmentVersion(self, request_dict, response):
  146. eid = request_dict.get('eid', None)
  147. if not eid:
  148. return response.json(444)
  149. try:
  150. equipment_version_qs = Equipment_Version.objects.filter(eid=eid)
  151. filePath = equipment_version_qs.values('filePath')[0]['filePath']
  152. equipment_version_qs.delete()
  153. # 删除文件
  154. full_name = '/'.join((BASE_DIR, filePath)).replace('\\', '/')
  155. if os.path.exists(full_name):
  156. os.remove(full_name)
  157. return response.json(0)
  158. except Exception as e:
  159. print(e)
  160. return response.json(500, repr(e))