MatchMaster/server/laf-cloud/functions/rank.ts
2026-07-30 12:22:02 +08:00

159 lines
5.0 KiB
TypeScript

import cloud from '@lafjs/cloud'
const db = cloud.database();
const CITY = {
"河北省": true, "山西省": true, "辽宁省": true, "吉林省": true, "黑龙江省": true, "江苏省": true,
"浙江省": true, "安徽省": true, "福建省": true, "江西省": true, "山东省": true, "河南省": true, "湖北省": true,
"湖南省": true, "广东省": true, "海南省": true, "四川省": true, "贵州省": true, "云南省": true, "陕西省": true,
"甘肃省": true, "青海省": true, "港澳台": true, "北京": true, "天津": true, "上海": true, "重庆": true,
"内蒙古": true, "广西": true, "西藏": true, "宁夏": true, "新疆": true, "其他": true
};
export default async function (ctx: FunctionContext) {
let uid = ctx.body.uid;
let res = await sortBattle(uid);
for (var key in CITY) {
let res = await sortShengShi(key);
}
return { code: 1 }
}
/**普通排行
* @param userCollec
*/
async function sortBattle(uid) {
let res = await db.collection("users").aggregate().project({
unionid: 1,
levelAmount: 1, // 1 表示包含该字段,其他字段默认排除
endLevelNum: 1,
username: 1,
useravatar: 1,
useravatarIcon: 1,
isWhite: 1
})
.match({
isWhite: false
})
.sort({
levelAmount: -1,
endLevelNum: -1
}).limit(200).end();
const res1 = await db.collection("rank").where({ _id: "69fac0d98463a95668c5e5d9" })
.update({ rank: JSON.stringify(res.data) });
sendRank(JSON.stringify(res.data));
return true;
}
async function sendRank(rank) {
let res = await fetch("https://bx7gi3d4oq.sealoshzh.site/rankLevel", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
rank: rank,
time: new Date().getHours()
})
})
}
/**省市地区排名前100名*/
async function sortShengShi(address) {
let res = await db.collection("users").aggregate().project({
addLevel: 1,
levelAmount: 1, // 1 表示包含该字段,其他字段默认排除
endLevelNum: 1,
username: 1,
useravatar: 1,
useravatarIcon: 1,
isWhite: 1,
address: 1,
}).addFields({ endLevelNum: { $toInt: "$endLevelNum" } }).addFields({
totalLevel: { $add: ["$levelAmount", "$endLevelNum"] }
}).match({
address: address,
isWhite: false,
addLevel: { $gte: 5 },
})
.sort({
addLevel: -1,
}).limit(200).end();
const res3 = await db.collection("sRank").where({ name: address }).update({ totoal: res.data }, { upsert: true });
return true;
} import cloud from '@lafjs/cloud'
const db = cloud.database();
const CITY = {
"河北省": true, "山西省": true, "辽宁省": true, "吉林省": true, "黑龙江省": true, "江苏省": true,
"浙江省": true, "安徽省": true, "福建省": true, "江西省": true, "山东省": true, "河南省": true, "湖北省": true,
"湖南省": true, "广东省": true, "海南省": true, "四川省": true, "贵州省": true, "云南省": true, "陕西省": true,
"甘肃省": true, "青海省": true, "港澳台": true, "北京": true, "天津": true, "上海": true, "重庆": true,
"内蒙古": true, "广西": true, "西藏": true, "宁夏": true, "新疆": true, "其他": true
};
export default async function (ctx: FunctionContext) {
let uid = ctx.body.uid;
let res = await sortBattle(uid);
for (var key in CITY) {
let res = await sortShengShi(key);
}
return { code: 1 }
}
/**普通排行
* @param userCollec
*/
async function sortBattle(uid) {
let res = await db.collection("users").aggregate().project({
unionid: 1,
levelAmount: 1, // 1 表示包含该字段,其他字段默认排除
endLevelNum: 1,
username: 1,
useravatar: 1,
useravatarIcon: 1,
isWhite: 1
})
.match({
isWhite: false
})
.sort({
levelAmount: -1,
endLevelNum: -1
}).limit(200).end();
const res1 = await db.collection("rank").where({ _id: "69fac0d98463a95668c5e5d9" })
.update({ rank: JSON.stringify(res.data) });
sendRank(JSON.stringify(res.data));
return true;
}
async function sendRank(rank) {
let res = await fetch("https://bx7gi3d4oq.sealoshzh.site/rankLevel", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
rank: rank,
time: new Date().getHours()
})
})
}
/**省市地区排名前100名*/
async function sortShengShi(address) {
let res = await db.collection("users").aggregate().project({
addLevel: 1,
levelAmount: 1, // 1 表示包含该字段,其他字段默认排除
endLevelNum: 1,
username: 1,
useravatar: 1,
useravatarIcon: 1,
isWhite: 1,
address: 1,
}).addFields({ endLevelNum: { $toInt: "$endLevelNum" } }).addFields({
totalLevel: { $add: ["$levelAmount", "$endLevelNum"] }
}).match({
address: address,
isWhite: false,
addLevel: { $gte: 5 },
})
.sort({
addLevel: -1,
}).limit(200).end();
const res3 = await db.collection("sRank").where({ name: address }).update({ totoal: res.data }, { upsert: true });
return true;
}