mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-24 03:35:59 +08:00
refactor
This commit is contained in:
@@ -16,6 +16,14 @@ module.exports =
|
|||||||
available_extensions: ['rpvhost']
|
available_extensions: ['rpvhost']
|
||||||
available_services: ['shadowsocks']
|
available_services: ['shadowsocks']
|
||||||
|
|
||||||
|
billing:
|
||||||
|
force_unsubscribe:
|
||||||
|
when_balance_below: 0
|
||||||
|
when_arrears_above: 0
|
||||||
|
|
||||||
|
cyclical_billing: 3600 * 1000
|
||||||
|
daily_billing_cycle: 24 * 3600 * 1000
|
||||||
|
|
||||||
plans:
|
plans:
|
||||||
shadowsocks:
|
shadowsocks:
|
||||||
t_name: 'ShadowSocks 按量付费'
|
t_name: 'ShadowSocks 按量付费'
|
||||||
|
|||||||
@@ -4,20 +4,21 @@ plan = require './plan'
|
|||||||
mAccount = require './model/account'
|
mAccount = require './model/account'
|
||||||
mBalance = require './model/balance'
|
mBalance = require './model/balance'
|
||||||
|
|
||||||
exports.dailyBilling = ->
|
exports.cyclicalBilling = ->
|
||||||
mAccount.find
|
mAccount.find
|
||||||
'attribute.plans.0':
|
'attribute.plans.0':
|
||||||
$exists: true
|
$exists: true
|
||||||
.toArray (err, accounts) ->
|
.toArray (err, accounts) ->
|
||||||
for account in accounts
|
for account in accounts
|
||||||
exports.calcBilling account, false, ->
|
exports.calcBilling account,
|
||||||
|
is_force: false
|
||||||
exports.dailyBilling()
|
, ->
|
||||||
setInterval exports.dailyBilling, 3600 * 1000
|
|
||||||
|
|
||||||
exports.checkBilling = (account, callback) ->
|
exports.checkBilling = (account, callback) ->
|
||||||
if (Date.now() - account.attribute.last_billing_at.getTime()) > 24 * 3600 * 1000
|
if Date.now() > account.attribute.last_billing_at.getTime() + config.billing.daily_billing_cycle
|
||||||
exports.calcBilling account, false, callback
|
exports.calcBilling account,
|
||||||
|
is_force: false
|
||||||
|
, callback
|
||||||
else
|
else
|
||||||
callback account
|
callback account
|
||||||
|
|
||||||
@@ -25,27 +26,28 @@ exports.checkExpired = (account, callback) ->
|
|||||||
modifier =
|
modifier =
|
||||||
$set: {}
|
$set: {}
|
||||||
|
|
||||||
callcallback = ->
|
callback_back = ->
|
||||||
mAccount.update _id: account._id, modifier, ->
|
mAccount.findAndModify _id: account._id, {}, modifier, new: true, (err, account)->
|
||||||
mAccount.findId account._id, (err, account) ->
|
callback account
|
||||||
callback account
|
|
||||||
|
|
||||||
if account.attribute.balance > 0
|
if account.attribute.balance > 0
|
||||||
modifier.$set['attribute.arrears_at'] = null
|
modifier.$set['attribute.arrears_at'] = null
|
||||||
|
|
||||||
if account.attribute.balance < 0
|
if account.attribute.balance < 0
|
||||||
|
if account.attribute.balance < config.billing.force_unsubscribe.when_balance_below
|
||||||
|
return exports.forceUnsubscribe account, callback_back
|
||||||
|
|
||||||
unless account.attribute.arrears_at
|
unless account.attribute.arrears_at
|
||||||
modifier.$set['attribute.arrears_at'] = new Date()
|
account.attribute.arrears_at = modifier.$set['attribute.arrears_at'] = new Date()
|
||||||
else
|
|
||||||
if account.attribute.balance < -5
|
|
||||||
return exports.forceUnsubscribe account, callcallback
|
|
||||||
|
|
||||||
if Date.now() - account.attribute.arrears_at.getTime() > 15 * 24 * 3600 * 1000
|
if Date.now() > account.attribute.arrears_at.getTime() + config.billing.force_unsubscribe.when_arrears_above
|
||||||
return exports.forceUnsubscribe account, callcallback
|
return exports.forceUnsubscribe account, callback_back
|
||||||
|
|
||||||
callcallback()
|
callback_back()
|
||||||
|
|
||||||
|
exports.calcBilling = (account, options, callback) ->
|
||||||
|
{is_force} = options
|
||||||
|
|
||||||
exports.calcBilling = (account, isForce, callback) ->
|
|
||||||
exports.checkExpired account, ->
|
exports.checkExpired account, ->
|
||||||
amount = 0
|
amount = 0
|
||||||
|
|
||||||
@@ -53,22 +55,22 @@ exports.calcBilling = (account, isForce, callback) ->
|
|||||||
plan_info = config.plans[planName]
|
plan_info = config.plans[planName]
|
||||||
|
|
||||||
price = plan_info.price / 30 / 24
|
price = plan_info.price / 30 / 24
|
||||||
time = (Date.now() - account.attribute.last_billing_at.getTime()) / 1000 / 3600
|
time_hour = (Date.now() - account.attribute.last_billing_at.getTime()) / 1000 / 3600
|
||||||
|
|
||||||
if isForce
|
if is_force
|
||||||
billing_time = Math.ceil time
|
billing_time_hour = Math.ceil time_hour
|
||||||
else
|
else
|
||||||
billing_time = Math.floor time
|
billing_time_hour = Math.floor time_hour
|
||||||
|
|
||||||
amount += price * billing_time
|
amount += price * billing_time_hour
|
||||||
|
|
||||||
if amount <= 0
|
if amount <= 0
|
||||||
return callback account
|
return callback account
|
||||||
|
|
||||||
if isForce
|
if is_force
|
||||||
new_last_billing_at = new Date()
|
new_last_billing_at = new Date()
|
||||||
else
|
else
|
||||||
new_last_billing_at = new Date account.attribute.last_billing_at.getTime() + billing_time * 3600 * 1000
|
new_last_billing_at = new Date account.attribute.last_billing_at.getTime() + billing_time_hour * 3600 * 1000
|
||||||
|
|
||||||
modifier =
|
modifier =
|
||||||
$set:
|
$set:
|
||||||
@@ -79,8 +81,8 @@ exports.calcBilling = (account, isForce, callback) ->
|
|||||||
mAccount.update _id: account._id, modifier, ->
|
mAccount.update _id: account._id, modifier, ->
|
||||||
mBalance.create account, 'billing', -amount,
|
mBalance.create account, 'billing', -amount,
|
||||||
plans: account.attribute.plans
|
plans: account.attribute.plans
|
||||||
billing_time: billing_time
|
billing_time: billing_time_hour
|
||||||
is_force: isForce
|
is_force: is_force
|
||||||
last_billing_at: account.attribute.last_billing_at
|
last_billing_at: account.attribute.last_billing_at
|
||||||
, ->
|
, ->
|
||||||
mAccount.findId account._id, (err, account) ->
|
mAccount.findId account._id, (err, account) ->
|
||||||
@@ -102,3 +104,6 @@ exports.calcRemainingTime = (account) ->
|
|||||||
price += plan_info.price / 30 / 24
|
price += plan_info.price / 30 / 24
|
||||||
|
|
||||||
return account.attribute.balance / price
|
return account.attribute.balance / price
|
||||||
|
|
||||||
|
exports.cyclicalBilling()
|
||||||
|
setInterval exports.cyclicalBilling, config.billing.cyclical_billing
|
||||||
|
|||||||
Reference in New Issue
Block a user