Ejemplo n.º 1
0
 def setUserActivityData(cls, bankId, userId, data):
     '''
     存储玩家活动记录数据,存储在db7/db8中的gamedata:6:userId中
     '''
     conf = ConfigDatabase.getServerConfig(bankId)
     activity_start = conf.get('start')
     key = cls.getGamedataKey(bankId,
                              Tool.datetimeFromString(activity_start))
     Redis.writeJson(userId, key, data)
Ejemplo n.º 2
0
 def getUserActivityData(cls, bankId, userId):
     '''
     获取玩家活动记录数据,存储在db7/db8中的gamedata:6:userId中
     :return: dict
     '''
     conf = ConfigDatabase.getServerConfig(bankId)
     activity_start = conf.get('start')
     key = cls.getGamedataKey(bankId,
                              Tool.datetimeFromString(activity_start))
     return Redis.readJson(userId, key)
Ejemplo n.º 3
0
    def sendRewardToUser(self, userId, countChipLeft, countChipRight,
                         resultState, activityGameId, activityId, issueNumber):
        ftlog.debug('BetGuess.sendRewardToUser', 'userId=', userId)

        userModel = ActivityUserModel.loadModel(userId, activityGameId,
                                                activityId)
        userModelItem = userModel.findItemByIssueNumber(issueNumber)

        # 若玩家没有下注的记录,但是有记录的userid,此处可能存在问题
        if not userModelItem:
            ftlog.warn(
                'BetGuess.sendRewardToUser: userModel issueNumber not found',
                'userId=', userId, 'activityGameId', activityGameId,
                'activityId', activityId, 'issueNumber', issueNumber)
            return 0

        # 已经发送过了
        if userModelItem.isPrizeSent:
            ftlog.warn('BetGuess.sendRewardToUser: user issueNumber has sent',
                       'userId=', userId, 'activityGameId', activityGameId,
                       'activityId', activityId, 'issueNumber', issueNumber)
            return 0

        # 若未发奖,则返回0
        if resultState == ActivityModel.RESULT_STATE_NONE:
            return 0

        # 单期的配置
        issueConf = copy.deepcopy(
            self.issueCalculator.getCurrentIssueConf(issueNumber))
        ftlog.debug('BetGuess.sendRewardToUser:issueConf=', issueConf)
        if not issueConf:
            return 0

        # 抽水比例
        bankerPumping = issueConf.get('bankerPumping', 0)
        # 奖池金额
        betPoolChip = int(
            (countChipLeft + countChipRight) * (1 - bankerPumping))
        # 左赔率
        leftBetOdds = betPoolChip / countChipLeft if countChipLeft > 0 else 0
        # 右赔率
        rightBetOdds = betPoolChip / countChipRight if countChipRight > 0 else 0

        prizeNumber = 0  # 本期活动,赢取金额
        issueWinSideName = None  # 本期活动,胜利一侧名称
        issueFinalOdds = 0  # 本期活动,胜利一侧最终赔率
        issueWinBetNumber = 0  # 本期活动,胜利一侧下注额
        if resultState == ActivityModel.RESULT_STATE_LEFT:
            prizeNumber = int(userModelItem.leftBetValue * leftBetOdds)
            issueWinSideName = issueConf['leftSide']['displayName']
            issueFinalOdds = leftBetOdds
            issueWinBetNumber = userModelItem.leftBetValue
        elif resultState == ActivityModel.RESULT_STATE_RIGHT:
            prizeNumber = int(userModelItem.rightBetValue * rightBetOdds)
            issueWinSideName = issueConf['rightSide']['displayName']
            issueFinalOdds = rightBetOdds
            issueWinBetNumber = userModelItem.rightBetValue

        # 发放金币奖励
        if prizeNumber <= 0:
            # 记录是否发奖
            userModelItem.isPrizeSent = True
            userModel.save()
            return prizeNumber

        clientId = sessiondata.getClientId(userId)
        trueDelta, _ = userchip.incrChip(userId, activityGameId, prizeNumber,
                                         daoconst.CHIP_NOT_ENOUGH_OP_MODE_NONE,
                                         'ACT_BETGUESS_CHIP', 0, clientId)
        datachangenotify.sendDataChangeNotify(activityGameId, userId, 'chip')
        ftlog.debug('BetGuess.sendRewardToUser:'******'userId=', userId,
                    'trueDelta=', trueDelta)
        if trueDelta != prizeNumber:
            return 0

        # 发送玩家系统邮件
        mail = Tool.dictGet(self._clientConf, 'config.server.mail')
        if mail:
            issueDatetime = Tool.datetimeFromString(issueNumber)
            mailMessage = strutil.replaceParams(
                mail, {
                    'issueMonth': issueDatetime.month,
                    'issueDay': issueDatetime.day,
                    'issueLeftSideName': issueConf['leftSide']['displayName'],
                    'issueRightSideName':
                    issueConf['rightSide']['displayName'],
                    'issueWinBetNumber': issueWinBetNumber,
                    'issueWinSideName': issueWinSideName,
                    'issueFinalOdds': float(issueFinalOdds * 100) / 100,
                    'issuePrizeChipNumber': prizeNumber
                })
            pkmessage.sendPrivate(9999, userId, 0, mailMessage)

        # 记录是否发奖
        userModelItem.isPrizeSent = True
        userModel.save()

        ftlog.info('BetGuess.sendRewardToUser:'******'userId=', userId,
                   'activityGameId=', activityGameId, 'activityId=',
                   activityId, 'issueNumber=', issueNumber, 'prizeNumber=',
                   prizeNumber, 'resultState=', resultState)

        return prizeNumber
Ejemplo n.º 4
0
    def buildActivityInfo(self, userId, activityModel=None, userModel=None):
        clientconf = copy.deepcopy(self._clientConf)
        serverconf = self._serverConf
        ftlog.debug('BetGuess.buildActivityInfo:', 'userId=', userId,
                    'serverconf=', serverconf, 'clientconf=', clientconf)

        activityGameId = clientconf.get('activityGameId')
        activityId = self.getid()

        # 计算当前最新的期号(当前要执行的期)
        issueNumber = self.issueCalculator.getCurrentIssueNumber(
        ) or self.issueCalculator.getLastIssueNumber()
        ftlog.debug('BetGuess.buildActivityInfo:issueNumber=', issueNumber)

        # 加载活动数据
        activityModel = activityModel or ActivityModel.loadModel(
            activityGameId, activityId, issueNumber)
        userModel = userModel or ActivityUserModel.loadModel(
            userId, activityGameId, activityId)
        userModelItem = userModel.findOrCreateItemByIssueNumber(issueNumber)

        ftlog.debug('BetGuess.buildActivityInfo:activityModel=',
                    activityModel.__dict__)
        ftlog.debug('BetGuess.buildActivityInfo:userModel=',
                    userModel.__dict__)

        # 单期的配置
        issueConf = copy.deepcopy(
            self.issueCalculator.getCurrentIssueConf(issueNumber))
        ftlog.debug('BetGuess.buildActivityInfo:issueConf=', issueConf)

        # 抽水比例
        bankerPumping = issueConf.get('bankerPumping', 0)
        issueConf.pop('bankerPumping')
        # 奖池金额
        betPoolChip = int(
            (activityModel.countChipLeft + activityModel.countChipRight) *
            (1 - bankerPumping))
        # 左赔率
        leftBetOdds = betPoolChip / activityModel.countChipLeft if activityModel.countChipLeft > 0 else 0
        # 右赔率
        rightBetOdds = betPoolChip / activityModel.countChipRight if activityModel.countChipRight > 0 else 0

        activityClient = {}
        activityClient.update(issueConf)

        activityClient['leftSide']['betChip'] = userModelItem.leftBetValue
        activityClient['leftSide']['betOdds'] = leftBetOdds

        activityClient['rightSide']['betChip'] = userModelItem.rightBetValue
        activityClient['rightSide']['betOdds'] = rightBetOdds

        activityClient['userChip'] = userchip.getChip(userId)
        activityClient['betPoolChip'] = betPoolChip
        activityClient['currentIssueNumber'] = issueNumber

        issueDateFormat = Tool.dictGet(clientconf,
                                       'config.server.issueDateFormat',
                                       '%m月%d日%H:%M')
        issueDatetime = Tool.datetimeFromString(issueNumber)
        activityClient['issueDate'] = issueDatetime.strftime(issueDateFormat)
        activityClient['betRecords'] = self.buildHistoryRecordList(
            activityGameId, activityId, userModel)

        ftlog.debug('BetGuess.buildActivityInfo:activityClient=',
                    activityClient)

        clientconf['config']['client'].update(activityClient)
        return clientconf