排行榜:奖励显示首通信息

This commit is contained in:
luying
2021-09-09 20:42:05 +08:00
parent 4c42c45fba
commit e859d5c778
11 changed files with 259 additions and 96 deletions
@@ -10,6 +10,7 @@ import { reloadResources } from '../../../pubUtils/data';
import { GeneralRankParam } from '../../../domain/rank';
import { getAllGuildActivityStatus } from '../../../services/guildActivityService';
import { MailParam } from '../../../domain/roleField/mail';
import { RankFirstType } from '../../../db/RankFirst';
export default function (app: Application) {
new HandlerService(app, {});
@@ -188,12 +189,12 @@ export class ChatRemote {
* @description 全服推送排行榜更新信息
* @param serverId
*/
public async sendRankTopUpdated(serverId: number, rank: GeneralRankParam & { general: number }) {
public async sendRankTopUpdated(serverId: number, ranks: (RankFirstType & {status: number})[]) {
let roomId = groupRoomId(CHANNEL_PREFIX.WORLD, serverId);
let channel = this.channelService.getChannel(roomId, false);
if (!channel) return;
channel.pushMessage(this.RANK_TOP_UPDATE, resResult(STATUS.SUCCESS, { rank }));
channel.pushMessage(this.RANK_TOP_UPDATE, resResult(STATUS.SUCCESS, { ranks }));
}
/**
@@ -697,7 +697,7 @@ export class GuildHandler {
const sid = session.get('sid');
const { code, id } = msg;
const guild = await GuildModel.findByCode(code, serverId, 'lv structure');
const guild = await GuildModel.findByCode(code, serverId, 'lv structure activeWeekly lvUpdateTime');
if (!guild) {
return resResult(STATUS.GUILD_NOT_FOUND);
}
@@ -717,13 +717,13 @@ export class GuildHandler {
}
const cost = getStructureConsume(id, curStructure.lv);
const result = await GuildModel.upStructure(code, id, cost, 'code fund structure lv name');
const result = await GuildModel.upStructure(code, id, cost, 'code fund structure lv activeWeekly lvUpdateTime name');
if (!result) {
return resResult(STATUS.GUILD_FUND_NOT_ENOUGH);
}
if (id == GUILD_STRUCTURE.ARMY_CENTER) {
let r = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId });
await r.setRankWithGuildInfo2(code, guild.lv, guild.activeWeekly, guild.lvUpdateTime, guild);
await r.setRankWithGuildInfo2(code, result.lv, result.activeWeekly, result.lvUpdateTime, result);
}
const resultStructure = result.structure.find(cur => cur.id == id);
@@ -4,7 +4,7 @@ import { STATUS, RANK_TYPE_TO_KEY, ROLE_SELECT, RANK_TYPE, HERO_SELECT, GUILD_SE
import { RoleModel } from "../../../db/Role";
import { UserGuildModel } from "../../../db/UserGuild";
import { GuildModel } from "../../../db/Guild";
import { Rank, getGeneralRank } from "../../../services/rankService";
import { Rank, getGeneralRank, getRankFirstReward } from "../../../services/rankService";
import { nowSeconds } from "../../../pubUtils/timeUtil";
import { gameData } from "../../../pubUtils/data";
import { addItems } from "../../../services/rewardService";
@@ -34,6 +34,20 @@ export class RoleHandler {
return resResult(STATUS.SUCCESS, { ranks });
}
async getRankReward(msg: {}, session: BackendSession) {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let serverId = session.get('serverId');
let role = await RoleModel.findByRoleId(roleId, 'rankReceived');
if (!role) return resResult(STATUS.WRONG_PARMS);
let ranks = await getRankFirstReward(role, serverId);
return resResult(STATUS.SUCCESS, { ranks });
}
async getRank(msg: { type: number }, session: BackendSession) {
let roleId = session.get('roleId');
let serverId = session.get('serverId');
@@ -58,7 +58,9 @@ export class RoleHandler {
}
await createHero.createWithInitInfo(infos, initInfos.figureInfo);
await createHero.pushMessage(pinus, sid);
console.log('updateRedisRank before', Date.now())
await createHero.updateRedisRank(Rank);
console.log('updateRedisRank after', Date.now())
let heroes = createHero.getResultHeroes();
console.log('****** createHeroes after', Date.now())
@@ -4,6 +4,7 @@ import { reloadResources } from '../../../pubUtils/data';
import { HeroUpdate } from '../../../db/Hero';
import { RoleUpdate } from '../../../db/Role';
import { SkinUpdate } from '../../../db/Skin';
import { RankFirstModel, RankFirstType } from '../../../db/RankFirst';
import { getInitRoleInfo } from '../../../pubUtils/roleUtil';
import { DEFAULT_HEROES } from '../../../consts';
import { Figure } from '../../../domain/dbGeneral';
@@ -18,12 +19,35 @@ export class RoleRemote {
this.app = app;
this.channelService = app.get('channelService');
this.setInitRole();
this.loadRankFirst();
}
private channelService: ChannelService;
private initHeroes: Map<number, HeroUpdate> = new Map(); // hid => hero
private initRole: RoleUpdate = {};
private initSkins: Map<number, SkinUpdate> = new Map(); // hid => skin
private figureInfo: {heads: Figure[], frames: Figure[], spines: Figure[]};
private rankFirstRewards: Map<number, Map<number, RankFirstType>> = new Map();
private async loadRankFirst() {
let rankFirstRewards = await RankFirstModel.findAllRankRewards();
for(let rank of rankFirstRewards) {
if(!this.rankFirstRewards.has(rank.serverId)) {
this.rankFirstRewards.set(rank.serverId, new Map());
}
this.rankFirstRewards.get(rank.serverId).set(rank.id, rank);
}
}
public setRankFirst(rank: RankFirstType) {
if(!this.rankFirstRewards.has(rank.serverId)) {
this.rankFirstRewards.set(rank.serverId, new Map());
}
this.rankFirstRewards.get(rank.serverId).set(rank.id, rank);
}
public getRankFirstById(serverId: number, id: number) {
return this.rankFirstRewards.get(serverId)?.get(id);
}
public setInitRole() {
let result = getInitRoleInfo();