feat(服务器): 更新维护逻辑

This commit is contained in:
luying
2023-05-06 11:44:05 +08:00
parent a651254821
commit f47d2d131f
24 changed files with 183 additions and 89 deletions

View File

@@ -876,6 +876,11 @@ export default class Role extends BaseModel {
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId, closeTime: { $gte: now } }, { $set: { closeTime: 0, cancelCloseTime: now } }, { new: true }).select('roleId +closeTime').lean();
return role;
}
public static async checkHasRole(uid: number, serverId: number) {
return await RoleModel.exists({ 'userInfo.uid': uid, lv: { $gt: 3 }, serverId: { $lt: serverId } });
}
}
export const RoleModel = getModelForClass(Role);

View File

@@ -3,7 +3,6 @@ import { index, getModelForClass, prop, DocumentType, modelOptions, ReturnModelT
import { SERVER_STATUS } from '../consts';
import { CreateServerParam } from '../domain/backEndField/params';
import { RegionType } from './Region';
import { nowSeconds } from '../pubUtils/timeUtil';
import { getDicServerName } from '../pubUtils/data';
import { genCode } from '../pubUtils/util';
@@ -24,6 +23,9 @@ export class Maintenance {
@prop({ required: true })
hasNotify: boolean; // 是否有维护通知
@prop({ required: true })
version: string; // 可以进入的版本
}
/**
@@ -70,16 +72,8 @@ export default class Serverlist extends BaseModel {
@prop({ required: true })
generateCode: string; // 生成编号
public get status() {
let now = nowSeconds();
if (now < this.openTime) {
return SERVER_STATUS.WILL_OPEN;
} else if (this.maintenance && this.maintenance.isOpen && this.maintenance.startTime < now && this.maintenance.endTime > now) {
return SERVER_STATUS.MAINTENANCE;
} else {
return this.serverStatus; // 未开服
}
}
@prop({ required: true })
latestServerUniqId: number; // 最新服
@prop({ required: true })
openTime: number;
@@ -102,7 +96,7 @@ export default class Serverlist extends BaseModel {
public static async getAllServerList() {
let result: ServerlistType[] = [], id = 0;
for(let i = 0; i < 1000; i++) { // 防无限循环锁死
let servers: ServerlistType[] = await ServerlistModel.find({ id: { $gt: id }}).sort({ id: 1 }).lean({ getters: true, virtuals: true });
let servers: ServerlistType[] = await ServerlistModel.find({ id: { $gt: id }}).sort({ id: 1 }).lean({ getters: true });
if(servers.length == 0) break;
id = servers[servers.length -1].id;
result.push(...servers);
@@ -111,17 +105,17 @@ export default class Serverlist extends BaseModel {
}
public static async findByServerId(serverId: number) {
let server: ServerlistType = await ServerlistModel.findOne({ id: serverId }).lean({ getters: true, virtuals: true });
let server: ServerlistType = await ServerlistModel.findOne({ id: serverId }).lean({ getters: true });
return server;
}
public static async findByServerIds(serverIds: number[], select?: string) {
let servers: ServerlistType[] = await ServerlistModel.find({ id: { $in: serverIds } }).select(select).lean({ getters: true, virtuals: true });
let servers: ServerlistType[] = await ServerlistModel.find({ id: { $in: serverIds } }).select(select).lean({ getters: true });
return servers;
}
public static async updateByServerId(serverId: number, update: ServerlistUpdate) {
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $set: update }, {new: true}).lean({ getters: true, virtuals: true });
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $set: update }, {new: true}).lean({ getters: true });
return server;
}
@@ -148,10 +142,11 @@ export default class Serverlist extends BaseModel {
openTime, stopRegisterTime,
createdBy: uid, updatedBy: uid, generateCode
});
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id }, { $setOnInsert: update }, { new: true, upsert: true }).lean({ getters: true, virtuals: true });
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id }, { $setOnInsert: update }, { new: true, upsert: true }).lean({ getters: true });
if(server.generateCode == generateCode) {
// 旧服修改状态
await ServerlistModel.updateMany({ env, serverStatus: SERVER_STATUS.NEW, id: { $lt: id } }, { $set: { serverStatus: SERVER_STATUS.HOT } })
await ServerlistModel.updateMany({ env, serverStatus: SERVER_STATUS.NEW, id: { $lt: id } }, { $set: { serverStatus: SERVER_STATUS.HOT } })
await ServerlistModel.updateMany({ env }, { latestServerUniqId: server.id });
return server;
}
return null;
@@ -159,10 +154,10 @@ export default class Serverlist extends BaseModel {
public static async findByEnv(env?: string, isReview = false) {
if(isReview) {
let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 }, isReview }).sort({ id: -1 }).lean({ getters: true, virtuals: true });
let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 }, isReview }).sort({ id: -1 }).lean({ getters: true });
return server;
} else {
let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 } }).sort({ id: -1 }).lean({ getters: true, virtuals: true });
let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 } }).sort({ id: -1 }).lean({ getters: true });
return server;
}
}

View File

@@ -12,12 +12,12 @@ export class ServerParam {
status: number; // 状态
openTime: number; // 开服时间
constructor(server: ServerlistType) {
constructor(server: ServerlistType, status: number) {
this.id = server.id;
this.serverId = server.serverId;
this.serverStr = `${server.prefix}${server.serverId}`;
this.name = server.name;
this.status = server.status;
this.status = status;
this.openTime = server.openTime;
}
}
@@ -35,8 +35,8 @@ export class GroupParam {
this.servers = new Array<ServerParam>();
}
public pushServer(server: ServerlistType) {
let srv = new ServerParam(server);
public pushServer(server: ServerlistType, status: number) {
let srv = new ServerParam(server, status);
this.servers.push(srv);
this.servers.sort((a, b) => b.serverId - a.serverId);
let min = this.servers[this.servers.length - 1];
@@ -59,8 +59,8 @@ export class ServerParamWithRole extends ServerParam {
isClose: boolean; // 是否已经注销
closeTime: number; // 注销生效时间
constructor(role: RoleType, server: ServerlistType) {
super(server);
constructor(role: RoleType, server: ServerlistType, status: number) {
super(server, status);
this.groupId = server.groupId;
this.groupName = server.groupName;

View File

@@ -861,4 +861,24 @@ export function getArrayOfNumber(len: number) {
let arr: number[] = [];
for(let i = 1; i <= len; i++) arr.push(i);
return arr;
}
}
// 比较以 . 分隔的版本号。返回 0 则版本号相等,返回正数则 versionA 大,返回负数则 versionB 大
export function compareVersion(versionA: string, versionB: string) {
var vA = versionA.split('.');
var vB = versionB.split('.');
for (var i = 0; i < vA.length; ++i) {
var a = parseInt(vA[i]);
var b = parseInt(vB[i] || '0');
if (a === b) {
} else {
return a - b;
}
}
if (vB.length > vA.length) {
return -1;
} else {
return 0;
}
};