123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- # -*- encoding: utf-8 -*-
- """
- @File : FeedDiaryController.py
- @Time : 2024-10-7 14:37:30
- @Author : peng
- @Email :
- @Software: PyCharm
- """
- import datetime
- import json
- import time
- from django.db.models import F, Q, Count
- from django.views import View
- from Object.ResponseObject import ResponseObject
- from Roomumy.models import FeedDiary, FeedType
- from Service.CommonService import CommonService
- class FeedDiaryView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.GET, request, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.POST, request, operation)
- def validation(self, request_dict, request, operation):
- 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 == '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 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: 请求参数
- @param response: 响应对象
- @return: response
- """
- try:
- 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)))
|