DeviceManagementController.py 26 KB

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