DeviceManagementController.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. import oss2
  6. from django.db import transaction
  7. from django.db.models import Q, F
  8. from django.views.generic.base import View
  9. from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
  10. AWS_SES_ACCESS_REGION
  11. from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
  12. VodHlsModel, ExperienceContextModel, DeviceTypeModel, Equipment_Info, UidUserModel, ExperienceAiModel, AiService, \
  13. AppBundle, App_Info, AppDeviceType, DeviceNameLanguage
  14. from Object.AWS.AmazonS3Util import AmazonS3Util
  15. from Object.ResponseObject import ResponseObject
  16. from Object.TokenObject import TokenObject
  17. from Service.CommonService import CommonService
  18. from Service.EquipmentInfoService import EquipmentInfoService
  19. from Service.ModelService import ModelService
  20. class DeviceManagement(View):
  21. def get(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. return self.validation(request.GET, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. operation = kwargs.get('operation')
  28. return self.validation(request.POST, request, operation)
  29. def validation(self, request_dict, request, operation):
  30. language = request_dict.get('language', 'en')
  31. response = ResponseObject(language, 'pc')
  32. if operation == 'addDeviceType':
  33. return self.addDeviceType(request, request_dict, response)
  34. elif operation == 'delDeviceData': # 删除设备数据
  35. return self.del_device_data(request_dict, response)
  36. elif operation == 'getDeviceIcon': # app获取设备图标
  37. response = ResponseObject(language)
  38. return self.get_device_icon(request_dict, response)
  39. else:
  40. tko = TokenObject(
  41. request.META.get('HTTP_AUTHORIZATION'),
  42. returntpye='pc')
  43. if tko.code != 0:
  44. return response.json(tko.code)
  45. response.lang = tko.lang
  46. userID = tko.userID
  47. if not userID:
  48. return response.json(444, 'userID')
  49. if operation == 'getDeviceInfoList': # 获取设备信息数据
  50. return self.get_device_info_list(request_dict, response)
  51. elif operation == 'deleteDevice':
  52. return self.deleteDevice(request_dict, response)
  53. elif operation == 'resetVod': # 重置云存
  54. return self.resetVod(request, request_dict, response)
  55. elif operation == 'resetAi': # 重置AI
  56. return self.reset_ai(request, request_dict, response)
  57. elif operation == 'resetPrimaryUser':
  58. return self.resetPrimaryUser(request, request_dict, response)
  59. elif operation == 'getDeviceTypeList':
  60. return self.getDeviceTypeList(request_dict, response)
  61. elif operation == 'deleteDeviceType':
  62. return self.deleteDeviceType(request_dict, response)
  63. elif operation == 'getAppDeviceTypeList': # 获取app设备类型数据
  64. return self.get_app_device_type_list(request_dict, response)
  65. elif operation == 'getAppBundleIdList': # 获取app包id数据
  66. return self.get_app_bundle_id_list(response)
  67. elif operation == 'editAppDeviceType': # 编辑app设备类型数据
  68. return self.edit_app_device_type(request_dict, response)
  69. elif operation == 'deleteAppDeviceType': # 删除app设备类型数据
  70. return self.delete_app_device_type(request_dict, response)
  71. elif operation == 'addAppDeviceType': # 添加app设备类型数据
  72. return self.add_app_device_type(request_dict, response)
  73. elif operation == 'getAppBundle': # 获取app版本包
  74. return self.get_app_bundle(response)
  75. elif operation == 'upFile':
  76. return self.up_file(request_dict, request, response)
  77. else:
  78. return response.json(444, 'operation')
  79. @classmethod
  80. def up_file(cls, request_dict, request, response):
  81. file = request.FILES.get('iconFile', None)
  82. name = file.name
  83. if not all([file]):
  84. return response.json(444)
  85. try:
  86. file_key = 'app/device_type_images/{}'.format(name)
  87. s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[1], AWS_SECRET_ACCESS_KEY[1], AWS_SES_ACCESS_REGION)
  88. # 存储桶
  89. bucket = 'ansjerfilemanager'
  90. # 地址:https://ansjerfilemanager.s3.amazonaws.com/app/device_type_images/camera_c190.png
  91. s3.upload_file_obj(bucket, file_key, file, {'ContentType': file.content_type, 'ACL':'public-read'})
  92. return response.json(0)
  93. except Exception as e:
  94. print(e)
  95. return response.json(500, repr(e))
  96. @classmethod
  97. def get_app_bundle(cls, response):
  98. app_bundle_qs = AppBundle.objects.all().values('id', 'app_bundle_id')
  99. if not app_bundle_qs.exists():
  100. return response.json(444)
  101. try:
  102. app_bundle_list = []
  103. for app_bundle in app_bundle_qs:
  104. app_bundle_qs.exists()
  105. app_bundle_list.append(app_bundle)
  106. return response.json(0, app_bundle_list)
  107. except Exception as e:
  108. return response.json(500, e)
  109. @staticmethod
  110. def add_app_device_type(request_dict, response):
  111. # 添加APP设备类型
  112. app_bundle_name = request_dict.get('appbundleName', None)
  113. app_bundle_id = request_dict.get(
  114. 'app_bundle_id', '')[
  115. 1:-1].split(',') # '[1,2]' -> ['1','2']
  116. # app_device_type表数据
  117. model = request_dict.get('model', None)
  118. type = request_dict.get('type', None)
  119. icon = request_dict.get('icon', None)
  120. # device_name_language表数据
  121. lang = request_dict.get('lang', None)
  122. name = request_dict.get('name', None)
  123. sort = request_dict.get('sort', None)
  124. if not all([model, type, icon, lang, name, sort]):
  125. return response.json(444)
  126. type = int(type)
  127. try:
  128. with transaction.atomic():
  129. for app_id in app_bundle_id:
  130. app_bundle_qs = AppBundle.objects.filter(id=app_id).values('id')
  131. if not app_bundle_qs.exists():
  132. AppBundle.objects.create(app_bundle_id=app_bundle_name, id=app_id)
  133. return response.json(0)
  134. app_device_type_qs = AppDeviceType.objects.create(model=model, type=type, icon=icon)
  135. DeviceNameLanguage.objects.create(lang=lang, name=name, sort=sort,
  136. app_device_type_id=app_device_type_qs.id)
  137. for app_id in app_bundle_id:
  138. app_bundle_qs = AppBundle.objects.filter(id=app_id).values('id')
  139. app_bundle_qs = app_bundle_qs[0]['id']
  140. app_device_type_qs.appbundle_set.add(app_bundle_qs)
  141. return response.json(0)
  142. except Exception as e:
  143. print(e)
  144. return response.json(500, repr(e))
  145. @staticmethod
  146. def get_device_info_list(request_dict, response):
  147. pageNo = request_dict.get('pageNo', None)
  148. pageSize = request_dict.get('pageSize', None)
  149. UID = request_dict.get('UID', None)
  150. serialNumber = request_dict.get('serialNumber', None)
  151. NickName = request_dict.get('NickName', None)
  152. username = request_dict.get('username', None)
  153. if not all([pageNo, pageSize]):
  154. return response.json(444)
  155. page = int(pageNo)
  156. line = int(pageSize)
  157. try:
  158. if UID or serialNumber or NickName or username: # 条件查询
  159. if UID:
  160. device_info_qs = Device_Info.objects.filter(UID__contains=UID)
  161. if serialNumber:
  162. device_info_qs = Device_Info.objects.filter(serial_number__contains=serialNumber)
  163. if NickName:
  164. device_info_qs = Device_Info.objects.filter(NickName__contains=NickName)
  165. if username:
  166. device_info_qs = Device_Info.objects.filter(Q(userID__username__contains=username) |
  167. Q(userID__userEmail__contains=username) |
  168. Q(userID__phone__contains=username))
  169. total = device_info_qs.count()
  170. if not total:
  171. return response.json(0, {'list': {}, 'total': 0})
  172. device_info_qs = device_info_qs[(page - 1) * line:page * line]
  173. else: # 查询全部
  174. total = Device_Info.objects.filter().count()
  175. device_info_qs = Device_Info.objects.filter()[(page - 1) * line:page * line]
  176. if not device_info_qs.exists():
  177. return response.json(0, {'list': {}, 'total': 0})
  178. device_info_list = CommonService.qs_to_dict(device_info_qs)
  179. for k, v in enumerate(device_info_list["datas"]):
  180. for device_info in device_info_qs:
  181. if v['pk'] == device_info.id:
  182. # 设备的用户名和主用户
  183. username = ModelService.get_user_name(device_info_list["datas"][k]['fields']['userID'])
  184. device_info_list["datas"][k]['fields']['username'] = username
  185. device_info_list["datas"][k]['fields']['vodPrimaryMaster'] = \
  186. device_info_list["datas"][k]['fields']['vodPrimaryMaster']
  187. # 设备类型,是否支持Alexa和ip
  188. type = device_info_list["datas"][k]['fields']['Type']
  189. device_type_qs = DeviceTypeModel.objects.filter(type=type).values('name')
  190. if device_type_qs.exists():
  191. device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
  192. uid_set_qs = UidSetModel.objects.filter(
  193. uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip', 'version')
  194. if uid_set_qs.exists():
  195. isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
  196. device_info_list["datas"][k]['fields']['isAlexa'] = isAlexa
  197. device_info_list["datas"][k]['fields']['ip'] = uid_set_qs[0]['ip']
  198. device_info_list["datas"][k]['fields']['version'] = uid_set_qs[0]['version']
  199. return response.json(0, {'list': device_info_list, 'total': total})
  200. except Exception as e:
  201. print(e)
  202. return response.json(500, repr(e))
  203. # 根据id删除设备
  204. def deleteDevice(self, request_dict, response):
  205. deviceID = request_dict.get('deviceID', None)
  206. userID = request_dict.get('userID', None)
  207. uid = request_dict.get('uid', None)
  208. if not all([deviceID, userID, uid]):
  209. return response.json(444)
  210. try:
  211. with transaction.atomic():
  212. Device_Info.objects.filter(id=deviceID).delete()
  213. # 删除推送消息
  214. for val in range(1, 8):
  215. EquipmentInfoService.get_equipment_info_model('', val). \
  216. filter(device_user_id=userID, device_uid=uid).delete()
  217. return response.json(0)
  218. except Exception as e:
  219. print(e)
  220. return response.json(500, repr(e))
  221. # 重置设备主用户
  222. def resetPrimaryUser(self, request, request_dict, response):
  223. uid = request_dict.get('uid', None)
  224. if not uid:
  225. return response.json(404)
  226. try:
  227. # 记录操作日志
  228. ip = CommonService.get_ip_address(request)
  229. content = json.loads(json.dumps(request_dict))
  230. log = {
  231. 'ip': ip,
  232. 'user_id': 2,
  233. 'status': 200,
  234. 'time': int(time.time()),
  235. 'url': 'deviceManagement/resetPrimaryUser',
  236. 'content': json.dumps(content),
  237. 'operation': '{}重置设备主用户'.format(uid),
  238. }
  239. LogModel.objects.create(**log)
  240. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  241. return response.json(0)
  242. except Exception as e:
  243. return response.json(500, repr(e))
  244. # 重置设备云存
  245. def resetVod(self, request, request_dict, response):
  246. uid = request_dict.get('uid', None)
  247. if not uid:
  248. return response.json(444)
  249. try:
  250. # 记录操作日志
  251. ip = CommonService.get_ip_address(request)
  252. content = json.loads(json.dumps(request_dict))
  253. log = {
  254. 'ip': ip,
  255. 'user_id': 2,
  256. 'status': 200,
  257. 'time': int(time.time()),
  258. 'url': 'deviceManagement/resetVod',
  259. 'content': json.dumps(content),
  260. 'operation': '{}重置云存'.format(uid),
  261. }
  262. with transaction.atomic():
  263. LogModel.objects.create(**log)
  264. # 删除和更新设备云存相关数据
  265. UID_Bucket.objects.filter(uid=uid).delete()
  266. Unused_Uid_Meal.objects.filter(uid=uid).delete()
  267. Order_Model.objects.filter(UID=uid, order_type=0).delete()
  268. StsCrdModel.objects.filter(uid=uid).delete()
  269. VodHlsModel.objects.filter(uid=uid).delete()
  270. ExperienceContextModel.objects.filter(uid=uid).delete()
  271. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  272. return response.json(0)
  273. except Exception as e:
  274. print(e)
  275. return response.json(500, repr(e))
  276. @staticmethod
  277. def reset_ai(request, request_dict, response):
  278. uid = request_dict.get('uid', None)
  279. if not uid:
  280. return response.json(444)
  281. try:
  282. # 记录操作日志
  283. ip = CommonService.get_ip_address(request)
  284. content = json.loads(json.dumps(request_dict))
  285. log = {
  286. 'ip': ip,
  287. 'user_id': 2,
  288. 'status': 200,
  289. 'time': int(time.time()),
  290. 'url': 'deviceManagement/resetAi',
  291. 'content': json.dumps(content),
  292. 'operation': '{}重置AI'.format(uid),
  293. }
  294. with transaction.atomic():
  295. LogModel.objects.create(**log)
  296. # 删除和更新设备AI相关数据
  297. ExperienceAiModel.objects.filter(uid=uid).delete()
  298. AiService.objects.filter(uid=uid).delete()
  299. return response.json(0)
  300. except Exception as e:
  301. print(e)
  302. return response.json(500, repr(e))
  303. # 获取设备类型数据
  304. def getDeviceTypeList(self, request_dict, response):
  305. name = request_dict.get('name', None)
  306. pageNo = request_dict.get('pageNo', None)
  307. pageSize = request_dict.get('pageSize', None)
  308. if not all([pageNo, pageSize]):
  309. return response.json(444)
  310. page = int(pageNo)
  311. line = int(pageSize)
  312. try:
  313. if name:
  314. device_type_qs = DeviceTypeModel.objects.filter(name__contains=name).values()
  315. total = len(device_type_qs)
  316. else:
  317. device_type_qs = DeviceTypeModel.objects.filter().values()[(page - 1) * line:page * line]
  318. total = DeviceTypeModel.objects.filter().count()
  319. if not device_type_qs.exists():
  320. return response.json(173)
  321. device_type_list = []
  322. for device_type in device_type_qs:
  323. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  324. bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
  325. icon = device_type['icon']
  326. url = 'device_type/' + icon
  327. device_type['icon'] = bucket.sign_url('GET', url, 3600)
  328. device_type_list.append(device_type)
  329. return response.json(0, {'list': device_type_list, 'total': total})
  330. except Exception as e:
  331. print(e)
  332. return response.json(500, repr(e))
  333. # 删除设备类型
  334. def deleteDeviceType(self, request_dict, response):
  335. deviceTypeID = request_dict.get('deviceTypeID', None)
  336. if not deviceTypeID:
  337. return response.json(444)
  338. try:
  339. DeviceTypeModel.objects.filter(id=deviceTypeID).delete()
  340. return response.json(0)
  341. except Exception as e:
  342. print(e)
  343. return response.json(500, repr(e))
  344. # 添加设备类型
  345. def addDeviceType(self, request, request_dict, response):
  346. iconFile = request.FILES.get('iconFile', None)
  347. name = request_dict.get('name', None)
  348. model = request_dict.get('model', None)
  349. type = request_dict.get('type', None)
  350. ptz_type = request_dict.get('ptz_type', None)
  351. if not all([iconFile, name, model, type, ptz_type]):
  352. return response.json(444)
  353. try:
  354. model = int(model)
  355. ptz_type = int(ptz_type)
  356. icon = iconFile.name
  357. now_time = int(time.time())
  358. # 上传文件到阿里云OSS
  359. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  360. bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
  361. key = 'device_type/' + icon # 图片文件存放于 device_type 目录下
  362. # https://oss.console.aliyun.com/bucket/oss-cn-shenzhen/ansjer-static-resources/object?path=device_type%2F
  363. bucket.put_object(key=key, data=iconFile)
  364. DeviceTypeModel.objects.create(name=name, model=model, type=type, ptz_type=ptz_type, icon=icon,
  365. add_time=now_time, update_time=now_time)
  366. return response.json(0)
  367. except Exception as e:
  368. print(e)
  369. return response.json(500, repr(e))
  370. @staticmethod
  371. def del_device_data(request_dict, response):
  372. uidList = request_dict.get('uidList', None)
  373. delDataOptions = request_dict.get('delDataOptions', None)
  374. if not all([uidList, delDataOptions]):
  375. return response.json(444)
  376. try:
  377. with transaction.atomic():
  378. uidList = uidList.splitlines() # 按行('\r', '\r\n', \n')切割字符串返回列表
  379. # 根据删除项删除相关数据
  380. if '设备信息数据' in delDataOptions:
  381. Device_Info.objects.filter(UID__in=uidList).delete()
  382. if '设备配置数据' in delDataOptions:
  383. UidSetModel.objects.filter(uid__in=uidList).delete()
  384. if '设备推送数据' in delDataOptions:
  385. Equipment_Info.objects.filter(devUid__in=uidList).delete()
  386. if '设备AP信息数据' in delDataOptions:
  387. UidUserModel.objects.filter(UID__in=uidList).delete()
  388. if '设备AI数据' in delDataOptions:
  389. ExperienceAiModel.objects.filter(uid__in=uidList).delete()
  390. Order_Model.objects.filter(UID__in=uidList, order_type=1).delete()
  391. if '设备云存数据' in delDataOptions:
  392. UID_Bucket.objects.filter(uid__in=uidList).delete()
  393. StsCrdModel.objects.filter(uid__in=uidList).delete()
  394. VodHlsModel.objects.filter(uid__in=uidList).delete()
  395. Unused_Uid_Meal.objects.filter(uid__in=uidList).delete()
  396. ExperienceContextModel.objects.filter(uid__in=uidList).delete()
  397. Order_Model.objects.filter(UID__in=uidList, order_type=0).delete()
  398. Device_Info.objects.filter(UID__in=uidList).update(vodPrimaryUserID='', vodPrimaryMaster='')
  399. return response.json(0)
  400. except Exception as e:
  401. print(e)
  402. return response.json(500, repr(e))
  403. @staticmethod
  404. def get_device_icon(request_dict, response):
  405. lang = request_dict.get('lang', None)
  406. app_bundle_id = request_dict.get('appBundleId', None)
  407. if not all([lang, app_bundle_id]):
  408. return response.json(444)
  409. try:
  410. app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
  411. app_device_type__devicenamelanguage__lang=lang).annotate(
  412. model=F('app_device_type__model'), type=F('app_device_type__type'), icon=F('app_device_type__icon'),
  413. name=F('app_device_type__devicenamelanguage__name'),
  414. sort=F('app_device_type__devicenamelanguage__sort')).order_by(
  415. 'app_device_type__devicenamelanguage__sort').values('model', 'type', 'icon', 'name', 'sort')
  416. dvr_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 1]
  417. ipc_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 2]
  418. print(dvr_list, ipc_list)
  419. res = {
  420. 'deviceDvr': dvr_list,
  421. 'deviceIpc': ipc_list,
  422. }
  423. return response.json(0, res)
  424. except Exception as e:
  425. print(e)
  426. return response.json(500, repr(e))
  427. @staticmethod
  428. def get_app_device_type_list(request_dict, response):
  429. app_bundle_id = request_dict.get('app_bundle_id', None)
  430. lang = request_dict.get('lang', 'cn')
  431. model = request_dict.get('model', None)
  432. type = request_dict.get('type', None)
  433. name = request_dict.get('name', None)
  434. pageNo = request_dict.get('pageNo', None)
  435. pageSize = request_dict.get('pageSize', None)
  436. if not all([pageNo, pageSize]):
  437. return response.json(444)
  438. page = int(pageNo)
  439. line = int(pageSize)
  440. try:
  441. if not app_bundle_id:
  442. app_bundle_id = 'com.ansjer.zccloud'
  443. app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id)
  444. if lang:
  445. app_bundle_qs = app_bundle_qs.filter(app_device_type__devicenamelanguage__lang=lang)
  446. app_bundle_qs = app_bundle_qs.annotate(
  447. model=F('app_device_type__model'), type=F('app_device_type__type'), icon=F('app_device_type__icon'),
  448. lang=F('app_device_type__devicenamelanguage__lang'),
  449. name=F('app_device_type__devicenamelanguage__name'),
  450. sort=F('app_device_type__devicenamelanguage__sort')).values('id', 'app_device_type__id', 'model',
  451. 'type', 'icon',
  452. 'app_device_type__devicenamelanguage__id',
  453. 'lang', 'name', 'sort').order_by(
  454. 'app_device_type__devicenamelanguage__sort')
  455. if not app_bundle_qs.exists():
  456. return response.json(0)
  457. app_bundle_qs = app_bundle_qs.all()
  458. if name:
  459. app_bundle_qs = app_bundle_qs.filter(name=name)
  460. if model:
  461. app_bundle_qs = app_bundle_qs.filter(model=model)
  462. if type:
  463. app_bundle_qs = app_bundle_qs.filter(type=type)
  464. total = app_bundle_qs.count()
  465. app_bundle_qs = app_bundle_qs[(page - 1) * line:page * line]
  466. app_device_type_list = [app_bundle for app_bundle in app_bundle_qs]
  467. return response.json(0, {'list': app_device_type_list, 'total': total})
  468. except Exception as e:
  469. print(e)
  470. return response.json(500, repr(e))
  471. @staticmethod
  472. def get_app_bundle_id_list(response):
  473. try:
  474. app_info_qs = App_Info.objects.filter().values('id', 'appBundleId', 'appName')
  475. appBundleIdList = list(app_info_qs)
  476. return response.json(0, {'list': appBundleIdList})
  477. except Exception as e:
  478. print(e)
  479. return response.json(500, repr(e))
  480. @staticmethod
  481. def edit_app_device_type(request_dict, response):
  482. # app_device_type表数据
  483. app_device_type_id = request_dict.get('app_device_type__id', None)
  484. model = request_dict.get('model', None)
  485. type = request_dict.get('type', None)
  486. icon = request_dict.get('icon', None)
  487. # device_name_language表数据
  488. device_name_language_id = request_dict.get('app_device_type__devicenamelanguage__id', None)
  489. lang = request_dict.get('lang', None)
  490. name = request_dict.get('name', None)
  491. sort = request_dict.get('sort', None)
  492. if not all([app_device_type_id, model, type, icon, device_name_language_id, lang, name, sort]):
  493. return response.json(444)
  494. try:
  495. with transaction.atomic():
  496. AppDeviceType.objects.filter(id=app_device_type_id).update(model=model, type=type, icon=icon)
  497. DeviceNameLanguage.objects.filter(id=device_name_language_id).update(lang=lang, name=name, sort=sort)
  498. return response.json(0)
  499. except Exception as e:
  500. print(e)
  501. return response.json(500, repr(e))
  502. @staticmethod
  503. def delete_app_device_type(request_dict, response):
  504. app_bundle_id = request_dict.get('appBundleId', None)
  505. app_device_type_id = request_dict.get('appDeviceTypeId', None)
  506. if not all([app_bundle_id, app_device_type_id]):
  507. return response.json(444)
  508. try:
  509. app_bundle_qs = AppBundle.objects.get(id=app_bundle_id)
  510. app_device_type_qs = AppDeviceType.objects.filter(id=app_device_type_id)
  511. app_bundle_qs.app_device_type.remove(*app_device_type_qs)
  512. return response.json(0)
  513. except Exception as e:
  514. print(e)
  515. return response.json(500, repr(e))