后台:道具获取

This commit is contained in:
luying
2021-11-26 14:54:51 +08:00
parent e7566b8af5
commit 4d6b87ce97
18 changed files with 149 additions and 148 deletions

View File

@@ -68,6 +68,7 @@ app.configure(function () {
console.log('serverName:', app.get('serverName'))
initMongodb(app);
initGmMongodb(app);
initRedis(app);
setupRoutes(app);
setupFilters(app);
@@ -136,7 +137,14 @@ app.configure(ALL_ENVS, 'chat', function() {
app.event.on('start_all', () => {
getTire();
});
})
});
app.configure(ALL_ENVS, 'activity', function () {
app.event.on('start_all', () => {
app.rpc.activity.activityRemote.loadActivities.toServer(app.getServerId());
});
});
function errorHandler(err: Error, msg: any, resp: any,
session: FrontendOrBackendSession, cb: HandlerCallback) {
@@ -167,11 +175,13 @@ async function initMongodb(app: _pinus.Application) {
console.log('mongodb connect suc');
}
});
let gmconnect = await mongoose.createConnection(app.get('database').gmmongo, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false });
loadGmDb(gmconnect);
}
async function initGmMongodb(app: _pinus.Application) {
let gmconnect = await mongoose.createConnection(app.get('database').gmmongo, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false });
loadGmDb(gmconnect);
console.log('mongoGmDb connect suc')
}
function initRedis(app: _pinus.Application) {
const redisClient = connectRedis(app.get('database').redis, app.get('database').redispw);
app.set('redis', redisClient);

View File

@@ -14,7 +14,6 @@ export class ActivityRemote {
constructor(private app: Application) {
this.app = app;
this.channelService = app.get('channelService');
this.loadActivities();
}
private channelService: ChannelService;
@@ -30,7 +29,7 @@ export class ActivityRemote {
reloadResources();
}
private async loadActivities() {
public async loadActivities() {
let servers = await ServerlistModel.getAllServerList();
for(let { serverId, activityGroupId } of servers) {
for(let groupId of activityGroupId) {
@@ -52,6 +51,7 @@ export class ActivityRemote {
this.app.set('activityByServer', this.activityByServer);
this.app.set('activityByType', this.activityByType);
this.app.set('activities', this.activities);
console.log('****** loadActivities')
}
private setActivityTypeAndServer() {

View File

@@ -746,7 +746,7 @@ export class ComBattleHandler {
if(r != roleId) roleIdList.push(r);
}
}
const roles = await RoleModel.findRoleByField('roleId', roleIdList, ROLE_SELECT.SHOW_SIMPLE, true);
const roles = await RoleModel.findByRoleIds(roleIdList, ROLE_SELECT.SHOW_SIMPLE, true);
let result = new Array<FriendParams>();
for(let role of roles) {
if(role.quitTime == role.loginTime) {

View File

@@ -31,58 +31,6 @@ export class GmHandler {
constructor(private app: Application) {
}
async pushEvent(msg: { uid: number, serverId: number }, session: BackendSession) {
let { uid, serverId } = msg;
let role = await RoleModel.findByUid(uid, serverId);
if (!role) return resResult(STATUS.GM_ROLE_NOT_FOUND);
let { roleId, roleName, eventStatus } = role;
let channelService = this.app.get('channelService');
let event = await getEvent(eventStatus, roleId, roleName);
let hisOnlineInfo = await getRoleOnlineInfo(role.roleId);
if (hisOnlineInfo.isOnline) {
channelService.pushMessageByUids('onSpecialEvent', resResult(STATUS.SUCCESS, { event }), [{
uid: roleId,
sid: hisOnlineInfo.sid
}]);
}
return resResult(STATUS.SUCCESS, { list: event });
}
async clearEvent(msg: {}, session: BackendSession) {
let roleId = session.get('roleId');
await EventRecordModel.deleteAccount(roleId);
return resResult(STATUS.SUCCESS);
}
async pushMessage(msg: { uid: number, serverId: number, eventName: string, message: string }, session: BackendSession) {
let { uid, serverId, eventName, message } = msg;
let content = {};
try {
content = JSON.parse(message);
} catch (e) {
return resResult(STATUS.GM_JSON_FORMAT_ERR);
}
// console.log(uid, serverId)
let role = await RoleModel.findByUid(uid, serverId);
if (!role) return resResult(STATUS.GM_ROLE_NOT_FOUND);
let { roleId } = role;
let hisOnlineInfo = await getRoleOnlineInfo(role.roleId);
if (hisOnlineInfo.isOnline) {
let sid = hisOnlineInfo.sid;
if (!!sid) {//下发邮件,对应前端红点提示
pinus.app.channelService.pushMessageByUids(eventName, resResult(STATUS.SUCCESS, content), [{ uid: roleId, sid }]);
}
}
return resResult(STATUS.SUCCESS, { msg: content });
}
//对接gm后台下发邮件
async addMail(msg: { endTime: number, sendName: string, content: string, goods: RewardInter[], sendTime: number }) {
let { endTime, content, sendName, sendTime, goods } = msg;

View File

@@ -0,0 +1,45 @@
import { Application, BackendSession, pinus } from 'pinus';
import { resResult } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode';
import { getRoleOnlineInfo } from '../../../services/redisService';
import { addItems, createHeroes } from '../../../services/rewardService';
import { RewardInter } from '../../../pubUtils/interface';
import { getExpByLv } from '../../../pubUtils/data';
import { RoleModel } from '../../../db/Role';
let timer: NodeJS.Timer;
export default function (app: Application) {
return new GmRoleHandler(app);
}
export class GmRoleHandler {
constructor(private app: Application) {
}
async addItems(msg: { roleId: string, roleName: string, serverId: number, values: { reward: RewardInter[], heroes: number[], lv: number }}, session: BackendSession) {
let { roleId, roleName, serverId, values } = msg;
let { reward, heroes, lv } = values;
if (reward == undefined && heroes == undefined && lv == undefined) {
return resResult(STATUS.WRONG_PARMS);
}
let connect = await getRoleOnlineInfo(roleId);
let sid = connect.isOnline?connect.sid: null;
if(reward &&reward.length > 0) {
await addItems(roleId, roleName, sid, values.reward);
}
if(heroes && heroes.length > 0) {
await createHeroes(roleId, roleName, sid, serverId, heroes.map(hid => { return { hid, count: 1 }}))
}
if(lv && lv > 0) {
let exp = getExpByLv(lv)?.sum||0;
await RoleModel.updateRoleInfo(roleId, { lv, exp })
let uids = [{ uid: roleId, sid }];
pinus.app.get('channelService').pushMessageByUids('onPlayerExpChange', resResult(STATUS.SUCCESS, {
isLvUp: false, lv, exp
}), uids);
}
return resResult(STATUS.SUCCESS);
}
}

View File

@@ -418,7 +418,7 @@ export class GuildHandler {
const guild = await GuildModel.findByCode(code, serverId, GUILD_SELECT.INVITED_MEMBER);
if (guild.isMemberMax) return resResult(STATUS.GUILD_MEMBER_MAX);
const roleList = await RoleModel.findRoleByField('roleId', roleIds);
const roleList = await RoleModel.findByRoleIds(roleIds);
let result = new Array<string>();
let uids = [];
for (let role of roleList) {

View File

@@ -31,6 +31,7 @@ import { getRandSingleEelm } from '../../pubUtils/util';
import { SignInData } from '../../domain/activityField/signInField';
import { ActivityGroupModel } from '../../db/ActivityGroup';
import { ActivityGroupTypeModel } from '../../db/ActivityGroupType';
import { ServerlistModel } from '../../db/Serverlist';
/**
* 获取活动数据

View File

@@ -297,7 +297,7 @@ export async function recentPrivateChatInfos(roleId: string, roleName: string) {
.splice(CHAT_SYSTEM.RECENT_PRIVATE_CHATS_CNT);
if (!recentPrivateChats || !recentPrivateChats.length) return null;
const roleInfos = await RoleModel.findRoleByField('roleId', recentPrivateChats.map(chat => { return chat.targetRoleId }));
const roleInfos = await RoleModel.findByRoleIds(recentPrivateChats.map(chat => { return chat.targetRoleId }));
const chatInfos = recentPrivateChats.map( chat => {
for (let { roleId: targetRoleId, quitTime, loginTime, roleName: targetRoleName, title, guildName, head, frame, spine, lv } of roleInfos) {
if (targetRoleId === chat.targetRoleId) {

View File

@@ -84,7 +84,7 @@ export async function getSimpleRoleInfo(roleId: string) {
export async function getSimpleRoleInfos(roleIds: string[]) {
if (!roleIds || !roleIds.length) return null;
let roles = await RoleModel.findRoleByField('roleId', roleIds, ROLE_SELECT.SHOW_SIMPLE, true);
let roles = await RoleModel.findByRoleIds(roleIds, ROLE_SELECT.SHOW_SIMPLE, true);
return roles;
}

View File

@@ -51,7 +51,7 @@ export async function init() {
await setPvpSeason();
// 周功勋结算任务
guildWeeklyJobId = scheduleJob('settleGuildWeekly', '0 0 0 * * 1', settleGuildWeekly);
guildWeeklyJobId = scheduleJob('settleGuildWeekly', '0 0 ? * * 1', settleGuildWeekly);
// 每5分钟汇报在线玩家在线情况
scheduleJob('reportOnline', '0 0/5 * * * *', reportOnlineSchedule);

View File

@@ -15,11 +15,11 @@ export default class UserController extends Controller {
ctx.body = await ctx.service.users.createRole(uid, serverId, roleName);
}
public async addAuth() {
const { ctx } = this;
const { uid, auth } = ctx.request.body;
ctx.body = await ctx.service.users.addAuth(uid, auth);
}
// public async addAuth() {
// const { ctx } = this;
// const { uid, auth } = ctx.request.body;
// ctx.body = await ctx.service.users.addAuth(uid, auth);
// }
public async fixSms() {
const { ctx } = this;
@@ -35,8 +35,8 @@ export default class UserController extends Controller {
public async getrolelist() {
const { ctx } = this;
const { field, value } = ctx.request.body;
ctx.body = await ctx.service.users.getrolelist(field, value);
const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
ctx.body = await ctx.service.users.getrolelist(page, pageSize, sortField, sortOrder, form);
}
public async createRoleData() {

View File

@@ -28,8 +28,8 @@ export default (app: Application) => {
// router.post('/api/users/createrole',tokenParser, controller.users.createRole);
// router.post('/api/users/addauth', tokenParser, controller.users.addAuth);
router.post('/api/users/fixsms', tokenParser, controller.users.fixSms);
router.post('/api/users/deleterole',tokenParser, controller.users.deleteRole);
router.post('/api/users/getrolelist',tokenParser, controller.users.getrolelist);
router.post('/api/users/deleterole',tokenParser, controller.users.deleteRole);
router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData);
router.post('/api/users/getpvpdefense',tokenParser, controller.users.getPveDefense);
router.post('/api/users/getherolist',tokenParser, controller.users.getHeroList);

View File

@@ -69,18 +69,18 @@ export default class GMUsers extends Service {
}
}
public async addAuth(uid: number, auth: number) {
console.log('enter Auth addAuth');
const ctx = this.ctx;
// public async addAuth(uid: number, auth: number) {
// console.log('enter Auth addAuth');
// const ctx = this.ctx;
const user = await UserModel.addAuth(uid, auth);
if (user) {
return ctx.service.utils.resResult(STATUS.SUCCESS);
} else {
console.error('add auth error');
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
}
}
// const user = await UserModel.addAuth(uid, auth);
// if (user) {
// return ctx.service.utils.resResult(STATUS.SUCCESS);
// } else {
// console.error('add auth error');
// return ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
// }
// }
public checkTelNo(telNo: string) {
if (!isString(telNo)) {
@@ -121,60 +121,27 @@ export default class GMUsers extends Service {
/**
* 根据类型等搜索玩家
*/
public async getrolelist(field: string = 'all', value: string = '') {
public async getrolelist(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchUserParam) {
const { ctx } = this;
let arr = new Array(), flag = 0;
let valueArr = value.split(',');
if (value == '') field = 'all';
for (let i of valueArr) {
if (field == 'uid') {
let d = parseInt(i);
if (isNaN(d)) {
flag = 1; break;
} else {
arr.push(d);
}
field = 'userInfo.uid';
} else if (field == 'roleName') {
arr.push(i);
} else if (field == 'tel') {
arr.push(i);
field = 'userInfo.tel';
} else if (field == 'all') {
break;
} else {
flag = 1; break;
}
const roles = await RoleModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await RoleModel.countByCondition( form )
let list = [];
for (let role of roles) {
let heroCount = await HeroModel.count({ roleId: role.roleId }).lean();
let equipCount = await EquipModel.count({ roleId: role.roleId }).lean();
let itemCount = await ItemModel.count({ roleId: role.roleId }).lean();
let { roleId, roleName, serverId, lv, vLv, gold, coin, ce } = role;
let { uid, tel } = role.userInfo;
list.push({
key: roleId, roleId, roleName, serverId, lv, vLv, uid, tel, heroCount, equipCount, itemCount, gold, coin, ce,
env: ctx.app.config.realEnv
});
}
if (flag) {
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
}
let roles = await RoleModel.findRoleByField(field, valueArr);
if (roles) {
let result = new Array();
for (let role of roles) {
let heroCount = await HeroModel.count({ roleId: role.roleId }).lean();
let equipCount = await EquipModel.count({ roleId: role.roleId }).lean();
let itemCount = await ItemModel.count({ roleId: role.roleId }).lean();
let defense = await PvpDefenseModel.findByRoleId(role.roleId);
let { roleId, roleName, serverId, lv, vLv, gold, coin } = role;
let { uid, tel } = role.userInfo;
result.push({
key: roleId, roleId, roleName, serverId, lv, vLv, uid, tel, heroCount, equipCount, itemCount, gold, coin,
hasDefense: defense ? '是' : '否', defCe: 0
});
}
return ctx.service.utils.resResult(STATUS.SUCCESS, { list: result });
} 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 createHero(uids: Array<string>, _hid: string, _hlv: string) {

View File

@@ -7,6 +7,7 @@ import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
import { Figure } from '../domain/dbGeneral';
import * as dicParam from '../pubUtils/dicParam';
import Hero from './Hero';
import { SearchRoleParam } from '../domain/backEndField/search';
type CeAttrUpdate = Partial<CeAttrDataRole>;
// role表属性格式
@@ -360,6 +361,11 @@ export default class Role extends BaseModel {
return role;
}
public static async findByRoleIds(roleIds: string[], select?: string, getters = false, virtuals = true) {
const role: RoleType[] = await RoleModel.find({ roleId: { $in: roleIds } }).select(select).lean({ getters, virtuals });
return role;
}
public static async createRole(uid: number, serverId: number, roleInfo: { roleId: string; roleName: string; seqId: number; code: string, lv?: number, exp?: number }, lean = true) {
const user = await User.findUserByUid(uid);
if (!user) return null;
@@ -370,19 +376,6 @@ export default class Role extends BaseModel {
return role;
}
public static async findRoleByField(field: string, value?: Array<number | string>, select?: string, getters = false) {
let searchObj = {};
if (field != 'all') {
searchObj[field] = {
$in: value
};
}
const user: RoleType[] = await RoleModel.find(searchObj).select(select).lean({ getters, virtuals: true });
return user;
}
public static async setEventStatus(roleId: string, eventStatus: number, lean = true) {
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { eventStatus }, { new: true }).lean(lean);
return role;
@@ -742,6 +735,38 @@ export default class Role extends BaseModel {
return role;
}
private static getSearchObj(form: SearchRoleParam) {
let searchObj = {};
if(form.uid) searchObj['userInfo.uid'] = form.uid;
if(form.roleId) searchObj['roleId'] = form.roleId;
if(form.roleName) searchObj['roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
return searchObj
}
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchRoleParam = {}) {
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: RoleType[] = await RoleModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
return result;
}
public static async countByCondition(form: SearchRoleParam = {}) {
let searchObj = this.getSearchObj(form);
const result = await RoleModel.count(searchObj);
return result;
}
}
export const RoleModel = getModelForClass(Role);

View File

@@ -4,7 +4,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { genCode, aesEncryptcfb, aesDecryptcfb } from '../pubUtils/util';
import { LoginValidateData37, ChannelInfo } from '../domain/sdk';
import { SearchUserParam } from '@domain/backEndField/search';
import { SearchUserParam } from '../domain/backEndField/search';
const bcrypt = require('bcrypt');
const SALT_WORK_FACTOR = 5

View File

@@ -2,4 +2,10 @@ export interface SearchUserParam {
uid?: number;
tel?: string;
channelType?: string;
}
export interface SearchRoleParam {
uid?: number; // 玩家id
roleId?: string; // 角色id
roleName?: string; // 昵称
}

View File

@@ -7,7 +7,7 @@ module.exports = () => {
if (serverId) {
let maintenServers = await ctx.service.game.getServerMainten();
if (maintenServers.indexOf(serverId) != -1) {
let isWhiteList = await checkWhiteList(ctx.tel, ctx.request.ip, ctx.auth);
let isWhiteList = await checkWhiteList(ctx.tel, ctx.request.ip);
if (isWhiteList) {
await next();
} else {

View File

@@ -16,7 +16,6 @@ module.exports = () => {
}
ctx.uid = user.uid;
ctx.serverType = ctx.request.body.serverType||user.serverType;
ctx.auth = user.auth;
ctx.userCode = user.userCode;
ctx.pkgName = user.pkgName;
ctx.tel = user.tel;