✨ feat(服务器): 修改服务器自动开服策略
This commit is contained in:
@@ -360,6 +360,9 @@ export default class Role extends BaseModel {
|
||||
@prop({ required: true, select: false })
|
||||
cancelCloseTime: number;
|
||||
|
||||
@prop({ required: true })
|
||||
needCount: boolean;
|
||||
|
||||
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
|
||||
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime +closeTime').lean({ getters, virtuals });
|
||||
return role;
|
||||
@@ -368,7 +371,7 @@ export default class Role extends BaseModel {
|
||||
public static async findByUidAndSetTime(uid: number, serverId: number, ip: string, ipLocation: string, select?: string, getters = false) {
|
||||
const curSec = nowSeconds();
|
||||
// 为了计算累计登录,此处查询new为false
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { $set: { loginTime: curSec, quitTime: curSec, ip, ipLocation } }, { new: false }).select(select).lean({ getters, virtuals: true });
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { $set: { loginTime: curSec, quitTime: curSec, ip, ipLocation, needCount: false } }, { new: false }).select(select).lean({ getters, virtuals: true });
|
||||
return role;
|
||||
}
|
||||
|
||||
@@ -408,7 +411,7 @@ export default class Role extends BaseModel {
|
||||
const user = await User.findUserByUid(uid);
|
||||
if (!user) return null;
|
||||
const doc = new RoleModel();
|
||||
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId, shushuMark: distinctId });
|
||||
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId, shushuMark: distinctId, needCount: true });
|
||||
delete update._id;
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
|
||||
return role;
|
||||
|
||||
@@ -59,32 +59,28 @@ export default class ServerStategy {
|
||||
@prop({ required: true, default: 0 })
|
||||
maxPlayerCnt: number; // 人数上限
|
||||
|
||||
@prop({ required: true, default: 0, type: Number })
|
||||
timers: number[]; // 开服时间点
|
||||
@prop({ required: true, default: 0 })
|
||||
type: number; // 类型 1-定时 2-人数到了既时
|
||||
|
||||
@prop({ required: true, default: 0, type: String })
|
||||
timers: string[]; // 开服时间点
|
||||
|
||||
@prop({ required: true, type: Number })
|
||||
activityGroupId: number[]; // 选择活动组
|
||||
|
||||
@prop({ required: true, type: GMMail, _id: false })
|
||||
openMail: GMMail;
|
||||
|
||||
@prop({ required: true, type: GMMail, _id: false })
|
||||
circleMail: GMMail;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
stopRegisterTime: number; // 关闭注册时间
|
||||
|
||||
constructor(stategy: ServerStategyUpdate & { hasOpenMail: boolean, hasCircleMail: boolean}) {
|
||||
constructor(stategy: ServerStategyUpdate & { hasOpenMail: boolean}) {
|
||||
this.isOpen = stategy.isOpen;
|
||||
this.maxPlayerCnt = stategy.maxPlayerCnt;
|
||||
this.type = stategy.type;
|
||||
this.timers = stategy.timers;
|
||||
this.activityGroupId = stategy.activityGroupId;
|
||||
this.stopRegisterTime = stategy.stopRegisterTime;
|
||||
if(stategy.hasCircleMail) {
|
||||
this.circleMail = stategy.circleMail;
|
||||
} else {
|
||||
this.circleMail = null;
|
||||
}
|
||||
if(stategy.hasOpenMail) {
|
||||
this.openMail = stategy.openMail;
|
||||
} else {
|
||||
|
||||
@@ -5,6 +5,7 @@ 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';
|
||||
|
||||
export class Maintenance {
|
||||
|
||||
@@ -66,6 +67,9 @@ export default class Serverlist extends BaseModel {
|
||||
// @prop({ required: true, type: Number })
|
||||
// activityGroupId: number[]; // 活动组
|
||||
|
||||
@prop({ required: true })
|
||||
generateCode: string; // 生成编号
|
||||
|
||||
public get status() {
|
||||
let now = nowSeconds();
|
||||
if (now < this.openTime) {
|
||||
@@ -137,16 +141,20 @@ export default class Serverlist extends BaseModel {
|
||||
|
||||
let id = regionId * 10000 + serverId;
|
||||
const doc = new ServerlistModel();
|
||||
let generateCode = genCode(10)
|
||||
const update = Object.assign(doc.toJSON(), {
|
||||
id, regionId, env, prefix,
|
||||
serverId, name, groupId, groupName, activityGroupId,
|
||||
openTime, stopRegisterTime,
|
||||
createdBy: uid, updatedBy: uid
|
||||
createdBy: uid, updatedBy: uid, generateCode
|
||||
});
|
||||
// 旧服修改状态
|
||||
await ServerlistModel.updateMany({ env, serverStatus: SERVER_STATUS.NEW }, { $set: { serverStatus: SERVER_STATUS.HOT } })
|
||||
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id }, { $setOnInsert: update }, { new: true, upsert: true }).lean({ getters: true, virtuals: true });
|
||||
return server;
|
||||
if(server.generateCode == generateCode) {
|
||||
// 旧服修改状态
|
||||
await ServerlistModel.updateMany({ env, serverStatus: SERVER_STATUS.NEW, id: { $lt: id } }, { $set: { serverStatus: SERVER_STATUS.HOT } })
|
||||
return server;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static async findByEnv(env?: string, isReview = false) {
|
||||
@@ -180,7 +188,7 @@ export default class Serverlist extends BaseModel {
|
||||
// }
|
||||
|
||||
public static async incRoleCnt(serverId: number) {
|
||||
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $inc: { playerCnt: 1 } });
|
||||
let server: ServerlistType = await ServerlistModel.findOneAndUpdate({ id: serverId }, { $inc: { playerCnt: 1 } }, { new: true }).lean();
|
||||
return server;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { GIFT_GENERATE_TYPE, GM_MAIL_TYPE, MAIL_TIME_TYPE, SERVER_TIMER } from "../../consts";
|
||||
import { GIFT_GENERATE_TYPE, GM_MAIL_TYPE, MAIL_TIME_TYPE } from "../../consts";
|
||||
import { isArray, isNumber, isString } from 'underscore';
|
||||
import ServerStategy, { GMMail } from "../../db/ServerStategy";
|
||||
import { RegionType } from "../../db/Region";
|
||||
@@ -85,15 +85,16 @@ export class UpdateRegionParams {
|
||||
addressType: number = 0;
|
||||
|
||||
maxPlayerCnt: number = 0;
|
||||
timers: SERVER_TIMER[] = [];
|
||||
type: number = 0;
|
||||
timers: string[] = [];
|
||||
activityGroupId: number[] = [];
|
||||
openMail?: GMMail;
|
||||
circleMail?: GMMail;
|
||||
// circleMail?: GMMail;
|
||||
stopRegisterTime: number = 0;
|
||||
isOpen: boolean = false;
|
||||
|
||||
hasOpenMail: boolean = false;
|
||||
hasCircleMail: boolean = false;
|
||||
// hasCircleMail: boolean = false;
|
||||
|
||||
constructor(obj: UpdateRegionParams) {
|
||||
for(let key in obj) {
|
||||
@@ -182,8 +183,8 @@ export class CreateServerParam {
|
||||
activityGroupId: number[] = [];
|
||||
hasOpenMail: boolean = false;
|
||||
openMail?: GMMail;
|
||||
hasCircleMail: boolean = false;
|
||||
circleMail?: GMMail;
|
||||
// hasCircleMail: boolean = false;
|
||||
// circleMail?: GMMail;
|
||||
stopRegisterTime: number = 0;
|
||||
|
||||
constructor(obj?: any) {
|
||||
@@ -201,8 +202,8 @@ export class CreateServerParam {
|
||||
this.activityGroupId = region.stategy.activityGroupId;
|
||||
this.hasOpenMail = !!region.stategy.openMail;
|
||||
this.openMail = region.stategy.openMail;
|
||||
this.hasCircleMail = !!region.stategy.circleMail;
|
||||
this.circleMail = region.stategy.circleMail;
|
||||
// this.hasCircleMail = !!region.stategy.circleMail;
|
||||
// this.circleMail = region.stategy.circleMail;
|
||||
this.stopRegisterTime = region.stategy.stopRegisterTime;
|
||||
}
|
||||
|
||||
@@ -214,7 +215,7 @@ export class CreateServerParam {
|
||||
return false
|
||||
}
|
||||
if(this.hasOpenMail && !this.openMail) return false;
|
||||
if(this.hasCircleMail && !this.circleMail) return false;
|
||||
// if(this.hasCircleMail && !this.circleMail) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user