FeedDiaryController.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. elif operation == 'feedTypeConfig':
  41. return self.feed_type_config(request_dict, ResponseObject('cn'))
  42. else:
  43. return response.json(414)
  44. @classmethod
  45. def get_feed_diary_data(cls, request_dict, response):
  46. """
  47. 查询喂养记录
  48. @param request_dict: 请求参数
  49. @request_dict start_time: 开始时间戳
  50. @request_dict end_time: 结束时间戳
  51. @request_dict baby_id: 宝宝id
  52. @request_dict event_type: 喂养类型
  53. @param response: 响应对象
  54. @return: response
  55. """
  56. start_time = request_dict.get('start_time', None)
  57. end_time = request_dict.get('end_time', None)
  58. baby_id = request_dict.get('baby_id', None)
  59. feed_type = request_dict.get('feed_type', None)
  60. if not all([start_time, end_time, baby_id]):
  61. return response.json(444, {'error param': 'start_time, end_time or baby_id'})
  62. try:
  63. feed_diary = FeedDiary.objects.filter(date_time__gte=start_time, date_time__lte=end_time,
  64. baby_id=baby_id)
  65. if feed_type:
  66. feed_diary = feed_diary.filter(feed_type=feed_type)
  67. feed_diary = feed_diary.values('feed_type__name', 'feed_type__icon_url', 'feed_content', 'date_time',
  68. 'id', 'feed_type')
  69. return response.json(0, list(feed_diary))
  70. except Exception as e:
  71. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  72. @classmethod
  73. def get_statistics_data(cls, request_dict, response):
  74. """
  75. 查询喂养记录
  76. @param request_dict: 请求参数
  77. @request_dict start_time: 开始时间戳
  78. @request_dict end_time: 结束时间戳
  79. @request_dict baby_id: 宝宝id
  80. @request_dict event_type: 喂养类型
  81. @request_dict sub_event_type: 喂养子类型
  82. @param response: 响应对象
  83. @return: response
  84. """
  85. start_time = request_dict.get('start_time', None)
  86. end_time = request_dict.get('end_time', None)
  87. baby_id = request_dict.get('baby_id', None)
  88. feed_type = request_dict.get('feed_type', None)
  89. sub_feed_type = request_dict.get('sub_feed_type', None)
  90. if not all([start_time, end_time, baby_id, feed_type]):
  91. return response.json(444, {'error param': 'start_time, end_time, event_type or baby_id'})
  92. s_time = datetime.datetime.fromtimestamp(int(start_time))
  93. e_time = datetime.datetime.fromtimestamp(int(end_time))
  94. time_list = CommonService.cutting_time(s_time, e_time, 'day')
  95. try:
  96. result_list = []
  97. for time_range in time_list:
  98. content_list = []
  99. feed_diary = FeedDiary.objects.filter(created_time__gte=time_range[0], created_time__lt=time_range[1],
  100. baby_id=baby_id, feed_type_id=feed_type).values_list(
  101. 'feed_content', flat=True)
  102. count = 0
  103. if feed_type == '5' and sub_feed_type: # 换尿布
  104. sub_feed_type = int(sub_feed_type)
  105. for item in feed_diary:
  106. if item['sub_feed_type'] in [sub_feed_type, 3]: # 1:嘘嘘 2:臭臭 3:嘘嘘+臭臭 4:干爽
  107. count += 1
  108. content_list.append(item)
  109. else:
  110. count = feed_diary.count()
  111. content_list = list(feed_diary)
  112. result_list.append({
  113. 'date_time': time_range[0],
  114. 'count': count,
  115. 'feed_content': content_list
  116. })
  117. return response.json(0, result_list)
  118. except Exception as e:
  119. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  120. @classmethod
  121. def add_or_edit_feed_diary(cls, request_dict, response):
  122. """
  123. 添加编辑喂养记录
  124. @param request_dict: 请求参数
  125. @request_dict date_time: 喂养时间戳
  126. @request_dict baby_id: 宝宝id
  127. @request_dict feed_id: 记录id
  128. @request_dict event_type: 喂养类型
  129. @request_dict event_content: 喂养事件
  130. @param response: 响应对象
  131. @return: response
  132. """
  133. date_time = request_dict.get('date_time', None)
  134. baby_id = request_dict.get('baby_id', None)
  135. feed_id = request_dict.get('feed_id', None)
  136. feed_type = request_dict.get('feed_type', None)
  137. feed_content = request_dict.get('feed_content', None)
  138. if not all([date_time, baby_id, feed_type, feed_content]):
  139. return response.json(444, {'error param': 'date_time, feed_content, feed_type or baby_id'})
  140. feed_content = eval(feed_content)
  141. try:
  142. now_time = int(time.time())
  143. feed_type_qs = FeedType.objects.filter(id=feed_type)
  144. if not feed_type_qs:
  145. return response.json(444, {'error param': 'feed_type'})
  146. if feed_id:
  147. FeedDiary.objects.filter(id=feed_id, baby_id=baby_id).update(date_time=date_time,
  148. updated_time=now_time,
  149. feed_content=feed_content)
  150. else:
  151. FeedDiary.objects.create(baby_id=baby_id, feed_type_id=feed_type, feed_content=feed_content,
  152. date_time=date_time, created_time=now_time, updated_time=now_time)
  153. return response.json(0)
  154. except Exception as e:
  155. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  156. @classmethod
  157. def delete_feed_diary(cls, request_dict, response):
  158. """
  159. 删除喂养记录
  160. @param request_dict: 请求参数
  161. @request_dict baby_id: 宝宝id
  162. @request_dict feed_id: 记录id
  163. @param response: 响应对象
  164. @return: response
  165. """
  166. baby_id = request_dict.get('baby_id', None)
  167. feed_id = request_dict.get('feed_id', None)
  168. if not all([feed_id, baby_id]):
  169. return response.json(444, {'error param': 'feed_id or baby_id'})
  170. try:
  171. FeedDiary.objects.filter(id=feed_id, baby_id=baby_id).delete()
  172. return response.json(0)
  173. except Exception as e:
  174. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  175. @classmethod
  176. def get_feed_list(cls, request_dict, response):
  177. """
  178. 获取喂养列表
  179. @param request_dict: 请求参数
  180. @param response: 响应对象
  181. @return: response
  182. """
  183. try:
  184. feed_type = FeedType.objects.filter(is_show=True).values('id', 'name', 'icon_url', 'sort').order_by('sort')
  185. return response.json(0, list(feed_type))
  186. except Exception as e:
  187. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  188. @classmethod
  189. def feed_type_config(cls, request_dict, response):
  190. """
  191. 根据喂养类型返回文本列表
  192. @param request_dict: 请求参数
  193. @param response: 响应对象
  194. @return: response
  195. """
  196. try:
  197. feed_type = request_dict.get('feed_type_id', None)
  198. if feed_type == '4':#辅食
  199. feed_type_text = [
  200. "米粉", "面条", "红薯", "山药", "南瓜",
  201. "胡萝卜", "菠菜", "番茄", "土豆", "猪肉",
  202. "猪肝", "鱼肉", "鸡肉", "牛肉", "虾",
  203. "鸡蛋", "苹果", "香蕉", "猕猴桃", "火龙果"
  204. ]
  205. elif feed_type == '5':
  206. feed_type_text = ["嘘嘘", "臭臭", "嘘嘘+臭臭", "干爽"]
  207. else:
  208. feed_type_text = []
  209. return response.json(0, feed_type_text)
  210. except Exception as e:
  211. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))