拍卖行:获取活动参加者的接口

This commit is contained in:
luying
2021-03-22 13:59:46 +08:00
parent abfbe77945
commit 5c585a7676
7 changed files with 89 additions and 14 deletions

View File

@@ -0,0 +1,33 @@
import { Application, ChannelService, BackendSession } from "pinus";
import { GUILD_ACTIVITY_TYPE, STATUS } from "../../../consts";
import { resResult } from "../../../pubUtils/util";
import { getGuildActivityStatus } from "../../../services/guildActivityService";
export default function (app: Application) {
return new CityActivityHandler(app);
}
export class CityActivityHandler {
channelService: ChannelService;
constructor(private app: Application) {
this.channelService = app.get('channelService');
}
private aid = GUILD_ACTIVITY_TYPE.CITY_ACTIVITY; // 蛮夷入侵id
// 进入诸侯混战
async getCityActivity(msg: {}, session: BackendSession) {
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const serverId = session.get('serverId');
const guildCode = session.get('guildCode');
let statusResult = getGuildActivityStatus(this.aid);
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
return resResult(STATUS.SUCCESS, {
...statusResult,
});
}
}

View File

@@ -1,5 +1,5 @@
import { Application, BackendSession, ChannelService, pinus } from "pinus";
import { setMedianCe, getMedianCe, getGuildActivityStatus, getRecordScore, getGuildActivityObj, getGuildActivityRank, sendSingleGuildGateActEndMsg, sendGuildActEndMsg } from "../../../services/guildActivityService";
import { setMedianCe, getMedianCe, getGuildActivityStatus, getRecordScore, getGuildActivityObj, getGuildActivityRank, sendSingleGuildGateActEndMsg, sendGuildActEndMsg, participants } from "../../../services/guildActivityService";
import { resResult } from "../../../pubUtils/util";
import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS } from "../../../consts";
import { GameModel } from "../../../db/Game";
@@ -17,6 +17,7 @@ import { addActive } from "../../../services/guildService";
import { gameData } from "../../../pubUtils/data";
import { getGuildChannelSid } from "../../../services/chatService";
import { guildActivityStart } from "../../../services/timeTaskService";
import { UserGuildModel } from "../../../db/UserGuild";
export default function (app: Application) {
return new GateActivityHandler(app);
@@ -77,6 +78,8 @@ export class GateActivityHandler {
// TODO 测试完成后去掉这条判断
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
let userGuild = await UserGuildModel.getMyGuild(roleId, 'job');
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
@@ -89,7 +92,7 @@ export class GateActivityHandler {
let { code, challengeCnt } = myGuildActivityRec;
// 更新公会参与的玩家
obj.pushMembers(guildCode, serverId, roleId);
obj.pushMembers(guildCode, serverId, roleId, userGuild.job);
// 返回当前军团总军功
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
@@ -281,11 +284,14 @@ export class GateActivityHandler {
return resResult(STATUS.SUCCESS, res)
}
async test(msg: { }, session: BackendSession) {
async test(msg: { sourceType: number, sourceCode: string }, session: BackendSession) {
let guildCode = session.get('guildCode');
let serverId = session.get('serverId');
await GuildActivityCityModel.declare(serverId, 1, guildCode);
// await GuildActivityCityModel.declare(serverId, 1, guildCode);
let {sourceType, sourceCode} = msg;
let result = await participants(guildCode, sourceType, sourceCode);
return result;
// let result = await setMedianCe();
// return resResult(STATUS.SUCCESS, {result});

View File

@@ -9,7 +9,7 @@ import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec";
import { GateMembersRec, GateActivityObject } from "../domain/battleField/guildActivity";
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore } from "./redisService";
import { GuildModel } from "../db/Guild";
import Guild, { GuildModel } from "../db/Guild";
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
import { pinus } from "pinus";
@@ -234,7 +234,7 @@ export async function sendSingleGuildGateActEndMsg(guildCode: string, serverId:
export async function gateActivitySettleReward(guildCode: string, serverId: number) {
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
let { gateHp, members } = obj.getObj(guildCode, serverId);
members = uniq(members);
members = uniq(members, cur => cur.roleId);
let rank = await getMyUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
@@ -245,7 +245,8 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
isSuccess: gateHp > 0,
isCompleted: true,
rank, score: guildScore, remainGateHp: gateHp,
members, memberCnt: members.length,
members, memberCnt: members.length,
auctionType: AUCTION_SOURCE.GATE,
rewards
});
// 结算功勋等奖励
@@ -263,4 +264,17 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
await genAuction(guildCode, AUCTION_SOURCE.GATE, rec.code, serverId, rewards);
obj.delGuildRecord(guildCode, serverId);
}
/**
* 获取活动参加者
* @param guildCode 军团code
* @param sourceType 拍卖类型 AUCTION_SOURCE
* @param sourceCode 活动唯一code
*/
export async function participants(guildCode: string, sourceType: number, sourceCode: string) {
let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode);
if(!rec) return [];
return rec.members||[];
}

View File

@@ -66,6 +66,11 @@ export function guild(session: Session, msg: any, app: Application, cb: (err: Er
'guild.gateActivityHandler.debugEndActivity'
].indexOf(arg.route) !== -1) {
rid = session.get('guildCode');
} else if (['guild.cityActivityHandler.getCityStatus'
].indexOf(arg.route) !== -1) {
if (arg.body.cityId) {
rid = arg.body.cityId;
}
}
}
}

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
@index({ code: 1 })
@index({ serverId: 1, cityId: 1, createdAt: 1 })
export default class GuildActivityCity extends BaseModel {
@prop({ required: true })

View File

@@ -3,6 +3,7 @@ import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typ
import { ItemReward } from '../domain/dbGeneral';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
import { Member } from '../domain/battleField/guildActivity'
@index({ code: 1 })
@@ -20,6 +21,9 @@ export default class GuildActivityRecord extends BaseModel {
@prop({ required: true })
aid: number; // 军团活动id
@prop({ required: true })
auctionType: number; // 转为拍卖行的类型
@prop({ required: true, default: false })
isSuccess: boolean; // 是否胜利
@@ -29,8 +33,8 @@ export default class GuildActivityRecord extends BaseModel {
@prop({ required: true })
rank: number; // 最终排名
@prop({ required: true, type: String, default: [] })
members: string[]; // 参与活动的团员的roleId列表
@prop({ required: true, type: Member, default: [], _id: false })
members: Member[]; // 参与活动的团员的roleId列表
@prop({ required: true, default: 0 })
memberCnt: number; // 参加的团员的数量
@@ -83,6 +87,11 @@ export default class GuildActivityRecord extends BaseModel {
{ $set: update }, { new: true }).lean();
return rec;
}
public static async findBySourceCode(guildCode: string, sourceType: number, sourceCode: string) {
const rec = await GuildActivityRecordModel.findOne({ guildCode, auctionType: sourceType, code: sourceCode }).select('members').lean();
return rec;
}
}
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);

View File

@@ -1,5 +1,6 @@
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
import { SimpleGuildRankParam, SimpleRoleRankParam } from '../rank'
import { prop } from "@typegoose/typegoose";
export class GateMembersRec {
roleId: string;
@@ -14,7 +15,7 @@ export class GateMembersRec {
export class GateActivityObject {
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp
private members: Map<string, Array<string>> = new Map(); // 每个军团参与的成员 guildCode => [roleId]
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [roleId]
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团 server => [guildCode]
@@ -45,14 +46,14 @@ export class GateActivityObject {
return this.guilds;
}
public pushMembers(guildCode: string, serverId: number, roleId: string) {
public pushMembers(guildCode: string, serverId: number, roleId: string, job: number) {
if(this.members.has(guildCode)) {
this.members.get(guildCode).push(roleId);
this.members.get(guildCode).push({ roleId, job });
} else {
let arr = new Array<string>();
arr.push(roleId);
this.members.set(guildCode, [roleId]);
this.members.set(guildCode, [{ roleId, job }]);
}
if(this.guilds.has(serverId)) {
let arr = this.guilds.get(serverId);
@@ -92,4 +93,11 @@ export interface GuildGateRankParam {
myGuildRank: SimpleGuildRankParam,
memberRank: SimpleRoleRankParam[],
myMemberRank?: SimpleRoleRankParam
}
export class Member {
@prop({required: true})
roleId: string; // 玩家id
@prop({required: true})
job: number; // 在军团的职位
}