FeedDiaryController.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : FeedDiaryController.py
  4. @Time : 2024-10-7 14:37:30
  5. @Author : peng
  6. @Email :
  7. @Software: PyCharm
  8. """
  9. import datetime
  10. import json
  11. import time
  12. from django.db.models import F, Q, Count
  13. from django.views import View
  14. from Object.ResponseObject import ResponseObject
  15. from Roomumy.models import FeedDiary, FeedType
  16. from Service.CommonService import CommonService
  17. class FeedDiaryView(View):
  18. def get(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. operation = kwargs.get('operation')
  21. return self.validation(request.GET, request, operation)
  22. def post(self, request, *args, **kwargs):
  23. request.encoding = 'utf-8'
  24. operation = kwargs.get('operation')
  25. return self.validation(request.POST, request, operation)
  26. def validation(self, request_dict, request, operation):
  27. token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
  28. if token_code != 0:
  29. return response.json(token_code)
  30. if operation == 'query': # 查询喂养记录
  31. return self.get_feed_diary_data(request_dict, ResponseObject('cn'))
  32. elif operation == 'queryStatistics': # 查询喂养统计
  33. return self.get_statistics_data(request_dict, ResponseObject('cn'))
  34. elif operation == 'addOrEdit': # 查询喂养统计
  35. return self.add_or_edit_feed_diary(request_dict, ResponseObject('cn'))
  36. elif operation == 'delete': # 查询喂养统计
  37. return self.delete_feed_diary(request_dict, ResponseObject('cn'))
  38. elif operation == 'getFeedList': # 查询喂养列表
  39. return self.get_feed_list(request_dict, ResponseObject('cn'))
  40. else:
  41. return response.json(414)
  42. @classmethod
  43. def get_feed_diary_data(cls, request_dict, response):
  44. """
  45. 查询喂养记录
  46. @param request_dict: 请求参数
  47. @request_dict start_time: 开始时间戳
  48. @request_dict end_time: 结束时间戳
  49. @request_dict baby_id: 宝宝id
  50. @request_dict event_type: 喂养类型
  51. @param response: 响应对象
  52. @return: response
  53. """
  54. start_time = request_dict.get('start_time', None)
  55. end_time = request_dict.get('end_time', None)
  56. baby_id = request_dict.get('baby_id', None)
  57. feed_type = request_dict.get('feed_type', None)
  58. if not all([start_time, end_time, baby_id]):
  59. return response.json(444, {'error param': 'start_time, end_time or baby_id'})
  60. try:
  61. feed_diary = FeedDiary.objects.filter(created_time__gte=start_time, created_time__lt=end_time,
  62. baby_id=baby_id)
  63. if feed_type:
  64. feed_diary = feed_diary.filter(feed_type=feed_type)
  65. feed_diary = feed_diary.values('feed_type__name', 'feed_type__icon_url', 'feed_content', 'created_time',
  66. 'id', 'feed_type')
  67. return response.json(0, list(feed_diary))
  68. except Exception as e:
  69. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  70. @classmethod
  71. def get_statistics_data(cls, request_dict, response):
  72. """
  73. 查询喂养记录
  74. @param request_dict: 请求参数
  75. @request_dict start_time: 开始时间戳
  76. @request_dict end_time: 结束时间戳
  77. @request_dict baby_id: 宝宝id
  78. @request_dict event_type: 喂养类型
  79. @request_dict sub_event_type: 喂养子类型
  80. @param response: 响应对象
  81. @return: response
  82. """
  83. start_time = request_dict.get('start_time', None)
  84. end_time = request_dict.get('end_time', None)
  85. baby_id = request_dict.get('baby_id', None)
  86. feed_type = request_dict.get('feed_type', None)
  87. sub_feed_type = request_dict.get('sub_feed_type', None)
  88. if not all([start_time, end_time, baby_id, feed_type]):
  89. return response.json(444, {'error param': 'start_time, end_time, event_type or baby_id'})
  90. s_time = datetime.datetime.fromtimestamp(int(start_time))
  91. e_time = datetime.datetime.fromtimestamp(int(end_time))
  92. time_list = CommonService.cutting_time(s_time, e_time, 'day')
  93. try:
  94. result_list = []
  95. for time_range in time_list:
  96. content_list = []
  97. feed_diary = FeedDiary.objects.filter(created_time__gte=time_range[0], created_time__lt=time_range[1],
  98. baby_id=baby_id, feed_type_id=feed_type).values_list(
  99. 'feed_content', flat=True)
  100. count = 0
  101. if feed_type == '5' and sub_feed_type: # 换尿布
  102. sub_feed_type = int(sub_feed_type)
  103. for item in feed_diary:
  104. if item['sub_feed_type'] in [sub_feed_type, 3]: # 1:嘘嘘 2:臭臭 3:嘘嘘+臭臭 4:干爽
  105. count += 1
  106. content_list.append(item)
  107. else:
  108. count = feed_diary.count()
  109. content_list = list(feed_diary)
  110. result_list.append({
  111. 'date_time': time_range[0],
  112. 'count': count,
  113. 'feed_content': content_list
  114. })
  115. return response.json(0, result_list)
  116. except Exception as e:
  117. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  118. @classmethod
  119. def add_or_edit_feed_diary(cls, request_dict, response):
  120. """
  121. 查询喂养记录
  122. @param request_dict: 请求参数
  123. @request_dict date_time: 喂养时间戳
  124. @request_dict baby_id: 宝宝id
  125. @request_dict feed_id: 记录id
  126. @request_dict event_type: 喂养类型
  127. @request_dict event_content: 喂养事件
  128. @param response: 响应对象
  129. @return: response
  130. """
  131. date_time = request_dict.get('date_time', None)
  132. baby_id = request_dict.get('baby_id', None)
  133. feed_id = request_dict.get('feed_id', None)
  134. feed_type = request_dict.get('feed_type', None)
  135. feed_content = request_dict.get('feed_content', None)
  136. if not all([date_time, baby_id, feed_type, feed_content]):
  137. return response.json(444, {'error param': 'date_time, feed_content, feed_type or baby_id'})
  138. feed_content = eval(feed_content)
  139. try:
  140. feed_type_qs = FeedType.objects.filter(id=feed_type)
  141. if not feed_type_qs:
  142. return response.json(444, {'error param': 'feed_type'})
  143. if feed_id:
  144. now_time = int(time.time())
  145. FeedDiary.objects.filter(id=feed_id, baby_id=baby_id).update(updated_time=now_time,
  146. feed_content=feed_content)
  147. else:
  148. FeedDiary.objects.create(baby_id=baby_id, feed_type_id=feed_type, feed_content=feed_content,
  149. created_time=date_time, updated_time=date_time)
  150. return response.json(0)
  151. except Exception as e:
  152. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  153. @classmethod
  154. def delete_feed_diary(cls, request_dict, response):
  155. """
  156. 删除喂养记录
  157. @param request_dict: 请求参数
  158. @request_dict baby_id: 宝宝id
  159. @request_dict feed_id: 记录id
  160. @param response: 响应对象
  161. @return: response
  162. """
  163. baby_id = request_dict.get('baby_id', None)
  164. feed_id = request_dict.get('feed_id', None)
  165. if not all([feed_id, baby_id]):
  166. return response.json(444, {'error param': 'feed_id or baby_id'})
  167. try:
  168. FeedDiary.objects.filter(id=feed_id, baby_id=baby_id).delete()
  169. return response.json(0)
  170. except Exception as e:
  171. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  172. @classmethod
  173. def get_feed_list(cls, request_dict, response):
  174. """
  175. 获取喂养列表
  176. @param request_dict: 请求参数
  177. @param response: 响应对象
  178. @return: response
  179. """
  180. try:
  181. feed_type = FeedType.objects.filter(is_show=True).values('id', 'name', 'icon_url')
  182. return response.json(0, list(feed_type))
  183. except Exception as e:
  184. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))