EquipmentFamilyController.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : EquipmentFamilyController.py
  4. @Time : 2022/5/13 15:50
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import time
  10. import oss2
  11. from django.db import transaction
  12. from django.db.models import Q
  13. from django.views.generic.base import View
  14. from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
  15. from Controller.DeviceConfirmRegion import Device_Region
  16. from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
  17. iotdeviceInfoModel, UIDModel, Device_User, LoocamUserFamily, LoocamFamilyMember, LoocamFamilyMemberPermission, \
  18. LoocamFamilyRoomDevice, LoocamFamilyRoom
  19. from Object.ResponseObject import ResponseObject
  20. from Object.TokenObject import TokenObject
  21. from Service.CommonService import CommonService
  22. # 家庭设备管理
  23. class EquipmentFamilyView(View):
  24. def get(self, request, *args, **kwargs):
  25. request.encoding = 'utf-8'
  26. operation = kwargs.get('operation')
  27. return self.validation(request.GET, request, operation)
  28. def post(self, request, *args, **kwargs):
  29. request.encoding = 'utf-8'
  30. operation = kwargs.get('operation')
  31. return self.validation(request.POST, request, operation)
  32. def validation(self, request_dict, request, operation):
  33. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  34. lang = request_dict.get('lang', None)
  35. if lang:
  36. response = ResponseObject(lang)
  37. else:
  38. response = ResponseObject(token.lang) if token.lang else ResponseObject()
  39. if token.code != 0:
  40. return response.json(token.code)
  41. user_id = token.userID
  42. # 手机端添加设备,查询,修改
  43. if operation == 'add':
  44. return self.do_save(user_id, request_dict, response, request)
  45. if operation == 'page':
  46. return self.do_device_page(user_id, request_dict, response)
  47. if operation == 'query':
  48. return self.do_device_query(user_id, request_dict, response)
  49. if operation == 'family-list':
  50. return self.get_family_list(user_id, request_dict, response)
  51. if operation == 'room-list':
  52. return self.get_family_room_list(request_dict, response)
  53. if operation == 'room-save':
  54. return self.room_save(request_dict, response)
  55. if operation == 'room-sort':
  56. return self.room_sort_save(request_dict, response)
  57. else:
  58. return response.json(414)
  59. @classmethod
  60. def do_save(cls, user_id, request_dict, response, request):
  61. """
  62. 添加设备
  63. @param request:
  64. @param user_id:
  65. @param request_dict:
  66. @param response:
  67. @return:
  68. """
  69. nick_name = request_dict.get('nickName', None)
  70. serial_number = request_dict.get('serialNumber', None)
  71. device_type = request_dict.get('deviceType', None)
  72. # type 可能为0
  73. if not all([nick_name, serial_number, device_type]):
  74. return response.json(444, {'param': 'nick_name, serial_number, device_type'})
  75. device_info_qs = Device_Info.objects.filter(serial_number=serial_number, userID_id=user_id)
  76. if device_info_qs:
  77. # 判断设备是否已存在
  78. if device_info_qs[0].isExist == 1:
  79. return response.json(174)
  80. else:
  81. device_info_qs.delete()
  82. try:
  83. with transaction.atomic():
  84. # 格式化后的日期时间
  85. now_time = CommonService.timestamp_to_str(int(time.time()))
  86. device_id = CommonService.getUserID(getUser=False)
  87. Device_Info.objects.create(id=device_id, userID_id=user_id, NickName=nick_name,
  88. Type=device_type,
  89. UID=serial_number,
  90. serial_number=serial_number, data_joined=now_time,
  91. update_time=now_time)
  92. # 判断是否有用户绑定
  93. us_qs = UidSetModel.objects.filter(uid=serial_number)
  94. if not us_qs:
  95. n_time = int(time.time())
  96. ip = CommonService.get_ip_address(request)
  97. region_id = Device_Region().get_device_region(ip)
  98. region_alexa = 'CN' if region_id == 1 else 'ALL'
  99. uid_set_create_dict = {
  100. 'uid': serial_number,
  101. 'addTime': n_time,
  102. 'updTime': n_time,
  103. 'ip': CommonService.get_ip_address(request_dict),
  104. 'nickname': nick_name,
  105. 'region_alexa': region_alexa,
  106. }
  107. UidSetModel.objects.create(**uid_set_create_dict)
  108. return response.json(0)
  109. except Exception as e:
  110. print(e)
  111. return response.json(177, repr(e))
  112. @classmethod
  113. def do_device_page(cls, user_id, request_dict, response):
  114. """
  115. 查询设备列表
  116. @param user_id:
  117. @param request_dict:
  118. @param response:
  119. @return:
  120. """
  121. page_no = request_dict.get('pageNo', None)
  122. page_size = request_dict.get('pageSize', None)
  123. if not all([page_no, page_size]):
  124. return response.json(444)
  125. page = int(page_no)
  126. line = int(page_size)
  127. device_info_qs = Device_Info.objects.filter(userID=user_id)
  128. device_info_qs = device_info_qs.filter(~Q(isExist=0))
  129. total = device_info_qs.count()
  130. device_info_qs = device_info_qs.values("id", "userID_id", "NickName", "Type", "serial_number",
  131. "data_joined",
  132. "update_time")[(page - 1) * line: page * line]
  133. data = []
  134. for item in device_info_qs:
  135. data.append({
  136. 'id': item['id'],
  137. 'userId': item['userID_id'],
  138. 'nickName': item['NickName'],
  139. 'type': item['Type'],
  140. 'serialNumber': item['serial_number'],
  141. 'dataJoined': item['data_joined'].strftime("%Y-%m-%d %H:%M:%S"),
  142. 'updateTime': item['update_time'].strftime("%Y-%m-%d %H:%M:%S")
  143. })
  144. return response.json(0, {'list': data, 'total': total})
  145. @classmethod
  146. def do_device_query(cls, user_id, request_dict, response):
  147. """
  148. 查询用户设备信息
  149. @param user_id: 用户id
  150. @param request_dict: 请求参数
  151. @param response: 响应对象
  152. @return: response
  153. """
  154. page = request_dict.get('page', None)
  155. line = request_dict.get('line', None)
  156. nick_name = request_dict.get('NickName', None)
  157. page = int(page)
  158. line = int(line)
  159. uid = request_dict.get('uid', None)
  160. device_info_list = cls.get_device_info_list(user_id, nick_name, uid,
  161. page, line)
  162. uid_list = []
  163. # 判断是否是主用户 isPrimaryUser=0:否,1:是
  164. for dvl in device_info_list:
  165. if dvl['primaryUserID'] and dvl['id'] == dvl['primaryUserID']:
  166. dvl['isPrimaryUser'] = 1
  167. else:
  168. dvl['isPrimaryUser'] = 0
  169. uid_list.append(dvl['UID'])
  170. # 设备关联套餐,设备预览图
  171. uid_bucket_qs, uid_preview_qs = cls.get_bucket_and_preview_by_uid(uid_list)
  172. # 设备配置信息
  173. uid_set_dict = cls.get_uid_set_dict(uid_list)
  174. # 设备详情信息
  175. result = cls.get_device_details(device_info_list, uid_bucket_qs, uid_preview_qs, uid_set_dict)
  176. items = []
  177. for index, item in enumerate(result):
  178. # 加密
  179. if item['View_Password']:
  180. item['View_Password'] = CommonService.encode_data(item['View_Password'], 1, 4)
  181. items.append(item)
  182. return response.json(0, items)
  183. @classmethod
  184. def get_device_info_list(cls, user_id, nick_name, uid, page, line):
  185. """
  186. 根据用户id获取设备信息
  187. @param uid: uid
  188. @param nick_name: 设备名称
  189. @param line: 条数
  190. @param page: 页数
  191. @param user_id: 用户id
  192. @return: device_info_list 设备信息列表
  193. """
  194. # 获取用户设备信息
  195. device_info_qs = Device_Info.objects.filter(userID_id=user_id)
  196. # 过滤已重置的设备
  197. device_info_qs = device_info_qs.filter(~Q(isExist=2))
  198. if nick_name:
  199. device_info_qs = device_info_qs.filter(NickName__icontains=nick_name)
  200. if uid:
  201. device_info_qs.filter(UID=uid)
  202. device_info_values = device_info_qs.values('id', 'userID', 'NickName', 'UID', 'View_Account', 'View_Password',
  203. 'ChannelIndex',
  204. 'Type', 'isShare', 'primaryUserID', 'primaryMaster', 'data_joined',
  205. 'vodPrimaryUserID',
  206. 'vodPrimaryMaster', 'userID__userEmail', 'version', 'isVod',
  207. 'isExist', 'NotificationMode',
  208. 'isCameraOpenCloud', 'serial_number')
  209. device_info_values = device_info_values[(page - 1) * line:page * line]
  210. device_info_list = CommonService.qs_to_list(device_info_values)
  211. return device_info_list
  212. @classmethod
  213. def get_bucket_and_preview_by_uid(cls, uid_list):
  214. """
  215. 根据uid列表查询套餐
  216. @param uid_list: uid列表
  217. @return: uid_bucket_qs
  218. """
  219. uid_bucket_qs = UID_Bucket.objects.filter(uid__in=uid_list).values('bucket__content', 'status', 'channel',
  220. 'endTime', 'uid')
  221. uid_preview_qs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
  222. return uid_bucket_qs, uid_preview_qs
  223. @classmethod
  224. def get_uid_set_dict(cls, uid_list):
  225. """
  226. @param uid_list: uid列表
  227. @return: uid_set_dict uid配置信息
  228. """
  229. uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list) \
  230. .values('id', 'uid', 'version', 'nickname', 'ucode',
  231. 'detect_status', 'detect_group',
  232. 'detect_interval',
  233. 'region_alexa', 'is_alexa', 'deviceModel',
  234. 'TimeZone', 'TimeStatus', 'SpaceUsable',
  235. 'SpaceSum', 'MirrorType', 'RecordType',
  236. 'OutdoorModel', 'WIFIName', 'isDetector',
  237. 'DetectorRank', 'is_human', 'is_custom_voice',
  238. 'is_ptz', 'double_wifi', 'is_ai')
  239. uid_set_dict = {}
  240. for us in uid_set_qs:
  241. uid_set_dict[us['uid']] = {
  242. 'version': us['version'],
  243. 'nickname': us['nickname'],
  244. 'ucode': us['ucode'],
  245. 'detect_interval': us['detect_interval'],
  246. 'detect_group': us['detect_group'],
  247. 'detect_status': us['detect_status'],
  248. 'region_alexa': us['region_alexa'],
  249. 'is_alexa': us['is_alexa'],
  250. 'deviceModel': us['deviceModel'],
  251. 'TimeZone': us['TimeZone'],
  252. 'TimeStatus': us['TimeStatus'],
  253. 'SpaceUsable': us['SpaceUsable'],
  254. 'SpaceSum': us['SpaceSum'],
  255. 'MirrorType': us['MirrorType'],
  256. 'RecordType': us['RecordType'],
  257. 'OutdoorModel': us['OutdoorModel'],
  258. 'WIFIName': us['WIFIName'],
  259. 'isDetector': us['isDetector'],
  260. 'DetectorRank': us['DetectorRank'],
  261. 'is_human': us['is_human'],
  262. 'is_custom_voice': us['is_custom_voice'],
  263. 'is_ptz': us['is_ptz'],
  264. 'double_wifi': us['double_wifi'],
  265. 'is_ai': us['is_ai']
  266. }
  267. # 从uid_channel里面取出通道配置信息
  268. uid_channel_set_qs = UidChannelSetModel.objects.filter(uid__id=us['id']) \
  269. .values('channel', 'channel_name',
  270. 'pir_audio', 'mic_audio',
  271. 'battery_status',
  272. 'battery_level',
  273. 'sleep_status',
  274. 'sleep_time',
  275. 'light_night_model',
  276. 'light_alarm_type',
  277. 'light_alarm_level',
  278. 'light_alarm_man_en',
  279. 'light_alarm_vol',
  280. 'light_long_light'
  281. )
  282. channels_list = []
  283. for ucs in uid_channel_set_qs:
  284. channels_dict = {
  285. 'channel': ucs['channel'],
  286. 'channel_name': ucs['channel_name'],
  287. 'pir_audio': ucs['pir_audio'],
  288. 'mic_audio': ucs['mic_audio'],
  289. 'battery_status': ucs['battery_status'],
  290. 'battery_level': ucs['battery_level'],
  291. 'sleep_status': ucs['sleep_status'],
  292. 'sleep_time': ucs['sleep_time'],
  293. 'light_night_model': ucs['light_night_model'],
  294. 'light_alarm_type': ucs['light_alarm_type'],
  295. 'light_alarm_level': ucs['light_alarm_level'],
  296. 'light_alarm_man_en': ucs['light_alarm_man_en'],
  297. 'light_alarm_vol': ucs['light_alarm_vol'],
  298. 'light_long_light': ucs['light_long_light']
  299. }
  300. channels_list.append(channels_dict)
  301. uid_set_dict[us['uid']]['channels'] = channels_list
  302. return uid_set_dict
  303. @classmethod
  304. def get_device_details(cls, device_info_list, uid_bucket_qs, uid_preview_qs, uid_set_dict):
  305. """
  306. 设备详情
  307. @param device_info_list: 设备信息列表
  308. @param uid_bucket_qs: 套餐对象
  309. @param uid_preview_qs:
  310. @param uid_set_dict:
  311. @return:
  312. """
  313. now_time = int(time.time())
  314. data = []
  315. for p in device_info_list:
  316. # 获取iotDeviceInfo表的endpoint和tokenIotNumber
  317. p['iot'] = []
  318. if p['serial_number']: # 存在序列号根据序列号查询
  319. iot_device_info_qs = iotdeviceInfoModel.objects.filter(serial_number=p['serial_number'][0:6])
  320. else: # 根据uid查询
  321. iot_device_info_qs = iotdeviceInfoModel.objects.filter(uid=p['UID'])
  322. if iot_device_info_qs.exists():
  323. iot_device_Info = iot_device_info_qs.values('endpoint', 'token_iot_number')
  324. p['iot'].append({
  325. 'endpoint': iot_device_Info[0]['endpoint'],
  326. 'token_iot_number': iot_device_Info[0]['token_iot_number']
  327. })
  328. p['vod'] = []
  329. for dm in uid_bucket_qs:
  330. if p['UID'] == dm['uid']:
  331. if dm['endTime'] > now_time:
  332. p['vod'].append(dm)
  333. p['preview'] = []
  334. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  335. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  336. for up in uid_preview_qs:
  337. if p['UID'] == up['uid']:
  338. obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
  339. img_sign = bucket.sign_url('GET', obj, 300)
  340. p['preview'].append(img_sign)
  341. p_uid = p['UID']
  342. # 返回设备初始化字符
  343. uid_qs = UIDModel.objects.filter(uid=p_uid).values('platform', 'init_string', 'init_string_app')
  344. if uid_qs.exists():
  345. p['platform'] = uid_qs[0]['platform']
  346. p['initString'] = uid_qs[0]['init_string']
  347. p['initStringApp'] = uid_qs[0]['init_string_app']
  348. if p_uid in uid_set_dict:
  349. # 设备版本号
  350. uidversion = uid_set_dict[p_uid]['version']
  351. if len(uidversion) > 6:
  352. uidversion = uidversion[0: uidversion.rfind('.')]
  353. p['uid_version'] = uidversion
  354. p['ucode'] = uid_set_dict[p_uid]['ucode']
  355. p['detect_interval'] = uid_set_dict[p_uid]['detect_interval']
  356. p['detect_status'] = uid_set_dict[p_uid]['detect_status']
  357. p['detect_group'] = uid_set_dict[p_uid]['detect_group']
  358. p['region_alexa'] = uid_set_dict[p_uid]['region_alexa']
  359. p['is_alexa'] = uid_set_dict[p_uid]['is_alexa']
  360. p['deviceModel'] = uid_set_dict[p_uid]['deviceModel']
  361. p['TimeZone'] = uid_set_dict[p_uid]['TimeZone']
  362. p['TimeStatus'] = uid_set_dict[p_uid]['TimeStatus']
  363. p['SpaceUsable'] = uid_set_dict[p_uid]['SpaceUsable']
  364. p['SpaceSum'] = uid_set_dict[p_uid]['SpaceSum']
  365. p['MirrorType'] = uid_set_dict[p_uid]['MirrorType']
  366. p['RecordType'] = uid_set_dict[p_uid]['RecordType']
  367. p['OutdoorModel'] = uid_set_dict[p_uid]['OutdoorModel']
  368. p['WIFIName'] = uid_set_dict[p_uid]['WIFIName']
  369. p['isDetector'] = uid_set_dict[p_uid]['isDetector']
  370. p['DetectorRank'] = uid_set_dict[p_uid]['DetectorRank']
  371. p['is_human'] = uid_set_dict[p_uid]['is_human']
  372. p['is_custom_voice'] = uid_set_dict[p_uid]['is_custom_voice']
  373. p['is_ptz'] = uid_set_dict[p_uid]['is_ptz']
  374. p['channels'] = uid_set_dict[p_uid]['channels']
  375. p['double_wifi'] = uid_set_dict[p_uid]['double_wifi']
  376. p['is_ai'] = uid_set_dict[p_uid]['is_ai']
  377. # 设备昵称 调用影子信息昵称,先阶段不可
  378. if uid_set_dict[p_uid]['nickname']:
  379. p['NickName'] = uid_set_dict[p_uid]['nickname']
  380. else:
  381. # 设备版本号
  382. p['uid_version'] = ''
  383. p['ucode'] = ''
  384. data.append(p)
  385. return data
  386. @classmethod
  387. def get_family_list(cls, user_id, request_dict, response):
  388. """
  389. 查询家庭列表
  390. @param user_id: 用户id
  391. @param request_dict: 请求
  392. @param response: 响应
  393. @return: 家庭列表items
  394. """
  395. lang = request_dict.get('lang', 'cn')
  396. if user_id:
  397. with transaction.atomic():
  398. user_family_qs = LoocamUserFamily.objects.filter(user_id=user_id)
  399. if not user_family_qs.exists():
  400. n_time = int(time.time())
  401. device_user = Device_User.objects.get(userID=user_id)
  402. # 创建默认家庭使用用户名或者邮箱作为名称
  403. family_name = device_user.username if device_user.username else device_user.userEmail
  404. family_name = family_name + "的家" if lang == 'cn' else family_name + " home"
  405. user_family = LoocamUserFamily.objects.create(user_id=user_id, name=family_name,
  406. updated_time=n_time,
  407. created_time=n_time)
  408. if user_family.id:
  409. member_permission_qs = LoocamFamilyMemberPermission.objects.filter(no='001').values('id')
  410. permission_id = member_permission_qs.first()['id']
  411. LoocamFamilyMember.objects.create(family_id=user_family.id, user_id=user_id,
  412. user_name=device_user.username, identity=1,
  413. permission_id=int(permission_id), sort=1, updated_time=n_time,
  414. created_time=n_time)
  415. cls.family_device_binding(user_id, family_id=user_family.id)
  416. family_member_qs = LoocamFamilyMember.objects.filter(user_id=user_id) \
  417. .order_by('sort').values('identity', 'family_id', 'family__name', 'permission__no', 'family__location')
  418. items = []
  419. data = {}
  420. for item in family_member_qs:
  421. data['familyId'] = item['family_id']
  422. data['identity'] = item['identity']
  423. data['familyName'] = item['family__name']
  424. data['permissionNo'] = item['permission__no']
  425. data['familyLocation'] = item['family__location']
  426. items.append(data)
  427. return response.json(0, items)
  428. return response.json(309)
  429. @classmethod
  430. def family_device_binding(cls, user_id, family_id):
  431. """
  432. 根据用户设备与家庭进行绑定
  433. @param user_id:
  434. @param family_id:
  435. @return: True
  436. """
  437. device_info_qs = Device_Info.objects.filter(userID=user_id)
  438. device_info_qs = device_info_qs.filter(~Q(isExist=0)).values('id')
  439. if device_info_qs.exists():
  440. with transaction.atomic():
  441. not_time = time.time()
  442. device_list = []
  443. for item in device_info_qs:
  444. device_id = item['id']
  445. family_device_qs = LoocamFamilyRoomDevice.objects.filter(device_id=device_id)
  446. if not family_device_qs.exists():
  447. # 设备绑定家庭
  448. device_list.append(LoocamFamilyRoomDevice(family_id=family_id, device_id=device_id,
  449. created_time=not_time,
  450. updated_time=not_time))
  451. if device_list:
  452. LoocamFamilyRoomDevice.objects.bulk_create(device_list)
  453. return True
  454. @classmethod
  455. def get_family_room_list(cls, request_dict, response):
  456. """
  457. 获取房间列表并统计该房间下有几台设备
  458. @param request_dict: 请求参数
  459. @param response: 响应参数
  460. @return: total;data
  461. """
  462. family_id = request_dict.get('familyId', None)
  463. if not family_id:
  464. return response.json(444)
  465. page_no = request_dict.get('pageNo', None)
  466. page_size = request_dict.get('pageSize', None)
  467. if not all([page_no, page_size]):
  468. return response.json(444)
  469. page_no = int(page_no)
  470. page_size = int(page_size)
  471. room_qs = LoocamFamilyRoom.objects.filter(family_id=family_id).order_by('sort')
  472. total = room_qs.count()
  473. room_qs = room_qs.values('id', 'name', 'sort')[(page_no - 1) * page_size: page_no * page_size]
  474. room_list = []
  475. if not room_qs.exists():
  476. return response.json(0, room_list)
  477. for item in room_qs:
  478. item['deviceCount'] = LoocamFamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
  479. room_list.append(item)
  480. return response.json(0, {'total': total, 'data': room_list})
  481. @classmethod
  482. def room_save(cls, request_dict, response):
  483. """
  484. 房间保存
  485. @param request_dict: 请求参数
  486. @param response: 响应参数
  487. @return:
  488. """
  489. family_id = request_dict.get('familyId', None)
  490. room_name = request_dict.get('roomName', None)
  491. if not all([family_id, room_name]):
  492. return response.json(444)
  493. with transaction.atomic():
  494. room_qs = LoocamFamilyRoom.objects.filter(family_id=family_id, name=room_name)
  495. now_time = int(time.time())
  496. if room_qs.exists():
  497. room_dict = {'updated_time': now_time, 'name': room_name}
  498. room_qs.update(**room_dict)
  499. LoocamFamilyRoom.objects.create(family_id=family_id, name=room_name, updated_time=now_time,
  500. created_time=now_time)
  501. return response.json(0)
  502. @classmethod
  503. def room_sort_save(cls, request_dict, response):
  504. """
  505. 房间排序
  506. @param request_dict: 请求参数
  507. @param response: 响应参数
  508. @return:
  509. """
  510. ids = request_dict.getlist('ids', None)
  511. if not ids:
  512. return response.json(444)
  513. for i, item in ids:
  514. id_sort = item[i]
  515. print(id_sort)
  516. return response.json(0)