feat(后台gm): 新增后台宝物查询功能

This commit is contained in:
zhangxk
2023-07-11 11:16:29 +08:00
committed by luying
parent f09ebd56b1
commit cb713320b6
6 changed files with 149 additions and 81 deletions

View File

@@ -13,7 +13,7 @@ import GiftCodeDetail, { GiftCodeDetailModel } from '@db/GiftCodeDetail';
import { deletRole } from '@pubUtils/roleUtil';
import { RScriptRecordModel } from '@db/RScriptRecord';
import { DicWar } from '@pubUtils/dictionary/DicWar';
import { SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam, SearchRoleParam } from '@domain/backEndField/search';
import { SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam, SearchRoleParam, SearchArtifactParam } from '@domain/backEndField/search';
import { CreateGiftCode, UpdateGiftCode } from '@domain/backEndField/params';
import { isNumber } from 'util';
import { GuildModel } from '@db/Guild';
@@ -24,6 +24,7 @@ import { nowSeconds } from '@pubUtils/timeUtil';
import { RoleCeModel, RoleCeType } from '@db/RoleCe';
import { HangUpRecordModel } from '@db/HangUpRecord';
import { UserOrderModel } from '@db/UserOrder';
import { ArtifactModel } from '@db/Artifact';
const Excel = require('exceljs');
// import { resResult } from '@pubUtils/util';
@@ -42,7 +43,7 @@ export default class GMUsers extends Service {
const { ctx } = this;
const users = await UserModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await UserModel.countByCondition( form )
const total = await UserModel.countByCondition(form)
let list = [];
for (let user of users) {
@@ -115,7 +116,7 @@ export default class GMUsers extends Service {
console.log('enter Auth deleteRole');
const ctx = this.ctx;
let result = await deletRole(roleId);
if(!result) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!result) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
return ctx.service.utils.resResult(STATUS.SUCCESS);
}
@@ -125,16 +126,16 @@ export default class GMUsers extends Service {
public async getrolelist(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchRoleParam) {
const { ctx } = this;
if(!!form.channelId) {
if (!!form.channelId) {
let user = await UserModel.findUserByChannelRegex(form.channelId);
if(!user) {
if (!user) {
return ctx.service.utils.resResult(STATUS.SUCCESS, { list: [], total: 0 });
}
form.uid = user.uid;
}
const roles = await RoleModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await RoleModel.countByCondition( form )
const total = await RoleModel.countByCondition(form)
let list = [];
for (let role of roles) {
@@ -157,20 +158,20 @@ export default class GMUsers extends Service {
public async getpaystatic(page: number, pageSize: number, form: { beginTime: number, endTime: number, serverId: number }) {
const { ctx } = this;
let match = { state: 1 };
if(form.beginTime && form.endTime) {
if (form.beginTime && form.endTime) {
match['beginTime'] = { $gt: new Date(form.beginTime) };
match['endTime'] = { $lt: new Date(form.endTime) };
}
if(form.serverId) {
if (form.serverId) {
match['serverId'] = form.serverId;
}
console.log(match)
let list = await UserOrderModel.aggregate([
{ $match: match },
{ $group: { '_id': '$roleId', sum: { '$sum': '$price' }, count: { '$sum': 1 }, max: { $max:'$price'}, lastTime: { $max: '$updatedAt' } } },
{ $group: { '_id': '$roleId', sum: { '$sum': '$price' }, count: { '$sum': 1 }, max: { $max: '$price' }, lastTime: { $max: '$updatedAt' } } },
{ $lookup: { from: 'roles', localField: '_id', foreignField: 'roleId', as: 'role' } },
{ $unwind: '$role' },
{ $project: { _id: 0, roleId: '$_id', roleName: '$role.roleName', guildName: '$role.guildName', serverId: '$role.serverId', lv: '$role.lv', sum: 1, count: 1, max: 1, lastTime: {$dateToString: {format: '%Y-%m-%d %H:%M:%S', date:{$add:['$lastTime',28800000]}}}, env: ctx.app.config.realEnv } },
{ $project: { _id: 0, roleId: '$_id', roleName: '$role.roleName', guildName: '$role.guildName', serverId: '$role.serverId', lv: '$role.lv', sum: 1, count: 1, max: 1, lastTime: { $dateToString: { format: '%Y-%m-%d %H:%M:%S', date: { $add: ['$lastTime', 28800000] } } }, env: ctx.app.config.realEnv } },
{ $sort: { 'sum': -1 } },
{ $skip: (page - 1) * pageSize },
{ $limit: pageSize },
@@ -331,11 +332,11 @@ export default class GMUsers extends Service {
const { ctx } = this;
const heroes = await HeroModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await HeroModel.countByCondition( form )
const total = await HeroModel.countByCondition(form)
let roleMap = new Map<string, RoleCeType>();
for(let { roleId } of heroes) {
if(!roleMap.has(roleId)) {
for (let { roleId } of heroes) {
if (!roleMap.has(roleId)) {
let roleCe = await RoleCeModel.findByRoleId(roleId);
roleMap.set(roleId, roleCe);
}
@@ -343,7 +344,7 @@ export default class GMUsers extends Service {
let list = heroes.map(cur => {
let roleCe = roleMap.get(cur.roleId);
let obj = roleCe?.attributes?.find(ccur => ccur.hid == cur.hid);
return {...cur, calculatedAttr: obj?.attrs||[], env: ctx.app.config.realEnv}
return { ...cur, calculatedAttr: obj?.attrs || [], env: ctx.app.config.realEnv }
})
return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
@@ -479,10 +480,30 @@ export default class GMUsers extends Service {
const { ctx } = this;
const items = await ItemModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await ItemModel.countByCondition( form )
const total = await ItemModel.countByCondition(form)
let list = items.map(cur => {
return {...cur, env: ctx.app.config.realEnv}
return { ...cur, env: ctx.app.config.realEnv }
})
return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
}
public async getArtifactList(form: SearchArtifactParam) {
const { ctx } = this;
let artifact = await ArtifactModel.findByRoleIdAndIsShowDel(form)
if (artifact && artifact.length > 0) {
artifact.forEach((ele) => {
let dicArtifact = gameData.artifact.get(ele.artifactId);
ele.artifactName = dicArtifact.name;
});
}
const total = await ArtifactModel.countByCondition(form)
let list = artifact.map(cur => {
return { ...cur, env: ctx.app.config.realEnv }
})
return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
@@ -493,13 +514,13 @@ export default class GMUsers extends Service {
let redisClient: RedisClient = ctx.app.context.redisClient;
const guilds = await GuildModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await GuildModel.countByCondition( form )
const total = await GuildModel.countByCondition(form)
let list = [];
for(let guild of guilds) {
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 })
list.push({ ...guild, rank: rank == undefined ? '未上榜' : rank + 1, env: ctx.app.config.realEnv })
}
return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
@@ -508,7 +529,7 @@ export default class GMUsers extends Service {
public async getMembersByGuildCode(code: string) {
const { ctx } = this;
let guild = await GuildModel.findByCode(code);
if(!guild) return ctx.service.utils.resResult(STATUS.GUILD_NOT_FOUND);
if (!guild) return ctx.service.utils.resResult(STATUS.GUILD_NOT_FOUND);
let userGuilds = await UserGuildModel.getListByGuild(code);
let list = userGuilds.map(userGuild => ({ ...userGuild, env: ctx.app.config.realEnv }))
@@ -520,16 +541,16 @@ export default class GMUsers extends Service {
const { ctx } = this;
const list = await GiftCodeModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await GiftCodeModel.countByCondition( form )
const total = await GiftCodeModel.countByCondition(form)
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => ({...cur, env: ctx.app.config.realEnv })), total
list: list.map(cur => ({ ...cur, env: ctx.app.config.realEnv })), total
});
}
public async createAndGenerateGift(obj: any, count: number = 1) {
const { ctx } = this;
let params = new CreateGiftCode(obj);
if(!isNumber(count) || !params.checkParams()) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!isNumber(count) || !params.checkParams()) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
let giftCode = await GiftCodeModel.createData(params);
await GiftCodeDetailModel.generateMany(giftCode, count, ctx.user?.uid);
@@ -539,50 +560,50 @@ export default class GMUsers extends Service {
public async updateGiftCode(id: number, obj: any) {
const { ctx } = this;
let params = new UpdateGiftCode(id, obj);
if(!params.checkParams()) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!params.checkParams()) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
const result = await GiftCodeModel.updateData(id, params, ctx.user?.uid);
if(!result) return ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
if (!result) return ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
return ctx.service.utils.resResult(STATUS.SUCCESS);
}
public async generateGiftCode(id: number, count: number) {
const { ctx } = this;
if(!isNumber(id) || !isNumber(count)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!isNumber(id) || !isNumber(count)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
let giftCode = await GiftCodeModel.findByGiftId(id);
if(!giftCode) return ctx.service.utils.resResult(STATUS.DB_DATA_NOT_FOUND);
if (!giftCode) return ctx.service.utils.resResult(STATUS.DB_DATA_NOT_FOUND);
await GiftCodeDetailModel.generateMany(giftCode, count, ctx.user?.uid);
return ctx.service.utils.resResult(STATUS.SUCCESS, giftCode);
}
public async cancelGiftCode(id: number, isEnable: boolean) {
const { ctx } = this;
if(!isNumber(id)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!isNumber(id)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
let giftCode = await GiftCodeModel.findByGiftId(id);
if(!giftCode) return ctx.service.utils.resResult(STATUS.DB_DATA_NOT_FOUND);
if (!giftCode) return ctx.service.utils.resResult(STATUS.DB_DATA_NOT_FOUND);
await GiftCodeModel.updateData(id, { isEnable }, ctx.user?.uid);
return ctx.service.utils.resResult(STATUS.SUCCESS, giftCode);
}
public async getGiftCodeDetailFile(id: number, fileType: string) {
const { ctx } = this;
let giftCode = await GiftCodeModel.findByGiftId(id);
if(!giftCode) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!giftCode) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
let giftCodeDetails = await GiftCodeDetailModel.findAllCodeByGiftId(giftCode.id);
if(fileType == 'txt') {
if (fileType == 'txt') {
let codes: string[] = [];
for(let {code} of giftCodeDetails) {
for (let { code } of giftCodeDetails) {
codes.push(code);
}
console.log(id, codes.join())
ctx.set('Content-Type', 'application/octet-stream');
return Buffer.from(codes.join('\n'));
} else if(fileType == 'xls'){
} else if (fileType == 'xls') {
ctx.set('Content-Type', 'application/vnd.openxmlformats');
return await this.generateExcelFromGiftCode(giftCodeDetails);
}
@@ -596,32 +617,32 @@ export default class GMUsers extends Service {
name: 'table1',
ref: 'A1',
columns: [
{name: '礼包码', filterButton: false},
{ name: '礼包码', filterButton: false },
],
rows,
});
return await workBook.xlsx.writeBuffer();
});
return await workBook.xlsx.writeBuffer();
}
public async getGiftCodeDetailList(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchGiftCodeDetailParam = {}) {
const { ctx } = this;
const list = await GiftCodeDetailModel.findByCondition(page, pageSize, sortField, sortOrder, form);
const total = await GiftCodeDetailModel.countByCondition( form )
const total = await GiftCodeDetailModel.countByCondition(form)
return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => ({...cur, env: ctx.app.config.realEnv })), total
list: list.map(cur => ({ ...cur, env: ctx.app.config.realEnv })), total
});
}
public async setWarRecord(roleId: string, warId: number) {
const { ctx } = this;
if(!isNumber(warId)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if(warId < 104) return ctx.service.utils.resResult(STATUS.WRONG_PARMS, '不可以跳到序章以前')
if (!isNumber(warId)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (warId < 104) return ctx.service.utils.resResult(STATUS.WRONG_PARMS, '不可以跳到序章以前')
let dicWar = gameData.war.get(warId);
if(!dicWar) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!dicWar) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
await this.setWarStarAndScript(roleId, dicWar);
if(dicWar.warType == WAR_TYPE.TOWER) {
if (dicWar.warType == WAR_TYPE.TOWER) {
await this.setTowerWar(roleId, dicWar);
}
return ctx.service.utils.resResult(STATUS.SUCCESS);
@@ -629,8 +650,8 @@ export default class GMUsers extends Service {
private async setTowerWar(roleId: string, dicWar: DicWar) {
let towerLv = 1;
for(let [lv, dicTower] of gameData.tower) {
if(dicTower.warArray.indexOf(dicWar.war_id) != -1) {
for (let [lv, dicTower] of gameData.tower) {
if (dicTower.warArray.indexOf(dicWar.war_id) != -1) {
towerLv = lv; break;
}
}
@@ -643,26 +664,26 @@ export default class GMUsers extends Service {
public async setCreateTime(roleId: string, day: number) {
const { ctx } = this;
if(!isNumber(day) || day < 0) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!isNumber(day) || day < 0) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
let createTime = nowSeconds() - (day - 1) * 86400;
let role = await RoleModel.updateRoleInfo(roleId, { createTime });
if(!role) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
if (!role) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
return ctx.service.utils.resResult(STATUS.SUCCESS);
}
private async setWarStarAndScript(roleId: string, dicWar: DicWar) {
let { warStar } = await RoleModel.findByRoleId(roleId);
let deleteIds: number[] = [], myMaxWarId = 0;
for(let i = 0; i < warStar.length; i++) {
for (let i = 0; i < warStar.length; i++) {
let { id, warType } = warStar[i];
if(warType == dicWar.warType) {
if(id >= dicWar.war_id) {
if (warType == dicWar.warType) {
if (id >= dicWar.war_id) {
deleteIds.push(id);
}
if(id > myMaxWarId) {
if (id > myMaxWarId) {
myMaxWarId = id;
}
}
@@ -670,31 +691,31 @@ export default class GMUsers extends Service {
let newWarStar = warStar.filter(cur => {
return deleteIds.indexOf(cur.id) == -1;
});
if(myMaxWarId < dicWar.war_id) {
for(let id = myMaxWarId + 1; id < dicWar.war_id; id++) {
if (myMaxWarId < dicWar.war_id) {
for (let id = myMaxWarId + 1; id < dicWar.war_id; id++) {
let _dicWar = gameData.war.get(id)
if(_dicWar && _dicWar.warType == dicWar.warType) {
if (_dicWar && _dicWar.warType == dicWar.warType) {
newWarStar.push({ id, warType: _dicWar.warType, star: 0, stars: [] });
}
}
}
let preGkIndex = newWarStar.findIndex(cur => cur.id == dicWar.previousGk);
console.log(dicWar.previousGk)
if(dicWar.previousGk && preGkIndex == -1) {
if (dicWar.previousGk && preGkIndex == -1) {
let _dicWar = gameData.war.get(dicWar.previousGk);
if(_dicWar) {
if (_dicWar) {
newWarStar.push({ id: _dicWar.war_id, warType: _dicWar.warType, star: 0, stars: [] });
}
}
await RScriptRecordModel.deleteByWarType(roleId, dicWar.warType);
let insertParams: DicWar[] = [];
for(let [_, obj] of gameData.war) {
if(dicWar.warType == obj.warType && obj.war_id < dicWar.war_id) {
for (let [_, obj] of gameData.war) {
if (dicWar.warType == obj.warType && obj.war_id < dicWar.war_id) {
insertParams.push(obj);
}
}
if(insertParams.length > 0) {
if (insertParams.length > 0) {
await RScriptRecordModel.insertScripts(roleId, insertParams);
}
let role = await RoleModel.updateRoleInfo(roleId, { warStar: newWarStar });