Browse Source

袋鼠妈咪

peng 9 months ago
parent
commit
56f5025a6d

+ 39 - 13
Roomumy/Controller/BabyController.py

@@ -10,7 +10,6 @@
 import json
 import json
 import time
 import time
 
 
-from django.core.exceptions import ObjectDoesNotExist
 from django.db import transaction
 from django.db import transaction
 from django.db.models import F, Q, Count
 from django.db.models import F, Q, Count
 from django.views import View
 from django.views import View
@@ -37,10 +36,12 @@ class BabyView(View):
         token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
         token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
         if token_code != 0:
         if token_code != 0:
             return response.json(token_code)
             return response.json(token_code)
-        if operation == 'addOrEdit':  # 获取宝宝信息
+        if operation == 'addOrEdit':  # 添加修改宝宝信息
             return self.add_or_edit_baby(request, request_dict, user_id, ResponseObject('cn'))
             return self.add_or_edit_baby(request, request_dict, user_id, ResponseObject('cn'))
         elif operation == 'query':  # 获取宝宝信息
         elif operation == 'query':  # 获取宝宝信息
             return self.query_baby_info(request_dict, user_id, ResponseObject('cn'))
             return self.query_baby_info(request_dict, user_id, ResponseObject('cn'))
+        elif operation == 'delete':  # 删除宝宝信息
+            return self.delete_baby(request_dict, user_id, ResponseObject('cn'))
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -71,22 +72,28 @@ class BabyView(View):
         if not all([nick_name, sex, birthday, is_default]):
         if not all([nick_name, sex, birthday, is_default]):
             return response.json(404)
             return response.json(404)
         now_time = int(time.time())
         now_time = int(time.time())
+        bucket = "ansjerfilemanager"
+        s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)
         try:
         try:
             with transaction.atomic():
             with transaction.atomic():
                 if baby_id:
                 if baby_id:
-                    BabyUser.objects.get(id=baby_id, user_id=user_id).update(is_default=is_default, birthday=birthday,
-                                                                             nick_name=nick_name, sex=sex,
-                                                                             device_id=device_id, updated_time=now_time)
+                    BabyUser.objects.filter(id=baby_id, user_id=user_id).update(is_default=is_default,
+                                                                                birthday=birthday,
+                                                                                nick_name=nick_name, sex=sex,
+                                                                                device_id=device_id,
+                                                                                updated_time=now_time)
                 else:
                 else:
+                    if sex == '1':
+                        icon_url = s3_url + 'Roomumy/boy.jpg'
+                    else:
+                        icon_url = s3_url + 'Roomumy/girl.jpg'
                     baby_qs = BabyUser.objects.create(user_id=user_id, is_default=is_default, birthday=birthday,
                     baby_qs = BabyUser.objects.create(user_id=user_id, is_default=is_default, birthday=birthday,
                                                       nick_name=nick_name, sex=sex, device_id=device_id,
                                                       nick_name=nick_name, sex=sex, device_id=device_id,
-                                                      created_time=now_time, updated_time=now_time)
+                                                      created_time=now_time, updated_time=now_time, icon_url=icon_url)
                     baby_id = baby_qs.id
                     baby_id = baby_qs.id
                 if icon:
                 if icon:
-                    bucket = "ansjerfilemanager"
                     s3_obj = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
                     s3_obj = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
-                    s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)
-                    icon_path = 'Roomumy/icon_{}.jpg'.format(baby_qs.id)
+                    icon_path = 'Roomumy/icon_{}.jpg'.format(baby_id)
                     s3_obj.upload_file_obj(
                     s3_obj.upload_file_obj(
                         bucket,
                         bucket,
                         icon_path,
                         icon_path,
@@ -94,8 +101,9 @@ class BabyView(View):
                         {"ContentType": icon.content_type, "ACL": "public-read"},
                         {"ContentType": icon.content_type, "ACL": "public-read"},
                     )
                     )
                     icon_url = s3_url + icon_path
                     icon_url = s3_url + icon_path
-                    BabyUser.objects.get(id=baby_id, user_id=user_id).update(icon_url=icon_url)
-
+                    BabyUser.objects.filter(id=baby_id, user_id=user_id).update(icon_url=icon_url)
+                if is_default == '1':
+                    BabyUser.objects.filter(user_id=user_id).exclude(id=baby_id).update(is_default=False)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -115,9 +123,27 @@ class BabyView(View):
         try:
         try:
             baby_qs = BabyUser.objects.filter(user_id=user_id)
             baby_qs = BabyUser.objects.filter(user_id=user_id)
             if baby_id:
             if baby_id:
-                baby_qs = baby_qs.filter(baby_id=baby_id)
+                baby_qs = baby_qs.filter(id=baby_id)
             count = baby_qs.count()
             count = baby_qs.count()
-            baby_qs = baby_qs.values('nick_name', 'sex', 'birthday', 'icon_url', 'device_id', 'is_default')
+            baby_qs = baby_qs.values('id', 'nick_name', 'sex', 'birthday', 'icon_url', 'device_id', 'is_default')
             return response.json(0, {'total': count, 'baby_list': list(baby_qs)})
             return response.json(0, {'total': count, 'baby_list': list(baby_qs)})
         except Exception as e:
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @classmethod
+    def delete_baby(cls, request_dict, user_id, response):
+        """
+        删除宝宝信息
+        @param request_dict: 请求参数
+        @param user_id: 用户id
+        @request_dict baby_id: 宝宝id
+        @param response: 响应对象
+        @return: response
+        """
+        baby_id = request_dict.get('baby_id', None)
+
+        try:
+            BabyUser.objects.filter(user_id=user_id, 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)))

+ 150 - 27
Roomumy/Controller/FeedDiaryController.py

@@ -6,21 +6,15 @@
 @Email   :
 @Email   :
 @Software: PyCharm
 @Software: PyCharm
 """
 """
-
+import datetime
 import json
 import json
 import time
 import time
 
 
-from django.core.exceptions import ObjectDoesNotExist
-from django.db import transaction
 from django.db.models import F, Q, Count
 from django.db.models import F, Q, Count
 from django.views import View
 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 Object.ResponseObject import ResponseObject
+from Roomumy.models import FeedDiary, FeedType
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 
 
 
 
@@ -36,37 +30,166 @@ class FeedDiaryView(View):
         return self.validation(request.POST, request, operation)
         return self.validation(request.POST, request, operation)
 
 
     def validation(self, request_dict, 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)
         token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
         if token_code != 0:
         if token_code != 0:
             return response.json(token_code)
             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:
         else:
             return response.json(414)
             return response.json(414)
 
 
     @classmethod
     @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: 请求参数
         @param request_dict: 请求参数
-        @request_dict deviceId: 网关设备id
-        @request_dict subDeviceId: 子设备id
         @param response: 响应对象
         @param response: 响应对象
         @return: 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:
         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:
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 2 - 1
Roomumy/models.py

@@ -40,7 +40,8 @@ class FeedType(models.Model):
 class FeedDiary(models.Model):
 class FeedDiary(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     baby_id = models.IntegerField(default=0, verbose_name='关联宝宝id')
     baby_id = models.IntegerField(default=0, verbose_name='关联宝宝id')
-    feed_type = models.ForeignKey(FeedType, to_field='id', on_delete=models.CASCADE, default='', verbose_name='喂养类型')
+    feed_type = models.ForeignKey(FeedType, to_field='id', on_delete=models.CASCADE, default='',
+                                  verbose_name='喂养类型')
     # 1:母乳亲喂 2:母乳瓶喂 3:奶粉 4:辅食 5:换尿布 6:身高体重 7:户外活动 8:育儿日记 9:自定义
     # 1:母乳亲喂 2:母乳瓶喂 3:奶粉 4:辅食 5:换尿布 6:身高体重 7:户外活动 8:育儿日记 9:自定义
     feed_content = models.JSONField(null=True, verbose_name='事件内容')
     feed_content = models.JSONField(null=True, verbose_name='事件内容')
     # 当类型为5时,sub_event_type为 1:嘘嘘 2:臭臭 3:嘘嘘+臭臭 4:干爽
     # 当类型为5时,sub_event_type为 1:嘘嘘 2:臭臭 3:嘘嘘+臭臭 4:干爽

+ 1 - 1
Roomumy/server_urls/roomumy_url.py

@@ -12,5 +12,5 @@ from Roomumy.Controller import BabyController, FeedDiaryController
 
 
 urlpatterns = [
 urlpatterns = [
     re_path(r'^baby/(?P<operation>.*)$', BabyController.BabyView.as_view()),
     re_path(r'^baby/(?P<operation>.*)$', BabyController.BabyView.as_view()),
-    re_path(r'^feed-diary/(?P<operation>.*)$', FeedDiaryController.FeedDiaryView.as_view()),
+    re_path(r'^feedDiary/(?P<operation>.*)$', FeedDiaryController.FeedDiaryView.as_view()),
 ]
 ]