军团:添加在线离线时间
This commit is contained in:
@@ -14,7 +14,7 @@ import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
|||||||
import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data';
|
import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data';
|
||||||
import { GuildRecModel } from '../../../db/GuildRec';
|
import { GuildRecModel } from '../../../db/GuildRec';
|
||||||
import { sendMail } from '../../../services/mailService';
|
import { sendMail } from '../../../services/mailService';
|
||||||
import { existsRank, initSingleRankWithServer, getRank, setRank, redisUserInfoUpdate, redisUserInfoAdd, removeFromRank, getMyRank } from '../../../services/redisService';
|
import { existsRank, initSingleRankWithServer, getRank, setRank, redisUserInfoUpdate, redisUserInfoAdd, removeFromRank, getMyRank, isRoleOnline } from '../../../services/redisService';
|
||||||
import { lockData } from '../../../services/redLockService';
|
import { lockData } from '../../../services/redLockService';
|
||||||
|
|
||||||
import { openGuildRefine } from '../../../services/guildRefineService';
|
import { openGuildRefine } from '../../../services/guildRefineService';
|
||||||
@@ -81,7 +81,7 @@ export class GuildHandler {
|
|||||||
message.addRec(rec);
|
message.addRec(rec);
|
||||||
|
|
||||||
// 返回
|
// 返回
|
||||||
const result = { ...guild, rank, myInfo: userGuild};
|
const result = { ...guild, rank, myInfo: { ...userGuild, isOnline: true}};
|
||||||
return resResult(STATUS.SUCCESS, result);
|
return resResult(STATUS.SUCCESS, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,6 +258,7 @@ export class GuildHandler {
|
|||||||
guild.guildCe = reduceCe(guild.guildCe);
|
guild.guildCe = reduceCe(guild.guildCe);
|
||||||
guild.leader = <RoleType>guild.leader;
|
guild.leader = <RoleType>guild.leader;
|
||||||
guild.leader.ce = reduceCe(guild.leader.ce);
|
guild.leader.ce = reduceCe(guild.leader.ce);
|
||||||
|
let leaderIsOnline = await isRoleOnline(guild.leader.roleId);
|
||||||
|
|
||||||
// 打开公会页面,加入channel
|
// 打开公会页面,加入channel
|
||||||
message.enterChannel(userGuild.guildCode, roleId, sid);
|
message.enterChannel(userGuild.guildCode, roleId, sid);
|
||||||
@@ -266,7 +267,7 @@ export class GuildHandler {
|
|||||||
const rank = await getMyRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code);
|
const rank = await getMyRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code);
|
||||||
|
|
||||||
// 返回
|
// 返回
|
||||||
const result = { hasGuild: true, ...guild, rank, myInfo: userGuild};
|
const result = { hasGuild: true, ...guild, rank, myInfo: {...userGuild, isOnline: leaderIsOnline}};
|
||||||
return resResult(STATUS.SUCCESS, result);
|
return resResult(STATUS.SUCCESS, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,11 +334,13 @@ export class GuildHandler {
|
|||||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||||
|
|
||||||
const result = await UserGuildApplyModel.getListByGuild(code, lastApplyCode);
|
const result = await UserGuildApplyModel.getListByGuild(code, lastApplyCode);
|
||||||
const list = result.map(cur => {
|
const list = [];
|
||||||
|
for(let cur of result) {
|
||||||
let role = <RoleType>cur.role;
|
let role = <RoleType>cur.role;
|
||||||
delete cur.role;
|
delete cur.role;
|
||||||
return { applyCode: cur.applyCode, ...role, ce: reduceCe(role.ce) };
|
let isOnline = await isRoleOnline(role.roleId);
|
||||||
});
|
list.push({ applyCode: cur.applyCode, ...role, ce: reduceCe(role.ce), isOnline });
|
||||||
|
}
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { list });
|
return resResult(STATUS.SUCCESS, { list });
|
||||||
}
|
}
|
||||||
@@ -400,11 +403,14 @@ export class GuildHandler {
|
|||||||
const allList = await RoleModel.getInviteList(day, serverId);
|
const allList = await RoleModel.getInviteList(day, 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 => {
|
|
||||||
return {...cur, ce: reduceCe(cur.ce)}
|
|
||||||
});
|
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { quitTime, list });
|
let result = [];
|
||||||
|
for(let cur of list) {
|
||||||
|
let isOnline = await isRoleOnline(cur.roleId);
|
||||||
|
result.push({...cur, ce: reduceCe(cur.ce), isOnline})
|
||||||
|
}
|
||||||
|
|
||||||
|
return resResult(STATUS.SUCCESS, { quitTime, list: result });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,12 +518,14 @@ export class GuildHandler {
|
|||||||
select.push('auth', 'activeWeekly activeUpdateTime');
|
select.push('auth', 'activeWeekly activeUpdateTime');
|
||||||
}
|
}
|
||||||
let list = await UserGuildModel.getListByGuild(code, select.join(' '), { auth: 1 });
|
let list = await UserGuildModel.getListByGuild(code, select.join(' '), { auth: 1 });
|
||||||
let result = list.map(cur => {
|
let result = [];
|
||||||
|
for(let cur of list) {
|
||||||
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) };
|
let isOnline = await isRoleOnline(role.roleId)
|
||||||
});
|
result.push({ ...cur, ...role, ce: reduceCe(role.ce), isOnline: !!isOnline });
|
||||||
|
}
|
||||||
let leader = result.shift();
|
let leader = result.shift();
|
||||||
|
|
||||||
result.sort((a, b) => {
|
result.sort((a, b) => {
|
||||||
@@ -528,7 +536,7 @@ export class GuildHandler {
|
|||||||
return b.activeWeekly - a.activeWeekly
|
return b.activeWeekly - a.activeWeekly
|
||||||
}
|
}
|
||||||
} else if (sort == 'loginTime') {
|
} else if (sort == 'loginTime') {
|
||||||
return b.loginTime - a.loginTime;
|
return b.quitTime - a.quitTime;
|
||||||
} else {
|
} else {
|
||||||
return b.ce - a.ce;
|
return b.ce - a.ce;
|
||||||
}
|
}
|
||||||
@@ -649,8 +657,8 @@ export class GuildHandler {
|
|||||||
if (!checkHisAuth) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
if (!checkHisAuth) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||||
|
|
||||||
// 离线72小时
|
// 离线72小时
|
||||||
const { roleName: oldRoleName, loginTime } = await RoleModel.findByRoleId(leaderRoleId);
|
const { roleName: oldRoleName, quitTime } = await RoleModel.findByRoleId(leaderRoleId);
|
||||||
if (loginTime > getBeforeDaySeconds(3)) {
|
if (quitTime > getBeforeDaySeconds(3)) {
|
||||||
return resResult(STATUS.GUILD_LEADER_LOGIN);
|
return resResult(STATUS.GUILD_LEADER_LOGIN);
|
||||||
}
|
}
|
||||||
// 上周周功勋最高的人
|
// 上周周功勋最高的人
|
||||||
@@ -921,7 +929,7 @@ export class GuildHandler {
|
|||||||
const guild = await GuildModel.findByCode(code, serverId);
|
const guild = await GuildModel.findByCode(code, serverId);
|
||||||
const leader = <RoleType>guild.leader;
|
const leader = <RoleType>guild.leader;
|
||||||
let threeDaysBefore = getBeforeDaySeconds(3);
|
let threeDaysBefore = getBeforeDaySeconds(3);
|
||||||
await RoleModel.updateRoleInfo(leader.roleId, { loginTime: threeDaysBefore } );
|
await RoleModel.updateRoleInfo(leader.roleId, { quitTime: threeDaysBefore } );
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { code });
|
return resResult(STATUS.SUCCESS, { code });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { ItemModel } from '../../../db/Item';
|
|||||||
import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService';
|
import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService';
|
||||||
import { loginRefresh } from '../../../services/playerEventService';
|
import { loginRefresh } from '../../../services/playerEventService';
|
||||||
import { getRedis, setRedis, delRedis } from '../../../services/redisService';
|
import { getRedis, setRedis, delRedis } from '../../../services/redisService';
|
||||||
|
import { nowSeconds } from '../../../pubUtils/timeUtil';
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
return new EntryHandler(app);
|
return new EntryHandler(app);
|
||||||
}
|
}
|
||||||
@@ -121,6 +122,7 @@ export class EntryHandler {
|
|||||||
channel.leave(roleId, sid);
|
channel.leave(roleId, sid);
|
||||||
// this.app.rpc.battle.battleRemote.kick.route(session)(roleId, this.app.get('serverId'), serverId);
|
// this.app.rpc.battle.battleRemote.kick.route(session)(roleId, this.app.get('serverId'), serverId);
|
||||||
this.app.rpc.chat.chatRemote.kickWorldChannel.route(session, true)(roleId, sid, serverId);
|
this.app.rpc.chat.chatRemote.kickWorldChannel.route(session, true)(roleId, sid, serverId);
|
||||||
|
RoleModel.updateRoleInfo(roleId, { quitTime: nowSeconds() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -283,8 +283,8 @@ export const message = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
changeLeader: function(guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) {
|
changeLeader: function(guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) {
|
||||||
let { roleId, roleName, sHid, headHid, lv, loginTime } = newLeader;
|
let { roleId, roleName, sHid, headHid, lv, quitTime } = newLeader;
|
||||||
this.updateInfo(guildCode, {managerCnt, leader: { roleId, roleName, sHid, headHid, lv, loginTime }});
|
this.updateInfo(guildCode, {managerCnt, leader: { roleId, roleName, sHid, headHid, lv, quitTime }});
|
||||||
this.demotion(guildCode, oldLeaderId);
|
this.demotion(guildCode, oldLeaderId);
|
||||||
this.promotion(guildCode, roleId);
|
this.promotion(guildCode, roleId);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -304,6 +304,12 @@ export async function delRedis(key: string) {
|
|||||||
await client.delAsync(key);
|
await client.delAsync(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function isRoleOnline(roleId: string) {
|
||||||
|
let key = `login_roleId_${roleId}`;
|
||||||
|
let result = await getRedis(key);
|
||||||
|
return !!result;
|
||||||
|
}
|
||||||
|
|
||||||
export async function resetPvpRanks() {
|
export async function resetPvpRanks() {
|
||||||
const client: Redis.RedisClient = pinus.app.get('redis');
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
await client.delAsync(REDIS_KEY.PVP_RANK);
|
await client.delAsync(REDIS_KEY.PVP_RANK);
|
||||||
|
|||||||
+2
-2
@@ -94,7 +94,7 @@ export default class Guild extends BaseModel {
|
|||||||
const code = genCode(6);
|
const code = genCode(6);
|
||||||
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true })
|
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true })
|
||||||
.select({ _id: 0, __v: 0, createdAt: 0, updatedAt: 0 })
|
.select({ _id: 0, __v: 0, createdAt: 0, updatedAt: 0 })
|
||||||
.populate('leader', { roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, loginTime: 1, ce: 1, title: 1, _id: 0 }, 'Role')
|
.populate('leader', { roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0 }, 'Role')
|
||||||
.lean();
|
.lean();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -142,7 +142,7 @@ export default class Guild extends BaseModel {
|
|||||||
public static async findByCode(code: string, serverId: number, select?: string) {
|
public static async findByCode(code: string, serverId: number, select?: string) {
|
||||||
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
|
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
|
||||||
.select(select)
|
.select(select)
|
||||||
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, loginTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
|
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
|
||||||
.lean();
|
.lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -154,6 +154,8 @@ export default class Role extends BaseModel {
|
|||||||
createTime: number; // 创建时间
|
createTime: number; // 创建时间
|
||||||
@prop({ required: true, default: nowSeconds() })
|
@prop({ required: true, default: nowSeconds() })
|
||||||
loginTime: number; // 更新 / 登录时间
|
loginTime: number; // 更新 / 登录时间
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
quitTime: number; // 更新 / 登录时间
|
||||||
|
|
||||||
@prop({ required: true, type: Number, default: [], _id: false })
|
@prop({ required: true, type: Number, default: [], _id: false })
|
||||||
funcs: Array<number>; // 开启了的功能
|
funcs: Array<number>; // 开启了的功能
|
||||||
@@ -414,9 +416,9 @@ export default class Role extends BaseModel {
|
|||||||
|
|
||||||
// 获取未加入公会且登录时间在三天内的人
|
// 获取未加入公会且登录时间在三天内的人
|
||||||
public static async getInviteList(time: number, serverId: number) {
|
public static async getInviteList(time: number, serverId: number) {
|
||||||
const result = await RoleModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId })
|
const result = await RoleModel.find({ quitTime: { $gt: time }, hasGuild: false, serverId })
|
||||||
.select('roleId roleName ce headHid sHid lv title job loginTime')
|
.select('roleId roleName ce headHid sHid lv title job quitTime')
|
||||||
.sort({loginTime: -1, lv: -1, ce: -1})
|
.sort({quitTime: -1, lv: -1, ce: -1})
|
||||||
.limit(100).lean();
|
.limit(100).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ export default class UserGuild extends BaseModel {
|
|||||||
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(sort)
|
.sort(sort)
|
||||||
.populate('role', 'roleId roleName ce headHid sHid lv title loginTime', 'Role')
|
.populate('role', 'roleId roleName ce headHid sHid lv title quitTime', 'Role')
|
||||||
.lean();
|
.lean();
|
||||||
return userGuilds;
|
return userGuilds;
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ export default class UserGuild extends BaseModel {
|
|||||||
const userGuilds: UserGuildType = await UserGuildModel.findOne({ guildCode, status: USER_GUILD_STATUS.ON, auth: { $ne: GUILD_AUTH.LEADER } })
|
const userGuilds: UserGuildType = await UserGuildModel.findOne({ guildCode, status: USER_GUILD_STATUS.ON, auth: { $ne: GUILD_AUTH.LEADER } })
|
||||||
.sort({ activeWeekly: -1, activeUpdateTime: 1 })
|
.sort({ activeWeekly: -1, activeUpdateTime: 1 })
|
||||||
.select(select)
|
.select(select)
|
||||||
.populate('role', 'roleId roleName ce headHid sHid lv title loginTime', 'Role')
|
.populate('role', 'roleId roleName ce headHid sHid lv title quitTime', 'Role')
|
||||||
.lean();
|
.lean();
|
||||||
return userGuilds;
|
return userGuilds;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export default class UserGuildApply extends BaseModel {
|
|||||||
const list: UserGuildApplyType[] = await UserGuildApplyModel.find(condition)
|
const list: UserGuildApplyType[] = await UserGuildApplyModel.find(condition)
|
||||||
.sort({ createdAt: -1 })
|
.sort({ createdAt: -1 })
|
||||||
.select('applyCode role')
|
.select('applyCode role')
|
||||||
.populate('role', 'roleId roleName ce headHid sHid lv title job loginTime', 'Role')
|
.populate('role', 'roleId roleName ce headHid sHid lv title job quitTime', 'Role')
|
||||||
.limit(GUILD_PER_PAGE).lean();
|
.limit(GUILD_PER_PAGE).lean();
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user