更新云函数

This commit is contained in:
COMPUTER\EDY 2026-07-30 12:22:47 +08:00
parent a1dd6527f3
commit d973dc95cc
4 changed files with 117 additions and 28 deletions

View File

@ -35,6 +35,8 @@ export default async function (ctx: FunctionContext) {
async function rank(db1, uid, res1, oldaddress, address) { async function rank(db1, uid, res1, oldaddress, address) {
let add = res1.data.addLevel; let add = res1.data.addLevel;
const userCat = res1.data?.userCat;
const userCatData = userCat != null ? { userCat: userCat } : {};
if (add < 5) { if (add < 5) {
return; return;
} }
@ -57,6 +59,11 @@ async function rank(db1, uid, res1, oldaddress, address) {
for (let i = 0; i < total[address].length; i++) { for (let i = 0; i < total[address].length; i++) {
if (total[address][i].id == uid) { if (total[address][i].id == uid) {
isHave = true; isHave = true;
if (userCat != null) {
total[address][i].userCat = userCat;
} else {
delete total[address][i].userCat;
}
break; break;
} }
} }
@ -68,6 +75,7 @@ async function rank(db1, uid, res1, oldaddress, address) {
addLevel: add, addLevel: add,
time: Date.now(), time: Date.now(),
username: res1.data?.username, username: res1.data?.username,
...userCatData,
useravatar: res1.data?.useravatar, useravatar: res1.data?.useravatar,
useravatarIcon: res1.data?.useravatarIcon, useravatarIcon: res1.data?.useravatarIcon,
levelAmount: res1.data?.levelAmount levelAmount: res1.data?.levelAmount
@ -80,6 +88,7 @@ async function rank(db1, uid, res1, oldaddress, address) {
addLevel: add, addLevel: add,
time: Date.now(), time: Date.now(),
username: res1.data?.username, username: res1.data?.username,
...userCatData,
useravatar: res1.data?.useravatar, useravatar: res1.data?.useravatar,
useravatarIcon: res1.data?.useravatarIcon, useravatarIcon: res1.data?.useravatarIcon,
levelAmount: res1.data?.levelAmount levelAmount: res1.data?.levelAmount

View File

@ -8,7 +8,7 @@ const ThinkingData = require('thinkingdata-node');
import Ip2region from 'ip2region'; import Ip2region from 'ip2region';
const query = new Ip2region(); const query = new Ip2region();
const canIos = false; const canIos = false;
const version = "1.9.93"; const version = "2.0.02";
const AB_CONFIG_COLLECTION = "ab_config"; const AB_CONFIG_COLLECTION = "ab_config";
export default async function (ctx: FunctionContext) { export default async function (ctx: FunctionContext) {
let code = ctx.body.code; let code = ctx.body.code;
@ -41,6 +41,7 @@ export default async function (ctx: FunctionContext) {
openid: openid, openid: openid,
unionid: unionid, unionid: unionid,
session_key: session_key, session_key: session_key,
userCat: generateUserCat(),
register_time: Date.now(), register_time: Date.now(),
onlyId: ref.data.count, onlyId: ref.data.count,
distinctId: distinctId, distinctId: distinctId,
@ -105,7 +106,11 @@ export default async function (ctx: FunctionContext) {
task[key].state = 0; task[key].state = 0;
} }
} }
await db.collection(dbname).where({ _id: userData._id }).update({ session_key: session_key, distinctId: distinctId, isDebug: isDebug, isFirst: false, unionid: unionid, task: JSON.stringify(task), taskTime: Date.now() + 8 * 3600000, token: token }); const loginUpdate: any = { session_key: session_key, distinctId: distinctId, isDebug: isDebug, isFirst: false, unionid: unionid, task: JSON.stringify(task), taskTime: Date.now() + 8 * 3600000, token: token };
if (userData.userCat == null) {
loginUpdate.userCat = generateUserCat();
}
await db.collection(dbname).where({ _id: userData._id }).update(loginUpdate);
} }
if (userData?.freeze) { if (userData?.freeze) {
return { code: 0, data: "账号封禁", msg: "账号封禁" }; return { code: 0, data: "账号封禁", msg: "账号封禁" };
@ -156,6 +161,32 @@ export default async function (ctx: FunctionContext) {
//console.log("查询时间:"); //console.log("查询时间:");
return { code: 1, data: userData } return { code: 1, data: userData }
} }
function generateUserCat(): string {
const weightedCats = [
{ value: "1", weight: 150 },
{ value: "2", weight: 150 },
{ value: "3", weight: 150 },
{ value: "4", weight: 150 },
{ value: "5", weight: 150 },
{ value: "6", weight: 150 },
{ value: "7", weight: 150 },
{ value: "8", weight: 150 },
{ value: "9", weight: 30 },
{ value: "10", weight: 30 },
{ value: "11", weight: 8 },
];
const totalWeight = weightedCats.reduce((total, cat) => total + cat.weight, 0);
let randomWeight = Math.random() * totalWeight;
for (let i = 0; i < weightedCats.length; i++) {
randomWeight -= weightedCats[i].weight;
if (randomWeight < 0) {
return weightedCats[i].value;
}
}
return weightedCats[weightedCats.length - 1].value;
}
function stringToHash(input: string, algorithm: 'sha1' | 'sha256' | 'sha512' = 'sha256'): string { function stringToHash(input: string, algorithm: 'sha1' | 'sha256' | 'sha512' = 'sha256'): string {
return createHash(algorithm).update(input).digest('hex'); return createHash(algorithm).update(input).digest('hex');
} }

View File

@ -23,6 +23,11 @@ export default async function (ctx: FunctionContext) {
return { code: 0, data: null, msg: "token校验失败" }; return { code: 0, data: null, msg: "token校验失败" };
} }
} }
if (res.data && (res.data.userCat == null || res.data.userCat == undefined || res.data.userCat == "")) {
const userCat = generateUserCat();
await db.collection(dbname).where({ _id: uid }).update({ userCat: userCat });
res.data.userCat = userCat;
}
switch (action) { switch (action) {
case 'save': case 'save':
const userData1 = JSON.parse(ctx.body.userData); const userData1 = JSON.parse(ctx.body.userData);
@ -42,6 +47,7 @@ export default async function (ctx: FunctionContext) {
useravatar: userData1.useravatar || Math.floor(Math.random() * 4) + "", useravatar: userData1.useravatar || Math.floor(Math.random() * 4) + "",
username: userData1.username || "user", username: userData1.username || "user",
useravatarIcon: userData1.useravatarIcon || "0", useravatarIcon: userData1.useravatarIcon || "0",
userCat: userData1.userCat || res.data?.userCat,
} }
//console.log(data); //console.log(data);
let res2 = await db.collection(dbname).where({ _id: uid }).update(data); let res2 = await db.collection(dbname).where({ _id: uid }).update(data);
@ -75,6 +81,7 @@ export default async function (ctx: FunctionContext) {
timestamp: Number(userData.timestamp) || 0, timestamp: Number(userData.timestamp) || 0,
useravatar: userData.useravatar || "", useravatar: userData.useravatar || "",
username: userData.username || "user", username: userData.username || "user",
userCat: userData.userCat,
register_time: Number(userData.register_time) || 0, register_time: Number(userData.register_time) || 0,
monthCardTime: Number(userData.monthCardTime) || 0, monthCardTime: Number(userData.monthCardTime) || 0,
monthCardReward: Number(userData.monthCardReward) || 0, monthCardReward: Number(userData.monthCardReward) || 0,
@ -95,6 +102,31 @@ export default async function (ctx: FunctionContext) {
} }
} }
function generateUserCat(): string {
const weightedCats = [
{ value: "1", weight: 150 },
{ value: "2", weight: 150 },
{ value: "3", weight: 150 },
{ value: "4", weight: 150 },
{ value: "5", weight: 150 },
{ value: "6", weight: 150 },
{ value: "7", weight: 150 },
{ value: "8", weight: 150 },
{ value: "9", weight: 30 },
{ value: "10", weight: 30 },
{ value: "11", weight: 8 },
];
const totalWeight = weightedCats.reduce((total, cat) => total + cat.weight, 0);
let randomWeight = Math.random() * totalWeight;
for (let i = 0; i < weightedCats.length; i++) {
randomWeight -= weightedCats[i].weight;
if (randomWeight < 0) {
return weightedCats[i].value;
}
}
return weightedCats[weightedCats.length - 1].value;
}
function getTodayStartTimestamp() { function getTodayStartTimestamp() {
const date = new Date(); const date = new Date();
date.setHours(0, 0, 0, 0); date.setHours(0, 0, 0, 0);

View File

@ -67,7 +67,7 @@ export default async function (ctx: FunctionContext) {
rankNum = await rank(db1, uid, add, levelAmount, res1, address, levelTJ); rankNum = await rank(db1, uid, add, levelAmount, res1, address, levelTJ);
//console.log(res1.data.unionid) //console.log(res1.data.unionid)
if (res1.data.unionid) { if (res1.data.unionid) {
sendRank(uid, res1.data?.useravatar, res1.data?.username, res1.data?.useravatarIcon, add, levelTJ, address, res1.data.unionid); sendRank(uid, res1.data?.useravatar, res1.data?.username, res1.data?.userCat, res1.data?.useravatarIcon, add, levelTJ, address, res1.data.unionid);
} }
levelTJ = 1; levelTJ = 1;
careerAmount += 1; careerAmount += 1;
@ -100,7 +100,7 @@ function isSameDayUTC(timestamp1, timestamp2) {
} }
async function sendRank(uid, useravatar, username, useravatarIcon, count, levelTJ, address, unionid) { async function sendRank(uid, useravatar, username, userCat, useravatarIcon, count, levelTJ, address, unionid) {
let res = await fetch("https://bx7gi3d4oq.sealoshzh.site/userLevel", { let res = await fetch("https://bx7gi3d4oq.sealoshzh.site/userLevel", {
method: 'POST', method: 'POST',
headers: { headers: {
@ -111,6 +111,7 @@ async function sendRank(uid, useravatar, username, useravatarIcon, count, levelT
unionid: unionid, unionid: unionid,
useravatar: useravatar, useravatar: useravatar,
username: username, username: username,
...(userCat != null ? { userCat: userCat } : {}),
useravatarIcon: useravatarIcon, useravatarIcon: useravatarIcon,
count: count, count: count,
levelTJ: levelTJ, levelTJ: levelTJ,
@ -122,6 +123,8 @@ async function sendRank(uid, useravatar, username, useravatarIcon, count, levelT
} }
async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
let rankInfo = await db.collection("sRank").where({ _id: db1 }).getOne(); let rankInfo = await db.collection("sRank").where({ _id: db1 }).getOne();
const userCat = res1.data?.userCat;
const userCatData = userCat != null ? { userCat: userCat } : {};
let total = rankInfo.data.total; let total = rankInfo.data.total;
if (total != null) { if (total != null) {
@ -138,18 +141,24 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
total["all"][i].username = res1.data?.username, total["all"][i].username = res1.data?.username,
total["all"][i].useravatarIcon = res1.data?.useravatarIcon, total["all"][i].useravatarIcon = res1.data?.useravatarIcon,
total["all"][i].addLevel = add; total["all"][i].addLevel = add;
if (userCat != null) {
total["all"][i].userCat = userCat;
} else {
delete total["all"][i].userCat;
}
total["all"][i].time = Date.now(); total["all"][i].time = Date.now();
break; break;
} }
} }
if (isHave == false) { if (isHave == false) {
let length = total["all"].length; let length = total["all"].length;
if (length < 10 || add > total["all"][length - 1].addLevel) { if (length < 11 || add > total["all"][length - 1].addLevel) {
total["all"].push({ total["all"].push({
id: uid, id: uid,
addLevel: add, addLevel: add,
time: Date.now(), time: Date.now(),
username: res1.data?.username, username: res1.data?.username,
...userCatData,
useravatar: res1.data?.useravatar, useravatar: res1.data?.useravatar,
useravatarIcon: res1.data?.useravatarIcon, useravatarIcon: res1.data?.useravatarIcon,
levelAmount: levelAmount levelAmount: levelAmount
@ -162,6 +171,7 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
addLevel: add, addLevel: add,
time: Date.now(), time: Date.now(),
username: res1.data?.username, username: res1.data?.username,
...userCatData,
useravatar: res1.data?.useravatar, useravatar: res1.data?.useravatar,
useravatarIcon: res1.data?.useravatarIcon, useravatarIcon: res1.data?.useravatarIcon,
levelAmount: levelAmount levelAmount: levelAmount
@ -173,8 +183,8 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
} }
return a.time - b.time; return a.time - b.time;
}); });
if (total["all"].length >= 10) { if (total["all"].length >= 11) {
total["all"] = total["all"].slice(0, 10); total["all"] = total["all"].slice(0, 11);
} }
if (total[address]) { if (total[address]) {
let isHave = false; let isHave = false;
@ -185,6 +195,11 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
total[address][i].username = res1.data?.username, total[address][i].username = res1.data?.username,
total[address][i].useravatarIcon = res1.data?.useravatarIcon, total[address][i].useravatarIcon = res1.data?.useravatarIcon,
total[address][i].addLevel = add; total[address][i].addLevel = add;
if (userCat != null) {
total[address][i].userCat = userCat;
} else {
delete total[address][i].userCat;
}
total[address][i].time = Date.now(); total[address][i].time = Date.now();
break; break;
} }
@ -197,6 +212,7 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
addLevel: add, addLevel: add,
time: Date.now(), time: Date.now(),
username: res1.data?.username, username: res1.data?.username,
...userCatData,
useravatar: res1.data?.useravatar, useravatar: res1.data?.useravatar,
useravatarIcon: res1.data?.useravatarIcon, useravatarIcon: res1.data?.useravatarIcon,
levelAmount: levelAmount levelAmount: levelAmount
@ -209,6 +225,7 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) {
addLevel: add, addLevel: add,
time: Date.now(), time: Date.now(),
username: res1.data?.username, username: res1.data?.username,
...userCatData,
useravatar: res1.data?.useravatar, useravatar: res1.data?.useravatar,
useravatarIcon: res1.data?.useravatarIcon, useravatarIcon: res1.data?.useravatarIcon,
levelAmount: levelAmount levelAmount: levelAmount