Initial commit
This commit is contained in:
37
app/jobs/cron/referral_bonus.rb
Normal file
37
app/jobs/cron/referral_bonus.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
module Jobs
|
||||
module Cron
|
||||
class ReferralBonus
|
||||
def self.process
|
||||
irt_currency = Currency.find('irt')
|
||||
Operations::Revenue.h24.where(reference_type: 'Trade').find_in_batches(batch_size: 1000).each do |group|
|
||||
group.each do |revenue|
|
||||
referral_user = revenue.member.referral_user
|
||||
next unless referral_user.present?
|
||||
|
||||
next unless revenue.credit.positive?
|
||||
|
||||
referral_account = referral_user.get_account('irt')
|
||||
referral_account.lock!
|
||||
trade = Trade.find(revenue.reference_id)
|
||||
referral_bonus = if revenue.currency_id.in? %w[irt usdt]
|
||||
revenue.credit * ENV.fetch('REFERRAL_FEE').to_d * trade.irt_price
|
||||
else
|
||||
(revenue.credit * ENV.fetch('REFERRAL_FEE').to_d) * (trade.price * trade.irt_price)
|
||||
end
|
||||
begin
|
||||
ActiveRecord::Base.transaction do
|
||||
referral_account.balance += referral_bonus
|
||||
referral_account.save!
|
||||
bonus = Bonus.create(trade: trade, sender_member: revenue.member, bonus_member: referral_user, amount: referral_bonus, state: 'payed')
|
||||
Operations::Revenue.debit!(amount: referral_bonus, member_id: referral_user, currency: irt_currency, reference_type: 'bonus', reference_id: bonus.id)
|
||||
end
|
||||
rescue StandardError
|
||||
Bonus.create(trade: trade, sender_member: revenue.member, bonus_member: referral_user, amount: referral_bonus, state: 'pending')
|
||||
end
|
||||
end
|
||||
end
|
||||
sleep 86400
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user