2017-06-23 27 views
1

如何自动根据他的主动服务续订日期从用户的可用信用扣除学分?如何更新的Node.js和猫鼬一定时间后用户?

让我描述什么是目前的情况。目前,我正在开发一个快速应用程序,该应用程序基本上是一个计费系统,可根据其活动服务自动管理客户端并对其进行收费。但我卡住了!从用户的账户如何自动扣除信用和更新服务,或采取暂停该服务,如果他(用户)没有足够的余额。

这是我的。

服务架构:

var mongoose= require('mongoose'); 
var Schema = new mongoose.Schema({ 
    user:{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: "User", 
    required: true 
    }, 
    services:{ 
    username: {type: String, required: true, unique: true}, 
    package: {type: String, required: true}, 
    domain: {type: String, required: true, unique: true}, 
    status: String, 
    dateAdded: {type: Date, default: Date.now }, 
    lastRenewed: Date, 
    nextRenewal: Date, 
    renewalCost: Number // Renewal Cost Of The Service. 
    } 
}) 

module.exports = mongoose.model('Service', Schema); 

用户模式:

var mongoose= require('mongoose'); 

var Schema = new mongoose.Schema({ 
    name:{ 
    type: String, 
    min: 1, 
    required: true 
    }, 
    username:{ 
     type: String, 
     unique: true 
    }, 
    password:{ 
    type: String, // Storing Hashed Password 
    required: true 
    }, 
    salt:{ 
    type: String 
    }, 
    meta: { 
    email: String, 
    phone: Number, 
    dateOfBarth: String, 
    address: { 
     companyName: String, 
     address1: String, 
     address2: String, 
     city: String, 
     state: String 
    } 
}, 

credit:{type: Number, default: 0}, // Avilable Credits 
isAdmin: {type: Boolean, default: false} // If The User Is Admin Or Not? 


}); 

module.exports = mongoose.model('User', Schema); 

现在我想在其上运行 “nextRenewal” 日期查询或函数(或类似的东西)并从用户可用积分中扣除续约费用,并保存用户并延长下一个续约日期。

答案:使用npmjs.com/package/node-schedule安排作业。

由于@Kilizo

回答

0

你想findOneAndUpdate服务,并使用填充在其内填充用户对象。

未经测试的代码:

Service.findOneAndUpdate({ _id: serviceId }).populate('user').then((service) => {  
    if(service.user.credit > 10) { 
    service.user.credit -= 10; 
    service.services.nextRenewal = //newDate; 
    service.user.save(); 
    service.save(); 
    } 
}) 
+0

其实,这不是问题。主要问题是在nextRenewal日期自动运行更新功能。 – Bubun

+0

您将需要安排一个脚本来检查每个服务的nextnewnew日期 – Kilizo

+0

我使用https://www.npmjs.com/package/node-schedule – Kilizo

0

在下次更新日期自动运行更新功能,你必须使用cron job.Please找到cron作业的更多信息:Cron Job

0

主要有两种方式,是做到这一点:使用

  • 的cron作业
  • 个使用窗口调度

Windows计划:您可以创建你需要,并根据所需的日期添加项目作为任务在Windows调度和安排该任务功能的项目。

cron:您可以使用cron作业根据您所需的日期安排您的任务。

我建议写这个的cron,因为这样运行的Web服务器上,将工作,直到您的服务器停止,而Windows调度本地机器上运行,如果你的机器运行时才会工作。

+0

假设如果我有超过10,000个服务处于活动状态,那么我应该添加10,000个Chron作业吗?应该有另一种方式来做到这一点。 – Bubun