Exemplo n.º 1
0
    async def post(self):
        res = dict(code=0)

        name = self.get_argument('name')
        sex = int(self.get_argument('sex', 1))
        email = self.get_argument('email')
        mobile = self.get_argument('mobile')
        birthday = self.get_argument('birthday')
        province_code = self.get_argument('province_code')  # 省份编码
        city_code = self.get_argument('city_code')  # 城市编码
        vehicle_code = self.get_argument('vehicle_code')  # 车型编号
        purchase_datetime = self.get_argument('purchase_datetime')  # 车辆购买时间
        content = self.get_argument('content')  # 备注
        status = int(self.get_argument('status', STATUS_USER_ACTIVE))

        if name and mobile and email:
            # 校验用户名
            if mobile:
                exist_count = await Member.count(dict(mobile=mobile))
                if exist_count:
                    res['code'] = -2
                    return res
            if email:
                email_valid = re.match(
                    r"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", email)
                exist_count = await Member.count(dict(email=email))
                if exist_count:
                    res['code'] = -3
                    return res
                if not email_valid:
                    res['code'] = -4
                    return res
            if mobile:
                member = Member()
                member.mobile = mobile
                member.code = get_increase_code(KEY_INCREASE_MEMBER_CODE)
                if email:
                    member.email = email
            else:
                member = Member()
                member.email = email
                member.code = get_increase_code(KEY_INCREASE_MEMBER_CODE)

            if name:
                member.name = name
            member.sex = sex
            if birthday:
                member.birthday = str2datetime(birthday, '%Y-%m-%d')

            if vehicle_code:
                vehicle = await Vehicle.find_one(
                    dict(code=vehicle_code, record_flag=1))
                if vehicle:
                    member.needless['vehicle_title'] = vehicle.title
                    member.needless['vehicle_brand'] = vehicle.needless.get(
                        'brand')
                    member.needless['vehicle_category'] = vehicle.needless.get(
                        'category')
                    member.needless['vehicle_series'] = vehicle.needless.get(
                        'series')
                    member.needless['vehicle_config'] = vehicle.needless.get(
                        'config')
                    member.needless['vehicle_colour'] = vehicle.needless.get(
                        'colour')
                    member.needless['vehicle_displace'] = vehicle.needless.get(
                        'displace')
            else:
                for attr in [
                        'vehicle_brand', 'vehicle_category', 'vehicle_series',
                        'vehicle_config', 'vehicle_colour', 'vehicle_displace',
                        'vehicle_title'
                ]:
                    try:
                        member.needless.pop(attr)
                    except KeyError:
                        pass

            member.content = content
            member.status = status

            # 冗余信息
            if province_code:
                province = await AdministrativeDivision.find_one(
                    dict(parent_code=None, code=province_code))
                if province:
                    member.needless['province'] = province.title
                    city = await AdministrativeDivision.find_one(
                        dict(parent_code=province_code, code=city_code))
                    if city:
                        member.needless['city'] = city.title

            member.province_code = province_code
            member.city_code = city_code
            member.source = SOURCE_TYPE_MEMBER_SYSTEM

            if vehicle_code:
                if vehicle_code:
                    vehicle = await Vehicle.find_one(
                        dict(code=vehicle_code, record_flag=1))
                    if vehicle:
                        member.needless['vehicle_title'] = vehicle.title
                        member.needless[
                            'vehicle_brand'] = vehicle.needless.get('brand')
                        member.needless[
                            'vehicle_category'] = vehicle.needless.get(
                                'category')
                        member.needless[
                            'vehicle_series'] = vehicle.needless.get('series')
                        member.needless[
                            'vehicle_config'] = vehicle.needless.get('config')
                        member.needless[
                            'vehicle_colour'] = vehicle.needless.get('colour')
                        member.needless[
                            'vehicle_displace'] = vehicle.needless.get(
                                'displace')
                member.vehicle_code = vehicle_code

            if purchase_datetime:
                member.purchase_datetime = str2datetime(
                    purchase_datetime, '%Y-%m')

            member.status = status
            member_id = await member.save()

            res['code'] = 1
            res['member_id'] = member_id
        else:
            res['code'] = -1
        return res
Exemplo n.º 2
0
    async def post(self):
        r_dict = {'code': 0}
        try:
            args_dict = json.loads(self.request.body)
            auth_code = args_dict.get('auth_code', None)
            user_info = args_dict.get('userInfo', {})
            if not user_info:
                user_info = {}

            source = args_dict.get('source', None)
            if auth_code:
                params_dict = {
                    'app_id': MINI_APP_ID,
                    'app_secret': MINI_APP_SECRET,
                    'code': auth_code
                }
                exchange_url = API_CODE_EXCHANGE_SESSION_URL.format(
                    **params_dict)
                http_client = AsyncHTTPClient()
                response = await http_client.fetch(exchange_url,
                                                   validate_cert=False)
                if response.code == 200:
                    rep_dict = json.loads(response.body)
                    open_id = rep_dict.get('openid')
                    friend_open_id = args_dict.get('friend_open_id', None)
                    session_key = rep_dict.get('session_key')
                    if open_id:
                        member = await find_member_by_open_id(open_id)
                        if not member:
                            if source is not None:
                                source_type = str(source)
                            else:
                                source_type = str(SOURCE_TYPE_MEMBER_SYSTEM)
                            # 创建用户
                            member = Member(id=ObjectId(),
                                            code=get_increase_code(
                                                KEY_INCREASE_MEMBER_CODE),
                                            open_id=open_id,
                                            source=source_type,
                                            status=STATUS_USER_ACTIVE)
                            wechat_info = await parse_wechat_info(user_info)
                            member.sex = int(
                                user_info.get('gender')) if user_info.get(
                                    'gender') else SEX_NONE

                            member.avatar = wechat_info.get(
                                'avatar'
                            ) if wechat_info.get('avatar') else '%s://%s%s' % (
                                SERVER_PROTOCOL, SERVER_HOST,
                                self.static_url('images/default/visitor.png'))
                            member.nick_name = wechat_info.get(
                                'nick_name') if wechat_info.get(
                                    'nick_name') else '游客'

                            if wechat_info:
                                member.province_code = wechat_info.get(
                                    'province_code')
                                member.city_code = wechat_info.get('city_code')
                                member.district_code = wechat_info.get(
                                    'district_code')

                                member.needless['province'] = wechat_info.get(
                                    'province_name')
                                member.needless['city'] = wechat_info.get(
                                    'city_name')
                                member.needless['district'] = wechat_info.get(
                                    'district_name')

                                member.wechat_info = user_info

                            member.register_datetime = datetime.datetime.now()
                            member.login_datetime = datetime.datetime.now()
                            member.login_times += 1

                            await member.save()

                            # 会员属性统计
                            await start_task_member_property_statistics(member)

                            r_dict['open_id'] = open_id
                            r_dict['session_key'] = session_key
                            r_dict['code'] = 1000
                        else:
                            if member.status == STATUS_USER_INACTIVE:
                                r_dict['code'] = 1002
                            else:
                                member.login_datetime = datetime.datetime.now()
                                member.login_times += 1
                                await member.save()

                                r_dict['open_id'] = open_id
                                r_dict['session_key'] = session_key
                                r_dict['code'] = 1000
                        if friend_open_id:
                            friend = await find_member_by_open_id(
                                friend_open_id)
                            if friend:
                                friend_member = MemberFriend(
                                    member_cid=member.cid,
                                    friend_cid=friend.cid)
                                await friend_member.save()
                                member_friend = MemberFriend(
                                    member_cid=friend.cid,
                                    friend_cid=member.cid)
                                await member_friend.save()
                else:
                    r_dict['code'] = 1003
            else:
                r_dict['code'] = 1001
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict