diff --git a/src/api_s2c/event/xiaofeijingsai/ApiOpen.ts b/src/api_s2c/event/xiaofeijingsai/ApiOpen.ts index 0f3293d..388b550 100644 --- a/src/api_s2c/event/xiaofeijingsai/ApiOpen.ts +++ b/src/api_s2c/event/xiaofeijingsai/ApiOpen.ts @@ -21,23 +21,18 @@ export default async function (call: ApiCall) { let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || call.req.limit || 100 - let rmbuse = await G.crossmongodb.collection('rmbuse').find({ - time: { - $gte: _hd.stime, - $lte: _hd.etime + 10 - } - }).sort({change: 1}).limit(limit).toArray() + let rmbuse = await G.crossmongodb.collection('rmbuse').find({type: `xfjs_${G.huodong.xfjsId}`}).sort({change: 1}).limit(limit).toArray() let list: any = rmbuse.map(i => ({...i, total: R.negate(i.change)})) let rankList = sortRankList(_hd.data.rank, list) - let users = await G.crossmongodb.collection('huodong_user').find({uid: {$in: rankList.map(i => i._id).filter(i => i._id != 'system')}}).toArray() + let users = await G.crossmongodb.collection('huodong_user').find({uid: {$in: rankList.map(i => i._id).filter(i => i != 'system')}}).toArray() rankList = rankList.map(i => ({...i, player: users.find(v => v.uid == i.uid) || {}})) - // 活动结束前半小时,缓存过期时间改为10秒 - let exTime = (G.time + 1800) > _hd.etime ? 10 : 60 + // 活动结束前半小时,缓存过期时间改为5秒 + let exTime = (G.time + 1800) > _hd.etime ? 5 : 10 G.crossioredis.setex(`rank:xiaofeijingsai`, exTime, JSON.stringify(rankList)); @@ -53,14 +48,13 @@ export default async function (call: ApiCall) { */ export function sortRankList(rank, list) { let rankList = [] - let ccc = 0 rank.map(i => { for (let k = i.rank[0] - 1; k < i.rank[1]; k++) { - if (list[k]?.total >= i.need[0].n) { - rankList.push({...list[k - ccc], rank: k, _id: list[k - ccc].uid}) + if (list[0]?.total >= i.need[0].n) { + rankList.push({...list[0], rank: k, _id: list[0].uid}) + list = R.tail(list) } else { rankList.push({_id: 'system', total: i.need[0].n, rank: k, player: {}}) - ccc += 1 } } }) @@ -68,11 +62,14 @@ export function sortRankList(rank, list) { } // 获取自己的信息 -async function getMyData(call, rankList) { +async function getMyData(call: ApiCall, rankList) { let myData = rankList.find(i => i._id == call.uid) if (myData) return myData - let myCut: any = await G.crossmongodb.collection('rmbuse').findOne({uid: call.uid}) + let myCut: any = await G.crossmongodb.collection('rmbuse').findOne({ + uid: call.uid, + type: `xfjs_${G.huodong.xfjsId}` + }) let myUser = await G.mongodb.collection('user').findOne({uid: call.uid}) G.crossmongodb.collection('huodong_user').updateOne({uid: call.uid}, {$set: myUser}, {upsert: true}) @@ -81,5 +78,5 @@ async function getMyData(call, rankList) { myCut = {_id: myUser.uid, total: 0} } - return {player: myUser, ...myCut, total: R.negate(myCut.total), rank: -1, _id: myUser.uid} + return {player: myUser, ...myCut, total: R.negate(myCut.change) || 0, rank: -1, _id: myUser.uid} } \ No newline at end of file diff --git a/src/api_s2c/eventlist/ApihdGetList.ts b/src/api_s2c/eventlist/ApihdGetList.ts index fd35120..dd2934b 100644 --- a/src/api_s2c/eventlist/ApihdGetList.ts +++ b/src/api_s2c/eventlist/ApihdGetList.ts @@ -12,6 +12,7 @@ export default async function (call: ApiCall) { // 消费竞赛是跨服活动,活动开启时,同步当前用户信息到跨服数据库 G.huodong.xfjs = !!_hdList.find(i => i.htype == 11); if (G.huodong.xfjs) { + G.huodong.xfjsId = _hdList.find(i => i.htype == 11).hdid let myUser = await G.mongodb.collection('user').findOne({uid: call.uid}) G.crossmongodb.collection('huodong_user').updateOne({uid: call.uid}, {$set: myUser}, {upsert: true}) } diff --git a/src/global.ts b/src/global.ts index 95c369e..12d428c 100644 --- a/src/global.ts +++ b/src/global.ts @@ -106,7 +106,8 @@ class _G { /**跨服活动——消费竞赛的开启状态 */ huodong = { - xfjs: false + xfjs: false, + xfjsId: '' }; private event = new EventEmitter(); diff --git a/src/public/player.ts b/src/public/player.ts index 00c1ac6..4b48e40 100644 --- a/src/public/player.ts +++ b/src/public/player.ts @@ -225,8 +225,8 @@ export class PlayerFun { } G.mongodb.collection('rmbuse').insertOne(data); // 消费竞赛开启时写入跨服数据库 - if (G.huodong.xfjs && !data.isAdd) { - G.crossmongodb.collection('rmbuse').updateOne({uid: data.uid}, { + if (G.huodong.xfjs && !data.isAdd && typeof data.change == 'number') { + G.crossmongodb.collection('rmbuse').updateOne({uid: data.uid, type: `xfjs_${G.huodong.xfjsId}`}, { $set: {time: G.time}, $inc: {change: data.change} }, {upsert: true}); diff --git a/src/public/scheduler/scheduler_xiaofeijingsai.ts b/src/public/scheduler/scheduler_xiaofeijingsai.ts index 4d4af5a..856165d 100644 --- a/src/public/scheduler/scheduler_xiaofeijingsai.ts +++ b/src/public/scheduler/scheduler_xiaofeijingsai.ts @@ -39,12 +39,7 @@ export class Scheduler_xfjs_Local_Ctor extends Scheduler { let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || 100 - let rmbuse = await G.crossmongodb.collection('rmbuse').find({ - time: { - $gte: _hd.stime, - $lte: _hd.etime + 10 - } - }).sort({change: 1}).limit(limit).toArray() + let rmbuse = await G.crossmongodb.collection('rmbuse').find({type: `xfjs_${G.huodong.xfjsId}`}).sort({change: 1}).limit(limit).toArray() let list: any = rmbuse.map(i => ({...i, total: R.negate(i.change)}))