✨ feat(gvg): 修改战力相关读取方案

This commit is contained in:
luying
2023-02-17 10:58:05 +08:00
parent 2b96f6be6a
commit 54837f24b6
8 changed files with 39 additions and 29 deletions
@@ -4,7 +4,7 @@ import { GVGLeagueModel } from "../../../db/GVGLeague";
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare"; import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
import { GVGMainData, LeagueDistributeInfo, LeagueMemberDistributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData"; import { GVGMainData, LeagueDistributeInfo, LeagueMemberDistributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData";
import { resResult } from "../../../pubUtils/util"; import { resResult } from "../../../pubUtils/util";
import { getGVGConfig, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService"; import { calLeagueCe, getGVGConfig, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService";
import { autoCreateLeague, checkCanChooseJob, checkCanPrepare, checkLeagueAuth, getMyAuth } from "../../../services/gvg/gvgTeamService"; import { autoCreateLeague, checkCanChooseJob, checkCanPrepare, checkLeagueAuth, getMyAuth } from "../../../services/gvg/gvgTeamService";
import { getAllServerName } from "../../../services/redisService"; import { getAllServerName } from "../../../services/redisService";
import { Distribute, GVGUserDataModel } from "../../../db/GVGUserData"; import { Distribute, GVGUserDataModel } from "../../../db/GVGUserData";
@@ -18,6 +18,7 @@ import { gameData } from "../../../pubUtils/data";
import { lockLeagueData } from "../../../services/redLockService"; import { lockLeagueData } from "../../../services/redLockService";
import { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemService";
import { RewardInter } from "../../../pubUtils/interface"; import { RewardInter } from "../../../pubUtils/interface";
import { GuildModel } from "../../../db/Guild";
export default function (app: Application) { export default function (app: Application) {
new HandlerService(app, {}); new HandlerService(app, {});
@@ -62,6 +63,8 @@ export class GVGHandler {
let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, league.leagueCode, userData?.job); let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, league.leagueCode, userData?.job);
if(dailyReward) data.setFistLogin(dailyReward); if(dailyReward) data.setFistLogin(dailyReward);
data.setLeagueCe(await calLeagueCe(league));
} }
return resResult(STATUS.SUCCESS, data) return resResult(STATUS.SUCCESS, data)
@@ -5,7 +5,7 @@ import { GuildModel, GuildType } from "../../../db/Guild";
import { UserGuildModel } from "../../../db/UserGuild"; import { UserGuildModel } from "../../../db/UserGuild";
import { GVGLeagueModel, GVGLeagueType } from "../../../db/GVGLeague"; import { GVGLeagueModel, GVGLeagueType } from "../../../db/GVGLeague";
import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply"; import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply";
import { getGroupIdOfServer, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService"; import { calLeagueCe, getGroupIdOfServer, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService";
import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague } from "../../../services/gvg/gvgTeamService"; import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague } from "../../../services/gvg/gvgTeamService";
import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData"; import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData";
import { getAllServerName, getServerName } from "../../../services/redisService"; import { getAllServerName, getServerName } from "../../../services/redisService";
@@ -74,6 +74,7 @@ export class GVGManageHandler {
let data = new LeagueListInfo(league, serverNames); let data = new LeagueListInfo(league, serverNames);
let hasApply = !!applies.find(cur => cur.leagueCode == league.leagueCode); let hasApply = !!applies.find(cur => cur.leagueCode == league.leagueCode);
data.setHasApply(hasApply); data.setHasApply(hasApply);
data.setLeagueCe(await calLeagueCe(league));
result.push(data); result.push(data);
} }
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
@@ -126,6 +127,7 @@ export class GVGManageHandler {
await GVGLeagueApplyModel.createApply(league, guild, GVG_APPLY_TYPE.APPLY); await GVGLeagueApplyModel.createApply(league, guild, GVG_APPLY_TYPE.APPLY);
let data = new LeagueListInfo(league, serverNames); let data = new LeagueListInfo(league, serverNames);
data.setHasApply(true); data.setHasApply(true);
data.setLeagueCe(await calLeagueCe(league));
result.push(data); result.push(data);
} }
@@ -185,7 +187,7 @@ export class GVGManageHandler {
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
guildCnt: myLeague.guildCnt, guildCnt: myLeague.guildCnt,
memberCnt: myLeague.memberCnt, memberCnt: myLeague.memberCnt,
leagueCe: myLeague.leagueCe leagueCe: await calLeagueCe(myLeague),
}); });
} }
@@ -261,7 +263,11 @@ export class GVGManageHandler {
const invitations = await GVGLeagueApplyModel.findInviteFromGuild(guildCode); const invitations = await GVGLeagueApplyModel.findInviteFromGuild(guildCode);
const applies = await GVGLeagueApplyModel.findApplyFromGuild(guildCode); const applies = await GVGLeagueApplyModel.findApplyFromGuild(guildCode);
let result: LeagueListInfo[] = invitations.map(apply => getLeagueInviteData(apply, serverNames, applies)); let result: LeagueListInfo[] = [];
for(let invitation of invitations) {
let obj = await getLeagueInviteData(invitation, serverNames, applies);
result.push(obj);
}
// 返回 // 返回
return resResult(STATUS.SUCCESS, { leagues: result }); return resResult(STATUS.SUCCESS, { leagues: result });
@@ -404,7 +410,7 @@ export class GVGManageHandler {
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
guildCnt: myLeague.guildCnt, guildCnt: myLeague.guildCnt,
memberCnt: myLeague.memberCnt, memberCnt: myLeague.memberCnt,
leagueCe: myLeague.leagueCe, leagueCe: await calLeagueCe(myLeague),
}); });
} }
+8 -2
View File
@@ -3,14 +3,14 @@ import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil"; import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
import { getAllServerCreateTime, getServerCreateTime } from "../redisService"; import { getAllServerCreateTime, getServerCreateTime } from "../redisService";
import { GVG_PERIOD, GVG_SERVER_TYPE, SHOP_REFRESH_TYPE } from "../../consts"; import { GVG_PERIOD, GVG_SERVER_TYPE, SHOP_REFRESH_TYPE } from "../../consts";
import { GVGLeagueModel } from "../../db/GVGLeague"; import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare"; import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
import { GVGServerGroupModel } from "../../db/GVGServerGroup"; import { GVGServerGroupModel } from "../../db/GVGServerGroup";
import { gameData } from "../../pubUtils/data"; import { gameData } from "../../pubUtils/data";
import { getRandSingleEelm } from "../../pubUtils/util"; import { getRandSingleEelm } from "../../pubUtils/util";
import { GVG } from "../../pubUtils/dicParam"; import { GVG } from "../../pubUtils/dicParam";
import { ServerlistModel } from "../../db/Serverlist"; import { ServerlistModel } from "../../db/Serverlist";
import { GuildType } from "../../db/Guild"; import { GuildModel, GuildType } from "../../db/Guild";
// 定时器相关 // 定时器相关
export async function createNewGVGConfig() { export async function createNewGVGConfig() {
@@ -191,3 +191,9 @@ export async function getGVGInfoInGuild(guild: GuildType) {
type type
} }
} }
export async function calLeagueCe(league: GVGLeagueType) {
const guildCodes = league?.guildCodes||[];
const guilds = await GuildModel.findByCodes(guildCodes);
return guilds.reduce((pre, guild) => pre + guild.guildCe, 0);
}
@@ -12,7 +12,7 @@ import { GVG } from "../../pubUtils/dicParam";
import { getZeroPointD } from "../../pubUtils/timeUtil"; import { getZeroPointD } from "../../pubUtils/timeUtil";
import { resResult } from "../../pubUtils/util"; import { resResult } from "../../pubUtils/util";
import { sendMessageToUserWithSuc } from "../pushService"; import { sendMessageToUserWithSuc } from "../pushService";
import { getCurPeriod, getGVGConfig, getGVGPeriodData, getGVGServerType } from "./gvgService"; import { calLeagueCe, getCurPeriod, getGVGConfig, getGVGPeriodData, getGVGServerType } from "./gvgService";
/** /**
* 自动创建联军 * 自动创建联军
@@ -101,10 +101,11 @@ export function getLeagueApplyData(apply: GVGLeagueApplyType, serverNames: any,
* @param applies 本军团向其他联军发出的申请 * @param applies 本军团向其他联军发出的申请
* @returns * @returns
*/ */
export function getLeagueInviteData(invite: GVGLeagueApplyType, serverNames: any, applies: GVGLeagueApplyType[]) { export async function getLeagueInviteData(invite: GVGLeagueApplyType, serverNames: any, applies: GVGLeagueApplyType[]) {
let data = new LeagueListInfo(<GVGLeagueType>invite.league, serverNames); let data = new LeagueListInfo(<GVGLeagueType>invite.league, serverNames);
let hasApply = !!applies.find(cur => cur.leagueCode == invite.guildCode); let hasApply = !!applies.find(cur => cur.leagueCode == invite.guildCode);
data.setHasApply(hasApply); data.setHasApply(hasApply);
data.setLeagueCe(await calLeagueCe(<GVGLeagueType>invite.league))
return data; return data;
} }
@@ -455,7 +455,6 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
roleCe = await RoleCeModel.updateRoleCe(roleId, roleCeUpdate); roleCe = await RoleCeModel.updateRoleCe(roleId, roleCeUpdate);
let role = await RoleModel.incRoleInfo(roleId, { ...roleIncUpdate, ce: roleInc }, { ...roleUpdate, topLineup, topLineupCe }); let role = await RoleModel.incRoleInfo(roleId, { ...roleIncUpdate, ce: roleInc }, { ...roleUpdate, topLineup, topLineupCe });
let guild = await GuildModel.updateCe(roleId, roleInc); // 公会更新战力 let guild = await GuildModel.updateCe(roleId, roleInc); // 公会更新战力
let league = await GVGLeagueModel.updateCe(roleId, roleInc); // 联军更新战力
saveCeChangeLog(role, roleInc, role.ce, type, ceChangeTxt); saveCeChangeLog(role, roleInc, role.ce, type, ceChangeTxt);
updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild); updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild);
@@ -463,9 +462,6 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
if(hasTopCeChange) await updateRoleOnlineInfo(roleId, { topLineupCe }); if(hasTopCeChange) await updateRoleOnlineInfo(roleId, { topLineupCe });
if(guild) { if(guild) {
await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]); await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]);
}
if(league) { // TODO 联军排行榜需要更新数据
} }
return { heroes, curRole: role } return { heroes, curRole: role }
} }
+5 -13
View File
@@ -43,9 +43,6 @@ export default class GVGLeague extends BaseModel {
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
memberCnt: number; // 玩家人数 memberCnt: number; // 玩家人数
@prop({ required: true, default: 0 })
leagueCe: number; // 联军总战力
@prop({ required: true, default: false }) @prop({ required: true, default: false })
isAuto: boolean; // 是否是自动创建的 isAuto: boolean; // 是否是自动创建的
@@ -72,7 +69,7 @@ export default class GVGLeague extends BaseModel {
const leagueCode = genCode(6); const leagueCode = genCode(6);
let _leader = <RoleType>leader; let _leader = <RoleType>leader;
let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.LEADER: LEAGUE_AUTH.MEMBER, guildCode: code })); let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.LEADER: LEAGUE_AUTH.MEMBER, guildCode: code }));
const update = Object.assign(doc.toJSON(), { guildCodes: [code], name: `${name}联军`, guildCnt: 1, memberCnt, isAuto: true, leagueCe: guildCe, leader: _leader?._id, members: _members, leagueCode }, params); const update = Object.assign(doc.toJSON(), { guildCodes: [code], name: `${name}联军`, guildCnt: 1, memberCnt, isAuto: true, leader: _leader?._id, members: _members, leagueCode }, params);
delete update._id; delete update._id;
const result: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ guildCodes: code, status: 1 }, { $setOnInsert: update }, { upsert: true, new: true }) const result: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ guildCodes: code, status: 1 }, { $setOnInsert: update }, { upsert: true, new: true })
@@ -123,7 +120,7 @@ export default class GVGLeague extends BaseModel {
let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.SUB_LEADER: LEAGUE_AUTH.MEMBER, guildCode: code })); let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.SUB_LEADER: LEAGUE_AUTH.MEMBER, guildCode: code }));
const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 },
{ $push: { guildCodes: code, members: { $each: _members } }, $inc: { guildCnt: 1, memberCnt: memberCnt, leagueCe: guildCe } { $push: { guildCodes: code, members: { $each: _members } }, $inc: { guildCnt: 1, memberCnt: memberCnt }
}, { new: true }).lean(); }, { new: true }).lean();
return league return league
} }
@@ -139,7 +136,7 @@ export default class GVGLeague extends BaseModel {
public static async quitGuild(leagueCode: string, guild: GuildType) { public static async quitGuild(leagueCode: string, guild: GuildType) {
const { code, memberCnt, members, guildCe } = guild; const { code, memberCnt, members, guildCe } = guild;
const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 },
{ $pull: { guildCodes: code, members: { roleId: { $in: members } } }, $inc: { guildCnt: -1, memberCnt: -memberCnt, leagueCe: -guildCe } { $pull: { guildCodes: code, members: { roleId: { $in: members } } }, $inc: { guildCnt: -1, memberCnt: -memberCnt }
}, { new: true }).lean(); }, { new: true }).lean();
return league return league
} }
@@ -164,18 +161,13 @@ export default class GVGLeague extends BaseModel {
return league; return league;
} }
public static async updateCe(roleId: string, incCe: number) {
const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ 'members.roleId': roleId, status: 1 }, { $inc: { leagueCe: incCe } }, { new: true }).lean();
return league;
}
public static async joinMember(leagueCode: string, roleId: string, guildCode: string, ce: number) { public static async joinMember(leagueCode: string, roleId: string, guildCode: string, ce: number) {
const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { members: { roleId, auth: LEAGUE_AUTH.MEMBER, guildCode } }, $inc: { memberCnt: 1, leagueCe: ce } }, { new: true }).lean(); const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { members: { roleId, auth: LEAGUE_AUTH.MEMBER, guildCode } }, $inc: { memberCnt: 1 } }, { new: true }).lean();
return league; return league;
} }
public static async quitMember(leagueCode: string, roleId: string, ce: number) { public static async quitMember(leagueCode: string, roleId: string, ce: number) {
const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $pull: { members: { roleId } }, $inc: { memberCnt: -1, leagueCe: -ce } }, { new: true }).lean(); const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $pull: { members: { roleId } }, $inc: { memberCnt: -1 } }, { new: true }).lean();
return league; return league;
} }
+8 -2
View File
@@ -95,7 +95,6 @@ export class GVGMainData {
this.notice = league.notice; this.notice = league.notice;
this.guildCnt = league.guildCnt; this.guildCnt = league.guildCnt;
this.memberCnt = league.memberCnt; this.memberCnt = league.memberCnt;
this.leagueCe = league.leagueCe;
} }
setLeagueParpare(leaguePrepare: GVGLeaguePrepareType) { setLeagueParpare(leaguePrepare: GVGLeaguePrepareType) {
@@ -121,6 +120,10 @@ export class GVGMainData {
this.isFirst = true; this.isFirst = true;
this.leagueGoods = item; this.leagueGoods = item;
} }
setLeagueCe(leagueCe: number) {
this.leagueCe = leagueCe;
}
} }
export class LeagueListInfo { export class LeagueListInfo {
@@ -143,12 +146,15 @@ export class LeagueListInfo {
this.guildCnt = league.guildCnt; this.guildCnt = league.guildCnt;
this.leaderName = (<RoleType>league.leader).roleName; this.leaderName = (<RoleType>league.leader).roleName;
this.leaderServerName = serverNames[(<RoleType>league.leader).serverId]; this.leaderServerName = serverNames[(<RoleType>league.leader).serverId];
this.leagueCe = league.leagueCe;
} }
setHasApply(hasApply: boolean) { setHasApply(hasApply: boolean) {
this.hasApply = hasApply; this.hasApply = hasApply;
} }
setLeagueCe(leagueCe: number) {
this.leagueCe = leagueCe;
}
} }
export class LeagueSimpleInfo extends LeagueListInfo { export class LeagueSimpleInfo extends LeagueListInfo {
+1 -1
View File
@@ -33,6 +33,6 @@
"DEBUG_TIME": 1, "DEBUG_TIME": 1,
"CHECK_WORD": 1, "CHECK_WORD": 1,
"CAN_PAY": 1, "CAN_PAY": 1,
"SKIP_ENCODE": 0, "SKIP_ENCODE": 1,
"NEED_REBATE": 0 "NEED_REBATE": 0
} }