forked from Gitlink/forgeplus
114 lines
3.5 KiB
Ruby
114 lines
3.5 KiB
Ruby
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
|