后台:服务器维护
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, ReturnModelType, mongoose } from '@typegoose/typegoose';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
|
||||
/**
|
||||
* 自增 ID
|
||||
|
||||
@@ -23,8 +23,6 @@ export class Receiver {
|
||||
roleId?: string;
|
||||
@prop({ required: true })
|
||||
roleName?: string;
|
||||
@prop({ required: true })
|
||||
hasSend?: boolean;
|
||||
}
|
||||
|
||||
export default class GMMail extends BaseModel {
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, mongoose, Ref } from '@typegoose/typegoose';
|
||||
import Marquee, { MarqueeType } from './Marquee';
|
||||
import Notice, { NoticeType } from './Notice';
|
||||
import GMMail from './GMMail';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { GMMailType } from './GMMail';
|
||||
|
||||
/**
|
||||
* 开服策略
|
||||
*/
|
||||
@index({ id: 1 })
|
||||
|
||||
export default class Maintenance extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
code: string; // 策略唯一标志
|
||||
|
||||
@prop({ required: true, type: Number })
|
||||
serverIds: number[]; // 服务器类型
|
||||
|
||||
@prop({ required: true })
|
||||
isOpen: boolean; // 维护是否使用
|
||||
|
||||
@prop({ required: true })
|
||||
startTime: Date; // 维护开始时间
|
||||
|
||||
@prop({ ref: () => Marquee, type: mongoose.Schema.Types.ObjectId })
|
||||
marquee: Ref<Marquee>; // 跑马灯,连接到marquee表
|
||||
|
||||
@prop({ ref: () => Notice, type: mongoose.Schema.Types.ObjectId })
|
||||
notice: Ref<Notice>; // 维护公告
|
||||
|
||||
@prop({ ref: () => GMMail, type: mongoose.Schema.Types.ObjectId })
|
||||
mail: Ref<GMMail>; // 维护结束邮件
|
||||
|
||||
|
||||
public static async createData(values: MaintenanceTypeParam, marquee: MarqueeType, notice: NoticeType, mail: GMMailType, uid = 1) {
|
||||
const code = genCode(8);
|
||||
const rec: MaintenanceType = await MaintenanceModel.findOneAndUpdate({ code }, {
|
||||
$setOnInsert: {...values, code, isOpen: false, marquee: marquee._id, notice: notice._id, mail: mail._id, createdBy: uid}, $set: { updatedBy: uid }
|
||||
}, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async updateData(code: string, values: MaintenanceTypeParam, uid = 1) {
|
||||
const rec: MaintenanceType = await MaintenanceModel.findOneAndUpdate({ code }, { $set: { ...values, updatedBy: uid } }, { new: true, upsert: true })
|
||||
.populate('marquee', 'code')
|
||||
.populate('notice')
|
||||
.populate('mail')
|
||||
.lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async findOpenMaintenance() {
|
||||
const rec: MaintenanceType = await MaintenanceModel.findOne({ isOpen: true }, { _id: 0 }).populate('marquee').populate('notice').populate('mail').lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async findByCode(code: string) {
|
||||
const rec: MaintenanceType = await MaintenanceModel.findOne({ code }).populate('marquee').populate('notice').populate('mail').lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async updateStatusByCode(code: string, isOpen: boolean, uid = 1) {
|
||||
const rec: MaintenanceType = await MaintenanceModel.findOneAndUpdate({ code }, { $set: { isOpen, updatedBy: uid } }).populate('marquee').populate('notice').populate('mail').lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
private static getSearchObj(form: { isOpen?: boolean }) {
|
||||
let searchObj = {};
|
||||
if (form.isOpen) searchObj['isOpen'] = form.isOpen;
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, form: { isOpen?: boolean } = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
let sort = {};
|
||||
if (sortField && sortOrder) {
|
||||
if (sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
const result: MaintenanceType[] = await MaintenanceModel.find(searchObj, { _id: 0 })
|
||||
.populate('marquee').populate('notice', '+showStartTime +showEndTime').populate('mail')
|
||||
.limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: { isOpen?: boolean } = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await MaintenanceModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
export const MaintenanceModel = getModelForClass(Maintenance);
|
||||
|
||||
export interface MaintenanceType extends Pick<DocumentType<Maintenance>, keyof Maintenance> { }
|
||||
export type MaintenanceTypeParam = Partial<MaintenanceType>; // 将所有字段变成可选项
|
||||
@@ -3,6 +3,7 @@ import { CounterModel } from './Counter';
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';
|
||||
import ServerStategy from './ServerStategy';
|
||||
import { ServerlistType } from './Serverlist';
|
||||
|
||||
|
||||
/**
|
||||
@@ -35,6 +36,9 @@ export default class Region extends BaseModel {
|
||||
@prop({ required: true })
|
||||
latestServer: number; // 最新服
|
||||
|
||||
@prop({ required: true })
|
||||
latestServerUniqId: number; // 最新服唯一id
|
||||
|
||||
@prop({ required: true })
|
||||
serverCount: number; // 总数
|
||||
|
||||
@@ -56,6 +60,13 @@ export default class Region extends BaseModel {
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async newServer(id: number, newServer: ServerlistType, uid = 1) {
|
||||
const rec: RegionType = await RegionModel.findOneAndUpdate({ id }, {
|
||||
$set: { latestServer: newServer.serverId, latestServerUniqId: newServer.id, updatedBy: uid },
|
||||
$inc: { serverCount: 1 }
|
||||
}, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
public static async getAllRegion() {
|
||||
const rec: RegionType[] = await RegionModel.find().select('-_id -stategy').lean();
|
||||
return rec;
|
||||
|
||||
@@ -5,11 +5,31 @@ import { COUNTER, SERVER_STATUS } from '../consts';
|
||||
import { CreateServerParam } from '../domain/backEndField/params';
|
||||
import { RegionType } from './Region';
|
||||
import { DicServerName } from '../pubUtils/dictionary/DicServerName';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
export class Maintenance {
|
||||
|
||||
@prop({ required: true })
|
||||
batchCode: string; // 批次,如果是从大区列表维护就是一批的,小区列表上就是一服一个
|
||||
|
||||
@prop({ required: true })
|
||||
isOpen: boolean; // 维护是否使用
|
||||
|
||||
@prop({ required: true })
|
||||
startTime: number; // 维护开始时间
|
||||
|
||||
@prop({ required: true })
|
||||
endTime: number; // 维护结束时间
|
||||
|
||||
@prop({ required: true })
|
||||
hasNotify: boolean; // 是否有维护通知
|
||||
|
||||
}
|
||||
/**
|
||||
* 游戏字段接口
|
||||
*/
|
||||
@index({ id: 1 })
|
||||
@index({ env: 1 })
|
||||
@modelOptions({ schemaOptions: { id: false } })
|
||||
export default class Serverlist extends BaseModel {
|
||||
|
||||
@@ -23,7 +43,7 @@ export default class Serverlist extends BaseModel {
|
||||
prefix: string; // 前缀
|
||||
|
||||
@prop({ required: true })
|
||||
id: number; // 小区id 自增
|
||||
id: number; // 小区id 自增,全大区共用自增counter,玩家role表中存的就是这个serverId
|
||||
|
||||
@prop({ required: true })
|
||||
serverId: number; // 相同serverType下的id,不同serverType下id一定不同,但是serverId可能相同
|
||||
@@ -44,8 +64,7 @@ export default class Serverlist extends BaseModel {
|
||||
activityGroupId: number[]; // 活动组
|
||||
|
||||
public get status() {
|
||||
let now = new Date();
|
||||
if (now > this.openTime) {
|
||||
if (nowSeconds() > this.openTime) {
|
||||
return this.serverStatus;
|
||||
} else {
|
||||
return SERVER_STATUS.WILL_OPEN; // 未开服
|
||||
@@ -53,10 +72,10 @@ export default class Serverlist extends BaseModel {
|
||||
}
|
||||
|
||||
@prop({ required: true })
|
||||
openTime: Date;
|
||||
openTime: number;
|
||||
|
||||
@prop({ required: true })
|
||||
stopRegisterTime: Date;
|
||||
stopRegisterTime: number;
|
||||
|
||||
@prop({ required: true, default: true })
|
||||
canRegister: boolean;
|
||||
@@ -67,6 +86,9 @@ export default class Serverlist extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
medianCe: number; // 中位数武将战力、缩小10000倍后的结果
|
||||
|
||||
@prop({ required: true, type: Maintenance, _id: false })
|
||||
maintenance: Maintenance
|
||||
|
||||
public static async getAllServerList() {
|
||||
let id = await CounterAllModal.getCounter(COUNTER.SERVER);
|
||||
let result: ServerlistType[] = [];
|
||||
@@ -79,7 +101,7 @@ export default class Serverlist extends BaseModel {
|
||||
}
|
||||
|
||||
public static async findByServerId(serverId: number) {
|
||||
let server: ServerlistType = await ServerlistModel.findOne({ id: serverId }).select('medianCe activityGroupId').lean({ getters: true, virtuals: true });
|
||||
let server: ServerlistType = await ServerlistModel.findOne({ id: serverId }).lean({ getters: true, virtuals: true });
|
||||
return server;
|
||||
}
|
||||
|
||||
@@ -89,7 +111,7 @@ export default class Serverlist extends BaseModel {
|
||||
}
|
||||
|
||||
public static async updateByServerId(serverId: number, update: ServerlistUpdate) {
|
||||
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $set: update }).lean({ getters: true, virtuals: true });
|
||||
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $set: update }, {new: true}).lean({ getters: true, virtuals: true });
|
||||
return server;
|
||||
}
|
||||
|
||||
@@ -98,19 +120,13 @@ export default class Serverlist extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateGroupName(groupId: number, groupName: string) {
|
||||
let server = await ServerlistModel.updateMany({ groupId }, { $set: { groupName } });
|
||||
return server;
|
||||
}
|
||||
|
||||
public static async newServer(params: CreateServerParam, region: RegionType, dicServerName: DicServerName, uid = 1 ) {
|
||||
let { prefix, id: regionId, env } = region;
|
||||
// 分大区
|
||||
let id = await CounterAllModal.getNewCounter(COUNTER.SERVER);
|
||||
let { openTime: openTimeNum, stopRegisterTime: hour, activityGroupId } = params;
|
||||
let { openTime, stopRegisterTime: hour, activityGroupId } = params;
|
||||
let { id: serverId, sname: name, groupId, groupName } = dicServerName;
|
||||
let openTime = new Date(openTimeNum * 1000);
|
||||
let stopRegisterTime = new Date(openTimeNum + hour * 60 * 60);
|
||||
let stopRegisterTime = openTime + hour * 60 * 60;
|
||||
|
||||
const doc = new ServerlistModel();
|
||||
const update = Object.assign(doc.toJSON(), {
|
||||
@@ -124,49 +140,11 @@ export default class Serverlist extends BaseModel {
|
||||
return server;
|
||||
}
|
||||
|
||||
public static async findByServerType(serverType?: string) {
|
||||
let condition = {};
|
||||
if(serverType) {
|
||||
condition['serverType'] = serverType;
|
||||
}
|
||||
let server: ServerlistType[] = await ServerlistModel.find(condition).sort({ id: -1 }).lean({ getters: true, virtuals: true });
|
||||
public static async findByEnv(env?: string) {
|
||||
let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 } }).sort({ id: -1 }).lean({ getters: true, virtuals: true });
|
||||
return server;
|
||||
}
|
||||
|
||||
private static getSearchObj(form: { id?: number, serverId?: string|number, name?: string, groupName?: string, groupId?: number, serverType?: string }) {
|
||||
let searchObj = {};
|
||||
if (form.id != undefined) searchObj['id'] = form.id;
|
||||
if (form.serverId != undefined) searchObj['serverId'] = form.serverId;
|
||||
if (form.groupId != undefined) searchObj['groupId'] = form.groupId;
|
||||
if (form.name != undefined) searchObj['name'] = { $regex: new RegExp(form.name.toString(), 'i') };
|
||||
if (form.groupName != undefined) searchObj['groupName'] = { $regex: new RegExp(form.groupName.toString(), 'i') };
|
||||
if (form.serverType != undefined) searchObj['serverType'] = form.serverType;
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string, sortOrder: string, form: { id?: number, serverId?: string|number, name?: string, groupName?: string, groupId?: number, serverType?: string } = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
let sort = {};
|
||||
if(sortField && sortOrder) {
|
||||
if(sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
const result: ServerlistType[] = await ServerlistModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: { id?: number, serverId?: string|number, name?: string, groupName?: string, groupId?: number, serverType?: string } = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await ServerlistModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
|
||||
//根据多个活动id查询活动数据
|
||||
public static async findServerByIds(ids: number[]) {
|
||||
let result: ServerlistType[] = await ServerlistModel.find({ id: { $in: ids } }).lean();
|
||||
|
||||
@@ -10,6 +10,7 @@ import { loadGMMailModel } from './GMMail';
|
||||
import { loadCounterModal } from "./CounterAll";
|
||||
|
||||
export function loadGmDb(connect: mongoose.Connection) {
|
||||
// console.log('************')
|
||||
loadApiModel(connect);
|
||||
loadGMGroupModel(connect);
|
||||
loadGMUserModel(connect);
|
||||
|
||||
Reference in New Issue
Block a user