job,挖矿收益计算

This commit is contained in:
chaosBreaking
2019-09-29 12:59:34 +08:00
parent d15ef1bf7e
commit fc383be299
3 changed files with 91 additions and 76 deletions

View File

@@ -22,8 +22,11 @@ const system = require('../modules/system/system.model');
const { createAction } = require('../modules/action/action.handler');
const { createNewFund } = require('../modules/fund/fund.handler');
const tokenReleaseRate = 0.2;
async function awardMine(user, fund, i) {
const tokenReleaseRate = 0.02;
async function awardMine(user, fund) {
if (!user || !fund || fund.fundList.length === 0) return 0;
let sum = 0;
for (let i = 0, len = fund.fundList.length; i < len; ++i) {
const released = fund.releasedAmout || 0;
if (released === fund.releasedAmout) {
await Fund.findByIdAndUpdate(fund.id, {
@@ -33,11 +36,12 @@ async function awardMine(user, fund, i) {
});
return 0;
}
const rewardMine = +fund.amount * tokenReleaseRate;
return rewardMine;
sum += +fund.fundList[i].amount * tokenReleaseRate;
}
return sum;
}
function awardInvite(user, fund, allInviteReward) {
const rewardInvite = allInviteReward - (fund.option.usedGroupReward || 0); // 求增量: 总额 - 已领取总额(fundSum)
const rewardInvite = allInviteReward - (fund.option && fund.option.usedGroupReward || 0); // 求增量: 总额 - 已领取总额(fundSum)
// 挖矿奖励 = 充值金额奖励 + 社区奖励
return rewardInvite;
}
@@ -46,47 +50,46 @@ const doReward = async (user, fund) => {
// 1.对于充值的fundList的每一项按照2%进行发放累加到asset.vic添加action类型为1
// 2.对于社团成员进行人头数目按照10vic/人进行奖励累加到asset.vic添加action类型为2
if (!user || !fund) return 0;
const fundlist = fund.fundList;
for (let i = 0, len = fundlist.length; i < len; ++i) {
const fund = fundlist[i];
const allInviteReward = (+user.group.length || 0) * 10;
const rewardMine = awardMine(user, fund, i);
const rewardMine = await awardMine(user, fund);
const rewardInvite = awardInvite(user, fund, allInviteReward);
const reward = rewardMine + rewardInvite;
await Fund.findByIdAndUpdate(fund.id, {
reward && await Fund.findByIdAndUpdate(fund.id, {
$inc: {
'asset.vic': reward,
},
$set: {
'option.usedGroupReward': rewardInvite, // 本次的奖励值累加到已领取团队奖励总和内
'asset.usdt': allInviteReward // 用来记录所有社群奖励总额
'asset.usdt': allInviteReward, // 用来记录所有社群奖励总额
'lastMine': new Date().toISOString()
}
}).then(() => {
rewardMine > 0 && createAction(1, {
userId: fund.userId,
userId: user.id,
tokenType: 'vic',
amount: rewardMine,
remain: fund.asset
}).save();
rewardInvite > 0 && createAction(2, {
userId: fund.userId,
userId: user.id,
tokenType: 'vic',
amount: rewardInvite,
remain: fund.asset
}).save();
});
}
};
const jobs = [
{
name: 'mine',
processor: async (job, done) => {
const mock = {
touch: () => {console.log('touch');},
done: () => {console.log('done');},
};
async function mine (job = mock, done = mock) {
//todo: 程序内检查是否可以执行,保证不会启动时错误的自动执行一次
mylog.info('[Schedule Job] 开始定时计算作业...');
let currentIndex = await system.findOne({
key: 'userIndex4job'
}).exec();
currentIndex = currentIndex.value;
if (typeof currentIndex !== 'number') {
currentIndex = 0;
await new system({
@@ -97,20 +100,31 @@ const jobs = [
// 批量更新,每次十个
const userFundList = await Fund.find().sort('_id').limit(10).skip(currentIndex);
job.touch();
// job.touch();
mylog.info('touch');
if (!userFundList || !Array.isArray(userFundList)) return 0;
currentIndex += userFundList.length;
for (let i = 0, len = userFundList.length; i < len; ++i) {
const fundItem = userFundList[i]; // 一条数据库fund表记录
const funds = fundItem.fundList;
if (!funds || !Array.isArray(funds)) continue;
const user = await User.findOne({ id: fundItem.userId }).exec();
doReward(user, funds);
job.touch();
const fund = userFundList[i]; // 一条数据库fund表记录
if (fund.lastMine && new Date(fund.lastMine).getDate() === new Date().getDate()) {
mylog.info('已经计算过...跳过');
continue;
}
const user = await User.findById(fund.userId).exec();
await doReward(user, fund);
// job.touch();
await system.updateOne({ key: 'userIndex4job' }, {
$set: {
value: currentIndex
}
});
}
mylog.info('收益计算分配完成');
done('收益计算分配完成');
},
// done('收益计算分配完成');
}
const jobs = [
{
name: 'mine',
processor: mine,
type: 'every',
slot: '0 0 3 * * *',
priority: 'highest',

View File

@@ -241,7 +241,7 @@ module.exports = {
basic: {
activeFund,
revenueLastday,
revenueAll: fund.asset && fund.asset['vic']
revenueAll: fund.asset && +fund.asset['vic'] - +fund.asset['usdt'] // 总金额 - 社区奖励 = 挖矿奖励
}
}
});
@@ -262,7 +262,7 @@ module.exports = {
basic: {
activeFund, //有效矿晶
revenueLastday, // 昨日收益
revenueAll: newFund.asset['vic'] // 累计总收益
revenueAll: +newFund.asset['vic'] - +newFund.asset['usdt'] // 累计总收益 - 社区奖励 = 挖矿奖励
}
}
});
@@ -297,7 +297,7 @@ module.exports = {
data: {
activeFund,
revenueLastday,
revenueAll: fund.asset && fund.asset['vic']
revenueAll: fund.asset && +fund.asset['vic'] - +fund.asset['usdt'] // 总金额 - 社区奖励 = 挖矿奖励
}
});
}).catch(err => {

View File

@@ -49,7 +49,8 @@ const FundSchema = new mongoose.Schema({
default: 0
},
lastMine: {
type: String
type: String,
default: new Date().toISOString()
},
lastDeposit: {
type: String