军团:修改信息

This commit is contained in:
luying
2021-01-20 20:51:06 +08:00
parent 89c7b117b2
commit 89937ef672
6 changed files with 113 additions and 12 deletions
@@ -11,6 +11,7 @@ import { getGoldObject } from '../../../pubUtils/itemUtils';
import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil';
import { GuildListInfo } from '../../../pubUtils/interface'; import { GuildListInfo } from '../../../pubUtils/interface';
import { UserGuildApplyModel } from '../../../db/UserGuildApply'; import { UserGuildApplyModel } from '../../../db/UserGuildApply';
import User from '../../../db/User';
export default function (app: Application) { export default function (app: Application) {
return new GuildHandler(app); return new GuildHandler(app);
@@ -92,6 +93,86 @@ export class GuildHandler {
return resResult(STATUS.SUCCESS, { quitTime, list }); return resResult(STATUS.SUCCESS, { quitTime, list });
} }
// 团长修改军团名等信息
async setGuildInfo(msg: { code: string, name: string, notice: string, introduce: string, ceLimit: number, isAuto: boolean }, session: BackendSession) {
const roleId = session.get('roleId');
const { code, name, notice, introduce, ceLimit, isAuto } = msg;
const checkResult = await checkAuth(GUILD_OPERATE.SET_INFO, roleId, code);
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
const select = ['code', 'name', 'notice', 'introduce', 'ceLimit', 'isAuto', 'icon'];
const guild = await GuildModel.updateInfo(code, { name, notice, introduce, ceLimit, isAuto }, {}, select.join(' '));
// 返回
return resResult(STATUS.SUCCESS, { ...guild });
}
// 游客查看军团详细信息
async getGuildInfo(msg: { code: string }, session: BackendSession) {
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const { code } = msg;
const checkResult = await checkAuth(GUILD_OPERATE.GET_GUILD_INFO, roleId, code);
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
const select = ['code', 'name', 'notice', 'ceLimit', 'isAuto', 'icon', 'lv', 'memberCnt', 'guildCe'];
const guild = await GuildModel.findByCode(code, serverId, select.join(' '));
let leader = <RoleType>guild.leader;
delete guild.leader;
// 返回
return resResult(STATUS.SUCCESS, { ...guild, leader: leader.roleName });
}
// 团长授权头衔
async setAuth(msg: { roleId: string, auth: number }, session: BackendSession) {
const roleId = session.get('roleId');
const { roleId: memberRoleId, auth } = msg;
const myUserGuild = await UserGuildModel.getMyGuild(roleId, 'auth guildCode');
const hisUserGuild = await UserGuildModel.getMyGuild(memberRoleId, 'auth guildCode');
const checkMyResult = await checkAuth(GUILD_OPERATE.SET_AUTH, roleId, null, myUserGuild);
if(!checkMyResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
const checkResult = await checkAuth(GUILD_OPERATE.BE_SET_AUTH, memberRoleId, myUserGuild.guildCode, hisUserGuild);
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
const { guildCode: code } = myUserGuild;
if(auth == hisUserGuild.auth) {
return resResult(STATUS.GUILD_AUTH_NOT_CHANGE);
}
// TODO 管理员最大数 等策划表
const userGuild = await UserGuildModel.updateInfo(memberRoleId, { auth }, 'auth'); // 设置权限
if(!userGuild) {
return resResult(STATUS.GUILD_MEMBER_NOT_FOUND);
}
let managerCntInc = 0;
let updateObject = {};
if(auth == GUILD_AUTH.LEADER) { // 转让团长
managerCntInc = hisUserGuild.auth == GUILD_AUTH.MANAGER?-1: 0;
const role = await RoleModel.findByRoleId(memberRoleId);
updateObject['leader'] = role._id;
await UserGuildModel.updateInfo(roleId, { auth: GUILD_AUTH.MEMBER }); // 自己降权限
} else {
managerCntInc = auth == GUILD_AUTH.MANAGER? 1: -1;
}
const guild = await GuildModel.updateInfo(code, updateObject, { managerCnt: managerCntInc }, 'managerCnt'); // 如果有转让团长设置leader
// 返回
return resResult(STATUS.SUCCESS, {
roleId: memberRoleId, auth: userGuild.auth, managerCnt: guild.managerCnt
});
}
// 团员获取自己军团详细信息 // 团员获取自己军团详细信息
async getMyGuildInfo(msg: { }, session: BackendSession) { async getMyGuildInfo(msg: { }, session: BackendSession) {
@@ -234,13 +315,15 @@ export class GuildHandler {
const day = getRefTime(new Date(), 0, -3); const day = getRefTime(new Date(), 0, -3);
const d = getSeconds(day); const d = getSeconds(day);
const { quitGuildTime: quitTime = 0 } = await RoleModel.findByRoleId(roleId);
const allList = await RoleModel.getInviteList(d, serverId); const allList = await RoleModel.getInviteList(d, serverId);
let list = getRandEelm(allList, 10); let list = getRandEelm(allList, 10);
if(!list.length) list = allList; if(!list.length) list = allList;
list = list.map(cur => { list = list.map(cur => {
return {...cur, ce: reduceCe(cur.ce)} return {...cur, ce: reduceCe(cur.ce)}
}); });
return resResult(STATUS.SUCCESS, { list });
return resResult(STATUS.SUCCESS, { quitTime, list });
} }
@@ -342,13 +425,16 @@ export class GuildHandler {
if(checkDetailResult) { if(checkDetailResult) {
select.push('auth', 'honourWeekly'); select.push('auth', 'honourWeekly');
} }
const list = await UserGuildModel.getListByGuild(code, select.join(' ')); let list = await UserGuildModel.getListByGuild(code, select.join(' '));
const result = list.map(cur => { let result = list.map(cur => {
let role = <RoleType>cur.role; let role = <RoleType>cur.role;
delete role._id; delete role._id;
delete cur.role; delete cur.role;
return { ...cur, ...role, ce: reduceCe(role.ce) }; return { ...cur, ...role, ce: reduceCe(role.ce) };
}).sort((a, b) => { });
let leader = result.shift();
result.sort((a, b) => {
if(sort == 'honour') { if(sort == 'honour') {
return b.honourWeekly - a.honourWeekly; return b.honourWeekly - a.honourWeekly;
} else if (sort == 'loginTime') { } else if (sort == 'loginTime') {
@@ -358,6 +444,7 @@ export class GuildHandler {
} }
}); });
result.unshift(leader);
return resResult(STATUS.SUCCESS, { list: result }); return resResult(STATUS.SUCCESS, { list: result });
} }
+2 -1
View File
@@ -40,7 +40,7 @@ export enum GUILD_OPERATE {
RECEIVE_INVITAION = 7, // 接受邀请 RECEIVE_INVITAION = 7, // 接受邀请
GET_MEMBER_LIST_MAIN = 8, // 查看成员主要信息 GET_MEMBER_LIST_MAIN = 8, // 查看成员主要信息
GET_MEMBER_LIST_DETAIL = 9, // 查看团内成员信息 GET_MEMBER_LIST_DETAIL = 9, // 查看团内成员信息
GET_MEMBER_LIST_MANAGE = 10, // 管理信息 SET_AUTH = 10, // 设置权限
SET_INFO = 11, // 修改军团信息 SET_INFO = 11, // 修改军团信息
GET_APPLY_LIST = 12, // 查看申请列表 GET_APPLY_LIST = 12, // 查看申请列表
RECEIVE_APPLY = 13, // 接受申请 RECEIVE_APPLY = 13, // 接受申请
@@ -57,6 +57,7 @@ export enum GUILD_OPERATE {
OPEN_BOSS = 24, // 开启演武台 OPEN_BOSS = 24, // 开启演武台
EQUIP_PRODUCE = 25, // 炼器堂研发 EQUIP_PRODUCE = 25, // 炼器堂研发
BE_KICKED = 26, // 被踢出军团 BE_KICKED = 26, // 被踢出军团
BE_SET_AUTH = 27, // 被授权头衔
} }
// 军团状态 // 军团状态
+2
View File
@@ -135,6 +135,8 @@ export const STATUS = {
GUILD_KICK_ERROR: { code: 20908, simStr: '未找到该成员或该成员已退出' }, GUILD_KICK_ERROR: { code: 20908, simStr: '未找到该成员或该成员已退出' },
GUILD_QUIT_TIME: { code: 20909, simStr: '退出军团1小时后才可以申请' }, GUILD_QUIT_TIME: { code: 20909, simStr: '退出军团1小时后才可以申请' },
GUILD_INVITE_NOT_FOUND: { code: 20910, simStr: '该邀请未找到' }, GUILD_INVITE_NOT_FOUND: { code: 20910, simStr: '该邀请未找到' },
GUILD_AUTH_NOT_CHANGE: { code: 20911, simStr: '权限未发生变化' },
GUILD_MEMBER_NOT_FOUND: { code: 20912, simStr: '未找到该成员' },
// 通用 30000 - 30099 // 通用 30000 - 30099
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' }, DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
+9 -5
View File
@@ -114,8 +114,9 @@ export default class Guild extends BaseModel {
return guildList; return guildList;
} }
public static async findByCode(code: string, serverId: number) { public static async findByCode(code: string, serverId: number, select?: string) {
const result = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId }) const result = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
.select(select)
.populate('leader', 'roleName sHid headHid lv loginTime ce', 'Role') .populate('leader', 'roleName sHid headHid lv loginTime ce', 'Role')
.lean(); .lean();
return result; return result;
@@ -131,14 +132,17 @@ export default class Guild extends BaseModel {
public static async dismiss(code: string, serverId: number) { public static async dismiss(code: string, serverId: number) {
const result = await GuildModel.findOneAndUpdate({ code, status: GUILD_STATUS.RUNNING, serverId }, { status: GUILD_STATUS.DISMISSED }, { new: true }) const result = await GuildModel.findOneAndUpdate({ code, status: GUILD_STATUS.RUNNING, serverId }, { status: GUILD_STATUS.DISMISSED }, { new: true })
.select('+members') .select('+members').lean();
.lean();
return result; return result;
} }
public static async quit(code: string, roleId: string, serverId: number) { public static async quit(code: string, roleId: string, serverId: number) {
const result = await GuildModel.findOneAndUpdate({ code, serverId }, { $inc: { memberCnt: -1}, $pull: { members: roleId }, isMemberMax: false }, { new: true }) const result = await GuildModel.findOneAndUpdate({ code, serverId }, { $inc: { memberCnt: -1}, $pull: { members: roleId }, isMemberMax: false }, { new: true }).lean();
.lean(); return result;
}
public static async updateInfo(code: string, update: GuildUpdateParam, incParam: { managerCnt?: number }, select?: string) {
const result = await GuildModel.findOneAndUpdate({ code }, { $set: update, $inc: incParam }, { new: true }).select(select).lean();
return result; return result;
} }
} }
+6
View File
@@ -64,6 +64,7 @@ export default class UserGuild extends BaseModel {
public static async getListByGuild(guildCode: string, select?: string) { public static async getListByGuild(guildCode: string, select?: string) {
const userGuilds: UserGuildType[] = await UserGuildModel.find({ guildCode, status: USER_GUILD_STATUS.ON }) const userGuilds: UserGuildType[] = await UserGuildModel.find({ guildCode, status: USER_GUILD_STATUS.ON })
.select(select) .select(select)
.sort({ auth: 1 })
.populate('role', 'roleId roleName ce headHid sHid lv title loginTime', 'Role') .populate('role', 'roleId roleName ce headHid sHid lv title loginTime', 'Role')
.lean(); .lean();
return userGuilds; return userGuilds;
@@ -93,6 +94,11 @@ export default class UserGuild extends BaseModel {
const result = await UserGuildModel.findOneAndUpdate({ guildCode, roleId, status: USER_GUILD_STATUS.ON }, {status: USER_GUILD_STATUS.QUIT}, {new: true}); const result = await UserGuildModel.findOneAndUpdate({ guildCode, roleId, status: USER_GUILD_STATUS.ON }, {status: USER_GUILD_STATUS.QUIT}, {new: true});
return result; return result;
} }
public static async updateInfo(roleId: string, update: UserGuildUpdateParam, select?: string) {
const result = await UserGuildModel.findOneAndUpdate({ roleId, status: USER_GUILD_STATUS.ON }, { $set: update }, { new: true }).select(select).lean();
return result;
}
} }
export const UserGuildModel = getModelForClass(UserGuild); export const UserGuildModel = getModelForClass(UserGuild);
+2 -1
View File
@@ -22,5 +22,6 @@
{"id": 21, "auths": "2&3"}, {"id": 21, "auths": "2&3"},
{"id": 22, "auths": "1&2"}, {"id": 22, "auths": "1&2"},
{"id": 23, "auths": "1&2&3"}, {"id": 23, "auths": "1&2&3"},
{"id": 26, "auths": "2&3"} {"id": 26, "auths": "2&3"},
{"id": 27, "auths": "2&3"}
] ]