后台:军团管理
This commit is contained in:
@@ -126,7 +126,7 @@ app.configure(ALL_ENVS, 'guild', function () {
|
||||
})
|
||||
|
||||
app.configure(ALL_ENVS, 'systimer', function () {
|
||||
app.afterStart(async () => {
|
||||
app.event.on('start_all', async (servers) => {
|
||||
await redisService.initAllRank();
|
||||
await timeTaskService.init();
|
||||
redisService.redisSubScribe();
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import { getRoleOnlineInfo } from '../../../services/redisService';
|
||||
import { getRoleOnlineInfo, updateUserInfo } from '../../../services/redisService';
|
||||
import { addItems, createHeroes } from '../../../services/rewardService';
|
||||
import { RewardInter } from '../../../pubUtils/interface';
|
||||
import { getExpByLv } from '../../../pubUtils/data';
|
||||
import { RoleModel } from '../../../db/Role';
|
||||
import { BLOCK_TYPE, ITEM_CHANGE_REASON } from '../../../consts';
|
||||
import { RoleModel, RoleType } from '../../../db/Role';
|
||||
import { BLOCK_TYPE, GUILD_DISMISS_WAY, GUILD_STRUCTURE, ITEM_CHANGE_REASON, REDIS_KEY, TA_EVENT } from '../../../consts';
|
||||
import { GuildFormParam } from '../../../domain/backEndField/params';
|
||||
import { GuildModel, GuildUpdateParam } from '../../../db/Guild';
|
||||
import { getGuildChannelSid } from '../../../services/chatService';
|
||||
import { pushGuildNoticeUpdateMsg } from '../../../services/sysChatService'
|
||||
import { Rank } from '../../../services/rankService';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
||||
import { reportTAEvent } from '../../../services/sdkService';
|
||||
|
||||
let timer: NodeJS.Timer;
|
||||
export default function (app: Application) {
|
||||
return new GmRoleHandler(app);
|
||||
@@ -57,4 +66,94 @@ export class GmRoleHandler {
|
||||
}
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
async updateGuild(msg: GuildFormParam, session: BackendSession ) {
|
||||
const uid = session.get('uid');
|
||||
let params = new GuildFormParam(msg);
|
||||
if(!params.checkParams()) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let guild = await GuildModel.findByCode(params.code);
|
||||
let structure = guild.structure||[];
|
||||
|
||||
let updateParams: GuildUpdateParam = { code: params.code };
|
||||
if(params.name && guild.name != params.name) updateParams.name = params.name;
|
||||
if(params.fund != undefined && guild.fund != params.fund) updateParams.fund = params.fund;
|
||||
if(params.notice && guild.notice != params.notice) updateParams.notice = params.notice;
|
||||
if(params.lv && guild.lv != params.lv) updateParams.lv = params.lv;
|
||||
for(let id = GUILD_STRUCTURE.START; id < GUILD_STRUCTURE.END; id ++) {
|
||||
let curStructure = structure.find(cur => cur.id == id);
|
||||
let lv = params.lv;
|
||||
switch(id) {
|
||||
case GUILD_STRUCTURE.ARMY_CENTER:
|
||||
lv = params.lv; break;
|
||||
case GUILD_STRUCTURE.EQUIP_PRODUCE:
|
||||
lv = params.equipProduce; break;
|
||||
case GUILD_STRUCTURE.BOSS:
|
||||
lv = params.boss; break;
|
||||
case GUILD_STRUCTURE.TRAIN:
|
||||
lv = params.train; break;
|
||||
case GUILD_STRUCTURE.DONATE:
|
||||
lv = params.donate; break;
|
||||
case GUILD_STRUCTURE.WISH_POOL:
|
||||
lv = params.wishPool; break;
|
||||
case GUILD_STRUCTURE.STORE:
|
||||
lv = params.store; break;
|
||||
}
|
||||
if(curStructure) {
|
||||
curStructure.lv = lv;
|
||||
} else {
|
||||
structure.push({ id, lv });
|
||||
}
|
||||
}
|
||||
updateParams.structure = structure;
|
||||
let chatSid = await getGuildChannelSid(params.code);
|
||||
console.log('*****', params.code, updateParams)
|
||||
this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, params.code, updateParams);
|
||||
// 设置玩家名
|
||||
if(updateParams.name != undefined || updateParams.lv != undefined) {
|
||||
let arr = [];
|
||||
if(updateParams.name != undefined) arr.push({ field: 'name', value: updateParams.name });
|
||||
if(updateParams.lv != undefined) arr.push({ field: 'lv', value: updateParams.lv });
|
||||
await updateUserInfo(REDIS_KEY.GUILD_INFO, params.code, arr);
|
||||
}
|
||||
if (updateParams.lv != undefined) {
|
||||
let r = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId: guild.serverId });
|
||||
await r.setRankWithGuildInfo2(guild.code, updateParams.lv, guild.activeWeekly, guild.lvUpdateTime, guild);
|
||||
}
|
||||
|
||||
guild = await GuildModel.updateInfo(params.code, updateParams);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
async dismissGuild(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const { code } = msg;
|
||||
|
||||
let guild = await GuildModel.findByCode(code, null, '+serverId');
|
||||
if(!guild) return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
|
||||
let serverId = guild.serverId;
|
||||
guild = await GuildModel.dismiss(code, serverId);
|
||||
if (!guild) return resResult(STATUS.GUILD_DELETE_ERROR);
|
||||
|
||||
await UserGuildModel.dismiss(code);
|
||||
const { members } = guild;
|
||||
await RoleModel.dissmissGuild(members);
|
||||
await UserGuildApplyModel.deleteApplyByGuild(code);
|
||||
|
||||
await this.app.rpc.connector.connectorRemote.setOtherUserGuildSession.broadcast(members.map(roleId => { return { roleId, userGuild: null } })); // 更新session
|
||||
|
||||
// 删除channel
|
||||
|
||||
let chatSid = await getGuildChannelSid(code);
|
||||
this.app.rpc.chat.guildRemote.dismiss.toServer(chatSid, code);
|
||||
|
||||
let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
||||
await r.removeFromRank({ guildCode: code });
|
||||
let r2 = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId });
|
||||
await r2.removeFromRank({ guildCode: code });
|
||||
let leader = <RoleType>guild.leader;
|
||||
reportTAEvent(leader.roleId, TA_EVENT.GUILD_DISMISS, { name: guild.name, way: GUILD_DISMISS_WAY.BACKEND });
|
||||
|
||||
return resResult(STATUS.SUCCESS, { code, status: guild.status });
|
||||
}
|
||||
}
|
||||
@@ -109,7 +109,7 @@ export class GuildHandler {
|
||||
const serverId = session.get('serverId');
|
||||
const { page = 1, showPeopleMax, name } = msg;
|
||||
|
||||
const guildList = await GuildModel.findByCondition(page, showPeopleMax, name, serverId);
|
||||
const guildList = await GuildModel.getGuildList(page, showPeopleMax, name, serverId);
|
||||
const applyList = await UserGuildApplyModel.findApplyByRole(roleId);
|
||||
|
||||
const { quitGuildTime: quitTime = 0 } = await RoleModel.findByRoleId(roleId);
|
||||
|
||||
@@ -925,6 +925,7 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe
|
||||
await r.setRankWithGuildInfo(guild.code, guild.activeWeekly, guild.activeUpdateTime, guild);
|
||||
}
|
||||
} else if (type == REDIS_KEY.GUILD_LV_RANK) {
|
||||
|
||||
let serverId = args.serverId;
|
||||
let ranks = await GuildModel.getRank(type, serverId);
|
||||
let r = new Rank(type, { serverId });
|
||||
|
||||
@@ -17,7 +17,7 @@ import { getRandSingleEelm } from '../pubUtils/util';
|
||||
*/
|
||||
export async function initAllRank() {
|
||||
console.log('******* initAllRank ******')
|
||||
const serverList = await ServerlistModel?.findByEnv(pinus.app.get('env'))||[];
|
||||
const serverList = await ServerlistModel.findByEnv(pinus.app.get('env'));
|
||||
await delKeys(REDIS_KEY.ONLINE_USERS);
|
||||
await delKeys(REDIS_KEY.USER_INFO);
|
||||
await delKeys(REDIS_KEY.GUILD_INFO);
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'reflect-metadata'
|
||||
import * as mongoose from 'mongoose';
|
||||
import { Application, IBoot } from 'egg';
|
||||
import { loadGmDb } from '@db/index';
|
||||
import { connectRedis } from '@pubUtils/redis';
|
||||
|
||||
export default class FooBoot implements IBoot {
|
||||
private readonly app: Application;
|
||||
@@ -16,6 +17,7 @@ export default class FooBoot implements IBoot {
|
||||
// this is the last chance to modify the config.
|
||||
await this.connectDB(this.app)
|
||||
await this.connectGMDB(this.app);
|
||||
await this.connectRedis(this.app);
|
||||
|
||||
this.app.config.realEnv = this.app.config.env;
|
||||
if(this.app.config.env == 'local') {
|
||||
@@ -78,6 +80,13 @@ export default class FooBoot implements IBoot {
|
||||
}
|
||||
}
|
||||
|
||||
public async connectRedis(app: Application) {
|
||||
const { url, pw } = app.config.redis
|
||||
if (url) {
|
||||
const redisClient = connectRedis(url, pw);
|
||||
app.context.redisClient = redisClient;
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
}
|
||||
|
||||
|
||||
@@ -120,8 +120,14 @@ export default class UserController extends Controller {
|
||||
|
||||
public async getItemList() {
|
||||
const { ctx } = this;
|
||||
const { field, value } = ctx.request.body;
|
||||
ctx.body = await ctx.service.users.getItemList(field, value);
|
||||
const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
|
||||
ctx.body = await ctx.service.users.getItemList(page, pageSize, sortField, sortOrder, form);
|
||||
}
|
||||
|
||||
public async getGuildList() {
|
||||
const { ctx } = this;
|
||||
const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
|
||||
ctx.body = await ctx.service.users.getGuildList(page, pageSize, sortField, sortOrder, form);
|
||||
}
|
||||
|
||||
public async deleteEquip() {
|
||||
|
||||
@@ -41,6 +41,7 @@ export default (app: Application) => {
|
||||
// router.post('/api/users/removeherofromdefense',tokenParser, controller.users.removeHeroFromDefense);
|
||||
router.post('/api/users/getequiplist', tokenParser, controller.users.getEquipList);
|
||||
router.post('/api/users/getitemlist', tokenParser, controller.users.getItemList);
|
||||
router.post('/api/users/getguildlist', controller.users.getGuildList);
|
||||
router.post('/api/users/deleteequip', tokenParser, controller.users.deleteEquip);
|
||||
router.post('/api/users/deleteitem', tokenParser, controller.users.deleteItem);
|
||||
router.post('/api/users/setitemcount', tokenParser, controller.users.setItemCount);
|
||||
|
||||
@@ -6,7 +6,7 @@ import { PvpDefenseModel } from '@db/PvpDefense';
|
||||
|
||||
import { Service } from 'egg';
|
||||
import Counter from '@db/Counter';
|
||||
import { STATUS, HERO_SYSTEM_TYPE } from '@consts';
|
||||
import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, REDIS_KEY } from '@consts';
|
||||
import { ITID, COUNTER } from '@consts';
|
||||
import { ItemModel } from '@db/Item';
|
||||
import { gameData, getExpByLv } from '@pubUtils/data';
|
||||
@@ -21,9 +21,11 @@ import { CreateHeroes, deletRole } from '@pubUtils/roleUtil';
|
||||
import { RScriptRecordModel } from '@db/RScriptRecord';
|
||||
import { DicWar } from '@pubUtils/dictionary/DicWar';
|
||||
import { SkinModel } from '@db/Skin';
|
||||
import { SearchEquipParam, SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam } from '@domain/backEndField/search';
|
||||
import { SearchEquipParam, SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam } from '@domain/backEndField/search';
|
||||
import { CreateGiftCode, UpdateGiftCode } from '@domain/backEndField/params';
|
||||
import { isNumber } from 'util';
|
||||
import { GuildModel } from '@db/Guild';
|
||||
import { RedisClient } from 'redis';
|
||||
|
||||
// import { resResult } from '@pubUtils/util';
|
||||
|
||||
@@ -200,7 +202,7 @@ export default class GMUsers extends Service {
|
||||
weapons.push({ id: eid, hid: ehid });
|
||||
}
|
||||
}
|
||||
await addEquips(roleId, role.roleName, weapons);
|
||||
await addEquips(roleId, role.roleName, weapons, ITEM_CHANGE_REASON.DEBUG);
|
||||
} else {
|
||||
flag = 1, msg = '未找到角色' + roleId;
|
||||
}
|
||||
@@ -241,7 +243,7 @@ export default class GMUsers extends Service {
|
||||
for (let roleId of uids) {
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
if (role) {
|
||||
await addBags(roleId, role.roleName, datas);
|
||||
await addBags(roleId, role.roleName, datas, ITEM_CHANGE_REASON.DEBUG);
|
||||
} else {
|
||||
flag = 1, msg = '未找到角色' + roleId;
|
||||
}
|
||||
@@ -591,17 +593,10 @@ export default class GMUsers extends Service {
|
||||
public async getEquipList(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchEquipParam) {
|
||||
const { ctx } = this;
|
||||
|
||||
const heroes = await EquipModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
const equips = await EquipModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
const total = await EquipModel.countByCondition( form )
|
||||
|
||||
let roleMap = new Map<string, CeAttrDataRole[]>();
|
||||
for(let { roleId } of heroes) {
|
||||
if(!roleMap.has(roleId)) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'attr');
|
||||
roleMap.set(roleId, role.attr);
|
||||
}
|
||||
}
|
||||
let list = heroes.map(cur => {
|
||||
let list = equips.map(cur => {
|
||||
return {...cur, env: ctx.app.config.realEnv}
|
||||
})
|
||||
|
||||
@@ -612,20 +607,37 @@ export default class GMUsers extends Service {
|
||||
/**
|
||||
* 根据类型等搜索道具
|
||||
*/
|
||||
public async getItemList(field: string, value: (string | number)) {
|
||||
public async getItemList(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchItemParam) {
|
||||
const { ctx } = this;
|
||||
|
||||
let items = await ItemModel.findByField(field, value);
|
||||
const items = await ItemModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
const total = await ItemModel.countByCondition( form )
|
||||
|
||||
if (items) {
|
||||
let list = items.map(cur => {
|
||||
return {...cur, env: ctx.app.config.realEnv}
|
||||
})
|
||||
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS, { list: items });
|
||||
} else {
|
||||
console.error('role list not found');
|
||||
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
|
||||
}
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
|
||||
}
|
||||
|
||||
public async getGuildList(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchGuildParam) {
|
||||
const { ctx } = this;
|
||||
let redisClient: RedisClient = ctx.app.context.redisClient;
|
||||
|
||||
const guilds = await GuildModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
const total = await GuildModel.countByCondition( form )
|
||||
|
||||
let list = [];
|
||||
for(let guild of guilds) {
|
||||
let rank = await redisClient.zrevrankAsync(`${REDIS_KEY.GUILD_LV_RANK}:${guild.serverId}`, guild.code);
|
||||
|
||||
list.push({ ...guild, rank: rank == undefined? '未上榜': rank + 1, env: ctx.app.config.realEnv })
|
||||
}
|
||||
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
|
||||
}
|
||||
|
||||
|
||||
public async getGiftCodeList(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchGiftCodeParam = {}) {
|
||||
const { ctx } = this;
|
||||
|
||||
|
||||
@@ -11,6 +11,10 @@ export default (appInfo: EggAppInfo) => {
|
||||
options: { useNewUrlParser: true, useUnifiedTopology: true },
|
||||
};
|
||||
|
||||
config.redis = {
|
||||
url: 'r-8vbl8okinxn1zhkwh2.redis.zhangbei.rds.aliyuncs.com', // 内网
|
||||
pw: 'zyz_alpha_2021'
|
||||
};
|
||||
// the return config will combines to EggAppConfig
|
||||
return {
|
||||
...defaultConfig(appInfo),
|
||||
|
||||
@@ -29,6 +29,10 @@ export default (appInfo: EggAppInfo) => {
|
||||
url: 'mongodb://dbop:zyzGm2021@dds-8vb9964bb4cc7f241.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb9964bb4cc7f242.mongodb.zhangbei.rds.aliyuncs.com:3717/zyzgm?replicaSet=mgset-507933150', // 内网
|
||||
options: { useNewUrlParser: true, useUnifiedTopology: true },
|
||||
};
|
||||
config.redis = {
|
||||
url: 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com', // 内网
|
||||
pw: 'zyz_2020'
|
||||
};
|
||||
|
||||
config.security = {
|
||||
csrf: {
|
||||
|
||||
@@ -10,6 +10,10 @@ export default (appInfo: EggAppInfo) => {
|
||||
url: 'mongodb://dbop:zyzDev2021@dds-8vb5c74ba4263da41.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb5c74ba4263da42.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb5c74ba4263da43.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?readPreference=secondary&replicaSet=mgset-506991391', // 内网
|
||||
options: { useNewUrlParser: true, useUnifiedTopology: true },
|
||||
};
|
||||
config.redis = {
|
||||
url: 'r-8vb418l8kkju9sis8k.redis.zhangbei.rds.aliyuncs.com', // 内网
|
||||
pw: 'zyz_dev_2021'
|
||||
};
|
||||
|
||||
// the return config will combines to EggAppConfig
|
||||
return {
|
||||
|
||||
@@ -10,6 +10,10 @@ export default (appInfo: EggAppInfo) => {
|
||||
url: 'mongodb://root:Bantus123@dds-8vb74337eab84d641.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb74337eab84d642.mongodb.zhangbei.rds.aliyuncs.com:3717/admin?replicaSet=mgset-504694158', // 内网
|
||||
options: { useNewUrlParser: true, useUnifiedTopology: true },
|
||||
};
|
||||
config.redis = {
|
||||
url: 'r-8vbekkbb3z8ru2ckuj.redis.zhangbei.rds.aliyuncs.com', // 内网
|
||||
pw: 'zyz_isbn_2021'
|
||||
};
|
||||
|
||||
// the return config will combines to EggAppConfig
|
||||
return {
|
||||
|
||||
@@ -18,6 +18,10 @@ export default (appInfo: EggAppInfo) => {
|
||||
url: 'mongodb://127.0.0.1:27017/zyzgm', // 内网
|
||||
options: { useNewUrlParser: true, useUnifiedTopology: true },
|
||||
};
|
||||
config.redis = {
|
||||
url: '127.0.0.1', // 内网
|
||||
pw: ''
|
||||
};
|
||||
config.proxy = {};
|
||||
|
||||
// the return config will combines to EggAppConfig
|
||||
|
||||
28
gm-server/config/config.stable.ts
Normal file
28
gm-server/config/config.stable.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';
|
||||
import defaultConfig from './config.default';
|
||||
|
||||
export default (appInfo: EggAppInfo) => {
|
||||
const config = {} as PowerPartial<EggAppConfig>;
|
||||
|
||||
config.mongoose = {
|
||||
url: 'mongodb://dbop:zyzdbopbantu@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-500808098', // 内网
|
||||
options: { useNewUrlParser: true, useUnifiedTopology: true },
|
||||
};
|
||||
config.redis = {
|
||||
url: 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com', // 内网
|
||||
pw: 'zyz_2020'
|
||||
};
|
||||
|
||||
config.xtransit = {
|
||||
server: 'ws://172.26.117.35:9092',
|
||||
appId: 3,
|
||||
appSecret: 'a48ad5ca44e2d02cbd7f4c0326fa3101',
|
||||
error_log: [ '/root/logs/zyz/zyz-web.log', '/root/logs/zyz/common-error.log', '/root/logs/zyz/egg-agent.log' ],
|
||||
};
|
||||
|
||||
// the return config will combines to EggAppConfig
|
||||
return {
|
||||
...defaultConfig(appInfo),
|
||||
...config
|
||||
};
|
||||
};
|
||||
@@ -5,6 +5,7 @@ import { GUILD_STRUCTURE, GUILD_STATUS, GUILD_PER_PAGE, GUILD_SELECT, REDIS_KEY,
|
||||
import { getZeroPoint, getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { reduceCe } from '../pubUtils/util';
|
||||
import { gameData } from '../pubUtils/data';
|
||||
import { SearchGuildParam } from '../domain/backEndField/search';
|
||||
|
||||
class Structure {
|
||||
@prop({ required: true })
|
||||
@@ -132,7 +133,7 @@ export default class Guild extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, showPeopleMax: boolean, name: string, serverId: number) {
|
||||
public static async getGuildList(page: number, showPeopleMax: boolean, name: string, serverId: number) {
|
||||
const condition = { status: GUILD_STATUS.RUNNING, serverId };
|
||||
if(!showPeopleMax) {
|
||||
condition['isMemberMax'] = false;
|
||||
@@ -193,6 +194,7 @@ export default class Guild extends BaseModel {
|
||||
|
||||
public static async dismiss(code: string, serverId: number) {
|
||||
const result: GuildType = await GuildModel.findOneAndUpdate({ code, status: GUILD_STATUS.RUNNING, serverId }, { status: GUILD_STATUS.DISMISSED }, { new: true })
|
||||
.populate('leader', {roleId: 1, _id: 0}, 'Role')
|
||||
.select('+members').lean();
|
||||
return result;
|
||||
}
|
||||
@@ -277,6 +279,41 @@ export default class Guild extends BaseModel {
|
||||
const role: RoleType = await GuildModel.findOneAndUpdate({ code, serverId }, { $set: { sdkMark: true } }, { new: true }).select(select).lean({ getters, virtuals: true });
|
||||
return role;
|
||||
}
|
||||
|
||||
|
||||
private static getSearchObj(form: SearchGuildParam) {
|
||||
let searchObj = {};
|
||||
if (form.serverId) searchObj['serverId'] = form.serverId;
|
||||
if (form.name) searchObj['name'] = { $regex: new RegExp(form.name.toString(), 'i') };
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchGuildParam = {}) {
|
||||
|
||||
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: GuildType[] = await GuildModel
|
||||
.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort)
|
||||
.select('-_id -__v -createdAt -updatedAt +serverId')
|
||||
.populate('leader', { roleId: 1, roleName: 1, _id: 0 }, 'Role')
|
||||
.lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: SearchGuildParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await GuildModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GuildModel = getModelForClass(Guild);
|
||||
|
||||
@@ -2,6 +2,7 @@ import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
import { findIndex } from 'underscore';
|
||||
import { BAG } from '../pubUtils/dicParam';
|
||||
import { SearchItemParam } from '../domain/backEndField/search';
|
||||
// const Transaction = require("mongoose-transactions");
|
||||
@index({ roleId: 1, id: 1 })
|
||||
@index({ seqId: 1 })
|
||||
@@ -101,18 +102,35 @@ export default class Item extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByField(field: string, value?: number|string, lean = true) {
|
||||
private static getSearchObj(form: SearchItemParam) {
|
||||
let searchObj = {};
|
||||
if(field != 'all') {
|
||||
if(field == 'roleName') {
|
||||
searchObj['roleName'] = { $regex: new RegExp(value.toString(), 'i') }
|
||||
} else {
|
||||
searchObj[field] = value;
|
||||
if (form.roleId) searchObj['roleId'] = form.roleId;
|
||||
if (form.roleName) searchObj['roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
|
||||
if (form.id) searchObj['id'] = form.id;
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchItemParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
let sort = {};
|
||||
if (sortField && sortOrder) {
|
||||
if (sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
//.select('uid tel username')
|
||||
const user: ItemType[] = await ItemModel.find(searchObj).lean(lean);
|
||||
return user;
|
||||
const result: ItemType[] = await ItemModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).select('-_id -__v -createdAt -updatedAt').lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: SearchItemParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await ItemModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -225,4 +225,41 @@ export class UpdateGiftCode {
|
||||
if(!isNumber(this.codeLen) || this.codeLen <= 0) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export class GuildFormParam {
|
||||
code: string;
|
||||
name: string;
|
||||
notice: string;
|
||||
fund: number;
|
||||
lv: number;
|
||||
equipProduce: number;
|
||||
boss: number;
|
||||
train: number;
|
||||
wishPool: number;
|
||||
store: number;
|
||||
donate: number;
|
||||
|
||||
constructor(obj?: any) {
|
||||
if(obj) {
|
||||
for(let key in obj) {
|
||||
this[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkParams() {
|
||||
if(!this.code || !isString(this.code)) return false;
|
||||
if(this.name && !isString(this.name)) return false;
|
||||
if(this.notice && !isString(this.notice)) return false;
|
||||
if(this.fund && !isNumber(this.fund)) return false;
|
||||
if(this.lv && !isNumber(this.lv)) return false;
|
||||
if(this.equipProduce && !isNumber(this.equipProduce)) return false;
|
||||
if(this.boss && !isNumber(this.boss)) return false;
|
||||
if(this.train && !isNumber(this.train)) return false;
|
||||
if(this.wishPool && !isNumber(this.wishPool)) return false;
|
||||
if(this.store && !isNumber(this.store)) return false;
|
||||
if(this.donate && !isNumber(this.donate)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,17 @@ export interface SearchEquipParam {
|
||||
id?: number;
|
||||
}
|
||||
|
||||
export interface SearchItemParam {
|
||||
roleId?: string;
|
||||
roleName?: string;
|
||||
id?: number;
|
||||
}
|
||||
|
||||
export interface SearchGuildParam {
|
||||
serverId?: number;
|
||||
name?: string;
|
||||
}
|
||||
|
||||
export interface SearchMailParam {
|
||||
createTimeStart?: number;
|
||||
createTimeEnd?: number;
|
||||
|
||||
Reference in New Issue
Block a user