🐞 fix(gvg): 修复战区问题,不跨服服务器应单列

This commit is contained in:
luying
2023-02-20 20:46:20 +08:00
parent 015b4293fb
commit 5b3747a78e
27 changed files with 324 additions and 390 deletions
+3 -6
View File
@@ -71,10 +71,7 @@ export default class GVGBattleRec extends BaseModel {
configId: number; // 赛季
@prop({ required: true })
groupId: number; // 战区
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
groupKey: string; // 1-单服 2-跨服
@prop({ required: true })
warId: number; // 关卡id
@@ -91,9 +88,9 @@ export default class GVGBattleRec extends BaseModel {
@prop({ required: true })
battleEndTime: number;
public static async createRec(configId: number, groupId: number, serverType: number, warId: number, attackTeam: GVGTeamType, defenseTeam: GVGTeamType) {
public static async createRec(configId: number, groupKey: string, warId: number, attackTeam: GVGTeamType, defenseTeam: GVGTeamType) {
const battleCode = genCode(8);
const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { configId, groupId, serverType, warId, attackTeam, defenseTeam, isSuccess: false } }, { new: true, upsert: true }).lean();
const result: GVGBattleRecType = await GVGBattleRecModel.findOneAndUpdate({ battleCode }, { $set: { configId, groupKey, warId, attackTeam, defenseTeam, isSuccess: false } }, { new: true, upsert: true }).lean();
return result;
}
+16 -19
View File
@@ -11,17 +11,14 @@ class Player {
teamCnt: number;
}
@index({ configId: 1, cityId: 1, groupId: 1, serverType: 1 })
@index({ configId: 1, cityId: 1, groupKey: 1 })
// GVGCity 类,继承自 BaseModel
export default class GVGCity extends BaseModel {
@prop({ required: true, default: 1 })
configId: number; // config唯一id
@prop({ required: true, default: 1 })
groupId: number; // 战区
@prop({ required: true, default: 1 })
serverType: number; // 1-单服 2-跨服
@prop({ required: true })
groupKey: string; // 战区
@prop({ required: true })
cityId: number; // 城池id
@@ -45,20 +42,20 @@ export default class GVGCity extends BaseModel {
userCnt: number; // 城池人数
// 通过 cityId 获取城市
public static async findByCityId(configId: number, groupId: number, serverType: number, cityId: number) {
const city: GVGCityType = await GVGCityModel.findOne({ configId, groupId, serverType, cityId }).lean();
public static async findByCityId(configId: number, groupKey: string, cityId: number) {
const city: GVGCityType = await GVGCityModel.findOne({ configId, groupKey, cityId }).lean();
return city;
}
// 添加人数
public static async increasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string, leagueCode: string, teamCnt: number) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true, upsert: true }).lean();
public static async increasePlayer(configId: number, groupKey: string, cityId: number, roleId: string, leagueCode: string, teamCnt: number) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId, userCnt: { $lt: 200 } }, { $inc: { userCnt: 1 }, $push: { players: { roleId, leagueCode, teamCnt } }}, { new: true, upsert: true }).lean();
return city;
}
// 减少人数
public static async decreasePlayer(configId: number, groupId: number, serverType: number, cityId: number, roleId: string) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupId, serverType, cityId, 'players.roleId': roleId }, { $inc: { userCnt: -1 }, $pull: { players: { roleId } }}, { new: true, upsert: true }).lean();
public static async decreasePlayer(configId: number, groupKey: string, cityId: number, roleId: string) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId, groupKey, cityId, 'players.roleId': roleId }, { $inc: { userCnt: -1 }, $pull: { players: { roleId } }}, { new: true, upsert: true }).lean();
return city;
}
@@ -74,9 +71,9 @@ export default class GVGCity extends BaseModel {
}
// 查询联军驻守情况
public static async findGuardCity(configId: number, groupId: number, serverType: number, select = '') {
let cities: GVGCityType[] = await GVGCityModel.find({ configId: configId + 1, groupId, serverType, hasGuard: true }).select(select).lean();
if(cities.length == 0) cities = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).select(select).lean();
public static async findGuardCity(configId: number, groupKey: string, select = '') {
let cities: GVGCityType[] = await GVGCityModel.find({ configId: configId + 1, groupKey, hasGuard: true }).select(select).lean();
if(cities.length == 0) cities = await GVGCityModel.find({ configId, groupKey, hasGuard: true }).select(select).lean();
return cities
}
@@ -87,15 +84,15 @@ export default class GVGCity extends BaseModel {
}
// 占领城池
public static async guardCity(configId: number, groupId: number, serverType: number, cityId: number, league: LeagueRankInfo) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupId, serverType }, { $set: {
public static async guardCity(configId: number, groupKey: string, cityId: number, league: LeagueRankInfo) {
const city: GVGCityType = await GVGCityModel.findOneAndUpdate({ configId: configId + 1, cityId, groupKey }, { $set: {
hasGuard: true, guardLeague: league.code, guardLeagueName: league.name, guardLeagueIcon: league.icon
} }, { upsert: true, new: true }).lean();
return city;
}
public static async findByConfig(configId: number, groupId: number, serverType: number) {
const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupId, serverType, hasGuard: true }).lean();
public static async findByConfig(configId: number, groupKey: string) {
const cities: GVGCityType[] = await GVGCityModel.find({ configId, groupKey, hasGuard: true }).lean();
return cities
}
}
+9 -12
View File
@@ -2,17 +2,14 @@ import BaseModel from "./BaseModel";
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { GVGTeamType } from "./GVGTeam";
@index({ configId: 1, pontId: 1, groupId: 1, serverType: 1 })
@index({ configId: 1, pontId: 1, groupKey: 1 })
// GVGCityAreaPoint 类,继承自 BaseModel
export default class GVGCityAreaPoint extends BaseModel {
@prop({ required: true, default: 1 })
configId: number; // config唯一id
@prop({ required: true, default: 1 })
groupId: number; // 战区
@prop({ required: true, default: 1 })
serverType: number; // 1-单服 2-跨服
groupKey: string; // 战区
@prop({ required: true })
cityId: number; // 城池id
@@ -39,22 +36,22 @@ export default class GVGCityAreaPoint extends BaseModel {
teamCode: string; // 玩家的编队
public static async settlePoint(cityId: number, areaId: number, pointId: number, team: GVGTeamType) {
let { configId, groupId, serverType, leagueCode, leagueName, roleId, roleName, teamCode } = team;
await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupId, serverType, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true });
let { configId, groupKey, leagueCode, leagueName, roleId, roleName, teamCode } = team;
await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true });
let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate(
{ configId, groupId, serverType, pointId },
{ configId, groupKey, pointId },
{ $set: { cityId, areaId, leagueCode, leagueName, roleId, roleName, teamCode } },
{ new: true }).lean();
return result;
}
public static async leavePoint(configId: number, groupId: number, serverType: number, pointId: number) {
let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupId, serverType, pointId }, { $set: { teamCode: '' }}, { new: true }).lean();
public static async leavePoint(configId: number, groupKey: string, pointId: number) {
let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $set: { teamCode: '' }}, { new: true }).lean();
return result;
}
public static async findByConfig(configId: number, groupId: number, serverType: number) {
let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupId, serverType }).lean();
public static async findByConfig(configId: number, groupKey: string) {
let result: GVGCityAreaPointType[] = await GVGCityAreaPointModel.find({ configId, groupKey }).lean();
return result
}
}
+5 -2
View File
@@ -10,6 +10,9 @@ export default class GVGRec extends BaseModel {
@prop({ required: true, default: '' })
leagueCode: string; // 联军id
@prop({ required: false, default: '' })
groupKey: string; // 战区
@prop({ required: false, default: '' })
roleId: string; // 玩家id
@@ -45,8 +48,8 @@ export default class GVGRec extends BaseModel {
}
// 查询城池战报
public static async findBattleRecByCity(configId: number, groupId: number, serverType: number, cityId: number) {
const result: GVGRecType[] = await GVGRecModel.find({ cityId, configId, groupId, serverType, type: GVG_REC_TYPE.BATTLE_BY_CITY }, { _id: 0, recId: 1, params: 1, createTime: 1 }).sort({ createTime: -1 }).limit(50).lean();
public static async findBattleRecByCity(configId: number, groupKey: string, cityId: number) {
const result: GVGRecType[] = await GVGRecModel.find({ cityId, configId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_CITY }, { _id: 0, recId: 1, params: 1, createTime: 1 }).sort({ createTime: -1 }).limit(50).lean();
return result;
}
+17 -20
View File
@@ -105,10 +105,7 @@ export default class GVGTeam extends BaseModel {
lineupCe: number;
@prop({ required: true })
groupId: number; // 战区
@prop({ required: true })
serverType: number; // 单服还是跨服
groupKey: string; // 战区
@prop({ required: true, default: false })
isRobot: boolean; // 是否是机器人
@@ -136,8 +133,8 @@ export default class GVGTeam extends BaseModel {
}
// 玩家切换城池更新队伍信息
public static async enterCity(roleId: string, cityId: number, areaId: number, groupId: number, serverType: number) {
const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, fromAreaId: areaId, pointId: 0, groupId, serverType }).lean();
public static async enterCity(roleId: string, cityId: number, areaId: number, groupKey: string) {
const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, fromAreaId: areaId, pointId: 0, groupKey }).lean();
return !!res['ok'];
}
@@ -200,17 +197,17 @@ export default class GVGTeam extends BaseModel {
return await GVGTeamModel.findByRole(roleId, '-_id');
}
public static async findRobotTeams(groupId: number, serverType: number, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true }).lean();
public static async findRobotTeams(groupKey: string, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true }).lean();
return team;
}
// 每赛季初刷新机器人
public static async initRobots(configId: number, groupId: number, serverType: number, cityId: number, dicPoints: DicGVGAreaPoint[]) {
public static async initRobots(configId: number, groupKey: string, cityId: number, dicPoints: DicGVGAreaPoint[]) {
await GVGTeamModel.bulkWrite(dicPoints.map(({ pointId, areaId, name, head, spine, ce, durability }) => {
return {
updateOne: {
filter: { groupId, serverType, cityId, areaId, pointId },
filter: { groupKey, cityId, areaId, pointId },
update: { $setOnInsert: {
teamCode: genCode(8), maxDurability: durability, roleName: name, head, spine, frame: EXTERIOR.EXTERIOR_FACECASE, lineupCe: ce, isRobot: true,
isBroken: false, startMoveTime: 0, stopMoveTime: 0, guildCode: '', leagueCode: '', leagueName: '', fromAreaId: areaId,
@@ -219,20 +216,20 @@ export default class GVGTeam extends BaseModel {
}
}
}));
return await this.findRobotTeams(groupId, serverType, cityId);
return await this.findRobotTeams(groupKey, cityId);
}
public static async findCatapultTeams(groupId: number, serverType: number, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, isRobot: true, isCatapult: true }).lean();
public static async findCatapultTeams(groupKey: string, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true, isCatapult: true }).lean();
return team;
}
// 生成投石车
public static async initCatapult(configId: number, groupId: number, serverType: number, cityId: number, leagueCode: string, leagueName: string, areaIds: number[], atk: number, durability: number) {
public static async initCatapult(configId: number, groupKey: string, cityId: number, leagueCode: string, leagueName: string, areaIds: number[], atk: number, durability: number) {
await GVGTeamModel.bulkWrite(areaIds.map(areaId => {
return {
updateOne: {
filter: { groupId, serverType, cityId, areaId },
filter: { groupKey, cityId, areaId },
update: { $setOnInsert: {
teamCode: genCode(8), maxDurability: durability, captapultAtk: atk, leagueCode, leagueName,
roleName: GVG.GVG_CATAPULT_NAME, head: GVG.GVG_CATAPULT_HEAD, spine: GVG.GVG_CATAPULT_SPINE, frame: EXTERIOR.EXTERIOR_FACECASE, lineupCe: GVG.GVG_CATAPULT_CE,
@@ -243,7 +240,7 @@ export default class GVGTeam extends BaseModel {
}
}
}));
return await this.findCatapultTeams(groupId, serverType, cityId);
return await this.findCatapultTeams(groupKey, cityId);
}
// 攻击方攻击cd
@@ -299,8 +296,8 @@ export default class GVGTeam extends BaseModel {
}
}
public static async findByAreaId(groupId: number, serverType: number, cityId: number, areaId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupId, serverType, cityId, areaId, stopMoveTime: { $lte: nowSeconds() }, isBroken: false }).lean();
public static async findByAreaId(groupKey: string, cityId: number, areaId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, areaId, stopMoveTime: { $lte: nowSeconds() }, isBroken: false }).lean();
return team;
}
@@ -310,8 +307,8 @@ export default class GVGTeam extends BaseModel {
}
// 这个编队上是否已经有队伍了
public static async checkPoint(configId: number, groupId: number, serverType: number, pointId: number) {
return await GVGTeamModel.exists({ configId, groupId, serverType, pointId, isBroken: false });
public static async checkPoint(configId: number, groupKey: string, pointId: number) {
return await GVGTeamModel.exists({ configId, groupKey, pointId, isBroken: false });
}
// 投石车伤害
+5 -8
View File
@@ -14,10 +14,7 @@ class Vestige {
export default class GVGVestige extends BaseModel {
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
type: number; // 1-单服 2-跨服
groupKey: string; // 战区
@prop({ required: true, type: Vestige, _id: false })
vestiges: Vestige[]; // 今天的遗迹点
@@ -25,15 +22,15 @@ export default class GVGVestige extends BaseModel {
@prop({ required: true })
day: number; // 每天5点
public static async getVestige(groupId: number) {
public static async getVestige(groupKey: string) {
let day = getZeroPoint();
let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupId, day }).lean();
let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupKey, day }).lean();
return result;
}
public static async initTodayVestige(groupId: number, type: number, vestiges: Vestige[]) {
public static async initTodayVestige(groupKey: string, vestiges: Vestige[]) {
let day = getZeroPoint();
let result: GVGVestigeType = await GVGVestigeModel.findOneAndUpdate({ groupId, day }, { $setOnInsert: { type, vestiges } }, { new: true, upsert: true }).lean();
let result: GVGVestigeType = await GVGVestigeModel.findOneAndUpdate({ groupKey, day }, { $setOnInsert: { vestiges } }, { new: true, upsert: true }).lean();
return result;
}
}
+8 -11
View File
@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { DAY_TO_SECOND, getZeroPoint } from '../pubUtils/timeUtil';
@index({ day: 1, groupId: 1, serverType: 1, score: 1 })
@index({ day: 1, groupKey: 1, score: 1 })
@index({ leagueCode: 1 })
export default class GVGVestigeLeagueRank extends BaseModel {
@@ -16,10 +16,7 @@ export default class GVGVestigeLeagueRank extends BaseModel {
leagueCode: string; // 玩家id
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
groupKey: string; // 1-单服 2-跨服
@prop({ required: true })
score: number; // 得分
@@ -30,31 +27,31 @@ export default class GVGVestigeLeagueRank extends BaseModel {
@prop({ required: true })
isReceived: boolean; // 是否领取过
public static async incScore(configId: number, leagueCode: string, groupId: number, serverType: number, inc: number) {
public static async incScore(configId: number, leagueCode: string, groupKey: string, inc: number) {
let today = getZeroPoint();
let result: GVGVestigeLeagueRankType = await GVGVestigeLeagueRankModel.findOneAndUpdate({
day: today, groupId, serverType, leagueCode
day: today, groupKey, leagueCode
}, { $inc: { score: inc }, $set: { configId }, $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean();
return result;
}
// 排行榜
public static async findRank(): Promise<{ _id: { groupId: number, serverType: number }, arr: { leagueCode: string, score: number, updatedAt: Date }[], leagueCodes: string[] }[]> {
public static async findRank(): Promise<{ _id: string, arr: { leagueCode: string, score: number, updatedAt: Date }[], leagueCodes: string[] }[]> {
let today = getZeroPoint();
let ranks = await GVGVestigeLeagueRankModel.aggregate([
{ $match: { day: today } },
{ $group: {
_id: { groupId: "$groupId", serverType: "$serverType" },
_id: "$groupKey",
arr: { $push: { leagueCode: "$leagueCode", score: "$score", updatedAt: "$updatedAt" } }, leagueCodes: { $addToSet: "$leagueCode" }
}},
]);
return ranks;
}
public static async saveRank(groupId: number, serverType: number, ranks: { rank: number, field: string }[]) {
public static async saveRank(groupKey: string, ranks: { rank: number, field: string }[]) {
let today = getZeroPoint();
await GVGVestigeLeagueRankModel.bulkWrite(ranks.map(({ field, rank }) => {
return { updateOne: { filter: { day: today, groupId, serverType, leagueCode: field }, update: { $set: { rank } }} }
return { updateOne: { filter: { day: today, groupKey, leagueCode: field }, update: { $set: { rank } }} }
}));
}
+8 -11
View File
@@ -14,10 +14,7 @@ export default class GVGVestigeLock extends BaseModel {
day: number; // 每天5点
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
groupKey: string; // 1-单服 2-跨服
@prop({ required: true })
vestigeId: number; // 遗迹id
@@ -34,26 +31,26 @@ export default class GVGVestigeLock extends BaseModel {
@prop({ required: true })
defenseRoleId: string; // 防守玩家
public static async chooseOppLock(groupId: number, serverType: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
public static async chooseOppLock(groupKey: string, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
let day = getZeroPoint();
await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
await GVGVestigeLockModel.findOneAndUpdate({ day, groupKey, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
day, groupId, vestigeId, rank, unlockTime: { $lt: Date.now() }
day, groupKey, vestigeId, rank, unlockTime: { $lt: Date.now() }
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000, attackRoleId, defenseRoleId } }, { new: true }).lean();
return result;
}
public static async checkBattleLock(groupId: number, serverType: number, vestigeId: number, rank: number, attackRoleId: string) {
public static async checkBattleLock(groupKey: string, vestigeId: number, rank: number, attackRoleId: string) {
let day = getZeroPoint();
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
day, groupId, serverType, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() }
day, groupKey, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() }
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 } }, { new: true }).lean();
return result;
}
public static async releaseLock(groupId: number, serverType: number, vestigeId: number, rank: number) {
public static async releaseLock(groupKey: string, vestigeId: number, rank: number) {
let day = getZeroPoint();
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupKey, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
return result;
}
}
+12 -15
View File
@@ -14,7 +14,7 @@ export class Lineup {
ce: number; // 战力
}
@index({ day: 1, groupId: 1, serverType: 1, vestigeId: 1, rank: 1 })
@index({ day: 1, groupKey: 1, vestigeId: 1, rank: 1 })
@index({ roleId: 1 })
export default class GVGVestigeRank extends BaseModel {
@@ -25,14 +25,11 @@ export default class GVGVestigeRank extends BaseModel {
day: number; // 每天5点
@prop({ required: true })
groupId: number; // 战区id
groupKey: string; // 战区
@prop({ required: true })
vestigeId: number; // 遗迹id
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
@prop({ required: true })
roleId: string; // 玩家
@@ -72,16 +69,16 @@ export default class GVGVestigeRank extends BaseModel {
return result;
}
public static async findByRank(configId: number, groupId: number, serverType: number, vestigeId: number, rank: number) {
public static async findByRank(configId: number, groupKey: string, vestigeId: number, rank: number) {
let today = getZeroPoint();
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOne({ configId, groupId, serverType, day: today, vestigeId, rank }).lean();
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOne({ configId, groupKey, day: today, vestigeId, rank }).lean();
return result;
}
public static async initRank(configId: number, vestigeId: number, groupId: number, serverType: number, role: RoleType, leagueCode: string, oppRanks: number[]) {
public static async initRank(configId: number, vestigeId: number, groupKey: string, role: RoleType, leagueCode: string, oppRanks: number[]) {
let today = getZeroPoint();
let doc = new GVGVestigeRankModel();
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, serverType, oppRanks, leagueCode });
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupKey, oppRanks, leagueCode });
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
return result;
}
@@ -92,9 +89,9 @@ export default class GVGVestigeRank extends BaseModel {
return result;
}
public static async findByRanks(groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
public static async findByRanks(groupKey: string, vestigeId: number, ranks: number[]) {
let today = getZeroPoint();
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $in: ranks } })
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupKey, rank: { $in: ranks } })
.lean();
return result;
}
@@ -146,21 +143,21 @@ export default class GVGVestigeRank extends BaseModel {
return result;
}
public static async findRank(): Promise<{ _id: { groupId: number, vestigeId: number, serverType: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> {
public static async findRank(): Promise<{ _id: { groupKey: string, vestigeId: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> {
let today = getZeroPoint();
let ranks = await GVGVestigeRankModel.aggregate([
{ $match: { day: today } },
{ $group: {
_id: { groupId: "$groupId", vestigeId: "$vestigeId", serverType: "$serverType" },
_id: { groupKey: "$groupKey", vestigeId: "$vestigeId" },
arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" }
}},
]);
return ranks;
}
public static async findRankByVestige(groupId: number, serverType: number, vestigeId: number) {
public static async findRankByVestige(groupKey: string, vestigeId: number) {
let today = getZeroPoint();
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $gt: 0 } }).sort({ rank: 1 }).select('roleId rank lineup').lean();
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupKey, rank: { $gt: 0 } }).sort({ rank: 1 }).select('roleId rank lineup').lean();
return result;
}
}
+4 -7
View File
@@ -17,7 +17,7 @@ class LeagueGood {
}
@index({ battleCode: 1 })
@index({ groupId: 1, vestigeId: 1, rank: 1 })
@index({ groupKey: 1, vestigeId: 1, rank: 1 })
export default class GVGVestigeRec extends BaseModel {
@prop({ required: true })
@@ -36,10 +36,7 @@ export default class GVGVestigeRec extends BaseModel {
configId: number; // 赛期
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
serverType: number; // 战区id
groupKey: string; // 战区id
@prop({ required: true })
vestigeId: number; // 遗迹id
@@ -68,10 +65,10 @@ export default class GVGVestigeRec extends BaseModel {
@prop({ required: true, default: false })
hasRpl: boolean; // 是否存在对应录像
public static async createRec(configId: number, vestigeId: number, groupId: number, serverType: number, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
public static async createRec(configId: number, vestigeId: number, groupKey: string, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
const battleCode = genCode(10);
const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, {
$set: { configId, vestigeId, groupId, serverType, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
$set: { configId, vestigeId, groupKey, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
}, { new: true, upsert: true }).lean();
return result;
}
+8 -11
View File
@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getZeroPoint } from '../pubUtils/timeUtil';
@index({ day: 1, groupId: 1, serverType: 1, score: 1 })
@index({ day: 1, groupKey: 1, score: 1 })
@index({ roleId: 1 })
export default class GVGVestigeSumRank extends BaseModel {
@@ -19,10 +19,7 @@ export default class GVGVestigeSumRank extends BaseModel {
leagueCode: string; // 联军id
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
serverType: number; // 1-单服 2-跨服
groupKey: string; // 战区id
@prop({ required: true })
score: number; // 得分
@@ -33,21 +30,21 @@ export default class GVGVestigeSumRank extends BaseModel {
@prop({ required: true })
isReceived: boolean; // 是否领取过
public static async incScore(roleId: string, leagueCode: string, configId: number, groupId: number, serverType: number, inc: number) {
public static async incScore(roleId: string, leagueCode: string, configId: number, groupKey: string, inc: number) {
let today = getZeroPoint();
let result: GVGVestigeSumRankType = await GVGVestigeSumRankModel.findOneAndUpdate({
configId, day: today, groupId, serverType, roleId, leagueCode
configId, day: today, groupKey, roleId, leagueCode
}, { $inc: { score: inc } , $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean();
return result;
}
// 排行榜
public static async findRankByGroupId(): Promise<{ _id: { groupId: number, serverType: number }, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> {
public static async findRankByGroupId(): Promise<{ _id: string, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> {
let today = getZeroPoint();
let ranks = await GVGVestigeSumRankModel.aggregate([
{ $match: { day: today } },
{ $group: {
_id: { groupId: "$groupId", serverType: "$serverType" },
_id: "$groupKey",
arr: { $push: { roleId: "$roleId", score: "$score", updatedAt: "$updatedAt", leagueCode: "$leagueCode" } }, roleIds: { $addToSet: "$roleId" }
}},
]);
@@ -64,10 +61,10 @@ export default class GVGVestigeSumRank extends BaseModel {
return ranks;
}
public static async saveRank(groupId: number, serverType: number, ranks: { rank: number, field: string }[]) {
public static async saveRank(groupKey: string, ranks: { rank: number, field: string }[]) {
let today = getZeroPoint();
await GVGVestigeSumRankModel.bulkWrite(ranks.map(({ field, rank }) => {
return { updateOne: { filter: { day: today, groupId, serverType, roleId: field }, update: { $set: { rank } }} }
return { updateOne: { filter: { day: today, groupKey, roleId: field }, update: { $set: { rank } }} }
}));
}
+1 -2
View File
@@ -264,8 +264,7 @@ export interface SaveTeamUpdateParam {
frame: number;
spine: number;
configId: number;
groupId: number;
serverType: number;
groupKey: string;
lineup?: GVGHeroInfo[];
lineupCe?: number;
}
+8 -10
View File
@@ -363,8 +363,7 @@ export class KeyName {
activityId?: number;
index?: number; // 军团活动第几期
vestigeId?: number;
groupId?: number;
serverType?: number;
groupKey?: string;
day?: string;
configId?: number;
@@ -378,8 +377,7 @@ export class KeyName {
if(param.activityId) this.activityId = param.activityId;
if(param.index) this.index = param.index;
if(param.vestigeId) this.vestigeId = param.vestigeId;
if(param.groupId) this.groupId = param.groupId;
if(param.serverType) this.serverType = param.serverType;
if(param.groupKey) this.groupKey = param.groupKey;
if(param.day) this.day = param.day;
if(param.configId) this.configId = param.configId;
}
@@ -415,17 +413,17 @@ export class KeyName {
case REDIS_KEY.TOP_LINE_SNAPSHOT:
return `${this.key}:${this.serverId}:${this.activityId}`;
case REDIS_KEY.GVG_VESTIGE_MEMBER:
return `${this.key}:${this.day}:${this.groupId}:${this.serverType}:${this.vestigeId}`;
return `${this.key}:${this.day}:${this.groupKey}:${this.vestigeId}`;
case REDIS_KEY.GVG_VESTIGE_MEMBER_ALL:
return `${this.key}:${this.day}:${this.groupId}:${this.serverType}`;
return `${this.key}:${this.day}:${this.groupKey}`;
case REDIS_KEY.GVG_VESTIGE_LEAGUE:
return `${this.key}:${this.day}:${this.groupId}:${this.serverType}`;
return `${this.key}:${this.day}:${this.groupKey}`;
case REDIS_KEY.GVG_BATTLE_RANK:
return `${this.key}:${this.configId}:${this.groupId}:${this.serverType}`;
return `${this.key}:${this.configId}:${this.groupKey}`;
case REDIS_KEY.GVG_BATTLE_LEAGUE_RANK:
return `${this.key}:${this.configId}:${this.groupId}:${this.serverType}`;
return `${this.key}:${this.configId}:${this.groupKey}`;
case REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY:
return `${this.key}:${this.configId}:${this.groupId}:${this.serverType}:${this.cityId}`;
return `${this.key}:${this.configId}:${this.groupKey}:${this.cityId}`;
default:
return this.key;
}
+2 -2
View File
@@ -14,7 +14,7 @@
{
"periodType": 3,
"day": "6&",
"startTime": "20:40:00",
"endTime": "21:40:00"
"startTime": "17:30:00",
"endTime": "20:00:00"
}
]