From 7ec11643a1537f941d10e51a72a22705b1a1eb5c Mon Sep 17 00:00:00 2001 From: dcl <1124373818@qq.com> Date: Wed, 22 Feb 2023 17:03:14 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(battle):=20=E5=90=8D?= =?UTF-8?q?=E5=B0=86=E6=93=82=E5=8F=B0=E6=88=98=E6=8A=A5=E4=BF=9D=E7=95=99?= =?UTF-8?q?2=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/battle/handler/ladderHandler.ts | 7 +- game-server/test/battle.test.ts | 67 +++++++++++++++++++ shared/db/LadderMatchRec.ts | 18 +++++ 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/game-server/app/servers/battle/handler/ladderHandler.ts b/game-server/app/servers/battle/handler/ladderHandler.ts index 98bada3cd..fc3c16f74 100644 --- a/game-server/app/servers/battle/handler/ladderHandler.ts +++ b/game-server/app/servers/battle/handler/ladderHandler.ts @@ -353,10 +353,13 @@ export class LadderHandler { return resResult(STATUS.SUCCESS, pick(result, ['buyCnt', 'challengeCnt'])); } - // 12. 获取战报信息 + // 12. 获取战报信息(2天内) async getRec(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); - let list = await LadderMatchRecModel.findRec(roleId); + let endTime = new Date().getTime(); + const dayMs = 1000 * 60 * 60 * 24; + let startTime = endTime - dayMs * 2; + let list = await LadderMatchRecModel.findRecByTimeRange(roleId, startTime, endTime); return resResult(STATUS.SUCCESS, { list: list.map(rec => { const { roleId1, battleCode, hasRpl } = rec; diff --git a/game-server/test/battle.test.ts b/game-server/test/battle.test.ts index 6308d4839..c527b2732 100644 --- a/game-server/test/battle.test.ts +++ b/game-server/test/battle.test.ts @@ -574,6 +574,73 @@ describe('战斗测试', function () { it.skip('领取奖励', function (done) { done(); }); + + it('获取名将擂台战报', function (done) { + pinusClient.request('battle.ladderHandler.getRec', {}, (res) => { + checkSuccessResponse(res); + expect(res.data.rplPrefixUrl).to.be.an('string'); + checkLadderMatchRecs(res.data.list); + done(); + }); + }); + + // 名将擂台战报校验 - 2天内的战报记录 + function checkLadderMatchRecs(ladderMatchRecs) { + expect(ladderMatchRecs).to.be.an('array'); + let now = new Date().getTime(); + ladderMatchRecs.forEach(ladderMatchRec => { + expect(ladderMatchRec.battleCode).to.be.a('string'); + expect(ladderMatchRec.roleId1).to.be.a('string'); + expect(ladderMatchRec.roleId2).to.be.a('string'); + let timeDiff = now - ladderMatchRec.endTime; + expect(timeDiff).to.greaterThan(0); + expect(ladderMatchRec.rplFileUrl).to.be.a('string'); + + // ladderMatchRec.attackInfo + expect(ladderMatchRec.attackInfo.lv).to.be.a('number'); + expect(ladderMatchRec.attackInfo.head).to.be.a('number'); + expect(ladderMatchRec.attackInfo.frame).to.be.a('number'); + expect(ladderMatchRec.attackInfo.spine).to.be.a('number'); + expect(ladderMatchRec.attackInfo.title).to.be.a('number'); + expect(ladderMatchRec.attackInfo.ce).to.be.a('number'); + expect(ladderMatchRec.attackInfo.isSuccess).to.be.a('boolean'); + expect(ladderMatchRec.attackInfo.oldRank).to.be.a('number'); + expect(ladderMatchRec.attackInfo.newRank).to.be.a('number'); + expect(ladderMatchRec.attackInfo.roleId).to.be.a('string'); + expect(ladderMatchRec.attackInfo.roleName).to.be.a('string'); + expect(ladderMatchRec.attackInfo.heroes).to.be.a('array'); + ladderMatchRec.attackInfo.heroes.forEach(hero => { + expect(hero.hid).to.be.a('number'); + expect(hero.skinId).to.be.a('number'); + expect(hero.quality).to.be.a('number'); + expect(hero.star).to.be.a('number'); + expect(hero.colorStar).to.be.a('number'); + expect(hero.lv).to.be.a('number'); + }); + + // ladderMatchRec.defenseInfo + expect(ladderMatchRec.defenseInfo.lv).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.head).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.frame).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.spine).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.title).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.ce).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.isSuccess).to.be.a('boolean'); + expect(ladderMatchRec.defenseInfo.oldRank).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.newRank).to.be.a('number'); + expect(ladderMatchRec.defenseInfo.roleId).to.be.a('string'); + expect(ladderMatchRec.defenseInfo.roleName).to.be.a('string'); + expect(ladderMatchRec.defenseInfo.heroes).to.be.a('array'); + ladderMatchRec.defenseInfo.heroes.forEach(hero => { + expect(hero.hid).to.be.a('number'); + expect(hero.skinId).to.be.a('number'); + expect(hero.quality).to.be.a('number'); + expect(hero.star).to.be.a('number'); + expect(hero.colorStar).to.be.a('number'); + expect(hero.lv).to.be.a('number'); + }); + }) + } }); function getParamHeroes(roleInfo) { diff --git a/shared/db/LadderMatchRec.ts b/shared/db/LadderMatchRec.ts index e41a291f9..97683b588 100644 --- a/shared/db/LadderMatchRec.ts +++ b/shared/db/LadderMatchRec.ts @@ -101,6 +101,24 @@ export default class LadderMatchRec extends BaseModel { return recs; } + /** + * 按时间区间查询名将擂台战报(用战斗结束时间(endTime)做比较) + * @static + * @param {string} roleId + * @param {number} startTime 开始时间(13位时间戳) + * @param {number} endTime 结束时间 (13位时间戳) + * @return {*} + * @memberof LadderMatchRec + */ + public static async findRecByTimeRange(roleId: string, startTime: number, endTime: number) { + let recs: LadderMatchRecType[] = await LadderMatchRecModel.find({ + endTime: {$gt: startTime, $lt: endTime}, + $or: [{roleId1: roleId}, { roleId2: roleId }], + status: LADDER_STATUS.COMPLETE + }).select({ battleCode: 1, roleId1: 1, roleId2: 1, _id: -1, endTime: 1, attackInfo: 1, defenseInfo: 1, hasRpl: 1 }).limit(1000).lean(); + return recs; + } + public static async checkByRank(serverId: number, roleId2: string) { const result = await LadderMatchRecModel.exists({ serverId, roleId2, status: { $in: [LADDER_STATUS.BATTLE, LADDER_STATUS.CHECK] } }); return result;