diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index 1d741d077..3a58476bd 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -277,6 +277,15 @@ export class ChatRemote { return true; } + public async sendAuctionUpdate(serverId: number, params: { lots: LotType[] }) { + let roomId = groupRoomId(CHANNEL_PREFIX.WORLD, serverId); + let channel = this.channelService.getChannel(roomId, false); + if(!channel) return false; + + channel.pushMessage('onAuctionUpdate', resResult(STATUS.SUCCESS, params)); + return true; + } + public async checkFilterWords(word: string) { return await _checkFilterWords(word); } diff --git a/game-server/app/servers/chat/remote/guildRemote.ts b/game-server/app/servers/chat/remote/guildRemote.ts index 0d22c54e6..325b2d7fe 100644 --- a/game-server/app/servers/chat/remote/guildRemote.ts +++ b/game-server/app/servers/chat/remote/guildRemote.ts @@ -8,6 +8,8 @@ import { leaveGuildChannel, groupRoomId } from '../../../services/chatService'; import { GuildRankParams, WoodenHorse, Event } from '../../../domain/battleField/guildActivity'; import { MailParam } from '../../../domain/roleField/mail'; import { pick } from 'underscore'; +import { LotType } from '../../../db/Lot'; +import { DividendType } from '../../../db/Dividend'; export default function (app: Application) { new HandlerService(app, {}); @@ -40,6 +42,7 @@ export class GuildRemote { private GUILD_POP_UP_ACTIVITY = 'onActivityUpdate'; /// 向军团成员发送弹窗礼包 private GUILD_TRAIN_RESET = 'onGuildTainReset'; // 试炼场重置 private GUILD_BOSS_ENCOURAGE = 'onGuildBossEncourage'; // 鼓舞 + private AUCTION_UPDATE = 'onAuctionUpdate'; // 拍卖行更新 /** * 封装,军团相关channel名: 'guild'+guildCode @@ -315,4 +318,8 @@ export class GuildRemote { public async pushEncourage(guildCode: string, param: {encourageCnt: number; encourageMax: number; myEncourageCnt: number;}) { this.pushMessage(guildCode, this.GUILD_BOSS_ENCOURAGE, param); } + + public async pushAuctionUpdate(guildCode: string, param: { lots: LotType[]; dividends: DividendType[] }) { + this.pushMessage(guildCode, this.AUCTION_UPDATE, param); + } } \ No newline at end of file diff --git a/game-server/app/services/auctionService.ts b/game-server/app/services/auctionService.ts index ff4dfd952..75f62a1f9 100644 --- a/game-server/app/services/auctionService.ts +++ b/game-server/app/services/auctionService.ts @@ -12,7 +12,7 @@ import { participants } from './guildActivityService'; import { Member } from '../domain/battleField/guildActivity'; import * as dicParam from '../pubUtils/dicParam'; import { RewardInter } from '../pubUtils/interface'; -import { getGuildAuctionChannelSid, getWorldAuctionChannelSid, pushCurrentTime } from './chatService'; +import { getGuildAuctionChannelSid, getGuildChannelSid, getWorldAuctionChannelSid, pushCurrentTime } from './chatService'; // ! 获取底价,假数据 export function getBasePrice(gid: number, count: number) { @@ -221,6 +221,7 @@ export async function genAuction(guildCode: string, sourceType: number, sourceCo }), }; const dividend = await DividendModel.createDividend(dividendData); + await pushAuctionUpdate(lots, [dividend]); return { lots, dividend }; } @@ -276,8 +277,8 @@ export async function startGuildAuction() { try { console.log('schedule startGuildAuction called:', new Date()); const begin = await todayGuildBegin(); - await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.GUILD); - await DividendModel.updateDividendsStatus(begin, DIVIDEND_STATUS.ING); + let lots = await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.GUILD); + let dividends = await DividendModel.updateDividendsStatus(begin, DIVIDEND_STATUS.ING); if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME == 1) { let day = getCurDay(); @@ -286,6 +287,8 @@ export async function startGuildAuction() { await pushCurrentTime(time); } + await pushAuctionUpdate(lots, dividends); + return true; } catch (e) { console.error('startGuildAuction err: ', e); @@ -312,8 +315,8 @@ export async function startWorldAuction() { const begin = await todayGuildBegin(); let lots = await LotModel.setLotSoldByBegin(begin); // 正在竞拍的拍品 await sendLotsRewardToMlail(lots); - await LotModel.updateUnSoldLotsStageByBegin(begin, AUCTION_STAGE.WORLD); - await DividendModel.updateDividendsStatus(begin, DIVIDEND_STATUS.END); + lots = await LotModel.updateUnSoldLotsStageByBegin(begin, AUCTION_STAGE.WORLD); + let dividends = await DividendModel.updateDividendsStatus(begin, DIVIDEND_STATUS.END); if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME == 1) { let day = getCurDay(); @@ -321,6 +324,7 @@ export async function startWorldAuction() { pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(time); await pushCurrentTime(time); } + await pushAuctionUpdate(lots, dividends); return true; } catch (e) { console.error('startWorldAuction err: ', e); @@ -334,7 +338,8 @@ export async function stopAuction() { const begin = await todayGuildBegin(); let lots = await LotModel.setLotSoldByBegin(begin); // 正在竞拍的拍品 await sendLotsRewardToMlail(lots); - await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.END); + lots = await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.END); + let dividends = await DividendModel.findDividendsByBegin(begin); if(dicParam.SERVER_DEBUG_MODE.CURRENT_TIME == 1) { let day = getCurDay(); @@ -342,6 +347,7 @@ export async function stopAuction() { pinus.app.rpc.guild.guildActivityRemote.setCurrentTime.broadcast(time); await pushCurrentTime(time); } + await pushAuctionUpdate(lots, dividends); return true; } catch (e) { console.error('stopAuction err: ', e); @@ -449,4 +455,39 @@ export async function pushAuctionOver(lot: LotType) { let chatSid = await getWorldAuctionChannelSid(lot.serverId); pinus.app.rpc.chat.chatRemote.sendWorldAuction.toServer(chatSid, lot.serverId, lot); } +} + +export async function pushAuctionUpdate(lots: LotType[], dividends: DividendType[]) { + let lotsResult = new Map(), dividendsResult = new Map(); + let serverLotsResult = new Map(); + for(let lot of lots) { + if (lot.auctionStage === AUCTION_STAGE.DEFAULT || lot.auctionStage === AUCTION_STAGE.GUILD) { + if(!lotsResult.has(lot.guildCode)) { + lotsResult.set(lot.guildCode, []); + } + lotsResult.get(lot.guildCode).push(lot); + } else if (lot.auctionStage === AUCTION_STAGE.WORLD || lot.auctionStage === AUCTION_STAGE.END ) { + if(!serverLotsResult.has(lot.serverId)) { + serverLotsResult.set(lot.serverId, []); + } + serverLotsResult.get(lot.serverId).push(lot); + } + } + for(let dividend of dividends) { + if(!dividendsResult.has(dividend.guildCode)) { + dividendsResult.set(dividend.guildCode, []); + } + dividendsResult.get(dividend.guildCode).push(dividend); + } + + for(let [guildCode, lots] of lotsResult) { + let dividends = dividendsResult.get(guildCode)||[]; + let channelSid = await getGuildChannelSid(guildCode); + pinus.app.rpc.chat.guildRemote.pushAuctionUpdate.toServer(channelSid, guildCode, { lots, dividends }); + } + + for(let [serverId, lots] of serverLotsResult) { + let channelSid = await getWorldAuctionChannelSid(serverId); + pinus.app.rpc.chat.chatRemote.sendAuctionUpdate.toServer(channelSid, serverId, { lots }); + } } \ No newline at end of file diff --git a/game-server/app/services/sdkService.ts b/game-server/app/services/sdkService.ts index c9ce0ee8c..3ca5db439 100644 --- a/game-server/app/services/sdkService.ts +++ b/game-server/app/services/sdkService.ts @@ -85,6 +85,7 @@ export async function checkGuildName(guildCode: string, serverId: number, name: } } if(notice != undefined) { + if(notice == '') notice = ' '; let body = new CheckGuild37Params(guildCode, serverId, 2, notice); let result = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY); if(result == STATUS.REQUEST_TIME_OUT.code) { // 超时 diff --git a/shared/db/Api.ts b/shared/db/Api.ts index ea2e6b35a..4e1918507 100644 --- a/shared/db/Api.ts +++ b/shared/db/Api.ts @@ -38,7 +38,7 @@ export default class Api extends BaseModel { } -export let ApiModel: ReturnModelType; +export let ApiModel: ReturnModelType = getModelForClass(Api); export function loadApiModel(connect: mongoose.Connection) { ApiModel = getModelForClass(Api, { existingConnection: connect diff --git a/shared/db/Dividend.ts b/shared/db/Dividend.ts index 8369539d4..5e7822215 100644 --- a/shared/db/Dividend.ts +++ b/shared/db/Dividend.ts @@ -93,6 +93,8 @@ export default class Dividend extends BaseModel { public static async updateDividendsStatus(begin: Date, status: number) { await DividendModel.updateMany({ begin }, { status }); + const result: DividendType[] = await DividendModel.find({ begin }).select('-_id -__v').lean(); + return result } } diff --git a/shared/db/GMGroup.ts b/shared/db/GMGroup.ts index 5fd24c9db..623175914 100644 --- a/shared/db/GMGroup.ts +++ b/shared/db/GMGroup.ts @@ -74,7 +74,7 @@ export default class GMGroup extends BaseModel { } -export let GMGroupModel: ReturnModelType; +export let GMGroupModel: ReturnModelType = getModelForClass(GMGroup); export function loadGMGroupModel(connect: mongoose.Connection) { GMGroupModel = getModelForClass(GMGroup, { existingConnection: connect diff --git a/shared/db/GMRecord.ts b/shared/db/GMRecord.ts index 39e0cd9d6..ae940f36a 100644 --- a/shared/db/GMRecord.ts +++ b/shared/db/GMRecord.ts @@ -28,7 +28,7 @@ export default class GMRecord extends BaseModel { } -export let GMRecordModel: ReturnModelType; +export let GMRecordModel: ReturnModelType = getModelForClass(GMRecord); export function loadGMRecordModel(connect: mongoose.Connection) { GMRecordModel = getModelForClass(GMRecord, { existingConnection: connect diff --git a/shared/db/GMUser.ts b/shared/db/GMUser.ts index d521f130a..91d2a42da 100644 --- a/shared/db/GMUser.ts +++ b/shared/db/GMUser.ts @@ -85,7 +85,7 @@ export default class GMUser extends BaseModel { } } -export let GMUserModel: ReturnModelType; +export let GMUserModel: ReturnModelType = getModelForClass(GMUser); export function loadGMUserModel(connect: mongoose.Connection) { GMUserModel = getModelForClass(GMUser, { existingConnection: connect diff --git a/shared/db/GMUserGroup.ts b/shared/db/GMUserGroup.ts index a84a74999..e7e0f2be1 100644 --- a/shared/db/GMUserGroup.ts +++ b/shared/db/GMUserGroup.ts @@ -32,7 +32,7 @@ export default class GMUserGroup extends BaseModel { } } -export let GMUserGroupModel: ReturnModelType; +export let GMUserGroupModel: ReturnModelType = getModelForClass(GMUserGroup); export function loadGMUserGroupModel(connect: mongoose.Connection) { GMUserGroupModel = getModelForClass(GMUserGroup, { existingConnection: connect diff --git a/shared/db/Lot.ts b/shared/db/Lot.ts index 919aeb109..61e47d1ba 100644 --- a/shared/db/Lot.ts +++ b/shared/db/Lot.ts @@ -122,12 +122,14 @@ export default class Lot extends BaseModel { } public static async updateLotsStageByBegin(begin: Date, auctionStage: number) { - const results = await LotModel.updateMany({ begin }, { auctionStage }).select('-_id -__v').lean(); + await LotModel.updateMany({ begin }, { auctionStage }); + const results: LotType[] = await LotModel.find({ begin }).select('-_id -__v').lean(); return results; } public static async updateUnSoldLotsStageByBegin(begin: Date, auctionStage: number) { - const results = await LotModel.updateMany({ begin, status: { $in: [LOT_STATUS.DEFAULT, LOT_STATUS.ING] } }, { auctionStage }).select('-_id -__v').lean(); + await LotModel.updateMany({ begin, status: { $in: [LOT_STATUS.DEFAULT, LOT_STATUS.ING] } }, { auctionStage }); + const results: LotType[] = await LotModel.find({ begin, status: { $in: [LOT_STATUS.DEFAULT, LOT_STATUS.ING] } }).select('-_id -__v').lean(); return results; }