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)
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)
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
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