def get_data(self): model_mgr = ModelRequestMgr() raidmaster_all = model_mgr.get_mastermodel_all(RaidMaster, 'id', using=backup_db) maxlevel = BackendApi.get_playermaxlevel(model_mgr, using=backup_db) result = [] all_zero = True for raidmaster in raidmaster_all: row = [u'%d:%s' % (raidmaster.id, raidmaster.name)] data_appear = DailyRaidAppearCount.aggregate( self.date, raidmaster.id) data_destroy = DailyRaidDestroyCount.aggregate( self.date, raidmaster.id) if data_appear or data_destroy: all_zero = False data_appear = data_appear or {} data_destroy = data_destroy or {} for level in xrange(1, maxlevel + 1): row.append( data_appear.get(level, 0) - data_destroy.get(level, 0)) result.append(row) if all_zero: return None else: return result
def handle(self, *args, **options): print('===========================') print('aggregate_cabaretclub_batch') print('===========================') model_mgr = ModelRequestMgr() section_lasttime = self.get_batch_section_lasttime() storemaster_list = model_mgr.get_mastermodel_all(CabaClubStoreMaster, fetch_deleted=True, using=backup_db) storemaster_all_dict = dict([(storemaster.id, storemaster) for storemaster in storemaster_list]) max_uid = CabaClubStorePlayerData.max_value('uid', using=backup_db) offset = 0 uids = range(1, max_uid + 1) while uids[offset:offset + BATCH_SIZE]: print "Done... now %d Max %d" % (offset, max_uid) for uid in uids[offset:offset + BATCH_SIZE]: self.update_cabaretclub_proceed(uid, storemaster_all_dict, section_lasttime) offset += BATCH_SIZE time.sleep(1) print "all done."
def setUp(self): # DMMID. self.__player = self.create_dummy(DummyType.PLAYER) self.__player.pdays = 0 self.__player.lbtime = OSAUtil.get_now() - datetime.timedelta(days=1) self.__player.getModel(PlayerLogin).save() model_mgr = ModelRequestMgr() # ログインボーナスを消しておく. for model in model_mgr.get_mastermodel_all(LoginBonusMaster): model_mgr.set_delete(model) for model in model_mgr.get_mastermodel_all(AccessBonusMaster): model_mgr.set_delete(model) # 全プレ渡しておくかぁ. presenteveryone_list = BackendApi.get_presenteveryone_list_forloginbonus( model_mgr) if presenteveryone_list: BackendApi.tr_receive_presenteveryone(model_mgr, self.__player.id, presenteveryone_list) # ロングログインの設定も消しておく. config = BackendApi.get_current_loginbonustimelimitedconfig(model_mgr) self.__datalist = [data[1] for data in config.datalist] BackendApi.update_loginbonustimelimitedconfig(model_mgr, []) model_mgr.write_all() model_mgr.write_end() # 報酬. prize = self.create_dummy(DummyType.PRIZE_MASTER, gold=100) # アクセスボーナス. self.create_dummy(DummyType.ACCESS_BONUS_MASTER, 1, prizes=[prize.id]) # プレゼント数. self.__present_num = BackendApi.get_present_num( self.__player.id, model_mgr) BackendApi.update_totalloginbonusconfig( model_mgr, 0, stime=OSAUtil.get_datetime_min(), etime=OSAUtil.get_datetime_min(), mid_next=0, continuity_login=False)
def setUp(self): model_mgr = ModelRequestMgr() # DMMID. self.__player = self.create_dummy(DummyType.PLAYER) self.__player.cardlimititem = 100 self.__player.getModel(PlayerDeck).save() # カード. cardmaster = self.create_dummy(DummyType.CARD_MASTER, maxlevel=10) basecard = self.create_dummy(DummyType.CARD, self.__player, cardmaster) self.__basecard = BackendApi.get_cards([basecard.id], model_mgr)[0] materialcardidlist = [] for _ in xrange(10): cardmaster = self.create_dummy(DummyType.CARD_MASTER, cost=10, basematerialexp=100) materialcardidlist.append(self.create_dummy(DummyType.CARD, self.__player, cardmaster).id) self.__materialcardlist = BackendApi.get_cards(materialcardidlist, model_mgr) self.__player.gold = BackendApi.calc_composition_cost(self.__basecard, self.__materialcardlist) self.__player.getModel(PlayerGold).save() self.__compositiondata = BackendApi.get_compositiondata(model_mgr, self.__player.id) self.__requestkey = self.__player.req_confirmkey exp = BackendApi.calc_composition_exp(self.__basecard, self.__materialcardlist, is_great_success=False) exp_great = BackendApi.calc_composition_exp(self.__basecard, self.__materialcardlist, is_great_success=True) self.create_dummy(DummyType.CARD_LEVEL_EXP_MASTER, 1, 0) self.create_dummy(DummyType.CARD_LEVEL_EXP_MASTER, 2, exp) tmp = self.create_dummy(DummyType.CARD_LEVEL_EXP_MASTER, 3, exp_great) level_min = tmp.level exp_min = tmp.exp for levelexp in model_mgr.get_mastermodel_all(CardLevelExpMster, order_by='level', fetch_deleted=True): if levelexp.level <= level_min: continue elif exp_min < levelexp.exp: break exp_min += 1 levelexp.exp = exp_min levelexp.save() model_mgr.get_mastermodel_all(CardLevelExpMster, order_by='level', fetch_deleted=True, reflesh=True)
def get_data(self): data = ScoutCompleteCount.aggregate(self.date) if not data: return None model_mgr = ModelRequestMgr() masterlist = model_mgr.get_mastermodel_all(ScoutMaster, 'id', using=backup_db) result = [(u'%d:%s' % (master.id, master.name), data.get(master.id, 0)) for master in masterlist] return result
def get_data(self): data = BattleRankPlayCount.aggregate(self.date) if not data: return None model_mgr = ModelRequestMgr() masterlist = model_mgr.get_mastermodel_all(BattleRankMaster, 'id', using=backup_db) result = [(u'%d:%s%s' % (master.id, master.region, master.town), data.get(master.id, 0)) for master in masterlist] return result
def get_data(self): data = PlayerLevelDistributionAmount.aggregate() if not data: return None model_mgr = ModelRequestMgr() levelexplist = model_mgr.get_mastermodel_all(PlayerLevelExpMaster, 'level', using=backup_db) result = [(levelexp.level, data.get(levelexp.level, 0)) for levelexp in levelexplist] return result
def get_data(self): data = CardDistributionAmount.aggregate() if not data: return None model_mgr = ModelRequestMgr() cardmasterlist = model_mgr.get_mastermodel_all(CardMaster, 'id', using=backup_db) result = [(u'%d:%s' % (cardmaster.id, cardmaster.name), data.get(cardmaster.id, 0)) for cardmaster in cardmasterlist] return result
def get_data(self): model_mgr = ModelRequestMgr() itemmasterlist = model_mgr.get_mastermodel_all(ItemMaster, order_by='id') result = [] for itemmaster in itemmasterlist: _, vnum, rnum = ItemDistributionAmount.aggregateByMasterId( itemmaster.id) if vnum or rnum: result.append((itemmaster.id, itemmaster.name, vnum, rnum)) if result: return result else: return None
def handle(self, *args, **options): print '================================' print 'aggregate_cabarettreasure' print '================================' # 出力先. path = OSAUtil.get_now().strftime(args[0]) # 書き込むデータをここに溜め込む. writer = Command.Writer(path) # 今のユーザIDの最大値を取得. uid_max = PlayerTreasure.max_value('id', 0, using=backup_db) # 交換できるもの. model_mgr = ModelRequestMgr() trade_all = dict([(model.id, model) for model in model_mgr.get_mastermodel_all( TradeMaster, fetch_deleted=True, using=backup_db) ]) for uid in xrange(1, uid_max + 1): # 現在の所持数. player = PlayerTreasure.getByKey(uid, using=backup_db) if player is None: continue cabaretking = player.get_cabaretking_num() row = [str(uid), str(cabaretking)] # ユーザログを集計して消費量を求める. userloglist = UserLogTrade.fetchValues(filters={'uid': uid}, using=backup_db) consumed = 0 for userlog in userloglist: trademaster = trade_all.get(userlog.mid, None) if trademaster: consumed += trademaster.rate_cabaretking row.append('%s' % (cabaretking + consumed)) rowtext = ','.join(row) print rowtext writer.add(rowtext) writer.output(overwrite=False) print '================================' print 'all done..'
def setUp(self): # DMMID. self.__player = self.create_dummy(DummyType.PLAYER) self.__player.lbtime = OSAUtil.get_now() - datetime.timedelta(days=1) self.__player.tlmid = 0 self.__player.getModel(PlayerLogin).save() model_mgr = ModelRequestMgr() # アクセスボーナスを消しておく. for model in model_mgr.get_mastermodel_all(AccessBonusMaster): model_mgr.set_delete(model) # 全プレ渡しておくかぁ. presenteveryone_list = BackendApi.get_presenteveryone_list_forloginbonus( model_mgr) if presenteveryone_list: BackendApi.tr_receive_presenteveryone(model_mgr, self.__player.id, presenteveryone_list) model_mgr.write_all() model_mgr.write_end() # 報酬. prize = self.create_dummy(DummyType.PRIZE_MASTER, gold=100) # ログインボーナス. master = self.create_dummy(DummyType.LOGIN_BONUS_TIME_LIMITED_MASTER) self.create_dummy(DummyType.LOGIN_BONUS_TIME_LIMITED_DAYS_MASTER, master.id, 1, prizes=[prize.id]) # 設定. model_mgr = ModelRequestMgr() config = BackendApi.get_current_totalloginbonusconfig(model_mgr) self.__ori_config = cPickle.dumps(config) BackendApi.update_totalloginbonusconfig(model_mgr, master.id, OSAUtil.get_datetime_min(), OSAUtil.get_datetime_max(), continuity_login=False) # プレゼント数. self.__present_num = BackendApi.get_present_num(self.__player.id)
def get_data(self): model_mgr = ModelRequestMgr() eventid = self.getEventId(model_mgr) result = [] raidmaster_all = model_mgr.get_mastermodel_all(RaidMaster, 'id', fetch_deleted=True, using=backup_db) for raidmaster in raidmaster_all: row = ["%s(ID:%s)" % (raidmaster.name, raidmaster.id)] data = RaidEventDestroyLevelMap.hgetall(eventid, raidmaster.id) if not data: continue for level in xrange(1, 101): num = data.get(str(level), 0) row.append(num) result.append(row) if result: return result else: return None
def handle(self, *args, **options): print '================================' print 'aggregate_deckmember' print '================================' # 出力先. path = OSAUtil.get_now().strftime(args[0]) # 書き込むデータをここに溜め込む. writer = Command.Writer(path) # 対象を更新. LoginTimeCloneSet.update() # アクティブユーザだと判定される日数. now = OSAUtil.get_now() border_date = now - datetime.timedelta(days=Defines.ACTIVE_DAYS) LIMIT = 300 model_mgr = ModelRequestMgr() cardmasters = dict([(master.id, master) for master in model_mgr.get_mastermodel_all(CardMaster, fetch_deleted=True, using=backup_db)]) cardsortmasters = dict([(master.id, master) for master in model_mgr.get_mastermodel_all(CardSortMaster, fetch_deleted=True, using=backup_db)]) # ヘッダ列. title = [u'ユーザID'] for _ in xrange(Defines.DECK_CARD_NUM_MAX): title.extend([u'name', u'rare', u'hklevel', u'level', u'power']) for rare in Defines.Rarity.LIST: title.append(Defines.Rarity.NAMES[rare]) writer.add(','.join(title)) del title offset = 0 while True: uidlist = LoginTimeCloneSet.fetchByRange(border_date, now, LIMIT, offset) # デッキ取得. decklist = Deck.getByKey(uidlist, using=backup_db) for deck in decklist: row = [] raremap = {} # カード取得. cardidlist = deck.to_array() cards = dict([(card.id, card) for card in Card.getByKey(cardidlist, using=backup_db)]) # ユーザID. row.append(str(deck.id)) for cardid in cardidlist: card = cards.get(cardid) master = None sortmaster = None if card: master = cardmasters.get(card.mid) sortmaster = cardsortmasters.get(card.mid) if card is None or master is None or sortmaster is None: name = u'不明' rare = u'不明' hklevel = u'不明' level = u'不明' power = u'不明' else: # カード名. name = str(master.name) # レア度. rare = str(sortmaster.rare) # ハメ管理度. hklevel = str(sortmaster.hklevel) # レベル. level = str(card.level) # 接客力. power = str(CardUtil.calcPower(master.gtype, master.basepower, master.maxpower, card.level, master.maxlevel, card.takeover)) raremap[sortmaster.rare] = raremap.get(sortmaster.rare, 0) + 1 row.extend([name, rare, hklevel, level, power]) for _ in xrange(Defines.DECK_CARD_NUM_MAX - len(cardidlist)): row.extend(['', '', '', '', '']) for rare in Defines.Rarity.LIST: row.append(str(raremap.get(rare, 0))) line = ','.join(row) writer.add(line) offset += LIMIT if len(uidlist) < LIMIT: break writer.output(overwrite=False) print '================================' print 'all done..'
def handle(self, *args, **options): print '================================' print 'create_benchmark_csv' print '================================' USER_ID_START = OSAUtil.BENCH_USER_ID_START USER_NUM = 0 if args: USER_NUM = int(args[0]) USER_NUM = max(OSAUtil.BENCH_USER_ID_NUM, USER_NUM) print '================================' print 'USER_NUM=%d' % USER_NUM LEVEL = 1 GOLD = 100000 GACHA_PT = 3000 CARD_NUM = 100 CARD_LIMIT = CARD_NUM + 50 FRIEND = 50 FRIEND_REQUEST = 50 FRIEND_EMPTY = 50 FRIENDLIMIT = FRIEND + FRIEND_REQUEST * 2 + FRIEND_EMPTY RAID_ENDTIME = DateTimeUtil.strToDateTime("20150101", "%Y%m%d") RAIDLOG = 100 GREETLOG = 100 PRESENT = int(100 / len(Defines.ItemType.PRESENT_TYPES.keys())) PRESENT_LIMITTIME = DateTimeUtil.strToDateTime("20150101", "%Y%m%d") ITEM_RNUM = 50 ITEM_VNUM = 50 DECK_CAPACITY = 1000000 CABARET_TREASURE = 100000 TREASURE_NUM = 20 OUTPUT_DIR = os.path.join(settings_sub.TMP_DOC_ROOT, 'dummy') csvmgr = ModelCSVManager(OUTPUT_DIR) model_mgr = ModelRequestMgr() # 各種マスターデータ. levelexpmaster = model_mgr.get_model(PlayerLevelExpMaster, LEVEL) item_all = model_mgr.get_mastermodel_all(ItemMaster) card_all = [master for master in model_mgr.get_mastermodel_all(CardMaster) if master.ckind == Defines.CardKind.NORMAL and master.hklevel == 1] happeningall = model_mgr.get_mastermodel_all(HappeningMaster) arealist = model_mgr.get_mastermodel_all(AreaMaster, order_by='id')[:2] scoutlist = ScoutMaster.fetchValues(filters={'area__in':[area.id for area in arealist]}, order_by='id') treasure_gold_all = model_mgr.get_mastermodel_all(TreasureGoldMaster) treasure_silver_all = model_mgr.get_mastermodel_all(TreasureSilverMaster) treasure_bronze_all = model_mgr.get_mastermodel_all(TreasureBronzeMaster) now = OSAUtil.get_now() print '================================' print 'players..' class ModelList: def __init__(self): self.modellist_all = [] def add(self, modellist): csvmgr.setModelList(modellist) modellist_all = ModelList() for i in xrange(USER_NUM): modellist = [] uid = i + USER_ID_START # プレイヤー作成. player = self.install(uid) # タイプ決定とか. self.regist(player, levelexpmaster, GOLD, GACHA_PT, FRIENDLIMIT, CARD_LIMIT, DECK_CAPACITY, CABARET_TREASURE) modellist.append(player.getModel(Player)) for model_cls in ModelPlayer.Meta.MODELS: p = player.getModel(model_cls) if p: modellist.append(p) # スカウト完了. for scout in scoutlist: playdata = ScoutPlayData.makeInstance(ScoutPlayData.makeID(uid, scout.id)) playdata.progress = scout.execution modellist.append(playdata) # フレンドの近況. logdata = ScoutClearLog.makeData(player.id, scout.id) modellist.append(logdata) for area in arealist: model = AreaPlayData.makeInstance(AreaPlayData.makeID(uid, area.id)) model.clevel = levelexpmaster.level modellist.append(model) # フレンドの近況. logdata = BossWinLog.makeData(player.id, area.id) modellist.append(logdata) # カード付与. playercard = player.getModel(PlayerCard) cardidlist = [] for _ in xrange(CARD_NUM): playercard.card += 1 cardid = Card.makeID(uid, playercard.card) cardmaster = random.choice(card_all) card = BackendApi.create_card_by_master(cardmaster) card.id = cardid card.uid = uid modellist.append(card) cardidlist.append(cardid) # デッキ設定. deck = Deck() deck.id = uid deck.set_from_array(cardidlist[:Defines.DECK_CARD_NUM_MAX]) modellist.append(deck) # カード獲得フラグ. for cardmaster in card_all: cardacquisition = CardAcquisition.makeInstance(CardAcquisition.makeID(uid, cardmaster.id)) cardacquisition.maxlevel = cardmaster.maxlevel modellist.append(cardacquisition) albumacquisition = AlbumAcquisition.makeInstance(AlbumAcquisition.makeID(uid, cardmaster.album)) modellist.append(albumacquisition) # アイテム. for itemmaster in item_all: item = Item.makeInstance(Item.makeID(uid, itemmaster.id)) item.rnum = ITEM_RNUM item.vnum = ITEM_VNUM modellist.append(item) # レイド履歴. states = (Defines.HappeningState.END, Defines.HappeningState.MISS, Defines.HappeningState.CANCEL) for lognumber in xrange(RAIDLOG): happeningmaster = random.choice(happeningall) raidmaster = BackendApi.get_raid_master(model_mgr, happeningmaster.boss) self.putRaidLog(modellist, player, happeningmaster, raidmaster, states[lognumber % len(states)]) # レイド. happeningmaster = random.choice(happeningall) raidmaster = BackendApi.get_raid_master(model_mgr, happeningmaster.boss) self.putRaid(modellist, player, happeningmaster, raidmaster, RAID_ENDTIME) # プレゼント. def putPresent(itype, itemid, itemvalue): presentlist = BackendApi.create_present(model_mgr, 0, uid, itype, itemid, itemvalue, Defines.TextMasterID.ACCESS_BONUS, PRESENT_LIMITTIME, do_set_save=False) modellist.extend(presentlist) presentlist = BackendApi.create_present(model_mgr, 0, uid, itype, itemid, itemvalue, Defines.TextMasterID.ACCESS_BONUS, now, do_set_save=False) modellist.extend(presentlist) for _ in xrange(PRESENT): putPresent(Defines.ItemType.GOLD, 0, 1000) putPresent(Defines.ItemType.GACHA_PT, 0, 10) putPresent(Defines.ItemType.ITEM, random.choice(item_all).id, 1) putPresent(Defines.ItemType.CARD, random.choice(card_all).id, 1) putPresent(Defines.ItemType.RAREOVERTICKET, 0, 1) putPresent(Defines.ItemType.TRYLUCKTICKET, 0, 1) putPresent(Defines.ItemType.MEMORIESTICKET, 0, 1) putPresent(Defines.ItemType.GACHATICKET, 0, 1) putPresent(Defines.ItemType.GOLDKEY, 0, 1) putPresent(Defines.ItemType.SILVERKEY, 0, 1) # 宝箱. def makeTreasure(masterlist, model_cls, etime): master = random.choice(masterlist) model = model_cls() model.uid = uid model.mid = master.id model.etime = etime modellist.append(model) for _ in xrange(TREASURE_NUM): makeTreasure(treasure_gold_all, TreasureGold, now) makeTreasure(treasure_gold_all, TreasureGold, PRESENT_LIMITTIME) makeTreasure(treasure_silver_all, TreasureSilver, now) makeTreasure(treasure_silver_all, TreasureSilver, PRESENT_LIMITTIME) makeTreasure(treasure_bronze_all, TreasureBronze, now) makeTreasure(treasure_bronze_all, TreasureBronze, PRESENT_LIMITTIME) modellist_all.add(modellist) print 'complete uid=%d' % uid print '================================' print 'friends..' # ユーザーがそろっていないと作れないレコード. for i in xrange(USER_NUM): modellist = [] uid = i + USER_ID_START # フレンド設定. self.putFriends(modellist, uid, USER_ID_START, USER_NUM, FRIEND, FRIEND_REQUEST) # あいさつ履歴. fid = uid for _ in xrange(GREETLOG): fid = ((fid - USER_ID_START + 1) % USER_NUM) + USER_ID_START while fid == uid: fid = ((fid - USER_ID_START + 1) % USER_NUM) + USER_ID_START model = GreetLog() model.fromid = fid model.toid = uid modellist.append(model) modellist_all.add(modellist) print 'complete uid=%d' % uid csvmgr.output() print '================================' print 'all done..'
def handle(self, *args, **options): print '================================' print 'aggregate_cabaretclub_weekly' print '================================' last_week_starttime = BackendApi.to_cabaretclub_section_starttime( OSAUtil.get_now() - datetime.timedelta(days=7)) str_year_and_week = args[0] if 0 < len(args) else None if str_year_and_week: week = int(str_year_and_week[4:]) first_of_year = DateTimeUtil.strToDateTime( "%s%02d" % (str_year_and_week[:4], Defines.CABARETCLUB_EVENT_DATE_CHANGE_TIME), "%Y%H") # 0週目. zero = BackendApi.to_cabaretclub_section_starttime(first_of_year) starttime = zero + datetime.timedelta(days=week * 7) if last_week_starttime < starttime: print u'未完了の週なので集計は行えません' return else: # 指定がない場合は前回の週. starttime = last_week_starttime print "target:%s" % starttime.strftime("%Y%W") endtime = BackendApi.to_cabaretclub_section_endtime(starttime) section_lasttime = endtime - datetime.timedelta(microseconds=1) model_mgr = ModelRequestMgr() self.update_eventconfig_previous_mid(model_mgr, starttime) # 店舗のマスターデータ. cabaclubstoremaster_dict = dict([ (cabaclubstoremaster.id, cabaclubstoremaster) for cabaclubstoremaster in model_mgr.get_mastermodel_all( CabaClubStoreMaster, fetch_deleted=True, using=backup_db) ]) # ユーザIDの最大値. uid_max = PlayerTreasure.max_value('id', using=backup_db) for uid in xrange(1, uid_max + 1): # 所持している店舗.ここはreadonlyで大丈夫. store_list = CabaClubStorePlayerData.fetchByOwner( uid, using=settings.DB_READONLY) if store_list: # この週に更新された店舗数. update_store_cnt = 0 # Activeな店舗を週の終了時間まですすめる. for store in store_list: cabaclubstoremaster = cabaclubstoremaster_dict[store.mid] if not store.is_open: # 閉じるときに集計しているので必要なし. if starttime <= store.utime: update_store_cnt += 1 continue store_set = CabaclubStoreSet(cabaclubstoremaster, store) lasttime = min( section_lasttime, store_set.get_limit_time() - datetime.timedelta(microseconds=1)) if (lasttime - store.utime).total_seconds( ) < cabaclubstoremaster.customer_interval: # 獲得時間が経過していないので更新する必要が無い. if starttime <= store.utime: update_store_cnt += 1 continue def tr_advance_the_time(uid, cabaclubstoremaster, now): """店舗の時間をすすめる. """ model_mgr = ModelRequestMgr() BackendApi.tr_cabaclubstore_advance_the_time_with_checkalive( model_mgr, uid, cabaclubstoremaster, now) model_mgr.write_all() model_mgr.write_end() try: db_util.run_in_transaction(tr_advance_the_time, uid, cabaclubstoremaster, lasttime) except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: # ユーザー自信が更新した可能性. pass else: DbgLogger.write_error(err.value) raise update_store_cnt += 1 if 0 < update_store_cnt: # 売り上げに応じた名誉ポイントを配布. def tr_send_point(uid, starttime): """名誉ポイントの配布. """ model_mgr = ModelRequestMgr() scoredata_weekly = CabaClubScorePlayerDataWeekly.getByKeyForUpdate( CabaClubScorePlayerDataWeekly.makeID( uid, starttime)) if scoredata_weekly is None or scoredata_weekly.flag_aggregate: return 0 # 配布する数を計算. cabaclub_honor = int( math.ceil(scoredata_weekly.proceeds / 1000.0)) if 0 < cabaclub_honor: # 報酬付与. prizedata = PrizeData.create( cabaclub_honor=cabaclub_honor) BackendApi.tr_add_prize( model_mgr, uid, [prizedata], Defines.TextMasterID.CABARETCLUB_WEEKLY_PRIZE) # 重複防止. scoredata_weekly.flag_aggregate = True model_mgr.set_save(scoredata_weekly) model_mgr.write_all() model_mgr.write_end() return cabaclub_honor cabaclub_honor = db_util.run_in_transaction( tr_send_point, uid, starttime) print '%s...honor=%d' % (uid, cabaclub_honor) else: print '%s...not updated' % uid
def handle(self, *args, **options): print '================================' print 'support' print '================================' # 出力先. path = OSAUtil.get_now().strftime(args[0]) # 書き込むデータをここに溜め込む. writer = Command.Writer(path) # レイドマスター. model_mgr = ModelRequestMgr() raid_all = dict([(master.id, master) for master in model_mgr.get_mastermodel_all(RaidMaster, using=settings.DB_READONLY)]) eventraid_all = dict([(master.mid, master) for master in model_mgr.get_mastermodel_all(RaidEventRaidMaster, using=settings.DB_READONLY)]) # 対象のユーザ. UIDLIST = [16268, 29339] UIDSET = set(UIDLIST) UNKNOWNS = [ 56272661512882, 56272661512893, 87759066759449, 99127845191766, 128943508160593, 136047384068178, 137099651055617, 137550622621716, 143374598275073, 149615185756161, 157689724272723, 165957536317441, 172352742621192, 183549722361857, 193870528774147, ] # 対象の時間. filters = { 'ctime__gte' : DateTimeUtil.strToDateTime("2014-01-07 15:00:00", "%Y-%m-%d %H:%M:%S"), 'ctime__lt' : DateTimeUtil.strToDateTime("2014-01-13 19:00:00", "%Y-%m-%d %H:%M:%S"), 'hp' : 0, } LIMIT = 1000 offset = 0 timebonus_time_min = DateTimeUtil.strToDateTime("2014-01-13 17:00:00", "%Y-%m-%d %H:%M:%S") timebonus_time_max = DateTimeUtil.strToDateTime("2014-01-13 19:00:00", "%Y-%m-%d %H:%M:%S") # 対象のハプニング. while True: raidlist = Raid.fetchValues(filters=filters, order_by='id', limit=LIMIT, offset=offset) for raid in raidlist: raidboss = RaidBoss(raid, raid_all[raid.mid], eventraid_all.get(raid.mid)) if raid.id in UNKNOWNS: print raid.id uidset = set(raidboss.getDamageRecordUserIdList()) targetlist = list(UIDSET & uidset) if not targetlist: continue helppoints = raidboss.getHelpEventPoints() for uid in targetlist: owner = 0 mvp = 0 helppoint = 0 if uid == raidboss.raid.oid: # 発見者報酬. owner = raidboss.get_owner_eventpoint() else: # 協力者報酬. helppoint = helppoints.get(uid, 0) # MVP報酬. mvpuidlist = raidboss.getMVPList() for mvpuid in mvpuidlist: if uid == mvpuid: mvp += raidboss.get_mvp_eventpoint() if not (owner or mvp or helppoint): print raidboss.id else: text = '%s,%s,%s,%s,%s' % (uid, owner, mvp, helppoint, raid.ctime.strftime("%Y-%m-%d %H:%M")) writer.add(text) # print text if len(raidlist) < LIMIT: break offset += LIMIT writer.output(overwrite=False) print '================================' print 'all done..'