Răsfoiți Sursa

袋鼠妈妈

peng 10 luni în urmă
părinte
comite
6d0b852111

+ 123 - 0
Roomumy/Controller/BabyController.py

@@ -0,0 +1,123 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : BabyController.py
+@Time    : 2024-10-7 14:37:30
+@Author  : peng
+@Email   :
+@Software: PyCharm
+"""
+
+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.cn_config.config_formal import SECRET_ACCESS_KEY, ACCESS_KEY_ID, REGION_NAME
+
+from Object.AWS.AmazonS3Util import AmazonS3Util
+from Roomumy.models import BabyUser
+from Object.ResponseObject import ResponseObject
+from Service.CommonService import CommonService
+
+
+class BabyView(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 == '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'))
+        else:
+            return response.json(414)
+
+    @classmethod
+    def add_or_edit_baby(cls, request, request_dict, user_id, response):
+        """
+        添加或修改宝宝信息
+        @param request_dict: 请求参数
+        @param request: 请求
+        @param user_id: 用户id
+        @request_dict device_id: 设备id
+        @request_dict baby_id: 宝宝id
+        @request_dict nick_name: 昵称
+        @request_dict sex: 性别
+        @request_dict birthday: 生日
+        @request_dict icon: 头像
+        @request_dict is_default: 是否默认
+        @param response: 响应对象
+        @return: response
+        """
+        device_id = request_dict.get('device_id', None)
+        baby_id = request_dict.get('baby_id', None)
+        nick_name = request_dict.get('nick_name', None)
+        sex = request_dict.get('sex', None)
+        birthday = request_dict.get('birthday', None)
+        icon = request.FILES.get('icon', None)
+        is_default = request_dict.get('is_default', None)
+        if not all([nick_name, sex, birthday, is_default]):
+            return response.json(404)
+        now_time = int(time.time())
+        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)
+                else:
+                    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)
+                    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)
+                    s3_obj.upload_file_obj(
+                        bucket,
+                        icon_path,
+                        icon,
+                        {"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)
+
+            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 query_baby_info(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:
+            baby_qs = BabyUser.objects.filter(user_id=user_id)
+            if baby_id:
+                baby_qs = baby_qs.filter(baby_id=baby_id)
+            count = baby_qs.count()
+            baby_qs = baby_qs.values('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)))

+ 72 - 0
Roomumy/Controller/FeedDiaryController.py

@@ -0,0 +1,72 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : FeedDiaryController.py
+@Time    : 2024-10-7 14:37:30
+@Author  : peng
+@Email   :
+@Software: PyCharm
+"""
+
+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 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):
+        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)
+        else:
+            return response.json(414)
+
+    @classmethod
+    def condition_devices(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)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))