|
@@ -6,21 +6,15 @@
|
|
|
@Email :
|
|
|
@Software: PyCharm
|
|
|
"""
|
|
|
-
|
|
|
+import datetime
|
|
|
import json
|
|
|
import time
|
|
|
|
|
|
-from django.core.exceptions import ObjectDoesNotExist
|
|
|
-from django.db import transaction
|
|
|
from django.db.models import F, Q, Count
|
|
|
from django.views import View
|
|
|
|
|
|
-from Ansjer.Config.gatewaySensorConfig import SMART_SCENE_TOPIC, SENSOR_TYPE, EVENT_TYPE, SCENE_EVENT_CREATE, \
|
|
|
- SCENE_EVENT_EDIT, SCENE_EVENT_DELETE, SCENE_STATUS_ON, SCENE_STATUS_OFF, SCENE_EVENT_EDIT_STATUS, \
|
|
|
- VOICE_AUDITION_TOPIC, DEVICE_TYPE, SMART_SCENE_TASK, LINKAGE_DEVICE_TYPE_LIST
|
|
|
-from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime, Device_Info, \
|
|
|
- SceneLog
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
+from Roomumy.models import FeedDiary, FeedType
|
|
|
from Service.CommonService import CommonService
|
|
|
|
|
|
|
|
@@ -36,37 +30,166 @@ class FeedDiaryView(View):
|
|
|
return self.validation(request.POST, request, operation)
|
|
|
|
|
|
def validation(self, request_dict, request, operation):
|
|
|
- if operation == 'get-scene': # 设备获取智能场景数据
|
|
|
- return self.get_scene_data(request_dict, ResponseObject('cn'))
|
|
|
token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
|
|
|
if token_code != 0:
|
|
|
return response.json(token_code)
|
|
|
- if operation == 'condition-devices': # 添加条件-查询设备
|
|
|
- return self.condition_devices(request_dict, response)
|
|
|
+ if operation == 'query': # 查询喂养记录
|
|
|
+ return self.get_feed_diary_data(request_dict, ResponseObject('cn'))
|
|
|
+ elif operation == 'queryStatistics': # 查询喂养统计
|
|
|
+ return self.get_statistics_data(request_dict, ResponseObject('cn'))
|
|
|
+ elif operation == 'addOrEdit': # 查询喂养统计
|
|
|
+ return self.add_or_edit_feed_diary(request_dict, ResponseObject('cn'))
|
|
|
+ elif operation == 'delete': # 查询喂养统计
|
|
|
+ return self.delete_feed_diary(request_dict, ResponseObject('cn'))
|
|
|
+ elif operation == 'getFeedList': # 查询喂养列表
|
|
|
+ return self.get_feed_list(request_dict, ResponseObject('cn'))
|
|
|
else:
|
|
|
return response.json(414)
|
|
|
|
|
|
@classmethod
|
|
|
- def condition_devices(cls, request_dict, response):
|
|
|
+ def get_feed_diary_data(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 查询喂养记录
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict start_time: 开始时间戳
|
|
|
+ @request_dict end_time: 结束时间戳
|
|
|
+ @request_dict baby_id: 宝宝id
|
|
|
+ @request_dict event_type: 喂养类型
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ start_time = request_dict.get('start_time', None)
|
|
|
+ end_time = request_dict.get('end_time', None)
|
|
|
+ baby_id = request_dict.get('baby_id', None)
|
|
|
+ feed_type = request_dict.get('feed_type', None)
|
|
|
+ if not all([start_time, end_time, baby_id]):
|
|
|
+ return response.json(444, {'error param': 'start_time, end_time or baby_id'})
|
|
|
+ try:
|
|
|
+ feed_diary = FeedDiary.objects.filter(created_time__gte=start_time, created_time__lt=end_time,
|
|
|
+ baby_id=baby_id)
|
|
|
+ if feed_type:
|
|
|
+ feed_diary = feed_diary.filter(feed_type=feed_type)
|
|
|
+ feed_diary = feed_diary.values('feed_type__name', 'feed_type__icon_url', 'feed_content', 'created_time',
|
|
|
+ 'id', 'feed_type')
|
|
|
+ return response.json(0, list(feed_diary))
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_statistics_data(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 查询喂养记录
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict start_time: 开始时间戳
|
|
|
+ @request_dict end_time: 结束时间戳
|
|
|
+ @request_dict baby_id: 宝宝id
|
|
|
+ @request_dict event_type: 喂养类型
|
|
|
+ @request_dict sub_event_type: 喂养子类型
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ start_time = request_dict.get('start_time', None)
|
|
|
+ end_time = request_dict.get('end_time', None)
|
|
|
+ baby_id = request_dict.get('baby_id', None)
|
|
|
+ feed_type = request_dict.get('feed_type', None)
|
|
|
+ sub_feed_type = request_dict.get('sub_feed_type', None)
|
|
|
+ if not all([start_time, end_time, baby_id, feed_type]):
|
|
|
+ return response.json(444, {'error param': 'start_time, end_time, event_type or baby_id'})
|
|
|
+ s_time = datetime.datetime.fromtimestamp(int(start_time))
|
|
|
+ e_time = datetime.datetime.fromtimestamp(int(end_time))
|
|
|
+ time_list = CommonService.cutting_time(s_time, e_time, 'day')
|
|
|
+ try:
|
|
|
+ result_list = []
|
|
|
+ for time_range in time_list:
|
|
|
+ content_list = []
|
|
|
+ feed_diary = FeedDiary.objects.filter(created_time__gte=time_range[0], created_time__lt=time_range[1],
|
|
|
+ baby_id=baby_id, feed_type_id=feed_type).values_list(
|
|
|
+ 'feed_content', flat=True)
|
|
|
+ count = 0
|
|
|
+ if feed_type == '5' and sub_feed_type: # 换尿布
|
|
|
+ sub_feed_type = int(sub_feed_type)
|
|
|
+ for item in feed_diary:
|
|
|
+ if item['sub_feed_type'] in [sub_feed_type, 3]: # 1:嘘嘘 2:臭臭 3:嘘嘘+臭臭 4:干爽
|
|
|
+ count += 1
|
|
|
+ content_list.append(item)
|
|
|
+ else:
|
|
|
+ count = feed_diary.count()
|
|
|
+ content_list = list(feed_diary)
|
|
|
+ result_list.append({
|
|
|
+ 'date_time': time_range[0],
|
|
|
+ 'count': count,
|
|
|
+ 'feed_content': content_list
|
|
|
+ })
|
|
|
+ return response.json(0, result_list)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def add_or_edit_feed_diary(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 查询喂养记录
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict date_time: 喂养时间戳
|
|
|
+ @request_dict baby_id: 宝宝id
|
|
|
+ @request_dict feed_id: 记录id
|
|
|
+ @request_dict event_type: 喂养类型
|
|
|
+ @request_dict event_content: 喂养事件
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ date_time = request_dict.get('date_time', None)
|
|
|
+ baby_id = request_dict.get('baby_id', None)
|
|
|
+ feed_id = request_dict.get('feed_id', None)
|
|
|
+ feed_type = request_dict.get('feed_type', None)
|
|
|
+ feed_content = request_dict.get('feed_content', None)
|
|
|
+ if not all([date_time, baby_id, feed_type, feed_content]):
|
|
|
+ return response.json(444, {'error param': 'date_time, feed_content, feed_type or baby_id'})
|
|
|
+ feed_content = eval(feed_content)
|
|
|
+ try:
|
|
|
+ feed_type_qs = FeedType.objects.filter(id=feed_type)
|
|
|
+ if not feed_type_qs:
|
|
|
+ return response.json(444, {'error param': 'feed_type'})
|
|
|
+ if feed_id:
|
|
|
+ now_time = int(time.time())
|
|
|
+ FeedDiary.objects.filter(id=feed_id, baby_id=baby_id).update(updated_time=now_time,
|
|
|
+ feed_content=feed_content)
|
|
|
+ else:
|
|
|
+ FeedDiary.objects.create(baby_id=baby_id, feed_type_id=feed_type, feed_content=feed_content,
|
|
|
+ created_time=date_time, updated_time=date_time)
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def delete_feed_diary(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 删除喂养记录
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict baby_id: 宝宝id
|
|
|
+ @request_dict feed_id: 记录id
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ baby_id = request_dict.get('baby_id', None)
|
|
|
+ feed_id = request_dict.get('feed_id', None)
|
|
|
+ if not all([feed_id, baby_id]):
|
|
|
+ return response.json(444, {'error param': 'feed_id or baby_id'})
|
|
|
+ try:
|
|
|
+ FeedDiary.objects.filter(id=feed_id, baby_id=baby_id).delete()
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_feed_list(cls, request_dict, response):
|
|
|
"""
|
|
|
- 添加条件-查询设备
|
|
|
+ 获取喂养列表
|
|
|
@param request_dict: 请求参数
|
|
|
- @request_dict deviceId: 网关设备id
|
|
|
- @request_dict subDeviceId: 子设备id
|
|
|
@param response: 响应对象
|
|
|
@return: response
|
|
|
"""
|
|
|
- device_id = request_dict.get('deviceId', None)
|
|
|
- sub_device_id = request_dict.get('subDeviceId', None)
|
|
|
- if not any([device_id, sub_device_id]):
|
|
|
- return response.json(444, {'error param': 'deviceId or subDeviceId'})
|
|
|
try:
|
|
|
- if sub_device_id:
|
|
|
- device_id = GatewaySubDevice.objects.get(id=sub_device_id).device_id
|
|
|
- gateway_sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id)
|
|
|
- if not gateway_sub_device_qs.exists():
|
|
|
- return response.json(173)
|
|
|
- res = cls.get_sub_device_room_name(gateway_sub_device_qs)
|
|
|
- return response.json(0, res)
|
|
|
+ feed_type = FeedType.objects.filter(is_show=True).values('id', 'name', 'icon_url')
|
|
|
+ return response.json(0, list(feed_type))
|
|
|
except Exception as e:
|
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|