SmartSocketController.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : SmartSocketController.py
  4. @Time : 2023/3/17 11:52
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import datetime
  10. import logging
  11. import time
  12. from decimal import Decimal
  13. from django.db import transaction
  14. from django.http import QueryDict
  15. from django.views import View
  16. from Model.models import SocketInfo, SocketSchedule, Device_Info, UidSetModel, SocketPowerStatistics
  17. from Object.ResponseObject import ResponseObject
  18. from Object.utils import LocalDateTimeUtil
  19. from Service.CommonService import CommonService
  20. LOGGER = logging.getLogger('info')
  21. SOCKET_TOPIC_NAME = 'loocam/smart-socket/{}' # 插座发布消息主题(因设备当前版本只能订阅一个主题)
  22. class SmartSocketView(View):
  23. def get(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.GET, request, operation)
  27. def post(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation')
  30. return self.validation(request.POST, request, operation)
  31. def delete(self, request, *args, **kwargs):
  32. request.encoding = 'utf-8'
  33. operation = kwargs.get('operation')
  34. delete = QueryDict(request.body)
  35. if not delete:
  36. delete = request.GET
  37. return self.validation(delete, request, operation)
  38. def put(self, request, *args, **kwargs):
  39. request.encoding = 'utf-8'
  40. operation = kwargs.get('operation')
  41. put = QueryDict(request.body)
  42. return self.validation(put, request, operation)
  43. def validation(self, request_dict, request, operation):
  44. ResponseObject('cn')
  45. if operation == 'savePowerStatistics': # 保存电量上报统计
  46. return self.save_power_statistics(request_dict, ResponseObject('cn'))
  47. token_code, user_id, response = CommonService \
  48. .verify_token_get_user_id(request_dict, request)
  49. if token_code != 0:
  50. return response.json(token_code)
  51. if operation == 'saveSwitch': # 添加插座开关
  52. return self.save_switch(request_dict, response)
  53. elif operation == 'saveCountDown': # 添加插座倒计时
  54. return self.save_count_down(request_dict, response)
  55. elif operation == 'saveSchedule': # 添加插座排程
  56. return self.save_socket_schedule(request_dict, response)
  57. elif operation == 'get-today-scene': # 查询当天插座电量
  58. return self.get_today_scene(request_dict, response)
  59. elif operation == 'get-all-scene': # 统计智能插座电量
  60. return self.get_all_scene(request_dict, response)
  61. elif operation == 'get-socket-schedule': # 智能插座排程记录查询
  62. return self.get_socket_schedule(request_dict, response)
  63. elif operation == 'get-log': # 智能插座开关日志记录查询
  64. return self.get_log(request_dict, response, user_id)
  65. elif operation == 'editor-socket-device': # 编辑设备信息
  66. return self.editor_socket_device(request_dict, response, user_id)
  67. return response.json(404)
  68. @classmethod
  69. def save_power_statistics(cls, request_dict, response):
  70. """
  71. 保存设备上报电量统计
  72. """
  73. try:
  74. serial_number = request_dict.get('serialNumber', None)
  75. electricity = request_dict.get('electricity', 0.00)
  76. power = request_dict.get('power', 0.00)
  77. accumulated_time = request_dict.get('accumulatedTime', None)
  78. device_time = request_dict.get('deviceTime', None)
  79. LOGGER.info('{}上报电量统计data:{}'.format(serial_number, request_dict))
  80. if not all([serial_number, electricity, power, accumulated_time, device_time]):
  81. return response.json(444)
  82. device_time = int(device_time)
  83. electricity = Decimal(electricity).quantize(Decimal("0.00"))
  84. power = Decimal(power).quantize(Decimal("0.00"))
  85. accumulated_time = int(accumulated_time)
  86. now_time = int(time.time())
  87. start_time, end_time = LocalDateTimeUtil.get_today_date(True)
  88. # 查询当前序列号当天是否有上传过电量统计
  89. power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number,
  90. created_time__gt=start_time,
  91. created_time__lte=end_time)
  92. data = {
  93. 'electricity': electricity,
  94. 'power': power,
  95. 'accumulated_time': accumulated_time,
  96. 'updated_time': now_time
  97. }
  98. if not power_qs.exists(): # 添加插座上报电量统计
  99. socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number).values('device_id')
  100. if not socket_info_qs.exists():
  101. return response.json(173)
  102. data['device_id'] = socket_info_qs[0]['device_id']
  103. data['created_time'] = device_time
  104. data['serial_number'] = serial_number
  105. SocketPowerStatistics.objects.create(**data)
  106. return response.json(0)
  107. # 更新当天电量统计
  108. power_qs.update(**data)
  109. return response.json(0)
  110. except Exception as e:
  111. LOGGER.info('智能插座电量存库异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  112. return response.json(177)
  113. @staticmethod
  114. def get_serial_number_by_device_id(deviceId):
  115. """
  116. 根据设备ID获取序列号
  117. """
  118. device_info = Device_Info.objects.get(id=deviceId)
  119. return device_info.serial_number
  120. @classmethod
  121. def save_switch(cls, request_dict, response):
  122. """
  123. 添加开关
  124. """
  125. device_id = request_dict.get('deviceId', None)
  126. status = request_dict.get('status', None)
  127. if not all([device_id, status]):
  128. return response.json(444)
  129. serial_number = cls.get_serial_number_by_device_id(device_id)
  130. # 保存数据库并下发MQTT消息到插座设备
  131. result = cls.save_socket_switch(device_id, serial_number, int(status))
  132. if not result:
  133. return response.json(177)
  134. return response.json(0)
  135. @staticmethod
  136. def save_socket_switch(device_id, serial_number, status, type_switch=0):
  137. """
  138. 保存插座开关信息
  139. @param device_id: 设备ID
  140. @param serial_number: 序列号
  141. @param status: 状态 0关,1开
  142. @param type_switch: 0:总开关,1倒计时开关
  143. @return: True | False
  144. """
  145. if not device_id:
  146. return False
  147. socket_info_qs = SocketInfo.objects.filter(device_id=device_id, type_switch=type_switch)
  148. now_time = int(time.time())
  149. try:
  150. with transaction.atomic():
  151. # 创建插座开关信息
  152. if not socket_info_qs.exists():
  153. socket_dict = {"device_id": device_id,
  154. "serial_number": serial_number,
  155. "status": status,
  156. "type_switch": type_switch,
  157. "created_time": now_time,
  158. "updated_time": now_time,
  159. "online": True}
  160. SocketInfo.objects.create(**socket_dict)
  161. return True
  162. if socket_info_qs.first().status == status:
  163. return True
  164. socket_info_qs.update(status=status, updated_time=now_time)
  165. # 主题名称
  166. topic_name = SOCKET_TOPIC_NAME.format(serial_number)
  167. # 发布消息内容
  168. msg = {'type': 1, 'data': {'deviceSwitch': status}}
  169. result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
  170. LOGGER.info('智能插座开关设置发布MQTT消息结果{}'.format(result))
  171. return True
  172. except Exception as e:
  173. LOGGER.info('智能插座异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  174. return False
  175. @classmethod
  176. def save_count_down(cls, request_dict, response):
  177. """
  178. 添加倒计时
  179. """
  180. device_id = request_dict.get('deviceId', None)
  181. status = request_dict.get('status', None)
  182. start = request_dict.get('start', None)
  183. count_down_time = request_dict.get('countDownTime', None)
  184. if not all([device_id, status, count_down_time]):
  185. return response.json(444)
  186. serial_number = cls.get_serial_number_by_device_id(device_id)
  187. # 保存数据库并下发MQTT消息到插座设备
  188. result = cls.save_socket_count_down(device_id, serial_number, int(status), int(start), int(count_down_time))
  189. if not result:
  190. return response.json(177)
  191. return response.json(0)
  192. @staticmethod
  193. def save_socket_count_down(device_id, serial_number, status, start, count_down_time, type_switch=1):
  194. """
  195. 保存插座倒计时信息
  196. @param count_down_time: 倒计时时间戳
  197. @param start: 是否启动倒计时 0:关闭,1:开始
  198. @param device_id: 设备ID
  199. @param serial_number: 序列号
  200. @param status: 倒计时电源状态 0关,1开
  201. @param type_switch: 0:总开关,1倒计时开关
  202. @return:
  203. """
  204. if not device_id:
  205. return False
  206. socket_info_qs = SocketInfo.objects.filter(device_id=device_id, type_switch=type_switch)
  207. now_time = int(time.time())
  208. try:
  209. with transaction.atomic():
  210. # 创建插座倒计时信息
  211. if not socket_info_qs.exists():
  212. socket_dict = {"device_id": device_id,
  213. "serial_number": serial_number,
  214. "status": status,
  215. "type_switch": type_switch,
  216. "created_time": now_time,
  217. "updated_time": now_time,
  218. "online": True,
  219. "count_down_time": count_down_time}
  220. socket_info_qs = SocketInfo.objects.create(**socket_dict)
  221. count_down_id = socket_info_qs.id
  222. else:
  223. socket_info_qs.update(status=status, count_down_time=count_down_time,
  224. updated_time=now_time)
  225. count_down_id = socket_info_qs.first().id
  226. # 主题名称
  227. topic_name = SOCKET_TOPIC_NAME.format(serial_number)
  228. # 发布消息内容
  229. msg = {'type': 2,
  230. 'data': {'powerType': status,
  231. 'countDownId': count_down_id,
  232. 'time': count_down_time,
  233. 'start': start}}
  234. result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
  235. LOGGER.info('智能插座倒计时发布MQTT消息结果{}'.format(result))
  236. return True
  237. except Exception as e:
  238. LOGGER.info('智能插座异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  239. return False
  240. @classmethod
  241. def save_socket_schedule(cls, request_dict, response):
  242. """
  243. 插座添加排程
  244. """
  245. try:
  246. device_id = request_dict.get('deviceId', None)
  247. task_type = request_dict.get('timeType', None)
  248. start_time = request_dict.get('startTime', None)
  249. end_time = request_dict.get('endTime', None)
  250. repeat = request_dict.get('repeat', None)
  251. task_id = request_dict.get('taskId', None)
  252. device_switch = request_dict.get('deviceSwitch', None)
  253. task_switch = request_dict.get('taskSwitch', None)
  254. if not all([task_type, start_time, end_time, repeat, device_switch, task_switch]):
  255. return response.json(444)
  256. device_switch = int(device_switch)
  257. task_switch = int(task_switch)
  258. now_time = int(time.time())
  259. data = {'time_type': int(task_type), 'start_time': int(start_time), 'repeat': int(repeat),
  260. 'switch_status': True if device_switch == 1 else False,
  261. 'task_status': True if task_switch == 1 else False}
  262. serial_number = cls.get_serial_number_by_device_id(device_id)
  263. if task_id: # 修改排程
  264. task_id = int(task_id)
  265. socket_schedule_qs = SocketSchedule.objects.filter(id=task_id)
  266. if not socket_schedule_qs.exists():
  267. return response.json(174)
  268. if end_time:
  269. data['end_time'] = int(end_time)
  270. data['updated_time'] = now_time
  271. socket_schedule_qs.update(**data)
  272. else:
  273. # 排查是否已设置过当前排程
  274. socket_s_qs = SocketSchedule.objects.filter(device_id=device_id,
  275. start_time=int(start_time),
  276. end_time=int(end_time),
  277. time_type=int(task_type))
  278. if socket_s_qs.exists():
  279. return response.json(174)
  280. # 添加排程
  281. data['device_id'] = device_id
  282. data['serial_number'] = serial_number
  283. data['updated_time'] = now_time
  284. data['created_time'] = now_time
  285. socket_schedule = SocketSchedule.objects.create(**data)
  286. task_id = socket_schedule.id
  287. # 将排程任务下发给设备
  288. cls.send_socket_schedule(serial_number, task_id, int(task_type), int(start_time),
  289. int(end_time), int(repeat), device_switch,
  290. task_switch)
  291. return response.json(0)
  292. except Exception as e:
  293. LOGGER.info('智能插座异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  294. return False
  295. @staticmethod
  296. def send_socket_schedule(serial_number, task_id, time_type, start_time, end_time, repeat, device_switch,
  297. task_switch):
  298. """
  299. 排程下发设备
  300. @param serial_number: 序列号
  301. @param task_id: 当前排程任务id
  302. @param time_type: 任务类型 0:设定时间,1:设定时间段
  303. @param start_time: 开启时间
  304. @param end_time: 结束时间
  305. @param repeat: 重复日期
  306. @param device_switch: 任务执行后期望设备状态,0:关闭,1:开启
  307. @param task_switch: 任务执行状态 0:不执行,1:执行
  308. @return: True | False
  309. """
  310. msg = {
  311. 'type': 3,
  312. 'data': {'taskId': task_id, 'timeType': time_type,
  313. 'startTime': start_time, 'endTime': end_time,
  314. 'repeat': repeat,
  315. 'deviceSwitch': device_switch,
  316. 'taskSwitch': task_switch}
  317. }
  318. # 主题名称
  319. topic_name = SOCKET_TOPIC_NAME.format(serial_number)
  320. result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
  321. LOGGER.info('智能插座排程任务发布MQTT消息结果{}'.format(result))
  322. return result
  323. # 以下是查询智能插座接口
  324. @staticmethod
  325. def get_today_scene(request_dict, response):
  326. """
  327. 查询当天插座电量
  328. @request_dict serialNumber: 序列号
  329. @param request_dict: 请求数据
  330. @param response: 响应
  331. @return: response
  332. """
  333. serial_number = request_dict.get('serialNumber', None)
  334. if not all([serial_number]):
  335. return response.json(444)
  336. socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values('power',
  337. 'accumulated_time',
  338. 'electricity')
  339. if not socket_power_qs.exists():
  340. return response.json(173)
  341. socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number).values('status', 'online',
  342. 'count_down_time')
  343. if not socket_info_qs.exists():
  344. return response.json(173)
  345. try:
  346. data = {}
  347. data['serialNumber'] = serial_number
  348. data['power'] = socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00
  349. data['electricity'] = socket_power_qs[0]['electricity'] if socket_power_qs[0]['electricity'] else 0.00
  350. data['accumulatedTime'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
  351. 'accumulated_time'] else '0:00'
  352. data['status'] = socket_info_qs[0]['status'] if socket_info_qs[0]['status'] else False
  353. data['online'] = socket_info_qs[0]['online'] if socket_info_qs[0]['online'] else False
  354. data['count_down_time'] = socket_info_qs[0]['count_down_time'] if socket_info_qs[0][
  355. 'count_down_time'] else '00:00:00'
  356. return response.json(0, data)
  357. except Exception as e:
  358. print(e)
  359. return response.json(500)
  360. @classmethod
  361. def get_all_scene(cls, request_dict, response):
  362. '''
  363. 统计智能插座电量
  364. @request_dict serialNumber: 序列号
  365. @request_dict unit: 时间单位
  366. @param request_dict: 请求数据
  367. @param response: 响应
  368. @return: response
  369. '''
  370. serial_number = request_dict.get('serialNumber', None)
  371. unit = request_dict.get('unit', None)
  372. # 确定是否会传值
  373. startTime = request_dict.get('startTime', None)
  374. endTime = request_dict.get('endTime', None)
  375. if not all([unit, serial_number]):
  376. return response.json(444)
  377. socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values(
  378. 'electricity', 'accumulated_time', 'power')
  379. if not socket_power_qs.exists():
  380. return response.json(173)
  381. data = {}
  382. # for device_info in device_info_qs:
  383. # device_id = device_info['id']
  384. # device_list.append(device_id)
  385. try:
  386. data = {
  387. 'electricityToday': '',
  388. 'accumulated_time': '',
  389. 'power': '',
  390. 'electricityYesterday': '',
  391. 'electricityMonth': '',
  392. 'allElectricity': '',
  393. 'accumulatedTime': '',
  394. 'accumulatedPower': '',
  395. }
  396. nowTime = endTime
  397. data['electricity'] = socket_power_qs[0]['electricity'] if socket_power_qs[0]['electricity'] else 0.00
  398. # 昨天使用电量
  399. # data['electricityYesterday'] = socket_power_qs[1]['electricity'] if socket_power_qs[1][
  400. # 'electricity'] else 0.00
  401. data['accumulated_time'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
  402. 'accumulated_time'] else 0.00
  403. data['power'] = socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00
  404. time_list = []
  405. if not endTime:
  406. nowTime = 1679241600
  407. if unit == 'week':
  408. startTime = startTime
  409. if not startTime:
  410. startTime = datetime.datetime.fromtimestamp(int(nowTime)) - datetime.timedelta(days=7)
  411. end_time = datetime.datetime.fromtimestamp(int(nowTime))
  412. time_list = CommonService.cutting_time(startTime, end_time, time_unit='day')
  413. elif unit == 'month':
  414. startTime = startTime
  415. if not startTime:
  416. startTime = datetime.datetime.fromtimestamp(int(nowTime)) - datetime.timedelta(days=30)
  417. end_time = datetime.datetime.fromtimestamp(int(nowTime))
  418. time_list = CommonService.cutting_time(startTime, end_time, time_unit='day')
  419. elif unit == 'year':
  420. startTime = startTime
  421. if not startTime:
  422. startTime = datetime.datetime.fromtimestamp(int(nowTime)) - datetime.timedelta(days=365)
  423. end_time = datetime.datetime.fromtimestamp(int(nowTime))
  424. time_list = CommonService.cutting_time(startTime, end_time, time_unit='month')
  425. # all_time_list = []
  426. new_list = []
  427. for item in time_list:
  428. socket_power_qs = socket_power_qs.filter(created_time__gte=item[0], created_time__lt=item[1])
  429. time_tuple = time.localtime(item[-1]) # 把时间戳转换成时间元祖
  430. items = time.strftime('%Y-%m-%d', time_tuple)
  431. electricity = 0.00
  432. new_list.append({
  433. 'time': items,
  434. 'electricity': electricity
  435. })
  436. # #字典key相同则value放一起
  437. # socket_list = list(socket_power_qs)
  438. # new_list.append(socket_list[0])
  439. # for socket in range(1,len(socket_list)):
  440. # for new in new_list:
  441. # if operator.eq(new.keys(), socket_list[socket].keys()):
  442. # for key in new.keys():
  443. # new[key] += socket_list[socket][key]
  444. # break
  445. # elif operator.eq(new, new_list[-1]):
  446. # new_list.append(socket_list[socket])
  447. # break
  448. # data['dict'] = new_list
  449. data['week_or_month_or_year'] = new_list
  450. return response.json(0, data)
  451. except Exception as e:
  452. print(e)
  453. return response.json(500)
  454. @staticmethod
  455. def get_socket_schedule(request_dict, response):
  456. """
  457. 智能插座排程记录查询
  458. @param request_dict: 请求参数
  459. @request_dict page: 页数
  460. @request_dict size: 条数
  461. @request_dict serialNumber: 设备序列号
  462. @param response: 响应对象
  463. @return: response
  464. """
  465. page = request_dict.get('pageNo', None)
  466. size = request_dict.get('pageSize', None)
  467. serial_number = request_dict.get('serialNumber', None)
  468. if not all([page, size, serial_number]):
  469. return response.json(444)
  470. page, size = int(page), int(size)
  471. socket_schedule_qs = SocketSchedule.objects.filter(serial_number=serial_number).values('switch_status',
  472. 'start_time', 'end_time',
  473. 'repeat', 'task_status')
  474. count = socket_schedule_qs.count()
  475. socket_schedule_qs = socket_schedule_qs[(page - 1) * size:page * size]
  476. if not socket_schedule_qs.exists():
  477. return response.json(173)
  478. try:
  479. schedule_list = []
  480. for socket_schedule in socket_schedule_qs:
  481. schedule_list.append({
  482. 'start_time': socket_schedule['start_time'],
  483. 'end_time': socket_schedule['end_time'],
  484. 'switch_status': socket_schedule['switch_status'] if socket_schedule['switch_status'] else False,
  485. 'task_status': socket_schedule['task_status'] if socket_schedule['task_status'] else False,
  486. # 需转换进制
  487. 'repeat': socket_schedule['repeat']
  488. })
  489. return response.json(0, {'list': schedule_list, 'total': count})
  490. except Exception as e:
  491. print(e)
  492. return response.json(500)
  493. @staticmethod
  494. def get_log(request_dict, response, user_id):
  495. """
  496. 智能插座开关日志记录查询
  497. @param request_dict: 请求参数
  498. @param user_id: 用户ID
  499. @request_dict page: 页数
  500. @request_dict size: 条数
  501. @request_dict serialNumber: 设备序列号
  502. @request_dict startTime: 开始时间
  503. @request_dict endTime: 结束时间
  504. @param response: 响应对象
  505. @return: response
  506. """
  507. page = request_dict.get('pageNo', None)
  508. size = request_dict.get('pageSize', None)
  509. serial_number = request_dict.get('serialNumber', None)
  510. start_time = request_dict.get('startTime', None)
  511. end_time = request_dict.get('endTime', None)
  512. if not all([page, size, serial_number]):
  513. return response.json(444)
  514. socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number)
  515. device_id_list = []
  516. pass
  517. @staticmethod
  518. def editor_socket_device(request_dict, response, user_id):
  519. """
  520. 编辑设备
  521. """
  522. # 编辑插座信息
  523. serial_number = request_dict.get('serialNumber', None)
  524. NickName = request_dict.get('NickName', None)
  525. # room_save
  526. # familyRoom = request_dict.get('familyRoom', None)
  527. type_switch = request_dict.get('typeSwitch', None) # 1:倒计时开关
  528. status = request_dict.get('status', None) # 开关状态 0:关闭,1:开启'
  529. # 编辑插座排程
  530. count_down_time = request_dict.get('countDownTime', None) # 倒计时时间戳
  531. time_type = request_dict.get('timeType', None) # 排查时间类型 0:按时间 1:按时间段划分'
  532. switch_status = request_dict.get('switchStatus', None) # 开关状态 0:关闭,1:开启
  533. start_time = request_dict.get('startTime', None)
  534. end_time = request_dict.get('endTime', None)
  535. repeat = request_dict.get('repeat', None) # 重复周期用数值表示
  536. if not all([serial_number]):
  537. return response.json(444)
  538. socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number)
  539. if not socket_info_qs.exists():
  540. return response.json(173)
  541. try:
  542. with transaction.atomic():
  543. if NickName:
  544. Device_Info.objects.update(NickName=NickName)
  545. UidSetModel.objects.update(nickname=NickName)
  546. elif type_switch:
  547. socket_info_qs.update(type_switch=type_switch)
  548. elif status:
  549. socket_info_qs.update(status=status)
  550. elif count_down_time:
  551. socket_info_qs.update(count_down_time=count_down_time)
  552. socket_qs = SocketSchedule.objects.filter(serial_number=serial_number)
  553. if not socket_qs.exists():
  554. socket_info_qs.save()
  555. return response(0)
  556. elif time_type:
  557. socket_qs.update(time_type=time_type)
  558. elif switch_status:
  559. socket_qs.update(switch_status=switch_status)
  560. elif start_time:
  561. socket_qs.update(start_time=start_time)
  562. elif end_time:
  563. socket_qs.update(end_time=end_time)
  564. elif repeat:
  565. socket_qs.update(repeat=repeat)
  566. socket_info_qs.save()
  567. socket_qs.save()
  568. return response.json(0)
  569. except Exception as e:
  570. print(e)
  571. return response.json(500)