From f1e9c1efd630550e986ee28946c8e14d7be2df31 Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 5 Mar 2021 16:26:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=EF=BC=9A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/db/Game.ts | 5 +- shared/db/Notice.ts | 70 +++++++----------------- shared/domain/gameField/serverlist.ts | 67 +++++++++++++++++++++++ web-server/app/controller/game.ts | 25 +++++---- web-server/app/middleware/parmsDecode.ts | 2 +- 5 files changed, 102 insertions(+), 67 deletions(-) create mode 100644 shared/domain/gameField/serverlist.ts diff --git a/shared/db/Game.ts b/shared/db/Game.ts index 70985736f..fbfa66d00 100644 --- a/shared/db/Game.ts +++ b/shared/db/Game.ts @@ -1,9 +1,8 @@ import { APP_ID } from './../consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; -import { getSeconds } from '../pubUtils/timeUtil'; -class ServerInfo { +export class ServerInfo { @prop({ required: true }) id: number; // 小区id @@ -34,7 +33,7 @@ class ServerInfo { } } - @prop({ required: true, set:(val: Date) => { return val }, get: (val: Date) => {return getSeconds(val)} }) + @prop({ required: true }) openTime: Date; @prop({ required: true }) diff --git a/shared/db/Notice.ts b/shared/db/Notice.ts index f7757924a..8fa88e18e 100644 --- a/shared/db/Notice.ts +++ b/shared/db/Notice.ts @@ -1,4 +1,3 @@ -import { APP_ID } from './../consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; import { getSeconds } from '../pubUtils/timeUtil'; @@ -11,66 +10,35 @@ import { getSeconds } from '../pubUtils/timeUtil'; export default class Notice extends BaseModel { @prop({ required: true }) - id: number; + id: number; // 公告id + @prop({ required: true }) + title: string; // 公告标题 + @prop({ required: true }) + tag: number; // 公告显示标签,在系统参数表中配了 + @prop({ required: true }) + type: number; // 类型 1-公告 2-活动 + @prop({ required: true }) + content: number; // 公告内容 + @prop({ required: true }) + time: string; // 活动时间 + + @prop({ required: true, set: (val: Date) => {return val}, get: (val: Date) => { return getSeconds(val) }}) + startTime: Date; // 公告 + @prop({ required: true, set: (val: Date) => {return val}, get: (val: Date) => { return getSeconds(val) }}) + endTime: Date; @prop({ required: true }) - title: string; - - @prop({ required: true }) - tag: number; - - @prop({ required: true }) - type: number; - - @prop({ required: true }) - content: number; - - @prop({ required: true }) - order: number; - - @prop({ required: true }) - order: number; - + sort: number; @prop({ required: true }) showStartTime: Date; - @prop({ required: true }) showEndTime: Date; - public static async getAllServerList() { - let game: GameType = await GameModel.findOne().lean(); - if(game) { - return game.serverList; - } else { - return [] - } - } - - public static async getServerList() { - let game: GameType = await GameModel.findOne().lean({ getter: true, virtuals: true }); - if (!game) { - const serverInfo = new ServerInfo(1, '常山少年', 1, '逍遥津', 'pinus_test.trgame.cn', 3014, 1, 'official'); - const iconUrl = `https://download.tgamebox.cn/avatar/${APP_ID}/1.png`; - game = await GameModel.findOneAndUpdate( - {}, - { id: 1, name: '赵云传', nameEn: 'zyz', des: '牛逼的战棋', iconUrl, version: '0.0.1', versionCode: 1, $push: { serverList: serverInfo } }, - { upsert: true, new: true }, - ).lean({ getter: true, virtuals: true }); - } - let serverList: Array = game ? game.serverList : []; - return serverList; - } - - public static async newServer(serverId: number, serverType: string, name: string, host: string, port: number, status: number, lean = true) { - let serverInfo = new ServerInfo(serverId, name, 1, '逍遥津', host, port, status, serverType); - let game: GameType = await GameModel.findOneAndUpdate({}, {$push: {serverList: serverInfo}}, {new: true}).lean(lean); - return game; - } } -export const GameModel = getModelForClass(Game); +export const NoticeModel = getModelForClass(Notice); -export interface GameType extends Pick, keyof Game>{ +export interface NoticeType extends Pick, keyof Notice>{ id: number; }; diff --git a/shared/domain/gameField/serverlist.ts b/shared/domain/gameField/serverlist.ts new file mode 100644 index 000000000..d04127358 --- /dev/null +++ b/shared/domain/gameField/serverlist.ts @@ -0,0 +1,67 @@ +import { ServerInfo } from '../../db/Game'; +import { RoleType } from '../../db/Role'; +import { getSeconds } from '../../pubUtils/timeUtil'; + +export class ServerParam { + id: number; // 区号 + serverStr: string; // 显示的区号 S1 + name: string; // 区名 + host: string; // pinus地址 + port: number; // pinus端口 + status: number; // 状态 + openTime: number; // 开服时间 + serverType: string; // 分区类型 官服 测试服 开发服 + + constructor(server: ServerInfo) { + this.id = server.id; + this.serverStr = `S${this.id}`; + this.name = server.name; + this.host = server.host; + this.port = server.port; + this.status = server.status; + this.openTime = getSeconds(server.openTime); + this.serverType = server.serverType; + } +} + +export class GroupParam { + groupId: number; // 大区号 + groupName: string; // 大区名 + serverStr: string; // 大区内小区编号 S1-S10 + servers: ServerParam[]; // 区 + + constructor(server: ServerInfo) { + this.groupId = server.groupId; + this.groupName = server.groupName; + this.serverStr = `S${server.id}-S${server.id + 9}`; + this.servers = new Array(); + } + + public pushServer(server: ServerInfo) { + let srv = new ServerParam(server); + this.servers.push(srv); + } +} + +export class ServerParamWithRole extends ServerParam { + groupId: number; // 大区号 + groupName: string; // 大区名 + + roleId: string; // 玩家账号 + roleName: string; // 玩家名 + headHid: number; // 头像 + sHid: number; // 形象 + lv: number; // 等级 + + constructor(role: RoleType, server: ServerInfo) { + super(server); + this.groupId = server.groupId; + this.groupName = server.groupName; + + this.roleId = role.roleId; + this.roleName = role.roleName; + this.headHid = role.headHid; + this.sHid = role.sHid; + this.lv = role.lv; + } +} \ No newline at end of file diff --git a/web-server/app/controller/game.ts b/web-server/app/controller/game.ts index 68e341c33..fd9dcb231 100644 --- a/web-server/app/controller/game.ts +++ b/web-server/app/controller/game.ts @@ -2,6 +2,7 @@ import { STATUS } from '@consts'; import { GameModel } from '@db/Game'; import { Controller } from 'egg'; import { RoleModel } from '@db/Role'; +import { ServerParamWithRole, GroupParam } from '../domain/gameField/serverlist'; export default class GameController extends Controller { @@ -9,26 +10,26 @@ export default class GameController extends Controller { const { ctx } = this; let { serverType, auth, uid } = ctx; - let serverList = []; - let loginServerList = []; + let serverList = new Array(); + let loginServerList = new Array(); let allServers = await GameModel.getServerList(); let roles = await RoleModel.findAllByUid(uid); - console.log(roles.length) for(let server of allServers) { if(auth === 1 || (!auth && server.serverType == serverType)) { - serverList.push(server); + server['serverStr'] = `S${server.id}`; + let curGroup = serverList.find(cur => cur.groupId == server.groupId); + if(!curGroup) { + curGroup = new GroupParam(server); + serverList.push(curGroup); + } + curGroup.pushServer(server); + let role = roles.find(role => role.serverId == server.id); if(!!role) { - let roleInfo = { - roleId: role.roleId, - roleName: role.roleName, - headHid: role.headHid, - sHid: role.sHid, - lv: role.lv - }; - loginServerList.push({...server, ...roleInfo}); + let curLoginInfo = new ServerParamWithRole(role, server); + loginServerList.push(curLoginInfo); } } } diff --git a/web-server/app/middleware/parmsDecode.ts b/web-server/app/middleware/parmsDecode.ts index 3b8eaa215..c593f0021 100644 --- a/web-server/app/middleware/parmsDecode.ts +++ b/web-server/app/middleware/parmsDecode.ts @@ -43,7 +43,7 @@ module.exports = options => { await next(); const resBody = ctx.body; - console.log('return value:', resBody); + console.log('return value:', JSON.stringify(resBody)); if (isJSON(resBody)) { ctx.body = { result: aesEncrypt(JSON.stringify(resBody), ENCRYPT_KEY, ENCRYPT_IV) }; } else {