| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | # -*- encoding: utf-8 -*-"""@File    : BabyController.py@Time    : 2024-10-7 14:37:30@Author  : peng@Email   :@Software: PyCharm"""import jsonimport timefrom django.db import transactionfrom django.db.models import F, Q, Countfrom django.views import Viewfrom Ansjer.cn_config.config_formal import SECRET_ACCESS_KEY, ACCESS_KEY_ID, REGION_NAMEfrom Object.AWS.AmazonS3Util import AmazonS3Utilfrom Roomumy.models import BabyUserfrom Object.ResponseObject import ResponseObjectfrom Service.CommonService import CommonServiceclass 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'))        elif operation == 'delete':  # 删除宝宝信息            return self.delete_baby(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())        bucket = "ansjerfilemanager"        s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)        try:            with transaction.atomic():                if baby_id:                    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, icon_url=icon_url)                    baby_id = baby_qs.id                if icon:                    s3_obj = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)                    icon_path = 'Roomumy/icon_{}.jpg'.format(baby_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.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)))    @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(id=baby_id)            count = baby_qs.count()            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)))
 |