Ejemplo n.º 1
0
def getMatchRoomName(self, seat):
    arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
        seat.userId,
        int(seat.player.mixId) if seat.player.mixId else self.bigRoomId, None)
    roomName = seat.player.matchUserInfo.get('roomName')
    if arenaContent:
        roomName = arenaContent.get('showName')
    return roomName or self.table.room.roomConf.get('name', '')
Ejemplo n.º 2
0
    def notifyMatchWait(self, player):
        '''
        通知用户等待晋级
        '''
        try:
            if player.isQuit:
                return
            ftlog.info('MatchPlayerNotifierDizhu.notifyMatchWait matchId=',
                       player.matchInst.matchId, 'instId=',
                       player.matchInst.instId, 'userId=', player.userId,
                       'signinParams=', player.signinParams, 'stageIndex=',
                       player.stage.index)
            self.notifyMatchUpdate(player)
            self.notifyMatchRank(player)
            msg = MsgPack()
            msg.setCmd('m_wait')
            msg.setResult('gameId', self._room.gameId)
            msg.setResult('roomId', self._room.bigRoomId)
            msg.setResult('mixId', player.mixId)
            msg.setResult('tableId', player.match.tableId)
            arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
                player.userId,
                int(player.mixId) if player.mixId else self._room.bigRoomId,
                None)
            roomName = player.matchInst.matchConf.getRoomName(player.mixId)
            if arenaContent:
                roomName = arenaContent.get('showName') or roomName
            msg.setResult('mname', roomName)
            prevStage = player.stage.prevStage or player.stage
            msg.setResult('riseCount', prevStage.stageConf.riseUserCount)
            steps = []
            for stage in player.matchInst.stages:
                isCurrent = True if stage == prevStage else False
                des = '%s人晋级' % (stage.stageConf.riseUserCount)
                stepInfo = {'des': des}
                if isCurrent:
                    stepInfo['isCurrent'] = 1
                stepInfo['name'] = stage.stageConf.name
                steps.append(stepInfo)

            msg.setResult('steps', steps)
            msg.setResult('rise', player.cardCount ==
                          0)  # arena比赛已经确定升级player.stage.stageConf.cardCount
            msg.setResult('matchType', 'arena_match')  # arena比赛
            router.sendToUser(msg, player.userId)
        except:
            ftlog.error()
Ejemplo n.º 3
0
    def getMatchInfo(self, userId, signinParams, mo):
        inst = self.match.currentInstance
        if not inst:
            return
        
        mixId = signinParams.get('mixId', None)
        conf = inst.matchConf if inst else self.match.matchConf

        if mixId is None:
            player = self.match.findPlayer(userId)
            if player:
                mixId = player.mixId

        info = {}
        info['roomId'] = self.roomId
        info['mixId'] = mixId
        info['type'] = MatchType.USER_COUNT
        arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(userId, int(mixId) if mixId else self.bigRoomId, None)
        showName = conf.getRoomName(mixId)
        if arenaContent:
            showName = arenaContent.get('showName') or showName
        info['name'] = showName
        info['minPlayer'] = info['maxPlayer'] = conf.stages[0].totalUserCount
        info['state'] = self.translateState(inst.state)
        info['curTimeLeft'] = 0
        mo.setResult('info', info)
        mo.setResult('startTime', '')

        if ftlog.is_debug():
            ftlog.debug('DizhuCtrlRoomArenaMatch.getMatchInfo',
                        'userId=', userId,
                        'signinParams=', signinParams,
                        'mixId=', mixId,
                        'info=', info,
                        'arenaContent=', arenaContent)

        matchDuration = int(self.calcMatchDuration(conf) / 60)
        mo.setResult('rankRewards', self.buildRankRewards(self.match.matchRankRewardsSelector.getRewardsList(userId, conf.getRankRewardsList(mixId), mixId)))
        mo.setResult('duration', '约%d分钟' % (min(30, matchDuration)))
            
        mo.setResult('tips', {'infos':conf.tips.infos,
                              'interval':conf.tips.interval
                              })
        
        record = MatchRecord.loadRecord(self.gameId, userId, self.match.matchId, mixId)
        if record:
            mo.setResult('mrecord', {'bestRank':record.bestRank,
                                     'bestRankDate':record.bestRankDate,
                                     'isGroup':record.isGroup,
                                     'crownCount':record.crownCount,
                                     'playCount':record.playCount})
        mo.setResult('fees', [])
        # 报名费列表
        mo.setResult('feesList', matchutil.buildFeesList(userId, conf.getFees(mixId)))
        # 分组赛奖励列表 arena_match没有分组奖励
        mo.setResult('groupRewardList', [])
        # 比赛进程 海选赛-》分组赛-》8强赛-》总决赛
        stagesList = self.buildStages(conf.stages) if conf.stages else []
        mo.setResult('stages', stagesList)
        # 比赛报名的前提条件
        conditionDesc = self.getMatchConditionDesc(self.roomId, userId)
        if conditionDesc:
            mo.setResult('conditionDesc', conditionDesc)
        # 比赛奖励分割线文字
        mo.setResult('splitWord', self.getMatchRewardSplitWord(self.roomId))
        # 获得比赛历史数据
        mo.setResult('hisitory', MatchHistoryHandler.getMatchHistory(userId, self.match.matchConf.recordId, mixId=mixId))
def notifyMatchOver(self, player, reason, rankRewards):
    '''
    通知用户比赛结束了
    '''
    try:
        ftlog.info('MatchPlayerNotifierDizhu.notifyMatchOver matchId=',
                   player.matchInst.matchId, 'instId=',
                   player.matchInst.instId, 'userId=', player.userId,
                   'signinParams=', player.signinParams, 'stageIndex=',
                   player.stage.index, 'rank=', player.rank, 'reason=', reason,
                   'rankRewards=', rankRewards)

        if (reason == MatchFinishReason.USER_WIN
                or reason == MatchFinishReason.USER_LOSER):
            try:
                if player.isQuit:
                    rankRewards = None
                event_remote.publishMatchWinloseEvent(
                    self._room.gameId, player.userId, self._room.match.matchId,
                    reason == MatchFinishReason.USER_WIN, player.rank,
                    player.matchInst.matchConf.stages[0].totalUserCount,
                    rankRewards.conf if rankRewards else None)

                tempGameResult = 1 if reason == MatchFinishReason.USER_WIN else -1
                hall51event.sendToHall51MatchOverEvent(player.userId,
                                                       self._room.gameId,
                                                       self._room.bigRoomId,
                                                       tempGameResult, -1, -1)

                from dizhu.entity.matchhistory import MatchHistoryHandler
                MatchHistoryHandler.onMatchOver(
                    player.userId, player.matchInst.matchConf.recordId,
                    player.rank, reason == MatchFinishReason.USER_WIN,
                    rankRewards.conf if rankRewards else None, False,
                    player.mixId)

                if not rankRewards:
                    matchutil.report_bi_game_event(
                        'MATCH_REWARD', player.userId,
                        player.matchInst.matchId, 0,
                        int(player.matchInst.instId.split('.')[1]), 0, 0, 0, [
                            0, 0, 0, player.rank,
                            int(player.mixId) if player.mixId else 0, 0
                        ], 'match_reward')

            except:
                ftlog.error()

            # 比赛记录保存
            try:
                event = {
                    'gameId': self._room.gameId,
                    'userId': player.userId,
                    'matchId': self._room.match.matchId,
                    'rank': player.rank,
                    'isGroup': 0,
                    'mixId': player.mixId
                }
                MatchRecord.updateAndSaveRecord(event)
            except:
                ftlog.error()

        msg = MsgPack()
        msg.setCmd('m_over')
        msg.setResult('mixId', player.mixId)
        msg.setResult('gameId', self._room.gameId)
        msg.setResult('roomId', self._room.bigRoomId)
        msg.setResult('userId', player.userId)
        msg.setResult('reason', reason)
        msg.setResult('rank', player.rank)

        if rankRewards:
            msg.setResult('info', self.buildWinInfo(player, rankRewards))
        else:
            msg.setResult('info', self.buildLoserInfo(player))
        msg.setResult('mucount',
                      player.matchInst.matchConf.stages[0].totalUserCount)
        msg.setResult('date', str(datetime.now().date().today()))
        msg.setResult('time',
                      time.strftime('%H:%M', time.localtime(time.time())))
        msg.setResult('addInfo', '')
        rewardDesc = ''
        if rankRewards:
            msg.setResult('reward', matchutil.buildRewards(rankRewards))
            rewardDesc = matchutil.buildRewardsDesc(rankRewards)
            if rewardDesc:
                msg.setResult('rewardDesc', rewardDesc)

        roomName = player.matchInst.matchConf.getRoomName(player.mixId)
        arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
            player.userId,
            int(player.mixId) if player.mixId else self._room.bigRoomId, None)
        if arenaContent:
            roomName = arenaContent.get('showName') or roomName
        msg.setResult('mname', roomName)

        shareInfo = matchutil.buildShareInfo(
            self._room.gameId, sessiondata.getClientId(player.userId))
        msg.setResult('shareInfo',
                      {'erweima': shareInfo['erweima'] if shareInfo else {}})

        try:
            msg.setResult('beatDownUser', player.beatDownUserName)
            if rankRewards and rankRewards.todotask:
                msg.setResult('todotask', rankRewards.todotask)
            # 设置奖状分享的todotask diplomaShare
            shareTodoTask = dizhudiplomashare.buildDiplomaShare(
                player.userName, roomName, player.rank, rewardDesc,
                player.userId)
            if shareTodoTask:
                msg.setResult('shareTodoTask', shareTodoTask)

            if rankRewards:
                bigImg = rankRewards.conf.get('bigImg', '')
                if bigImg:
                    msg.setResult('bidImg', bigImg)

                if ftlog.is_debug():
                    ftlog.debug(
                        'MatchPlayerNotifierDizhu.notifyMatchOver userId=',
                        player.userId, 'roomId=', self._room.roomId, 'bigImg=',
                        bigImg, 'rank=', player.rank, 'rankRewards.conf=',
                        rankRewards.conf)
        except:
            ftlog.debug('NobeatDownUser arena match')
            ftlog.exception()

        # 冠军触发抽奖逻辑
        try:
            from dizhu.games.matchutil import MatchLottery
            match_lottery = MatchLottery()
            ret = match_lottery.checkMatchRank(player.userId,
                                               self._room.match.matchId,
                                               player.rank)
            if ret:
                msg.setResult('match_lottery', 1)
        except:
            ftlog.debug('MatchLottery arena match')
            ftlog.exception()
        ###########################

        # 玩家红包记录
        try:
            from dizhu.entity import dizhushare
            shareInfoConf = rankRewards.conf.get('shareInfo',
                                                 {}) if rankRewards else {}
            rewardType = shareInfoConf.get('type', '') if shareInfoConf else ''

            shareNum, shareTotalNum = dizhushare.arenaMatchRewardRecord(
                player.userId, shareInfoConf)

            # 常规配置
            championRewards = player.matchInst.matchConf.feeRewardList
            championShareInfo = championRewards[0].rankRewardsList[0].conf.get(
                'shareInfo', {})
            if arenaContent:
                # 分ip奖励配置
                championRewards = arenaContent.get('rank.rewards', [])
                if championRewards and championRewards[0].get(
                        'ranking', {}).get('start', 0) == 1:
                    championShareInfo = championRewards[0].get('shareInfo', {})

            rmb = 0
            matchShareType = 0
            if championShareInfo and championShareInfo.get(
                    'type', '') == MATCH_REWARD_REDENVELOPE:
                # 冠军奖励金额
                rmb = championShareInfo.get('rmb', 0)
                matchShareType = 1

            if shareInfoConf and str(rewardType) == MATCH_REWARD_REDENVELOPE:
                rmb = shareInfoConf.get('rmb', 0)

            shareInfoNew = {
                "matchShareType": matchShareType,
                "shareNum": shareNum if shareNum else 0,
                "shareTotalNum": shareTotalNum if shareTotalNum else 0,
                "get": 1 if str(rewardType) == MATCH_REWARD_REDENVELOPE else 0,
                "rmb": '{0:.2f}'.format(rmb)
            }
            msg.setResult('shareInfoNew', shareInfoNew)
        except Exception, e:
            ftlog.error('MatchPlayerNotifierDizhu.notifyMatchOver', 'gameId=',
                        self._room.gameId, 'userId=', player.userId, 'roomId=',
                        self._room.roomId, 'matchId=',
                        self._room.match.matchId, 'err=', e.message)
        ###########################

        record = MatchRecord.loadRecord(self._room.gameId, player.userId,
                                        self._room.match.matchId)
        if record:
            msg.setResult(
                'mrecord', {
                    'bestRank': record.bestRank,
                    'bestRankDate': record.bestRankDate,
                    'isGroup': record.isGroup,
                    'crownCount': record.crownCount,
                    'playCount': record.playCount
                })
        else:
            from dizhu.activities.toolbox import Tool
            msg.setResult(
                'mrecord', {
                    'bestRank': player.rank,
                    'bestRankDate': Tool.datetimeToTimestamp(datetime.now()),
                    'isGroup': 0,
                    'crownCount': 1 if player.rank == 1 else 0,
                    'playCount': 1
                })

        if not player.isQuit:
            router.sendToUser(msg, player.userId)

        # 混房冠军LED
        mixId = player.mixId
        if mixId:
            mixConf = MatchPlayerNotifierDizhu.getArenaMixConf(
                self._room.roomConf, mixId)
            if player.rank == 1 and mixConf.get('championLed'):
                clientId = sessiondata.getClientId(player.userId)
                arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
                    player.userId,
                    int(mixId) if mixId else self._room.roomId, clientId)
                if ftlog.is_debug():
                    ftlog.debug('MatchPlayerNotifierDizhu.notifyMatchOver',
                                'userId=', player.userId, 'roomId=',
                                self._room.roomId, 'mixId=', mixId, 'roomName',
                                mixConf.get('roomName'), 'rewardShow=',
                                mixConf.get('rewardShow',
                                            rewardDesc), 'mixConf=', mixConf)
                # 冠军发送Led通知所有其他玩家
                ledtext = dizhuled._mk_match_champion_rich_text(
                    player.userName,
                    arenaContent.get('name')
                    if arenaContent else mixConf.get('roomName'),
                    arenaContent.get('rewardShow')
                    if arenaContent else mixConf.get('rewardShow', rewardDesc))
                LedUtil.sendLed(ledtext, 'global')
        else:
            if player.rank == 1 and self._room.roomConf.get(
                    'championLed') and not player.isQuit:
                clientId = sessiondata.getClientId(player.userId)
                arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
                    player.userId,
                    int(mixId) if mixId else self._room.roomId, clientId)
                # 冠军发送Led通知所有其他玩家
                ledtext = dizhuled._mk_match_champion_rich_text(
                    player.userName,
                    arenaContent.get('name') if arenaContent else roomName,
                    arenaContent.get('rewardShow') if arenaContent else
                    self._room.roomConf.get('rewardShow', rewardDesc))
                LedUtil.sendLed(ledtext, 'global')

        sequence = int(player.matchInst.instId.split('.')[1])
        matchutil.report_bi_game_event(
            'MATCH_FINISH', player.userId, player.matchInst.matchId, 0,
            sequence, 0, 0, 0, [int(player.mixId) if player.mixId else 255],
            'match_end')
Ejemplo n.º 5
0
    def notifyMatchOver(self, player, reason, rankRewards):
        '''
        通知用户比赛结束了
        '''
        try:
            exchangeMoney = rankRewards.conf.get('exchangeMoney',
                                                 None) if rankRewards else None
            exchangeCode = None
            if exchangeMoney:
                exchangeCode = RedEnvelopeHelper.getRedEnvelopeCode(
                    player.userId, self._room.gameId, exchangeMoney,
                    self._room.roomId, self._room.match.matchId, player.rank)

            ftlog.info('MatchPlayerNotifierDizhu.notifyMatchOver matchId=',
                       player.matchInst.matchId, 'instId=',
                       player.matchInst.instId, 'userId=', player.userId,
                       'signinParams=', player.signinParams, 'stageIndex=',
                       player.stage.index, 'rank=', player.rank, 'reason=',
                       reason, 'rankRewards=', rankRewards, 'exchangeCode=',
                       exchangeCode)

            lastBestRank = None
            record = MatchRecord.loadRecord(self._room.gameId, player.userId,
                                            self._room.match.matchId)
            if record:
                lastBestRank = record.bestRank

            # 获取房间名
            roomName = player.matchInst.matchConf.getRoomName(player.mixId)
            arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
                player.userId,
                int(player.mixId) if player.mixId else self._room.bigRoomId,
                None)
            if arenaContent:
                roomName = arenaContent.get('showName') or roomName

            rewardId = None
            if (reason == MatchFinishReason.USER_WIN
                    or reason == MatchFinishReason.USER_LOSER):
                try:
                    if player.isQuit:
                        rankRewards = None
                    event_remote.publishMatchWinloseEvent(
                        self._room.gameId, player.userId,
                        self._room.match.matchId,
                        reason == MatchFinishReason.USER_WIN, player.rank,
                        player.matchInst.matchConf.stages[0].totalUserCount,
                        rankRewards.conf if rankRewards else None)

                    tempGameResult = 1 if reason == MatchFinishReason.USER_WIN else -1
                    hall51event.sendToHall51MatchOverEvent(
                        player.userId, self._room.gameId, self._room.bigRoomId,
                        tempGameResult, -1, -1)

                    if rankRewards:
                        from dizhu.entity.matchhistory import MatchHistoryHandler
                        MatchHistoryHandler.onMatchOver(
                            player.userId,
                            player.matchInst.matchConf.recordId,
                            player.rank,
                            reason == MatchFinishReason.USER_WIN,
                            rankRewards.conf if rankRewards else None,
                            False,
                            player.mixId,
                            exchangeCode=exchangeCode)

                        matchRewardSwitch = WxShareControlHelper.getMatchRewardSwitch(
                        )
                        if matchRewardSwitch:
                            from dizhu.game import TGDizhu
                            rewardId = RewardAsyncHelper.genRewardId()
                            rewards = []
                            for rewardInfo in rankRewards.rewards:
                                rewards.append({
                                    'itemId': rewardInfo['itemId'],
                                    'count': rewardInfo['count']
                                })
                            playerMixId = int(
                                player.mixId) if player.mixId else None
                            TGDizhu.getEventBus().publishEvent(
                                UserRewardAsyncEvent(
                                    DIZHU_GAMEID,
                                    player.userId,
                                    REWARD_ASYNC_TYPE_AS_ARENA_MATCH,
                                    rewardId,
                                    rewards,
                                    matchId=playerMixId
                                    or player.matchInst.matchId,
                                    mixId=playerMixId or 0,
                                    rank=player.rank,
                                    sequence=int(
                                        player.matchInst.instId.split('.')[1]),
                                    roomName=roomName))

                    if not rankRewards:
                        matchutil.report_bi_game_event(
                            'MATCH_REWARD', player.userId,
                            player.matchInst.matchId, 0,
                            int(player.matchInst.instId.split('.')[1]), 0, 0,
                            0, [
                                0, 0, 0, player.rank,
                                int(player.mixId) if player.mixId else 0, 0
                            ], 'match_reward')

                except:
                    ftlog.error()

                # 比赛记录保存
                try:
                    event = {
                        'gameId': self._room.gameId,
                        'userId': player.userId,
                        'matchId': self._room.match.matchId,
                        'rank': player.rank,
                        'isGroup': 0,
                        'mixId': player.mixId
                    }
                    MatchRecord.updateAndSaveRecord(event)
                except:
                    ftlog.error()

            msg = MsgPack()
            msg.setCmd('m_over')
            msg.setResult('rewardId', rewardId)
            msg.setResult('mixId', player.mixId)
            msg.setResult('gameId', self._room.gameId)
            msg.setResult('roomId', self._room.bigRoomId)
            msg.setResult('userId', player.userId)
            msg.setResult('reason', reason)
            msg.setResult('rank', player.rank)
            msg.setResult('exchangeCode', exchangeCode)

            if rankRewards:
                msg.setResult('info', self.buildWinInfo(player, rankRewards))
            else:
                msg.setResult('info', self.buildLoserInfo(player))
            msg.setResult('mucount',
                          player.matchInst.matchConf.stages[0].totalUserCount)
            msg.setResult('date', str(datetime.now().date().today()))
            msg.setResult('time',
                          time.strftime('%H:%M', time.localtime(time.time())))
            msg.setResult('addInfo', '')
            rewardDesc = ''
            if rankRewards:
                msg.setResult('reward', matchutil.buildRewards(rankRewards))
                rewardDesc = matchutil.buildRewardsDesc(rankRewards)
                if rewardDesc:
                    msg.setResult('rewardDesc', rewardDesc)

            msg.setResult('mname', roomName)

            clientId = sessiondata.getClientId(player.userId)

            # 微信分享
            money = 0
            if rankRewards:
                for r in rankRewards.rewards:
                    if r['itemId'] == 'user:coupon':
                        assetKind = hallitem.itemSystem.findAssetKind(
                            'user:coupon')
                        displayRate = assetKind.displayRate
                        money = round(r['count'] * 1.0 / displayRate, 2)
            kwargs = {'matchRank': {'money': money % 100, 'stop': player.rank}}

            shareInfo = commconf.getNewShareInfoByCondiction(
                self._room.gameId, clientId)
            msg.setResult(
                'shareInfo',
                {'erweima': shareInfo['erweima'] if shareInfo else {}})

            try:
                # 玩家红包记录
                dizhushare.addMatchHistoryCount(self._room.bigRoomId,
                                                player.rank)
                userShareInfo = rankRewards.conf.get(
                    'shareInfo', {}) if rankRewards else {}
                rewardType, shareInfoNew = dizhushare.getArenaShareInfoNew(
                    player.userId, player.matchInst.matchConf.feeRewardList,
                    arenaContent, userShareInfo)
                if shareInfoNew:
                    msg.setResult('shareInfoNew', shareInfoNew)

                # 设置奖状分享的todotask diplomaShare
                matchShareType = 'arena' if rewardType == 'redEnvelope' else 'group'
                shareTodoTask = commconf.getMatchShareInfo(
                    player.userName, roomName, player.rank, rewardDesc,
                    player.userId, matchShareType, clientId)
                if shareTodoTask:
                    msg.setResult('shareTodoTask', shareTodoTask)

                if rankRewards:
                    bigImg = rankRewards.conf.get('bigImg', '')
                    if bigImg:
                        msg.setResult('bidImg', bigImg)

                msg.setResult('beatDownUser', player.beatDownUserName)
                if rankRewards and rankRewards.todotask:
                    msg.setResult('todotask', rankRewards.todotask)

                # 微信公众号消息
                if player.rank == 1:
                    from hall.game import TGHall
                    msgParams = {'reward': rewardDesc, 'roomName': roomName}
                    TGHall.getEventBus().publishEvent(
                        OfficialMessageEvent(DIZHU_GAMEID,
                                             player.userId,
                                             RED_ENVELOPE,
                                             msgParams,
                                             mixId=player.mixId))
                    if ftlog.is_debug():
                        ftlog.debug(
                            'MatchPlayerNotifierDizhu.notifyMatchOver.redEnvelopeEvent userId=',
                            player.userId, 'reward=', rewardDesc, 'rank=',
                            player.rank, 'roomName=', roomName)

                # 冠军触发抽奖逻辑
                match_lottery = MatchLottery()
                ret = match_lottery.checkMatchRank(player.userId,
                                                   self._room.match.matchId,
                                                   player.rank)
                if ret:
                    msg.setResult('match_lottery', 1)

                # 局间奖励总数
                if player.stageRewardTotal:
                    msg.setResult('stageReward',
                                  {'count': player.stageRewardTotal})

                if ftlog.is_debug():
                    ftlog.debug(
                        'MatchPlayerNotifierDizhu.notifyMatchOver userId=',
                        player.userId, 'roomId=', self._room.roomId, 'rank=',
                        player.rank, 'player=', player, 'stageRewardTotal=',
                        player.stageRewardTotal)

            except Exception, e:
                ftlog.error('notifyMatchOver.getArenaShareInfoNew', 'userId=',
                            player.userId, 'matchId=',
                            self._room.match.matchId, 'err=', e.message)

            record = MatchRecord.loadRecord(self._room.gameId, player.userId,
                                            self._room.match.matchId)
            if record:
                msg.setResult(
                    'mrecord', {
                        'bestRank': record.bestRank,
                        'lastBestRank': lastBestRank,
                        'bestRankDate': record.bestRankDate,
                        'isGroup': record.isGroup,
                        'crownCount': record.crownCount,
                        'playCount': record.playCount
                    })
            else:
                from dizhu.activities.toolbox import Tool
                msg.setResult(
                    'mrecord', {
                        'bestRank': player.rank,
                        'lastBestRank': lastBestRank,
                        'bestRankDate': Tool.datetimeToTimestamp(
                            datetime.now()),
                        'isGroup': 0,
                        'crownCount': 1 if player.rank == 1 else 0,
                        'playCount': 1
                    })

            if not player.isQuit:
                router.sendToUser(msg, player.userId)

            # 混房冠军LED
            mixId = player.mixId
            if mixId:
                mixConf = MatchPlayerNotifierDizhu.getArenaMixConf(
                    self._room.roomConf, mixId)
                if player.rank == 1 and mixConf.get('championLed'):
                    arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
                        player.userId,
                        int(mixId) if mixId else self._room.roomId, clientId)
                    if ftlog.is_debug():
                        ftlog.debug('MatchPlayerNotifierDizhu.notifyMatchOver',
                                    'userId=', player.userId, 'roomId=',
                                    self._room.roomId,
                                    'mixId=', mixId, 'roomName',
                                    mixConf.get('roomName'), 'rewardShow=',
                                    mixConf.get('rewardShow', rewardDesc),
                                    'mixConf=', mixConf)
                    # 冠军发送Led通知所有其他玩家
                    ledtext = dizhuled._mk_match_champion_rich_text(
                        player.userName,
                        arenaContent.get('name')
                        if arenaContent else mixConf.get('roomName'),
                        arenaContent.get('rewardShow') if arenaContent else
                        mixConf.get('rewardShow', rewardDesc))
                    LedUtil.sendLed(ledtext, 'global')
            else:
                if player.rank == 1 and self._room.roomConf.get(
                        'championLed') and not player.isQuit:
                    arenaContent = dizhuhallinfo.getArenaMatchProvinceContent(
                        player.userId,
                        int(mixId) if mixId else self._room.roomId, clientId)
                    # 冠军发送Led通知所有其他玩家
                    ledtext = dizhuled._mk_match_champion_rich_text(
                        player.userName,
                        arenaContent.get('name') if arenaContent else roomName,
                        arenaContent.get('rewardShow') if arenaContent else
                        self._room.roomConf.get('rewardShow', rewardDesc))
                    LedUtil.sendLed(ledtext, 'global')

            sequence = int(player.matchInst.instId.split('.')[1])
            matchutil.report_bi_game_event(
                'MATCH_FINISH', player.userId, player.matchInst.matchId, 0,
                sequence, 0, 0, 0,
                [int(player.mixId) if player.mixId else 255], 'match_end')