feat(gvg): 添加组建期邮件、添加自动解散定时任务

This commit is contained in:
luying
2023-02-04 19:37:59 +08:00
parent e7a62c4e3e
commit 3fc6b91a51
8 changed files with 53 additions and 19 deletions

View File

@@ -560,6 +560,8 @@ export class GuildHandler {
const guild = await GuildModel.dismiss(code, serverId);
if (!guild) return resResult(STATUS.GUILD_DELETE_ERROR);
if(guild.leagueCode) return resResult(STATUS.GVG_GUILD_HAS_LEAGUE);
await sendMailToGuildByContent(MAIL_TYPE.GUILD_DISSMISS, code, {}, guild);
await UserGuildModel.dismiss(code);
const { members } = guild;

View File

@@ -1,5 +1,5 @@
import { Application, BackendSession, ChannelService, HandlerService } from "pinus";
import { CHANNEL_PREFIX, GUILD_AUTH, GVG_APPLY_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_AUTH, LEAGUE_MANAGE_TYPE, MAIL_TYPE, MSG_SOURCE, MSG_TYPE, PUSH_ROUTE, STATUS } from "../../../consts";
import { CHANNEL_PREFIX, GUILD_AUTH, GVG_APPLY_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_AUTH, LEAGUE_MANAGE_TYPE, MAIL_TYPE, MSG_SOURCE, MSG_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../../consts";
import { resResult } from "../../../pubUtils/util";
import { GuildModel, GuildType } from "../../../db/Guild";
import { UserGuildModel } from "../../../db/UserGuild";
@@ -8,14 +8,14 @@ import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply";
import { calLeagueCe, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService";
import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague } from "../../../services/gvg/gvgTeamService";
import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData";
import { getAllServerName, getServerName } from "../../../services/redisService";
import { getAllServerName, getServerName, updateUserInfo } from "../../../services/redisService";
import { GVG } from "../../../pubUtils/dicParam";
import { RoleModel } from "../../../db/Role";
import { GVGUserDataModel } from "../../../db/GVGUserData";
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "../../../services/pushService";
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
import { createGroupMsg, pushGroupMsgToRoom } from "../../../services/chatService";
import { sendMailToGuildByContent } from "../../../services/mailService";
import { sendMailByContent, sendMailToGuildByContent } from "../../../services/mailService";
import { getGVGCities } from "../../../services/gvg/gvgBattleService";
import { guildQuitLeagueRecord } from "../../../services/gvg/gvgRecService";
@@ -411,6 +411,7 @@ export class GVGManageHandler {
// 发送消息
await sendMessageToGuildWithSuc(targetGuildCode, PUSH_ROUTE.LEAGUE_KICK, { leagueCode: myLeague.leagueCode });
guildQuitLeagueRecord(myLeague.leagueCode, guild.name);
await sendMailToGuildByContent(MAIL_TYPE.LEAGUE_KICK, guildCode, { params: [ myLeague.name ] });
// 返回
return resResult(STATUS.SUCCESS, {
@@ -483,8 +484,10 @@ export class GVGManageHandler {
await GVGLeagueModel.dismiss(myLeague.leagueCode);
// 发送消息
for(let guildCode of myLeague.guildCodes) {
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: myLeague.leagueCode })
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: myLeague.leagueCode });
await sendMailToGuildByContent(MAIL_TYPE.LEAGUE_DISSMISS, guildCode, { params: [ myLeague.name ]});
}
// 返回
return resResult(STATUS.SUCCESS, {
hasLeague: false
@@ -555,7 +558,8 @@ export class GVGManageHandler {
// 修改联军数据 membersleader
myLeague = await GVGLeagueModel.abdicate(myLeague.leagueCode, roleId, targetRoleId, targetRole._id);
// 推送
await sendMessageToUserWithSuc(targetRoleId, PUSH_ROUTE.LEAGUE_ABDICATE, { leagueCode: myLeague.leagueCode })
await sendMessageToUserWithSuc(targetRoleId, PUSH_ROUTE.LEAGUE_ABDICATE, { leagueCode: myLeague.leagueCode });
await sendMailByContent(MAIL_TYPE.LEAGUE_ABDICATE, roleId, { params: [ myLeague.name ] });
let myAuth = getMyAuth(myLeague, roleId);
// 返回
@@ -590,6 +594,12 @@ export class GVGManageHandler {
// 修改联军数据
myLeague = await GVGLeagueModel.setInfo(targetLeagueCode, name, notice, icon);
if(name != undefined) {
await updateUserInfo(REDIS_KEY.LEAGUE_INFO, myLeague.leagueCode, [{ field: 'name', value: name }]);
}
if(icon != undefined) {
await updateUserInfo(REDIS_KEY.LEAGUE_INFO, myLeague.leagueCode, [{ field: 'icon', value: name }]);
}
// 返回
return resResult(STATUS.SUCCESS, {

View File

@@ -1,5 +1,15 @@
import { GVGLeagueType } from "../../db/GVGLeague";
/**
* TODO 检查上周是否有占领城池
* @param league
* @returns boolean 是否占领
*/
export async function checkHasCities(league: GVGLeagueType) {
return false
}
/**
* TODO 获取本联军上周占领的城池
* @param league

View File

@@ -11,6 +11,7 @@ import { getRandSingleEelm } from "../../pubUtils/util";
import { GVG } from "../../pubUtils/dicParam";
import { ServerlistModel } from "../../db/Serverlist";
import { GuildModel, GuildType } from "../../db/Guild";
import { checkHasCities } from "./gvgBattleService";
// 定时器相关
export async function createNewGVGConfig() {
@@ -24,7 +25,13 @@ export async function createNewGVGConfig() {
} catch(e) {
console.log('remote未初始完');
}
// TODO 每周自动解散一些联军
// 每周自动解散一些联军
let autoLeagues = await GVGLeagueModel.findAutoCreateLeague();
let needDissmissLeagueId: string[] = [];
for(let league of autoLeagues) {
if(!await checkHasCities(league)) needDissmissLeagueId.push(league._id);
}
await GVGLeagueModel.dismissByIds(needDissmissLeagueId);
return config;
}

View File

@@ -209,28 +209,20 @@ function getAuthFromManageType(type: LEAGUE_MANAGE_TYPE) {
export async function memberJoinGuildToLeague(guild: GuildType, role: RoleType) {
if(!guild.leagueCode) return;
let league = await GVGLeagueModel.joinMember(guild.leagueCode, guild.code, role.roleId);
// TODO redis联军更新
console.log(league);
await GVGLeagueModel.joinMember(guild.leagueCode, guild.code, role.roleId);
}
export async function memberQuitGuildToLeague(guild: GuildType, role: RoleType) {
if(!guild.leagueCode) return;
let league = await GVGLeagueModel.quitMember(guild.leagueCode, role.roleId);
// TODO redis联军更新
console.log(league);
await GVGLeagueModel.quitMember(guild.leagueCode, role.roleId);
}
export async function guildDismissToLeague(guild: GuildType) {
if(!guild.leagueCode) return;
let league = await GVGLeagueModel.quitGuild(guild.leagueCode, guild);
// TODO redis联军更新
console.log(league);
await GVGLeagueModel.quitGuild(guild.leagueCode, guild);
}
export async function guildAbdicateToLeague(guild: GuildType, fromRoleId: string, toRole: RoleType) {
if(!guild.leagueCode) return;
let league = await GVGLeagueModel.abdicateGuild(guild.leagueCode, fromRoleId, toRole.roleId, toRole._id);
// TODO redis联军更新
console.log(league);
await GVGLeagueModel.abdicateGuild(guild.leagueCode, fromRoleId, toRole.roleId, toRole._id);
}

View File

@@ -61,7 +61,10 @@ export enum MAIL_TYPE {
GUILD_MAIL = 31, // 军团邮件
REBATE = 32, // 返利邮件
GROUP_SHOP_REFUND = 33, // 退费
ARTIFACT_OVER = 34, // 退费
ARTIFACT_OVER = 34, // 宝物数量超过
LEAGUE_DISSMISS = 35, // 联军解散
LEAGUE_KICK = 36, // 被踢出联军
LEAGUE_ABDICATE = 37, // 被任命盟主
HELP_HARVEST = 38, // 帮收
};

View File

@@ -337,6 +337,7 @@ export const STATUS = {
GVG_BATTLE_CITY_FULL: { code: 21331, simStr: '城市已满员' },
GVG_BATTLE_TEAM_INVALID: { code: 21332, simStr: '无效的队伍' },
GVG_CITY_NOT_FOUND: { code: 21333, simStr: '城池不存在' },
GVG_GUILD_HAS_LEAGUE: { code: 21334, simStr: '需要先退出联军才能解散军团' },
// GVG征战中原
GVG_VESTIGE_ERR: { code: 21350, simStr: '今日未开放该遗迹' },

View File

@@ -146,6 +146,10 @@ export default class GVGLeague extends BaseModel {
return league
}
public static async dismissByIds(_ids: string[]) {
await GVGLeagueModel.updateMany({ _id: { $in: _ids } }, { $set: { status: 0 }});
}
public static async abdicate(leagueCode: string, fromRoleId: string, toRoleId: string, leader: string) {
let league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': fromRoleId }, { $set: { 'members.$.auth': LEAGUE_AUTH.SUB_LEADER }}, { new: true }).lean();
league = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': toRoleId }, { $set: { 'members.$.auth': LEAGUE_AUTH.LEADER, leader }}, { new: true }).lean();
@@ -179,6 +183,11 @@ export default class GVGLeague extends BaseModel {
league = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': toRoleId }, { $set: updateInfo }, { new: true }).lean();
return league
}
public static async findAutoCreateLeague() {
let leagues: GVGLeagueType[] = await GVGLeagueModel.find({ isAuto: true, status: 1 }).lean();
return leagues
}
}
export const GVGLeagueModel = getModelForClass(GVGLeague);