排行榜:奖励显示首通信息
This commit is contained in:
40
shared/db/RankFirst.ts
Normal file
40
shared/db/RankFirst.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* 秘境首通
|
||||
*/
|
||||
import BaseModel from './BaseModel';
|
||||
import { getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { RankParam, GuildRankParam } from '../domain/rank';
|
||||
|
||||
export default class RankFirst extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
serverId: number; // 服务器id
|
||||
|
||||
@prop({ required: true })
|
||||
id: number; // 奖励表id
|
||||
|
||||
@prop({ required: true })
|
||||
type: number; // 排行榜id
|
||||
|
||||
@prop({ required: true, type: () => RankParam, _id: false })
|
||||
userInfo: RankParam; // 玩家信息
|
||||
|
||||
@prop({ required: true, type: () => GuildRankParam, _id: false })
|
||||
guildInfo: GuildRankParam; // 军团信息
|
||||
|
||||
public static async createRankFirst(serverId: number, id: number, type: number, update: RankFirstUpdateParam) {
|
||||
const rec: RankFirstType = await RankFirstModel.findOneAndUpdate({ serverId, id, type}, { $setOnInsert: update }, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async findAllRankRewards() {
|
||||
let rewards: RankFirstType[] = await RankFirstModel.find({}, { _id: false }).select('serverId id type userInfo guildInfo').lean();
|
||||
return rewards;
|
||||
}
|
||||
}
|
||||
|
||||
export const RankFirstModel = getModelForClass(RankFirst);
|
||||
|
||||
export interface RankFirstType extends Pick<DocumentType<RankFirst>, keyof RankFirst>{}
|
||||
export type RankFirstUpdateParam = Partial<RankFirstType>; // 将所有字段变成可选项
|
||||
|
||||
@@ -66,6 +66,69 @@ export class RankParam {
|
||||
}
|
||||
}
|
||||
|
||||
export class GuildLeader {
|
||||
@prop({ required: true })
|
||||
roleId: string;
|
||||
|
||||
@prop({ required: true })
|
||||
roleName: string;
|
||||
|
||||
@prop({ required: true })
|
||||
title: number;
|
||||
|
||||
@prop({ required: true })
|
||||
lv: number;
|
||||
|
||||
@prop({ required: true })
|
||||
head: number;
|
||||
|
||||
@prop({ required: true })
|
||||
frame: number;
|
||||
|
||||
@prop({ required: true })
|
||||
spine: number;
|
||||
|
||||
constructor(leader: { roleId: string, roleName: string, title: number, lv: number, head: number, frame: number, spine: number}) {
|
||||
this.roleId = leader.roleId;
|
||||
this.roleName = leader.roleName;
|
||||
this.title = leader.title;
|
||||
this.lv = leader.lv;
|
||||
this.head = leader.head;
|
||||
this.frame = leader.frame;
|
||||
this.spine = leader.spine;
|
||||
}
|
||||
}
|
||||
|
||||
// 排行榜返回玩家值
|
||||
export class LineupParam {
|
||||
@prop({ required: true })
|
||||
hid: number;
|
||||
|
||||
@prop({ required: true })
|
||||
star: number;
|
||||
|
||||
@prop({ required: true })
|
||||
colorStar: number;
|
||||
|
||||
@prop({ required: true })
|
||||
lv: number;
|
||||
|
||||
@prop({ required: true })
|
||||
quality: number;
|
||||
|
||||
@prop({ required: true })
|
||||
job: number;
|
||||
|
||||
constructor(hero: HeroType) {
|
||||
this.hid = hero.hid;
|
||||
this.star = hero.star;
|
||||
this.colorStar = hero.colorStar;
|
||||
this.lv = hero.lv;
|
||||
this.quality = hero.quality;
|
||||
this.job = hero.job;
|
||||
}
|
||||
}
|
||||
|
||||
export class RoleRankInfo extends RankParam {
|
||||
rank: number = 1;
|
||||
roleId: string = "";
|
||||
@@ -94,23 +157,24 @@ export class RoleRankInfo extends RankParam {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 公会排行榜返回值
|
||||
export class GuildRankParam {
|
||||
@prop({ required: true })
|
||||
icon: number;
|
||||
|
||||
@prop({ required: true })
|
||||
name: string;
|
||||
|
||||
@prop({ required: true })
|
||||
lv: number;
|
||||
|
||||
@prop({ required: true })
|
||||
memberCnt: number;
|
||||
leader: {
|
||||
roleId: string;
|
||||
roleName: string;
|
||||
title: number;
|
||||
lv: number;
|
||||
head: number;
|
||||
frame: number;
|
||||
spine: number;
|
||||
};
|
||||
|
||||
@prop({ required: true, _id: false })
|
||||
leader: GuildLeader;
|
||||
|
||||
@prop({ required: true })
|
||||
guildCe: number;
|
||||
|
||||
constructor(guild: GuildUpdateParam) {
|
||||
@@ -186,56 +250,6 @@ export class RoleAndGuildRankInfo {
|
||||
}
|
||||
}
|
||||
|
||||
export class GuildLeader {
|
||||
roleId: string;
|
||||
roleName: string;
|
||||
title: number;
|
||||
lv: number;
|
||||
head: number;
|
||||
frame: number;
|
||||
spine: number;
|
||||
|
||||
constructor(leader: { roleId: string, roleName: string, title: number, lv: number, head: number, frame: number, spine: number}) {
|
||||
this.roleId = leader.roleId;
|
||||
this.roleName = leader.roleName;
|
||||
this.title = leader.title;
|
||||
this.lv = leader.lv;
|
||||
this.head = leader.head;
|
||||
this.frame = leader.frame;
|
||||
this.spine = leader.spine;
|
||||
}
|
||||
}
|
||||
|
||||
// 排行榜返回玩家值
|
||||
export class LineupParam {
|
||||
@prop({ required: true })
|
||||
hid: number;
|
||||
|
||||
@prop({ required: true })
|
||||
star: number;
|
||||
|
||||
@prop({ required: true })
|
||||
colorStar: number;
|
||||
|
||||
@prop({ required: true })
|
||||
lv: number;
|
||||
|
||||
@prop({ required: true })
|
||||
quality: number;
|
||||
|
||||
@prop({ required: true })
|
||||
job: number;
|
||||
|
||||
constructor(hero: HeroType) {
|
||||
this.hid = hero.hid;
|
||||
this.star = hero.star;
|
||||
this.colorStar = hero.colorStar;
|
||||
this.lv = hero.lv;
|
||||
this.quality = hero.quality;
|
||||
this.job = hero.job;
|
||||
}
|
||||
}
|
||||
|
||||
export class SimpleGuildRankParam {
|
||||
rank: number = 0;
|
||||
code: string = "";
|
||||
@@ -366,4 +380,4 @@ export class GeneralRankParam {
|
||||
this.num = rankInfo.num;
|
||||
this.received = received;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ export class UpdateHeroes {
|
||||
funcs: number[] = [];
|
||||
incHeroNum: number = 0;
|
||||
incRoleCe: number = 0;
|
||||
pushHeroes: {hid: number, incHeroCe: number, ce: number}[] = [];
|
||||
pushHeroes: {hid: number, incHeroCe: number, ce: number, hero: HeroUpdate}[] = [];
|
||||
roleUpdate: RoleUpdate;
|
||||
role: RoleType;
|
||||
guild: GuildType;
|
||||
@@ -104,7 +104,7 @@ export class UpdateHeroes {
|
||||
if(isCreate) this.incHeroNum ++;
|
||||
if(heroInfo != originCe) this.incRoleCe += heroInfo.ce - originCe;
|
||||
this.addRoleUpdateParam(await calculatetopLineup(role, heroInfo.hid, heroInfo.ce, heroInfo._id ));
|
||||
this.pushHeroes.push({ hid: heroInfo.hid, incHeroCe: heroInfo.ce - originCe, ce: heroInfo.ce });
|
||||
this.pushHeroes.push({ hid: heroInfo.hid, incHeroCe: heroInfo.ce - originCe, ce: heroInfo.ce, hero: heroInfo });
|
||||
}
|
||||
|
||||
// 更新战力相关的各个表
|
||||
@@ -127,37 +127,50 @@ export class UpdateHeroes {
|
||||
public async updateRedisRank(Rank: any) {
|
||||
let role = await this.getRole();
|
||||
let { serverId, roleId, pushHeroes } = this;
|
||||
console.log('******** guildInfo before', Date.now());
|
||||
// 更新军团信息
|
||||
if(this.guild) {
|
||||
let r = new Rank(REDIS_KEY.GUILD_INFO, { code: this.guild.code });
|
||||
await r.generParamAndSet(REDIS_KEY.GUILD_INFO, { guildCode: this.guild.code }, { guild: this.guild });
|
||||
}
|
||||
console.log('******** guildInfo after', Date.now());
|
||||
console.log('******** heroNum before', Date.now());
|
||||
// 武将数量
|
||||
if(this.incHeroNum > 0) {
|
||||
let r = new Rank(REDIS_KEY.HERO_NUM_RANK, { serverId });
|
||||
await r.setRankWithRoleInfo(roleId, role.heroNum, role.heroNumUpdatedAt, role);
|
||||
}
|
||||
console.log('******** heroNum after', Date.now());
|
||||
console.log('******** topLineup before', Date.now());
|
||||
|
||||
// 最强阵容
|
||||
let r = new Rank(REDIS_KEY.TOP_LINEUP_RANK, { serverId });
|
||||
await r.setRankWithRoleInfo(roleId, reduceCe(role.topLineupCe), 0, role);
|
||||
console.log('******** topLineup after', Date.now());
|
||||
|
||||
console.log('******** hero before', Date.now());
|
||||
// 最强武将
|
||||
for(let { hid, ce } of pushHeroes) {
|
||||
for(let { hid, ce, hero } of pushHeroes) {
|
||||
console.log('******** hero before', hid, Date.now());
|
||||
let r2 = new Rank(REDIS_KEY.TOP_HERO_RANK, { serverId });
|
||||
await r2.setRankWithHeroInfo(roleId, hid, ce, 0);
|
||||
await r2.setRankWithHeroInfo(roleId, hid, ce, 0, hero);
|
||||
|
||||
let r4 = new Rank(REDIS_KEY.HERO_RANK, { serverId, hid });
|
||||
await r4.setRankWithHeroInfo(roleId, hid, ce, 0);
|
||||
await r4.setRankWithHeroInfo(roleId, hid, ce, 0, hero);
|
||||
console.log('******** hero after', hid, Date.now());
|
||||
}
|
||||
|
||||
console.log('******** hero after', Date.now());
|
||||
console.log('******** sumCe before', Date.now());
|
||||
// 总战力
|
||||
let r3 = new Rank(REDIS_KEY.SUM_CE_RANK, { serverId });
|
||||
await r3.setRankWithRoleInfo(roleId, reduceCe(role.ce), 0, role);
|
||||
console.log('******** sumCe after', Date.now());
|
||||
|
||||
console.log('******** lineup info before', Date.now());
|
||||
// 更新最强五人阵容信息
|
||||
let r5 = new Rank(REDIS_KEY.TOP_LINEUP_INFO, { serverId });
|
||||
await r5.generParamAndSet(REDIS_KEY.TOP_LINEUP_INFO, { roleId }, { role });
|
||||
console.log('******** lineup info after', Date.now());
|
||||
}
|
||||
|
||||
public async pushMessage(pinus: any, sid: string) {
|
||||
|
||||
Reference in New Issue
Block a user