forgeplus/app/controllers/wallets_controller.rb

114 lines
3.5 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class WalletsController < ApplicationController
before_action :require_login, except: :community_data
def balance
user = User.find_by_id(params[:id])
@wallet = user.get_wallet
end
def coin_changes
user = User.find_by_id(params[:id])
@wallet = user.get_wallet
if params[:category] == 'all'
scope = CoinChange.where('to_wallet_id = ? OR from_wallet_id = ?', @wallet.id, @wallet.id)
elsif params[:category] == 'income'
# @coin_changes = CoinChange.where('to_wallet_id = ?', @wallet.id).limit(100)
scope = @wallet.income
elsif params[:category] == 'outcome'
scope = @wallet.outcome
end
sort = params[:sort_by] || "created_at"
sort_direction = params[:sort_direction] || "desc"
scope = scope.reorder("#{sort} #{sort_direction}") unless scope.nil?
@total = 0
@total = scope.length unless scope.nil?
@coin_changes = kaminari_paginate(scope) unless scope.nil?
end
def balance_chart
user = User.find_by_id(params[:id])
@wallet = user.get_wallet
scope = CoinChange.where('to_wallet_id = ? OR from_wallet_id = ?', @wallet.id, @wallet.id)
t1 = Time.now
t2 = Time.new(t1.year, t1.month, t1.day - 6)
@balance_chart_data = scope.where('created_at > ? AND created_at < ?', t2, t1)
@balance_chart_array = to_array(@balance_chart_data, @wallet.id)
end
def community_data
t1 = Time.now
t2 = Time.new(t1.year, t1.month, t1.day - 6)
coin_changes = CoinChange.where('created_at >= ?', t2)
@community_data_array = community_data_to_array(coin_changes)
end
private
def to_array(data, id)
t1 = Time.now
start_time = Time.new(t1.year, t1.month, t1.day - 6)
end_time = Time.new(start_time.year, start_time.month, start_time.day + 1)
income = Array.new(7, 0) # 收入、支出
outcome = Array.new(7, 0)
date = Array.new(7)
date[0] = Time.new(start_time.year, start_time.month, start_time.day)
index = 0
data.each do |i|
# 更新日期
until (i.created_at >= start_time) && (i.created_at < end_time)
index += 1
start_time = end_time
end_time = Time.new(start_time.year, start_time.month, start_time.day + 1)
date[index] = Time.new(start_time.year, start_time.month, start_time.day)
end
if i.from_wallet_id == id
outcome[index] += i.amount
else
next if params[:sponsor] == true && i.from_wallet_id.nil?
income[index] += i.amount
end
end
until end_time >= Time.now
index += 1
start_time = end_time
end_time = Time.new(start_time.year, start_time.month, start_time.day + 1)
date[index] = Time.new(start_time.year, start_time.month, start_time.day)
end
Array[income, outcome, date]
end
def community_data_to_array(coin_changes)
t1 = Time.now
start_time = Time.new(t1.year, t1.month, t1.day - 6)
nums = Array.new(7, 0)
date = Array.new(7)
end_time = Array.new(7)
# date[0] = Time.new(start_time.year, start_time.month, start_time.day)
index = 0
(0..6).each do |i|
# 更新日期date[i]表示第i天0点
date[i] = Time.new(start_time.year, start_time.month, start_time.day + i)
end_time[i] = Time.new(start_time.year, start_time.month, start_time.day + i+1)
end
coin_changes.each do |cc|
(0..6).each do |i|
if !cc.from_wallet_id.nil? && cc.created_at>=date[i] && cc.created_at<end_time[i]
nums[i] += 1
end
end
end
Array[nums, date]
end
end