后台:服务器列表编辑

This commit is contained in:
luying
2021-06-16 20:22:07 +08:00
parent c0b3750f3b
commit ca6fa2523c
10 changed files with 254 additions and 24 deletions

View File

@@ -1,5 +1,9 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
import { GameModel } from './Game';
import { CounterModel } from './Counter';
import { COUNTER } from '../consts';
import { ServerStategyTypeParam } from './ServerStategy';
// 暂时服务器列表是从game表取的之后会转移到使用这张表目前用作查询该服战力中位数
@@ -31,10 +35,10 @@ export default class Serverlist extends BaseModel {
@prop({ required: true })
host: string; // pinus连接地址
@prop({ required: false })
@prop({ required: false, default: 3014 })
port: number; // pinus端口
@prop({ required: true })
@prop({ required: true, default: 1 })
serverStatus: number; // 服务器状态
@prop({ required: true, type: Number })
@@ -52,12 +56,12 @@ export default class Serverlist extends BaseModel {
@prop({ required: true })
openTime: Date;
@prop({ required: true })
createTime: Date;
@prop({ required: true })
serverType: string;
@prop({ required: true, default: 0 })
maxPlayerCnt: number; // 最大玩家人数
@prop({ required: true, default: 0 })
medianCe: number; // 中位数武将战力、缩小10000倍后的结果
@@ -76,10 +80,35 @@ export default class Serverlist extends BaseModel {
return server;
}
public static async newServer(serverId: number, serverType: string, params: ServerlistUpdate) {
public static async updateGroupName(groupId: number, groupName: string) {
let server = await ServerlistModel.updateMany({ groupId }, { $set: { groupName } });
return server;
}
public static async newServer(params: { serverType: string, openTime: Date, name?: string }, stategy: ServerStategyTypeParam, uid = 1 ) {
let { serverType, name } = params;
let serverEnvs = await GameModel.getServerEnvList();
let curEnv = serverEnvs.find(cur => cur.serverType == serverType);
if(!curEnv) return false;
let { gameHost: host } = curEnv;
// 分大区
let groupId = await CounterModel.getCounter(COUNTER.SERVER_GROUP);
let groupServerCount = await ServerlistModel.countByCondition({ serverType, groupId });
if(groupServerCount > 10) {
groupId = await CounterModel.getNewCounter(COUNTER.SERVER_GROUP);
}
let groupName = '逍遥津' + groupId;
let serverId = await CounterModel.getNewCounter({ name: `${COUNTER.SERVER_BY_TYPE.name}_${serverType}`, def: COUNTER.SERVER_BY_TYPE.def });
let id = await CounterModel.getNewCounter(COUNTER.SERVER);
if(!name) name = '出师表' + id
const doc = new ServerlistModel();
const update = Object.assign(doc.toJSON(), { id: serverId, serverType }, params);
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId, serverType }, { $setOnInsert: update }, { new: true, upsert: true }).lean({ getters: true, virtuals: true });
const update = Object.assign(doc.toJSON(), params, { id, serverId, host, groupId, groupName, name, createdBy: uid, updatedBy: uid }, { activityGroupId: stategy.activityGroupId, maxPlayerCnt: stategy.maxPlayerCnt});
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id }, { $setOnInsert: update }, { new: true, upsert: true }).lean({ getters: true, virtuals: true });
return server;
}
@@ -95,7 +124,8 @@ export default class Serverlist extends BaseModel {
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['groupId'] = form.groupId;
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;
@@ -105,7 +135,6 @@ export default class Serverlist extends BaseModel {
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 = ServerlistModel.getSearchObj(form);
console.log(searchObj, form)
let sort = {};
if(sortField && sortOrder) {
if(sortOrder == 'ascend') {
@@ -114,7 +143,7 @@ export default class Serverlist extends BaseModel {
sort[sortField] = -1;
}
}
const result: ServerlistType[] = await ServerlistModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean();
const result: ServerlistType[] = await ServerlistModel.find(searchObj, { _id: 0 }).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}