Exemple #1
0
    async def post(self):
        res_dict = {'code': 0}
        try:
            open_id = self.get_i_argument("open_id")
            race_cid = self.get_i_argument("race_cid")
            if not (open_id and race_cid):
                res_dict['code'] = 1001
                return res_dict

            member = await find_member_by_open_id(open_id)
            if not member:
                res_dict['code'] = 1002
                return res_dict

            if not member.auth_address:
                res_dict['code'] = 1003
                return res_dict

            town = self.get_i_argument('town')
            if not town:
                res_dict['code'] = 1005
                return res_dict

            district = self.get_i_argument('district')
            if not district:
                res_dict['code'] = 1006
                return res_dict

            mapping = await RaceMapping.find_one({
                'member_cid': member.cid,
                'race_cid': race_cid,
                'record_flag': 1
            })
            if not mapping:
                mapping = RaceMapping(race_cid=race_cid, member_cid=member.cid)
                mapping.province_code = member.province_code
                mapping.city_code = member.city_code
                mapping.district_code = member.district_code
                mapping.age_group = member.age_group
                mapping.sex = member.sex
                mapping.category = member.category
                mapping.education = member.education

            if not mapping.auth_address:
                mapping.auth_address = member.auth_address

            mapping.auth_address['town'] = town
            mapping.auth_address['district'] = district

            await mapping.save()
            res_dict['code'] = 1000
            return res_dict
        except Exception:
            logger.error(traceback.format_exc())
Exemple #2
0
    async def post(self):
        r_dict = {'code': 0}
        open_id = self.get_i_argument('open_id', None)
        race_cid = self.get_i_argument('race_cid', None)
        company_cid = self.get_i_argument('company_cid', None)
        if not race_cid:
            r_dict['code'] = 1001
            return r_dict
        member = await find_member_by_open_id(open_id)
        if not member:
            r_dict['code'] = 1002
            return r_dict
        company = await Company.find_one({
            'cid': company_cid,
            'record_flag': 1
        })
        if not company:
            r_dict['code'] = 1003
            return r_dict
        try:
            mapping = await RaceMapping.find_one({
                'member_cid': member.cid,
                'race_cid': race_cid,
                'record_flag': 1
            })
            if not mapping:
                mapping = RaceMapping(race_cid=race_cid, member_cid=member.cid)
                mapping.province_code = member.province_code
                mapping.city_code = member.city_code
                mapping.district_code = member.district_code
                mapping.age_group = member.age_group
                mapping.sex = member.sex
                mapping.category = member.category
                mapping.education = member.education
                mapping.company_cid = company_cid
            else:
                mapping.company_cid = company_cid

            if not mapping.auth_address:
                mapping.auth_address = member.auth_address

            await mapping.save()
            r_dict['code'] = 1000
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict
Exemple #3
0
    async def post(self):
        r_dict = {'code': 0}
        open_id = self.get_i_argument('open_id', None)
        race_cid = self.get_i_argument('race_cid', None)
        mobile = self.get_i_argument('mobile', None)
        v_code = self.get_i_argument('v_code', '')
        if not race_cid:
            r_dict['code'] = 1001
            return r_dict
        member = await find_member_by_open_id(open_id)
        if not member:
            r_dict['code'] = 1002
            return r_dict
        if not mobile:
            r_dict['code'] = 1003
            return r_dict
        try:
            if check_digit_verify_code(mobile, v_code):
                r_dict['code'] = 1000
            else:
                r_dict['code'] = 1004
                return r_dict

            mapping = await RaceMapping.find_one({
                'member_cid': member.cid,
                'race_cid': race_cid,
                'record_flag': 1
            })
            if not mapping:
                mapping = RaceMapping(race_cid=race_cid, member_cid=member.cid)
                mapping.province_code = member.province_code
                mapping.city_code = member.city_code
                mapping.district_code = member.district_code
                mapping.mobile = mobile
            else:
                mapping.mobile = mobile
            mapping.auth_address = member.auth_address
            await mapping.save()

            member.mobile = mobile
            await member.save()
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict
Exemple #4
0
    async def post(self):
        r_dict = {'code': 0}
        open_id = self.get_i_argument('open_id', '')
        race_cid = self.get_i_argument('race_cid', '')
        if not open_id:
            r_dict['code'] = 1001
            return r_dict

        try:
            member = await find_member_by_open_id(open_id)
            if not member or not member.auth_address:
                r_dict['code'] = 1002
                return r_dict
            #  判断用户的授权地理位置信息和活动位置是否相符
            r_dict = await check_enter_race(member, race_cid)
            if not r_dict['enter_race']:
                r_dict['code'] = 0
                return r_dict
            mapping = await RaceMapping.find_one(
                {
                    'race_cid': race_cid,
                    'member_cid': member.cid,
                    'record_flag': 1
                },
                read_preference=ReadPreference.PRIMARY)
            if not mapping:
                mapping = RaceMapping(race_cid=race_cid, member_cid=member.cid)
                mapping.province_code = member.province_code
                mapping.city_code = member.city_code
                mapping.district_code = member.district_code
                mapping.age_group = member.age_group
                mapping.sex = member.sex
                mapping.category = member.category
                mapping.education = member.education

            if not mapping.auth_address:
                mapping.auth_address = member.auth_address

            await mapping.save()

            race_checkpoints = await RaceGameCheckPoint.aggregate(stage_list=[
                MatchStage({
                    'status': STATUS_GAME_CHECK_POINT_ACTIVE,
                    'race_cid': race_cid
                }),
                LookupStage(RedPacketRule, 'redpkt_rule_cid', 'cid',
                            'rule_list'),
                SortStage([('index', DESC)])
            ]).to_list(None)
            if race_checkpoints:
                is_end = False
                checkpoint_history = await MemberCheckPointHistory.find_one(
                    filtered={
                        'member_cid': member.cid,
                        'check_point_cid': race_checkpoints[0].cid,
                        'status': STATUS_RESULT_CHECK_POINT_WIN,
                        'record_flag': 1
                    })
                if checkpoint_history:
                    is_end = True
                race_checkpoint_cids = [c.cid for c in race_checkpoints]
                if not mapping.race_check_point_cid or mapping.race_check_point_cid not in race_checkpoint_cids:
                    mapping.race_check_point_cid = race_checkpoint_cids[-1]
                    await member.save()
                    cur_game_checkpoint_cid = race_checkpoint_cids[-1]
                elif is_end:
                    cur_game_checkpoint_cid = race_checkpoint_cids[0]
                else:
                    index = race_checkpoint_cids.index(
                        mapping.race_check_point_cid)
                    cur_game_checkpoint_cid = race_checkpoint_cids[index]
                game_checkpoint_list = [{
                    'cid':
                    checkpoint.cid,
                    'index':
                    checkpoint.index,
                    'alias':
                    checkpoint.alias,
                    'unlock_quantity':
                    checkpoint.unlock_quantity,
                    'has_redpkt':
                    await has_redpkt(race_cid, checkpoint, member.cid)
                } for checkpoint in race_checkpoints]

                r_dict = {
                    'race_cid': race_cid,
                    'code': 1000,
                    'is_end': is_end,
                    'avatar': member.avatar,
                    'nick_name': member.nick_name,
                    'cur_game_checkpoint_cid': cur_game_checkpoint_cid,
                    'game_checkpoint_list': game_checkpoint_list
                }
            else:
                r_dict['code'] = 1000
                r_dict['game_checkpoint_list'] = []
        except Exception:
            logger.error(traceback.format_exc())
        return r_dict