🐞 fix(拍卖行): 修复拍卖行发生的很多问题

This commit is contained in:
luying
2023-06-29 20:36:00 +08:00
parent 4d2853f62f
commit 4c067f87a8
4 changed files with 25 additions and 16 deletions

View File

@@ -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); // 推送竞价超过标志

View File

@@ -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;

View File

@@ -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
export const AUCTION_BID_TIME = 10; // 倒计时10s前需要向后延长结算
export const AUCTION_BID_EXTEND_TIME = 15; // 向后延长15s

View File

@@ -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;
}