4 Commits 4365dee39d ... 56f5025a6d

Author SHA1 Message Date
  peng 56f5025a6d 袋鼠妈咪 9 months ago
  peng f25521907a Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into peng 9 months ago
  peng 9e162b269f Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into peng 9 months ago
  peng 89b21d78fd Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into peng 9 months ago

+ 39 - 13
Roomumy/Controller/BabyController.py

@@ -10,7 +10,6 @@
 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
@@ -37,10 +36,12 @@ class BabyView(View):
         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 == 'addOrEdit':  # 获取宝宝信息
+        if operation == 'addOrEdit':  # 添加修改宝宝信息
             return self.add_or_edit_baby(request, request_dict, user_id, ResponseObject('cn'))
         elif operation == 'query':  # 获取宝宝信息
             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:
             return response.json(414)
 
@@ -71,22 +72,28 @@ class BabyView(View):
         if not all([nick_name, sex, birthday, is_default]):
             return response.json(404)
         now_time = int(time.time())
+        bucket = "ansjerfilemanager"
+        s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)
         try:
             with transaction.atomic():
                 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:
+                    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,
                                                       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
                 if icon:
-                    bucket = "ansjerfilemanager"
                     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(
                         bucket,
                         icon_path,
@@ -94,8 +101,9 @@ class BabyView(View):
                         {"ContentType": icon.content_type, "ACL": "public-read"},
                     )
                     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)
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -115,9 +123,27 @@ class BabyView(View):
         try:
             baby_qs = BabyUser.objects.filter(user_id=user_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()
-            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)})
         except Exception as 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   :
 @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)))

+ 2 - 1
Roomumy/models.py

@@ -40,7 +40,8 @@ class FeedType(models.Model):
 class FeedDiary(models.Model):
     id = models.AutoField(primary_key=True, 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:自定义
     feed_content = models.JSONField(null=True, verbose_name='事件内容')
     # 当类型为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 = [
     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()),
 ]