From 4c067f87a800fef6da36255421f5070da93b6bf0 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 29 Jun 2023 20:36:00 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(=E6=8B=8D=E5=8D=96=E8=A1=8C)?= =?UTF-8?q?:=20=E4=BF=AE=E5=A4=8D=E6=8B=8D=E5=8D=96=E8=A1=8C=E5=8F=91?= =?UTF-8?q?=E7=94=9F=E7=9A=84=E5=BE=88=E5=A4=9A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/guild/handler/auctionHandler.ts | 29 ++++++++++++------- game-server/app/services/auctionService.ts | 6 ++-- shared/consts/constModules/guildConst.ts | 4 +-- shared/db/Lot.ts | 2 +- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/game-server/app/servers/guild/handler/auctionHandler.ts b/game-server/app/servers/guild/handler/auctionHandler.ts index e90a09dae..c5f5081c4 100644 --- a/game-server/app/servers/guild/handler/auctionHandler.ts +++ b/game-server/app/servers/guild/handler/auctionHandler.ts @@ -106,21 +106,30 @@ export class AuctionHandler { return resResult(STATUS.ROLE_COIN_NOT_ENOUGH); } - if (curBuyer && prePrice > 0) { - await sendMailByContent(MAIL_TYPE.AUCTION_OVER, curBuyer, { goods: [getGoldObject(prePrice)] }); - } - - if (maxFlag) { - newPrice = maxPrice; - await sendMailByContent(MAIL_TYPE.AUTION_REWARD, roleId, { goods: [{ id: gid, count }] }); - let dicGoods = gameData.goods.get(gid); - reportTAEvent(roleId, TA_EVENT.AUCTION_ITEM_GET, { item_name: dicGoods?.name, item_count: count, deel_price: newPrice }, ip); - } bidRoles.push({ roleId, price: newPrice, time: new Date() }); let lotStatus = await getLotStatus(auctionStage, max, maxFlag) let update: LotParam = { code, curBuyer: roleId, curPrice: newPrice, auctionStage, prePrice: curPrice, bidRoles, status: lotStatus, watchingRoles: Array.from(new Set([...watchingRoles, roleId])), seq: 0 }; if(lotStatus == LOT_STATUS.BIDDING) update.end = new Date(Date.now() + AUCTION_BID_EXTEND_TIME * 1000); const newLot = await LotModel.updateLot(update); + if(!newLot) { + // 如果拍卖行状态不对,那回退handleCost + if (curBuyer && prePrice > 0) { + await sendMailByContent(MAIL_TYPE.AUCTION_OVER, roleId, { goods: [getGoldObject(curPrice)] }); + } + res.releaseCallback(); + return resResult(STATUS.GUILD_LOT_HAS_SOLD); + } else { + if (curBuyer && prePrice > 0) { + await sendMailByContent(MAIL_TYPE.AUCTION_OVER, curBuyer, { goods: [getGoldObject(prePrice)] }); + } + + if (maxFlag) { + newPrice = maxPrice; + await sendMailByContent(MAIL_TYPE.AUTION_REWARD, roleId, { goods: [{ id: gid, count }] }); + let dicGoods = gameData.goods.get(gid); + reportTAEvent(roleId, TA_EVENT.AUCTION_ITEM_GET, { item_name: dicGoods?.name, item_count: count, deel_price: newPrice }, ip); + } + } await extendLotTime(newLot); if(seq <= LOTS_KEEP_TO_WORLD_CNT && seq > 0) await LotModel.updateOne({ begin, gid, count, status: LOT_STATUS.DEFAULT, serverId, seq: { $gt: LOTS_KEEP_TO_WORLD_CNT } }, { $set: { seq }}); await pushAuctionOver(newLot); // 推送竞价超过标志 diff --git a/game-server/app/services/auctionService.ts b/game-server/app/services/auctionService.ts index e82b2b7bb..9cd070d04 100644 --- a/game-server/app/services/auctionService.ts +++ b/game-server/app/services/auctionService.ts @@ -569,9 +569,8 @@ export async function getLotStatus(auctionStage: number, max: boolean, maxFlag: } export async function extendLotTime(lot: LotType) { - if(lot.status != LOT_STATUS.BIDDING) { - clearLotTimer(lot.code); - } else { + clearLotTimer(lot.code); + if(lot.status == LOT_STATUS.BIDDING) { let timer = setTimeout(async () => { await sendSingleLot(lot.code); }, lot.end.getTime() - Date.now()); @@ -582,6 +581,7 @@ export async function extendLotTime(lot: LotType) { export async function sendSingleLot(code: string) { console.log('schedule sendSingleLot called:', new Date()); let lot = await LotModel.setLotSold(code, AUCTION_STAGE.GUILD); // 正在竞拍的拍品 + if(!lot) return; await sendLotsRewardToMlail([lot]); await pushAuctionOver(lot); return true; diff --git a/shared/consts/constModules/guildConst.ts b/shared/consts/constModules/guildConst.ts index 04b05778f..d523e027f 100644 --- a/shared/consts/constModules/guildConst.ts +++ b/shared/consts/constModules/guildConst.ts @@ -321,5 +321,5 @@ export enum WISH_POOL_TYPE { SOUL = 1, // 将魂 } -export const AUCTION_BID_TIME = 30; // 倒计时10s前需要向后延长结算 -export const AUCTION_BID_EXTEND_TIME = 40; // 向后延长15s \ No newline at end of file +export const AUCTION_BID_TIME = 10; // 倒计时10s前需要向后延长结算 +export const AUCTION_BID_EXTEND_TIME = 15; // 向后延长15s \ No newline at end of file diff --git a/shared/db/Lot.ts b/shared/db/Lot.ts index ea2c33246..24c43f3e1 100644 --- a/shared/db/Lot.ts +++ b/shared/db/Lot.ts @@ -105,7 +105,7 @@ export default class Lot extends BaseModel { if(data.status == LOT_STATUS.SOLD|| data.status == LOT_STATUS.MAX) { data.saveAuctionStage = data.auctionStage; } - const result: LotType = await LotModel.findOneAndUpdate({ code }, { ...data }, { new: true }).select('-_id -__v').lean(); + const result: LotType = await LotModel.findOneAndUpdate({ code, status: { $in: [LOT_STATUS.DEFAULT, LOT_STATUS.BIDDING, LOT_STATUS.ING]} }, { ...data }, { new: true }).select('-_id -__v').lean(); return result; }