✨ feat(gvg): 排行榜奖励邮件
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import { GVGCityType } from './../../../db/GVGCity';
|
||||
import { GVGRecModel } from '../../../db/GVGRec';
|
||||
import { GVGAreaInMap, GVGTeamInList, GVGTeamInListOnPoint, GVGTeamSpineInMap, LeagueGood, MyTeamInfo, MyTeamSimpleInfo } from '../../../domain/gvgField/returnData';
|
||||
import { GVGTeamModel, GVGTeamType, GVGTeamUpdate } from '../../../db/GVGTeam';
|
||||
@@ -10,20 +9,16 @@ import { GVGLeagueModel } from '../../../db/GVGLeague';
|
||||
import { checkGVGPeriod, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService';
|
||||
import { addBattleRankScore, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanks, getBirthAreaOfCity, getGVGWarId, getOppHeroes, initRobots, pushTeamMoveMessage, teamBreak } from '../../../services/gvg/gvgBattleService';
|
||||
import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory';
|
||||
import { nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
|
||||
import { getFightTimeByPeriod } from '../../../services/gvg/gvgFightService';
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { getAllServerName } from '../../../services/redisService';
|
||||
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
||||
import { pick } from 'underscore';
|
||||
import { SaveTeamParam, SaveTeamUpdateParam } from '../../../domain/gvgField/gvgDb';
|
||||
import { GVG_PERIOD, PUSH_ROUTE, STATUS } from '../../../consts';
|
||||
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||
import { STATUS } from '../../../consts';
|
||||
import { GVGHeroInfo } from '../../../domain/dbGeneral';
|
||||
import { ArtifactModel } from '../../../db/Artifact';
|
||||
import { getHeroesAttributes } from '../../../services/playerCeService';
|
||||
import { gvgBattleEndSchedule, gvgBattleStartSchedule } from '../../../services/timeTaskService';
|
||||
import { addRoleToAreaChannel, addRoleToAreaTeamChannel, leaveGVGAreaChannel, leaveGVGAreaTeamChannel } from '../../../services/chatChannelService';
|
||||
|
||||
export default function (app: Application) {
|
||||
|
||||
@@ -14,7 +14,7 @@ import { GVGUserDataModel } from "../../../db/GVGUserData";
|
||||
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "../../../services/pushService";
|
||||
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
|
||||
import { createGroupMsg, pushGroupMsgToRoom } from "../../../services/chatService";
|
||||
import { sendMailByContent, sendMailToGuildByContent } from "../../../services/mailService";
|
||||
import { sendMailByContent, sendMailToGuildByContent, sendMailToLeagueByContent } from "../../../services/mailService";
|
||||
import { getGVGCities } from "../../../services/gvg/gvgBattleService";
|
||||
import { guildQuitLeagueRecord } from "../../../services/gvg/gvgRecService";
|
||||
import { LeagueLeader } from "../../../domain/rank";
|
||||
@@ -637,9 +637,7 @@ export class GVGManageHandler {
|
||||
|
||||
const { guildCodes } = myLeague;
|
||||
//下发邮件
|
||||
for(let guildCode of guildCodes) {
|
||||
await sendMailToGuildByContent(MAIL_TYPE.GUILD_MAIL, guildCode, { sendName: `${roleName}`, params: [content] });
|
||||
}
|
||||
await sendMailToLeagueByContent(MAIL_TYPE.GUILD_MAIL, myLeague.leagueCode, { sendName: `${roleName}`, params: [content] }, myLeague);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { isSuccess: true });
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ import { GVGTeamMem } from "../../domain/battleField/gvgBattle";
|
||||
import { GVGLeagueType } from "../../db/GVGLeague";
|
||||
import { GVGTeamModel, GVGTeamType, GVGTeamUpdate } from "../../db/GVGTeam";
|
||||
import { GVGCityModel, GVGCityType } from "../../db/GVGCity";
|
||||
import { gameData } from "../../pubUtils/data";
|
||||
import { GVG_AREA_TYPE, GVG_TECH_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../consts";
|
||||
import { gameData, getGVGBattleRankReward } from "../../pubUtils/data";
|
||||
import { GVG_AREA_TYPE, GVG_BATTLE_RANK_TYPE, GVG_TECH_TYPE, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../consts";
|
||||
import { nowSeconds } from "../../pubUtils/timeUtil";
|
||||
import { DicGVGAreaPoint } from "../../pubUtils/dictionary/DicGVGAreaPoint";
|
||||
import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory";
|
||||
@@ -16,9 +16,10 @@ import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
||||
import { pinus } from "pinus";
|
||||
import { dispatch } from "../../pubUtils/dispatcher";
|
||||
import { Rank } from "../rankService";
|
||||
import { LeagueRankInfo } from "../../domain/rank";
|
||||
import { LeagueRankInfo, RoleRankInfo } from "../../domain/rank";
|
||||
import { findKeys, getAllServerName } from "../redisService";
|
||||
import { sendMessageToChannel, sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc } from "../pushService";
|
||||
import { sendMailToLeagueByContent } from "../mailService";
|
||||
|
||||
|
||||
/**
|
||||
@@ -301,7 +302,8 @@ export async function gvgBattleEnd() {
|
||||
for(let { groupId, serverType, cityId } of rankKeys) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
let ranks = await r.getRankByRange();
|
||||
for(let obj of ranks) { // 排名最高
|
||||
// 排名最高占领城池
|
||||
for(let obj of ranks) {
|
||||
let rank = <LeagueRankInfo>obj;
|
||||
let cnt = guardLeagueCnt.get(rank.code)||0;
|
||||
if(cnt < GVG.GVG_CITY_OCCUPIED_NUMBER) {
|
||||
@@ -310,10 +312,30 @@ export async function gvgBattleEnd() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 联军排行榜发放奖励
|
||||
for(let _obj of ranks) {
|
||||
let obj = <LeagueRankInfo>_obj;
|
||||
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.LEAGUE, obj.rank);
|
||||
await sendMailToLeagueByContent(MAIL_TYPE.GVG_BATTLE_LEAGUE_RANK_REWARD, obj.code, { params: [`${obj.rank}`], goods: dicRank.reward });
|
||||
}
|
||||
}
|
||||
|
||||
// 排行榜发放奖励
|
||||
// 个人排行榜发放奖励
|
||||
let playerKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_RANK}:${configId}:`);
|
||||
for(let key of playerKeys) {
|
||||
let [,, _groupId, _serverType, _cityId] = key.split(':');
|
||||
let groupId = parseInt(_groupId);
|
||||
let serverType = parseInt(_serverType);
|
||||
let cityId = parseInt(_cityId);
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
let ranks = await r.getRankByRange();
|
||||
|
||||
for(let _obj of ranks) {
|
||||
let obj = <RoleRankInfo>_obj;
|
||||
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.PLAYER, obj.rank);
|
||||
await sendMailToLeagueByContent(MAIL_TYPE.GVG_BATTLE_PLAYER_RANK_REWARD, obj.roleId, { params: [`${obj.rank}`], goods: dicRank.reward });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import { BAG } from "../pubUtils/dicParam";
|
||||
import { GuildModel, GuildType } from "../db/Guild";
|
||||
import moment = require("moment");
|
||||
import { sendMessageToGuildWithSuc, sendMessageToServerWithSuc, sendMessageToUsersWithSuc } from "./pushService";
|
||||
import { GVGLeagueModel, GVGLeagueType } from "../db/GVGLeague";
|
||||
|
||||
/**
|
||||
* 获取邮件信息
|
||||
@@ -71,6 +72,16 @@ export async function sendMailToGuildByContent(contentId: MAIL_TYPE, guildCode:
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function sendMailToLeagueByContent(contentId: MAIL_TYPE, leagueCode: string, params: { sendName?: string, endTime?: number, params?: string[], goods?: RewardInter[] }, league?: GVGLeagueType) {
|
||||
if(!league) league = await GVGLeagueModel.findByCodeWithoutPopulate(leagueCode);
|
||||
if(!league) return false;
|
||||
let f = new SendMailFun();
|
||||
let code = f.setWithContentId(contentId, params);
|
||||
await f.createGroupMails(code, league.members.map(cur => cur.roleId), null, leagueCode);
|
||||
await f.pushToUsers();
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function sendMailsByGmMail(gmmails: GMMailType[]) {
|
||||
let f = new SendMailFun();
|
||||
for(let gmmail of gmmails) {
|
||||
@@ -224,13 +235,13 @@ export class SendMailFun {
|
||||
}
|
||||
|
||||
// 生成多人邮件
|
||||
public async createGroupMails(code: string, roleIds: string[], guildCode?: string) {
|
||||
public async createGroupMails(code: string, roleIds: string[], guildCode?: string, leagueCode?: string) {
|
||||
let mapTemp = this.mailTemps.get(code);
|
||||
if(mapTemp.sendTime < nowSeconds()) return;
|
||||
let roleStatus = roleIds.map(roleId => {
|
||||
return { roleId, status: MAIL_STATUS.CREATE }
|
||||
})
|
||||
let originMail = await GroupMailModel.addMail({ roleStatus, guildCode, ...mapTemp.getCreateMailParams() });
|
||||
let originMail = await GroupMailModel.addMail({ roleStatus, guildCode, leagueCode, ...mapTemp.getCreateMailParams() });
|
||||
if(mapTemp.gmmail) await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime);
|
||||
this.groupMails.push(originMail);
|
||||
}
|
||||
|
||||
@@ -142,4 +142,10 @@ export enum GVG_AREA_TYPE {
|
||||
CATAPULT = 6, // 6-投石车区
|
||||
}
|
||||
|
||||
export const GVG_CATAPULT = 'catapult';
|
||||
export const GVG_CATAPULT = 'catapult';
|
||||
|
||||
export enum GVG_BATTLE_RANK_TYPE {
|
||||
PLAYER = 1,
|
||||
GUILD = 2, // 废弃
|
||||
LEAGUE = 3
|
||||
}
|
||||
@@ -66,6 +66,8 @@ export enum MAIL_TYPE {
|
||||
LEAGUE_KICK = 36, // 被踢出联军
|
||||
LEAGUE_ABDICATE = 37, // 被任命盟主
|
||||
HELP_HARVEST = 38, // 帮收
|
||||
GVG_BATTLE_LEAGUE_RANK_REWARD = 39, // 激战期联军排行榜奖励
|
||||
GVG_BATTLE_PLAYER_RANK_REWARD = 40, // 激战期个人排行榜奖励
|
||||
};
|
||||
|
||||
export const SEND_NAME = '系统';
|
||||
|
||||
@@ -100,13 +100,19 @@ export default class GVGLeague extends BaseModel {
|
||||
return league
|
||||
}
|
||||
|
||||
public static async findByCode(leagueCode: string) {
|
||||
public static async findByCode(leagueCode: string, select = '') {
|
||||
const league: GVGLeagueType = await GVGLeagueModel.findOne({ leagueCode, status: 1 })
|
||||
.populate('leader', { roleId: 1, roleName: 1, head: 1, frame: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, serverId: 1, _id: 0 }, 'Role')
|
||||
.select(select)
|
||||
.lean();
|
||||
return league
|
||||
}
|
||||
|
||||
public static async findByCodeWithoutPopulate(leagueCode: string, select = '') {
|
||||
const league: GVGLeagueType = await GVGLeagueModel.findOne({ leagueCode, status: 1 }).select(select).lean();
|
||||
return league
|
||||
}
|
||||
|
||||
public static async findByCodes(leagueCodes: string[]) {
|
||||
const leagues: GVGLeagueType[] = await GVGLeagueModel.find({ leagueCode: { $in: leagueCodes }, status: 1 })
|
||||
.populate('leader', { roleId: 1, roleName: 1, head: 1, frame: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, serverId: 1, guildName: 1, _id: 0 }, 'Role')
|
||||
|
||||
@@ -23,6 +23,8 @@ export default class GroupMail extends MailTemp {
|
||||
@prop({ required: false })
|
||||
guildCode: string;
|
||||
|
||||
@prop({ required: false })
|
||||
leagueCode: string;
|
||||
/**
|
||||
* @description 根据玩家id获得所有有效邮件
|
||||
* @param {String} roleId 玩家id
|
||||
|
||||
@@ -271,5 +271,19 @@
|
||||
"sendName": "您忠诚的小跟班",
|
||||
"content": "亲爱的主公,联军伙伴们已帮忙收取您在领地农田中的成熟粮食,您的种植奖励已发送至邮箱,请查收",
|
||||
"time": 720
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"title": "&",
|
||||
"sendName": "您忠诚的小跟班",
|
||||
"content": "激战期联军排行榜奖励",
|
||||
"time": 720
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"title": "&",
|
||||
"sendName": "您忠诚的小跟班",
|
||||
"content": "激战期个人排行榜奖励",
|
||||
"time": 720
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user