VersionManagementController.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import hashlib
  5. import time
  6. from django.views.generic.base import View
  7. from Ansjer.config import BASE_DIR
  8. from Model.models import Equipment_Version, App_Info, AppSetModel
  9. from Object.TokenObject import TokenObject
  10. from Object.ResponseObject import ResponseObject
  11. from Service.CommonService import CommonService
  12. class VersionManagement(View):
  13. def get(self, request, *args, **kwargs):
  14. request.encoding = 'utf-8'
  15. operation = kwargs.get('operation')
  16. return self.validation(request.GET, request, operation)
  17. def post(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. operation = kwargs.get('operation')
  20. return self.validation(request.POST, request, operation)
  21. def validation(self, request_dict, request, operation):
  22. language = request_dict.get('language', 'en')
  23. response = ResponseObject(language, 'pc')
  24. if operation == 'upLoadFile':
  25. return self.upLoadFile(request, request_dict, response)
  26. else:
  27. tko = TokenObject(
  28. request.META.get('HTTP_AUTHORIZATION'),
  29. returntpye='pc')
  30. if tko.code != 0:
  31. return response.json(tko.code)
  32. response.lang = tko.lang
  33. userID = tko.userID
  34. if operation == 'getEquipmentVersionList':
  35. return self.getEquipmentVersionList(request_dict, response)
  36. elif operation == 'editVersionInformation':
  37. return self.editVersionInformation(request_dict, response)
  38. elif operation == 'deleteEquipmentVersion':
  39. return self.deleteEquipmentVersion(request_dict, response)
  40. elif operation == 'getAppVersionList':
  41. return self.getAppVersionList(request_dict, response)
  42. elif operation == 'addOrEditAppInfo':
  43. return self.addOrEditAppInfo(request_dict, response)
  44. elif operation == 'deleteAppVersion':
  45. return self.deleteAppVersion(request_dict, response)
  46. elif operation == 'getAppSet':
  47. return self.getAppSet(request_dict, response)
  48. elif operation == 'editAppSet':
  49. return self.editAppSet(request_dict, response)
  50. else:
  51. return response.json(404)
  52. def getEquipmentVersionList(self, request_dict, response):
  53. mci = request_dict.get('mci', None)
  54. lang = request_dict.get('lang', None)
  55. version = request_dict.get('version', None)
  56. pageNo = request_dict.get('pageNo', None)
  57. pageSize = request_dict.get('pageSize', None)
  58. if not all([pageNo, pageSize]):
  59. return response.json(444)
  60. page = int(pageNo)
  61. line = int(pageSize)
  62. try:
  63. equipment_version_qs = Equipment_Version.objects.filter()
  64. if mci:
  65. equipment_version_qs = equipment_version_qs.filter(mci=mci)
  66. if lang:
  67. equipment_version_qs = equipment_version_qs.filter(lang=lang)
  68. if version:
  69. equipment_version_qs = equipment_version_qs.filter(version__contains=version)
  70. total = equipment_version_qs.count()
  71. equipment_version_qs = equipment_version_qs.values()[(page - 1) * line:page * line]
  72. equipment_version_list = CommonService.qs_to_list(equipment_version_qs)
  73. return response.json(0, {'list': equipment_version_list, 'total': total})
  74. except Exception as e:
  75. print(e)
  76. return response.json(500, repr(e))
  77. def upLoadFile(self, request, request_dict, response):
  78. file = request.FILES.get('file', None)
  79. mci = request_dict.get('mci', '')
  80. lang = request_dict.get('lang', '')
  81. ESN = request_dict.get('ESN', '')
  82. max_ver = request_dict.get('max_ver', '')
  83. channel = request_dict.get('channel', '')
  84. resolutionRatio = request_dict.get('resolutionRatio', '')
  85. Description = request_dict.get('Description', '')
  86. status = request_dict.get('status', 0)
  87. fileSize = request_dict.get('fileSize', '')
  88. if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
  89. return response.json(444)
  90. try:
  91. channel = int(channel)
  92. resolutionRatio = int(resolutionRatio)
  93. status = int(status)
  94. # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
  95. # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
  96. file_name = str(file) # 文件名
  97. version = file_name[:file_name.rindex('.')] # 设备版本
  98. rpoint = version.rindex('.')
  99. softwareVersion = version[1:rpoint] # 软件版本
  100. code = version[rpoint+1:] # 设备规格名称
  101. chipModelList2Code = code[:4] # 主芯片
  102. type = code[-3:-1] # 设备机型
  103. companyCode = code[-1:] # 公司代码
  104. fileSize = fileSize
  105. filePath = '/'.join(('static/otapack', mci, lang, file_name))
  106. file_data = file.read()
  107. fileMd5 = hashlib.md5(file_data).hexdigest()
  108. data_dict = {'mci': mci, 'lang': lang, 'ESN': ESN, 'max_ver': max_ver, 'channel': channel,
  109. 'resolutionRatio': resolutionRatio, 'Description': Description, 'status': status,
  110. 'version': version, 'softwareVersion': softwareVersion, 'code': code,
  111. 'chipModelList2Code': chipModelList2Code, 'type': type, 'companyCode': companyCode,
  112. 'fileSize': fileSize, 'filePath': filePath, 'fileMd5': fileMd5}
  113. # Equipment_Version表创建或更新数据
  114. equipment_version_qs = Equipment_Version.objects.filter(code=code, lang=lang)
  115. if not equipment_version_qs.exists():
  116. Equipment_Version.objects.create(eid=CommonService.getUserID(getUser=False, setOTAID=True), **data_dict)
  117. else:
  118. equipment_version_qs.update(**data_dict)
  119. # 上传文件到服务器
  120. upload_path = '/'.join((BASE_DIR, 'static/otapack', mci, lang)).replace('\\', '/') + '/'
  121. if not os.path.exists(upload_path): # 上传目录不存在则创建
  122. os.makedirs(upload_path)
  123. # 文件上传
  124. full_name = upload_path + file_name
  125. if os.path.exists(full_name): # 删除同名文件
  126. os.remove(full_name)
  127. with open(full_name, 'wb+') as write_file:
  128. for chunk in file.chunks():
  129. write_file.write(chunk)
  130. return response.json(0)
  131. except Exception as e:
  132. print(e)
  133. return response.json(500, repr(e))
  134. def editVersionInformation(self, request_dict, response):
  135. eid = request_dict.get('eid', None)
  136. ESN = request_dict.get('ESN', '')
  137. max_ver = request_dict.get('max_ver', '')
  138. status = request_dict.get('status', '')
  139. channel = request_dict.get('channel', '')
  140. resolutionRatio = request_dict.get('resolutionRatio', '')
  141. Description = request_dict.get('Description', '')
  142. if not eid:
  143. return response.json(444)
  144. status = 1 if status == 'true' else 0
  145. try:
  146. equipment_version_qs = Equipment_Version.objects.filter(eid=eid)
  147. if not equipment_version_qs.exists():
  148. return response.json(173)
  149. data_dict = {'ESN': ESN, 'max_ver': max_ver, 'status': status, 'channel': channel,
  150. 'resolutionRatio': resolutionRatio, 'Description': Description}
  151. equipment_version_qs.update(**data_dict)
  152. return response.json(0)
  153. except Exception as e:
  154. print(e)
  155. return response.json(500, repr(e))
  156. def deleteEquipmentVersion(self, request_dict, response):
  157. eid = request_dict.get('eid', None)
  158. if not eid:
  159. return response.json(444)
  160. try:
  161. equipment_version_qs = Equipment_Version.objects.filter(eid=eid)
  162. filePath = equipment_version_qs.values('filePath')[0]['filePath']
  163. equipment_version_qs.delete()
  164. # 删除文件
  165. full_name = '/'.join((BASE_DIR, filePath)).replace('\\', '/')
  166. if os.path.exists(full_name):
  167. os.remove(full_name)
  168. return response.json(0)
  169. except Exception as e:
  170. print(e)
  171. return response.json(500, repr(e))
  172. def getAppVersionList(self, request_dict, response):
  173. app_type = request_dict.get('app_type', None)
  174. appName = request_dict.get('appName', None)
  175. version = request_dict.get('version', None)
  176. pageNo = request_dict.get('pageNo', None)
  177. pageSize = request_dict.get('pageSize', None)
  178. if not all([pageNo, pageSize]):
  179. return response.json(444)
  180. page = int(pageNo)
  181. line = int(pageSize)
  182. try:
  183. app_info_qs = App_Info.objects.filter()
  184. if app_type:
  185. if app_type == 'IOS':
  186. app_type = 1
  187. elif app_type == '安卓':
  188. app_type = 2
  189. else:
  190. app_type = 3
  191. app_info_qs = app_info_qs.filter(app_type=app_type)
  192. if appName:
  193. app_info_qs = app_info_qs.filter(appName__contains=appName)
  194. if version:
  195. app_info_qs = app_info_qs.filter(version__contains=version)
  196. total = app_info_qs.count()
  197. app_info_qs = app_info_qs.values()[(page - 1) * line:page * line]
  198. app_info_list = CommonService.qs_to_list(app_info_qs)
  199. return response.json(0, {'list': app_info_list, 'total': total})
  200. except Exception as e:
  201. print(e)
  202. return response.json(500, repr(e))
  203. def addOrEditAppInfo(self, request_dict, response):
  204. id = request_dict.get('id', None)
  205. appName = request_dict.get('appName', '')
  206. appBundleId = request_dict.get('appBundleId', '')
  207. bundleVersion = request_dict.get('bundleVersion', '')
  208. newAppversion = request_dict.get('newAppversion', '')
  209. minAppversion = request_dict.get('minAppversion', '')
  210. content = request_dict.get('content', '')
  211. app_type = request_dict.get('app_type', '')
  212. downloadLink = request_dict.get('downloadLink', '')
  213. try:
  214. app_type = int(app_type)
  215. data_dict = {'appName': appName, 'appBundleId': appBundleId, 'bundleVersion': bundleVersion,
  216. 'newAppversion': newAppversion, 'minAppversion': minAppversion, 'content': content,
  217. 'app_type': app_type, 'downloadLink': downloadLink}
  218. if not id: # 添加
  219. App_Info.objects.create(**data_dict)
  220. else: # 编辑
  221. app_info_qs = App_Info.objects.filter(id=id)
  222. if not app_info_qs.exists():
  223. return response.json(173)
  224. app_info_qs.update(**data_dict)
  225. return response.json(0)
  226. except Exception as e:
  227. print(e)
  228. return response.json(500, repr(e))
  229. def deleteAppVersion(self, request_dict, response):
  230. appBundleId = request_dict.get('appBundleId', None)
  231. if not appBundleId:
  232. return response.json(444)
  233. try:
  234. App_Info.objects.filter(appBundleId=appBundleId).delete()
  235. AppSetModel.objects.filter(appBundleId=appBundleId).delete()
  236. return response.json(0)
  237. except Exception as e:
  238. print(e)
  239. return response.json(500, repr(e))
  240. def getAppSet(self, request_dict, response):
  241. appBundleId = request_dict.get('appBundleId', None)
  242. if not appBundleId:
  243. return response.json(444)
  244. try:
  245. app_set_qs = AppSetModel.objects.filter(appBundleId=appBundleId).values('content')
  246. if app_set_qs.exists():
  247. content = app_set_qs[0]['content']
  248. return response.json(0, {'content': content})
  249. else:
  250. nowTime = int(time.time())
  251. AppSetModel.objects.create(
  252. appBundleId=appBundleId,
  253. addTime=nowTime,
  254. updTime=nowTime
  255. )
  256. return response.json(0)
  257. except Exception as e:
  258. print(e)
  259. return response.json(500, repr(e))
  260. def editAppSet(self, request_dict, response):
  261. appBundleId = request_dict.get('appBundleId', None)
  262. content = request_dict.get('content', None)
  263. if not all([appBundleId, content]):
  264. return response.json(444)
  265. try:
  266. AppSetModel.objects.filter(appBundleId=appBundleId).update(content=content)
  267. return response.json(0)
  268. except Exception as e:
  269. print(e)
  270. return response.json(500, repr(e))