VersionManagementController.py 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import hashlib
  5. import time
  6. import math
  7. import boto3
  8. import botocore
  9. from django.db import transaction
  10. from django.views.generic.base import View
  11. from Ansjer.config import LOGGER
  12. from Ansjer.config import BASE_DIR, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
  13. from Object.TokenObject import TokenObject
  14. from Object.ResponseObject import ResponseObject
  15. from Service.CommonService import CommonService
  16. from Model.models import Equipment_Version, App_Info, AppSetModel, App_Colophon, Pc_Info
  17. class VersionManagement(View):
  18. def get(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. operation = kwargs.get('operation')
  21. return self.validation(request.GET, request, operation)
  22. def post(self, request, *args, **kwargs):
  23. request.encoding = 'utf-8'
  24. operation = kwargs.get('operation')
  25. return self.validation(request.POST, request, operation)
  26. def validation(self, request_dict, request, operation):
  27. language = request_dict.get('language', 'en')
  28. response = ResponseObject(language, 'pc')
  29. if operation == 'upLoadFile':
  30. return self.upLoadFile(request, request_dict, response)
  31. else:
  32. tko = TokenObject(
  33. request.META.get('HTTP_AUTHORIZATION'),
  34. returntpye='pc')
  35. if tko.code != 0:
  36. return response.json(tko.code)
  37. response.lang = tko.lang
  38. userID = tko.userID
  39. if operation == 'getEquipmentVersionList':
  40. return self.getEquipmentVersionList(request_dict, response)
  41. elif operation == 'editVersionInformation':
  42. return self.editVersionInformation(request_dict, response)
  43. elif operation == 'deleteEquipmentVersion':
  44. return self.deleteEquipmentVersion(request_dict, response)
  45. elif operation == 'getAppVersionList':
  46. return self.getAppVersionList(request_dict, response)
  47. elif operation == 'addOrEditAppInfo':
  48. return self.addOrEditAppInfo(request_dict, response)
  49. elif operation == 'deleteAppVersion':
  50. return self.deleteAppVersion(request_dict, response)
  51. elif operation == 'getAppSet':
  52. return self.getAppSet(request_dict, response)
  53. elif operation == 'editAppSet':
  54. return self.editAppSet(request_dict, response)
  55. elif operation == 'getAppRecordList':
  56. return self.getAppRecordList(request_dict, response)
  57. elif operation == 'getAppBundleIdList':
  58. return self.getAppBundleIdList(request_dict, response)
  59. elif operation == 'addOrEditAppRecord':
  60. return self.addOrEditAppRecord(request_dict, response)
  61. elif operation == 'deleteAppRecord':
  62. return self.deleteAppRecord(request_dict, response)
  63. elif operation == 'getPcInfoList':
  64. return self.getPcInfoList(request_dict, response)
  65. elif operation == 'editPcVersion':
  66. return self.editPcVersion(request_dict, response)
  67. elif operation == 'deletePcInfo':
  68. return self.deletePcInfo(request_dict, response)
  69. else:
  70. return response.json(404)
  71. def getEquipmentVersionList(self, request_dict, response):
  72. mci = request_dict.get('mci', None)
  73. lang = request_dict.get('lang', None)
  74. version = request_dict.get('version', None)
  75. pageNo = request_dict.get('pageNo', None)
  76. pageSize = request_dict.get('pageSize', None)
  77. if not all([pageNo, pageSize]):
  78. return response.json(444)
  79. page = int(pageNo)
  80. line = int(pageSize)
  81. try:
  82. equipment_version_qs = Equipment_Version.objects.filter()
  83. if mci:
  84. equipment_version_qs = equipment_version_qs.filter(mci=mci)
  85. if lang:
  86. equipment_version_qs = equipment_version_qs.filter(lang=lang)
  87. if version:
  88. equipment_version_qs = equipment_version_qs.filter(version__contains=version)
  89. total = equipment_version_qs.count()
  90. equipment_version_qs = equipment_version_qs.values()[(page - 1) * line:page * line]
  91. equipment_version_list = CommonService.qs_to_list(equipment_version_qs)
  92. return response.json(0, {'list': equipment_version_list, 'total': total})
  93. except Exception as e:
  94. print(e)
  95. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  96. def upLoadFile(self, request, request_dict, response):
  97. file = request.FILES.get('file', None)
  98. mci = request_dict.get('mci', '')
  99. lang = request_dict.get('lang', '')
  100. ESN = request_dict.get('ESN', '')
  101. max_ver = request_dict.get('max_ver', '')
  102. channel = request_dict.get('channel', '')
  103. resolutionRatio = request_dict.get('resolutionRatio', '')
  104. Description = request_dict.get('Description', '')
  105. status = request_dict.get('status', 0)
  106. isPopup = request_dict.get('isPopup', 0)
  107. if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
  108. return response.json(444)
  109. try:
  110. with transaction.atomic():
  111. nowTime = CommonService.timestamp_to_str(timestamp=int(time.time()))
  112. channel = int(channel)
  113. resolutionRatio = int(resolutionRatio)
  114. status = int(status)
  115. isPopup = int(isPopup)
  116. # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
  117. # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
  118. # V1.7.2.36C11680X30411F000600000150001Z,软件版本:1.7.2,设备规格名称:36C11680X30411F000600000150001Z
  119. file_name = str(file) # 文件名
  120. # .img和.tar.gz文件
  121. file_type_index = file_name.find('.img')
  122. if file_type_index == -1:
  123. file_type_index = file_name.find('.tar')
  124. if file_type_index == -1:
  125. return response.json(903)
  126. version = file_name[:file_type_index] # 设备版本
  127. version_index = version.rindex('.')
  128. softwareVersion = version[1:version_index] # 软件版本
  129. code = version[version_index + 1:] # 设备规格名称
  130. chipModelList2Code = code[:4] # 主芯片
  131. type = code[8:10] # 设备机型
  132. companyCode = code[-1:] # 公司代码
  133. fileSize = file.size
  134. filePath = '/'.join(('static/otapack', mci, lang, file_name))
  135. file_data = file.read()
  136. fileMd5 = hashlib.md5(file_data).hexdigest()
  137. data_dict = {'mci': mci, 'lang': lang, 'ESN': ESN, 'max_ver': max_ver, 'channel': channel,
  138. 'resolutionRatio': resolutionRatio, 'Description': Description, 'status': status,
  139. 'is_popup': isPopup, 'version': version, 'softwareVersion': softwareVersion, 'code': code,
  140. 'chipModelList2Code': chipModelList2Code, 'type': type, 'companyCode': companyCode,
  141. 'fileSize': fileSize, 'filePath': filePath, 'fileMd5': fileMd5, 'update_time': nowTime}
  142. # Equipment_Version表创建或更新数据
  143. equipment_version_qs = Equipment_Version.objects.filter(code=code, lang=lang)
  144. if not equipment_version_qs.exists():
  145. Equipment_Version.objects.create(eid=CommonService.getUserID(getUser=False, setOTAID=True),
  146. **data_dict)
  147. else:
  148. equipment_version_qs.update(**data_dict)
  149. # 上传文件到服务器
  150. upload_path = '/'.join((BASE_DIR, 'static/otapack', mci, lang)).replace('\\', '/') + '/'
  151. if not os.path.exists(upload_path): # 上传目录不存在则创建
  152. os.makedirs(upload_path)
  153. # 文件上传
  154. full_name = upload_path + file_name
  155. if os.path.exists(full_name): # 删除同名文件
  156. os.remove(full_name)
  157. with open(full_name, 'wb+') as write_file:
  158. for chunk in file.chunks():
  159. write_file.write(chunk)
  160. LOGGER.info('versionManagement/upLoadFile成功上传{}'.format(file_name))
  161. return response.json(0)
  162. except Exception as e:
  163. LOGGER.info('versionManagement/upLoadFile接口异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  164. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  165. def editVersionInformation(self, request_dict, response):
  166. eid = request_dict.get('eid', None)
  167. ESN = request_dict.get('ESN', '')
  168. max_ver = request_dict.get('max_ver', '')
  169. status = request_dict.get('status', '')
  170. channel = request_dict.get('channel', '')
  171. resolutionRatio = request_dict.get('resolutionRatio', '')
  172. Description = request_dict.get('Description', '')
  173. is_popup = request_dict.get('is_popup', '')
  174. if not eid:
  175. return response.json(444)
  176. status = 1 if status == 'true' else 0
  177. try:
  178. equipment_version_qs = Equipment_Version.objects.filter(eid=eid)
  179. if not equipment_version_qs.exists():
  180. return response.json(173)
  181. data_dict = {'ESN': ESN, 'max_ver': max_ver, 'status': status, 'channel': channel,
  182. 'resolutionRatio': resolutionRatio, 'Description': Description, 'is_popup': is_popup}
  183. equipment_version_qs.update(**data_dict)
  184. return response.json(0)
  185. except Exception as e:
  186. print(e)
  187. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  188. def deleteEquipmentVersion(self, request_dict, response):
  189. eid = request_dict.get('eid', None)
  190. if not eid:
  191. return response.json(444)
  192. try:
  193. equipment_version_qs = Equipment_Version.objects.filter(eid=eid)
  194. filePath = equipment_version_qs.values('filePath')[0]['filePath']
  195. equipment_version_qs.delete()
  196. # 删除文件
  197. full_name = '/'.join((BASE_DIR, filePath)).replace('\\', '/')
  198. if os.path.exists(full_name):
  199. os.remove(full_name)
  200. return response.json(0)
  201. except Exception as e:
  202. print(e)
  203. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  204. def getAppVersionList(self, request_dict, response):
  205. app_type = request_dict.get('app_type', None)
  206. appName = request_dict.get('appName', None)
  207. version = request_dict.get('version', None)
  208. pageNo = request_dict.get('pageNo', None)
  209. pageSize = request_dict.get('pageSize', None)
  210. if not all([pageNo, pageSize]):
  211. return response.json(444)
  212. page = int(pageNo)
  213. line = int(pageSize)
  214. try:
  215. app_info_qs = App_Info.objects.filter()
  216. if app_type:
  217. if app_type == 'IOS':
  218. app_type = 1
  219. elif app_type == '安卓':
  220. app_type = 2
  221. else:
  222. app_type = 3
  223. app_info_qs = app_info_qs.filter(app_type=app_type)
  224. if appName:
  225. app_info_qs = app_info_qs.filter(appName__contains=appName)
  226. if version:
  227. app_info_qs = app_info_qs.filter(version__contains=version)
  228. total = app_info_qs.count()
  229. app_info_qs = app_info_qs.values()[(page - 1) * line:page * line]
  230. app_info_list = CommonService.qs_to_list(app_info_qs)
  231. return response.json(0, {'list': app_info_list, 'total': total})
  232. except Exception as e:
  233. print(e)
  234. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  235. def addOrEditAppInfo(self, request_dict, response):
  236. id = request_dict.get('id', None)
  237. appName = request_dict.get('appName', '')
  238. appBundleId = request_dict.get('appBundleId', '')
  239. bundleVersion = request_dict.get('bundleVersion', '')
  240. newAppversion = request_dict.get('newAppversion', '')
  241. minAppversion = request_dict.get('minAppversion', '')
  242. content = request_dict.get('content', '')
  243. app_type = request_dict.get('app_type', '')
  244. downloadLink = request_dict.get('downloadLink', '')
  245. try:
  246. app_type = int(app_type)
  247. data_dict = {'appName': appName, 'appBundleId': appBundleId, 'bundleVersion': bundleVersion,
  248. 'newAppversion': newAppversion, 'minAppversion': minAppversion, 'content': content,
  249. 'app_type': app_type, 'downloadLink': downloadLink}
  250. if not id: # 添加
  251. App_Info.objects.create(**data_dict)
  252. else: # 编辑
  253. app_info_qs = App_Info.objects.filter(id=id)
  254. if not app_info_qs.exists():
  255. return response.json(173)
  256. app_info_qs.update(**data_dict)
  257. return response.json(0)
  258. except Exception as e:
  259. print(e)
  260. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  261. def deleteAppVersion(self, request_dict, response):
  262. appBundleId = request_dict.get('appBundleId', None)
  263. if not appBundleId:
  264. return response.json(444)
  265. try:
  266. App_Info.objects.filter(appBundleId=appBundleId).delete()
  267. AppSetModel.objects.filter(appBundleId=appBundleId).delete()
  268. return response.json(0)
  269. except Exception as e:
  270. print(e)
  271. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  272. def getAppSet(self, request_dict, response):
  273. appBundleId = request_dict.get('appBundleId', None)
  274. if not appBundleId:
  275. return response.json(444)
  276. try:
  277. app_set_qs = AppSetModel.objects.filter(appBundleId=appBundleId).values('content')
  278. if app_set_qs.exists():
  279. content = app_set_qs[0]['content']
  280. return response.json(0, {'content': content})
  281. else:
  282. nowTime = int(time.time())
  283. AppSetModel.objects.create(
  284. appBundleId=appBundleId,
  285. addTime=nowTime,
  286. updTime=nowTime
  287. )
  288. return response.json(0)
  289. except Exception as e:
  290. print(e)
  291. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  292. def editAppSet(self, request_dict, response):
  293. appBundleId = request_dict.get('appBundleId', None)
  294. content = request_dict.get('content', None)
  295. if not all([appBundleId, content]):
  296. return response.json(444)
  297. try:
  298. AppSetModel.objects.filter(appBundleId=appBundleId).update(content=content)
  299. return response.json(0)
  300. except Exception as e:
  301. print(e)
  302. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  303. def getAppRecordList_1(self, request_dict, response):
  304. app_type = request_dict.get('app_type', 'IOS')
  305. pageNo = request_dict.get('pageNo', None)
  306. pageSize = request_dict.get('pageSize', None)
  307. if not all([pageNo, pageSize]):
  308. return response.json(444)
  309. page = int(pageNo)
  310. line = int(pageSize)
  311. try:
  312. if app_type:
  313. if app_type == 'IOS':
  314. app_type = 1
  315. elif app_type == '安卓':
  316. app_type = 2
  317. else:
  318. app_type = 3
  319. app_colophon_qs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list(
  320. 'app_id__appBundleId', flat=True).distinct()
  321. if not app_colophon_qs.exists():
  322. return response.json(173)
  323. total = app_colophon_qs.count()
  324. app_colophon_list = list(app_colophon_qs[(page - 1) * line:page * line])
  325. app_info_qs = App_Colophon.objects.filter(app_id__appBundleId__in=app_colophon_list). \
  326. values("id", "lang", "newApp_version", "content", "version_time", "app_id__appBundleId",
  327. "app_id__appName", "app_id__app_type")
  328. app_info_list = list(app_info_qs)
  329. data_dict = {}
  330. # 组装数据
  331. for app_info in app_info_list:
  332. for app_colophon in app_colophon_list:
  333. if app_colophon not in data_dict.keys():
  334. data_dict[app_colophon] = []
  335. if app_colophon == app_info['app_id__appBundleId']:
  336. data_dict[app_colophon].append(app_info)
  337. for k, v in enumerate(data_dict):
  338. new = sorted(data_dict[v], key=lambda x: x['id'], reverse=True)
  339. data_dict[v] = new
  340. res = {
  341. 'data_dict': data_dict,
  342. 'total': total
  343. }
  344. return response.json(0, res)
  345. except Exception as e:
  346. print(e)
  347. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  348. def getAppRecordList(self, request_dict, response):
  349. app_type = request_dict.get('appType', 'IOS')
  350. queryVersion = request_dict.get('queryVersion', None)
  351. queryAppBundleId = request_dict.get('queryAppBundleId', None)
  352. pageNo = request_dict.get('pageNo', None)
  353. pageSize = request_dict.get('pageSize', None)
  354. if not all([pageNo, pageSize]):
  355. return response.json(444)
  356. page = int(pageNo)
  357. line = int(pageSize)
  358. try:
  359. if app_type == 'IOS':
  360. app_type = 1
  361. elif app_type == '安卓':
  362. app_type = 2
  363. else:
  364. app_type = 3
  365. app_colophon_qs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list(
  366. 'app_id__appBundleId', flat=True).distinct()
  367. if not app_colophon_qs.exists():
  368. return response.json(173)
  369. total = app_colophon_qs.count()
  370. app_colophon_list = list(app_colophon_qs[(page - 1) * line:page * line])
  371. app_info_qs = App_Colophon.objects.filter(app_id__appBundleId__in=app_colophon_list). \
  372. values("id", "lang", "newApp_version", "content", "version_time", "app_id__appBundleId",
  373. "app_id__appName", "app_id__app_type")
  374. app_info_list = list(app_info_qs)
  375. app_record_list = [] # 响应的app record数据
  376. appBundleId_list = [] # 记录已添加过的appBundleId
  377. # 组装数据
  378. for app_info in app_info_list:
  379. version = app_info['lang'] + app_info['newApp_version']
  380. if app_info['app_id__appBundleId'] not in appBundleId_list:
  381. appBundleId_list.append(app_info['app_id__appBundleId'])
  382. newApp_version_list = [[app_info['lang'], app_info['newApp_version']]]
  383. app_record_dict = {
  384. 'app_id__appBundleId': app_info['app_id__appBundleId'],
  385. 'app_id__appName': app_info['app_id__appName'],
  386. 'app_id__app_type': app_info['app_id__app_type'],
  387. 'version': version,
  388. 'newApp_version_list': newApp_version_list,
  389. 'id': app_info['id'],
  390. 'content': app_info['content'],
  391. 'version_time': time.strftime("%Y-%m-%d", time.localtime(app_info['version_time'])),
  392. }
  393. if queryVersion and queryVersion == version and queryAppBundleId == app_info['app_id__appBundleId']:
  394. app_record_dict['id'] = app_info['id']
  395. app_record_dict['content'] = app_info['content']
  396. app_record_dict['version_time'] = time.strftime("%Y-%m-%d",
  397. time.localtime(app_info['version_time']))
  398. app_record_list.append(app_record_dict)
  399. else:
  400. index = appBundleId_list.index(app_info['app_id__appBundleId'])
  401. newApp_version_list = [app_info['lang'], app_info['newApp_version']]
  402. if queryVersion and queryVersion == version and queryAppBundleId == app_info['app_id__appBundleId']:
  403. # app_record_list里对应字典插入值
  404. app_record_list[index]['id'] = app_info['id']
  405. app_record_list[index]['content'] = app_info['content']
  406. app_record_list[index]['version_time'] = time.strftime("%Y-%m-%d",
  407. time.localtime(app_info['version_time']))
  408. app_record_list[index]['version'] = version
  409. app_record_list[index]['newApp_version_list'].insert(0, newApp_version_list)
  410. else:
  411. app_record_list[index]['newApp_version_list'].append(newApp_version_list)
  412. res = {
  413. 'app_record_list': app_record_list,
  414. 'total': total
  415. }
  416. return response.json(0, res)
  417. except Exception as e:
  418. print(e)
  419. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  420. def getAppBundleIdList(self, request_dict, response):
  421. print('request_dict:', request_dict)
  422. app_type = request_dict.get('appType', 'IOS')
  423. try:
  424. if app_type == 'IOS':
  425. app_type = 1
  426. elif app_type == '安卓':
  427. app_type = 2
  428. else:
  429. app_type = 3
  430. app_info_qs = App_Info.objects.filter(app_type=app_type).values('id', 'appBundleId')
  431. appBundleIdList = list(app_info_qs)
  432. return response.json(0, {'appBundleIdList': appBundleIdList})
  433. except Exception as e:
  434. print(e)
  435. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  436. def addOrEditAppRecord(self, request_dict, response):
  437. print('request_dict:', request_dict)
  438. appBundleId = request_dict.get('app_id__appBundleId', None)
  439. newApp_version = request_dict.get('version', None)
  440. version_time = request_dict.get('version_time', None)
  441. cn_content = request_dict.get('cnContent', None)
  442. en_content = request_dict.get('enContent', None)
  443. content = request_dict.get('content', None)
  444. app_colophon_id = request_dict.get('id', None)
  445. if not all([appBundleId, newApp_version, version_time]):
  446. return response.json(444)
  447. try:
  448. version_time = int(time.mktime(time.strptime(version_time, '%Y-%m-%d'))) # 字符串转时间戳
  449. if app_colophon_id: # 编辑
  450. # 编辑获取的版本信息前两位为语言
  451. lang = newApp_version[:2]
  452. newApp_version = newApp_version[2:]
  453. App_Colophon.objects.filter(id=app_colophon_id).update(lang=lang, newApp_version=newApp_version,
  454. content=content, version_time=version_time)
  455. else: # 添加
  456. app_info_qs = App_Info.objects.filter(appBundleId=appBundleId).values('id')
  457. if not app_info_qs.exists():
  458. return response.json(173)
  459. data_dict = {
  460. 'app_id_id': app_info_qs[0]['id'],
  461. 'newApp_version': newApp_version,
  462. 'version_time': version_time,
  463. 'lang': 'cn',
  464. 'content': cn_content,
  465. }
  466. with transaction.atomic():
  467. # 创建中文内容数据
  468. App_Colophon.objects.create(**data_dict)
  469. # 创建英文内容数据
  470. data_dict['lang'] = 'en'
  471. data_dict['content'] = en_content
  472. App_Colophon.objects.create(**data_dict)
  473. return response.json(0)
  474. except Exception as e:
  475. print(e)
  476. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  477. def deleteAppRecord(self, request_dict, response):
  478. print('request_dict:', request_dict)
  479. app_colophon_id = request_dict.get('app_colophon_id', None)
  480. try:
  481. if not app_colophon_id:
  482. return response.json(444)
  483. app_colophon_qs = App_Colophon.objects.filter(id=app_colophon_id)
  484. if not app_colophon_qs.exists():
  485. return response.json(173)
  486. app_colophon_qs.delete()
  487. return response.json(0)
  488. except Exception as e:
  489. print(e)
  490. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  491. def getPcInfoList(self, request_dict, response):
  492. print('request_dict:', request_dict)
  493. pc_name = request_dict.get('pcName', None)
  494. pageNo = request_dict.get('pageNo', None)
  495. pageSize = request_dict.get('pageSize', None)
  496. if not all([pageNo, pageSize]):
  497. return response.json(444)
  498. page = int(pageNo)
  499. line = int(pageSize)
  500. try:
  501. pc_info_qs = Pc_Info.objects.filter()
  502. if pc_name:
  503. pc_info_qs = Pc_Info.objects.filter(pc_name__contains=pc_name)
  504. if not pc_info_qs.exists():
  505. return response.json(173)
  506. total = pc_info_qs.count()
  507. pc_info_qs = pc_info_qs.values()[(page - 1) * line:page * line]
  508. pc_info_list = CommonService.qs_to_list(pc_info_qs)
  509. return response.json(0, {'list': pc_info_list, 'total': total})
  510. except Exception as e:
  511. print(e)
  512. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  513. def editPcVersion(self, request_dict, response):
  514. pc_info_id = request_dict.get('id', None)
  515. pc_name = request_dict.get('pc_name', '')
  516. bundle_version = request_dict.get('bundle_version', '')
  517. pc_version = request_dict.get('pc_version', '')
  518. pc_test = request_dict.get('pc_test', '')
  519. lang = request_dict.get('lang', '')
  520. file_type = request_dict.get('file_type', '')
  521. package = request_dict.get('package', '')
  522. explain = request_dict.get('explain', '')
  523. is_update = request_dict.get('is_update', '')
  524. is_open = request_dict.get('is_open', '')
  525. content = request_dict.get('content', '')
  526. authority = request_dict.get('authority', '')
  527. download_link = request_dict.get('download_link', '')
  528. if not pc_info_id:
  529. return response.json(444)
  530. try:
  531. pc_info_qs = Pc_Info.objects.filter(id=pc_info_id)
  532. if not pc_info_qs.exists():
  533. return response.json(173)
  534. data_dict = {
  535. 'pc_name': pc_name,
  536. 'bundle_version': bundle_version,
  537. 'pc_version': pc_version,
  538. 'pc_test': pc_test,
  539. 'lang': lang,
  540. 'file_type': file_type,
  541. 'package': package,
  542. 'explain': explain,
  543. 'is_update': is_update,
  544. 'is_open': is_open,
  545. 'content': content,
  546. 'authority': authority,
  547. 'download_link': download_link,
  548. }
  549. pc_info_qs.update(**data_dict)
  550. return response.json(0)
  551. except Exception as e:
  552. print(e)
  553. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  554. def deletePcInfo(self, request_dict, response):
  555. print('request_dict:', request_dict)
  556. pc_info_id = request_dict.get('id', None)
  557. try:
  558. if not pc_info_id:
  559. return response.json(444)
  560. pc_info_qs = Pc_Info.objects.filter(id=pc_info_id)
  561. if not pc_info_qs.exists():
  562. return response.json(173)
  563. # 删除存储桶的文件
  564. Key = pc_info_qs.values('download_link')[0]['download_link']
  565. pc_info_qs.delete()
  566. aws_s3_client = boto3.client(
  567. 's3',
  568. region_name='cn-northwest-1',
  569. aws_access_key_id=AWS_ACCESS_KEY_ID[0],
  570. aws_secret_access_key=AWS_SECRET_ACCESS_KEY[0],
  571. config=botocore.client.Config(signature_version='s3v4'),
  572. )
  573. try:
  574. aws_s3_client.delete_object(Bucket='pc-package', Key=Key)
  575. finally:
  576. return response.json(0)
  577. except Exception as e:
  578. print(e)
  579. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))