This commit is contained in:
Gitea 2021-04-22 01:34:41 -07:00
parent 0852d0ac61
commit 59380742a9
14 changed files with 767 additions and 507 deletions

View File

@ -64,7 +64,7 @@ end
group :development do
gem 'prettier'
gem 'rubocop', '~> 0.52.0'
gem 'solargraph', '~> 0.38.0'
gem 'solargraph', '~> 0.30.0'
gem 'awesome_print'
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
@ -126,3 +126,5 @@ gem 'request_store'
gem 'harmonious_dictionary', '~> 0.0.1'
gem 'parallel', '~> 1.19', '>= 1.19.1'
#add for debug
gem 'thor','~> 0.20.3'

View File

@ -72,8 +72,7 @@ GEM
axlsx_rails (0.5.2)
actionpack (>= 3.1)
axlsx (>= 2.0.1)
backport (1.1.2)
benchmark (0.1.0)
backport (0.3.0)
bindex (0.8.1)
bootsnap (1.4.6)
msgpack (~> 1.0)
@ -106,7 +105,6 @@ GEM
activerecord (>= 3.1.0, < 7)
diff-lcs (1.3)
diffy (3.3.0)
e2mmap (0.1.0)
elasticsearch (7.5.0)
elasticsearch-api (= 7.5.0)
elasticsearch-transport (= 7.5.0)
@ -142,7 +140,6 @@ GEM
i18n (1.8.2)
concurrent-ruby (~> 1.0)
io-like (0.3.1)
jaro_winkler (1.5.4)
jbuilder (2.10.0)
activesupport (>= 5.0.0)
jquery-rails (4.3.5)
@ -162,6 +159,7 @@ GEM
activerecord
kaminari-core (= 1.2.0)
kaminari-core (1.2.0)
kramdown (1.17.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
@ -173,9 +171,10 @@ GEM
mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
maruku (0.7.3)
method_source (0.9.2)
mimemagic (0.3.4)
mimemagic (0.3.10)
nokogiri (~> 1)
rake
mini_mime (1.0.2)
mini_portile2 (2.4.0)
minitest (5.14.0)
@ -373,18 +372,14 @@ GEM
rack (~> 2.0)
rack-protection (= 2.0.8.1)
tilt (~> 2.0)
solargraph (0.38.6)
backport (~> 1.1)
benchmark
bundler (>= 1.17.2)
e2mmap
jaro_winkler (~> 1.5)
maruku (~> 0.7, >= 0.7.3)
nokogiri (~> 1.9, >= 1.9.1)
solargraph (0.30.2)
backport (~> 0.2)
htmlentities (~> 4.3, >= 4.3.4)
kramdown (~> 1.16)
parser (~> 2.3)
reverse_markdown (~> 1.0, >= 1.0.5)
rubocop (~> 0.52)
thor (~> 1.0)
thor (~> 0.19, >= 0.19.4)
tilt (~> 2.0)
yard (~> 0.9)
spreadsheet (1.2.6)
@ -401,7 +396,7 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (1.0.1)
thor (0.20.3)
thread_safe (0.3.6)
tilt (2.0.10)
turbolinks (5.2.1)
@ -423,10 +418,10 @@ GEM
wkhtmltopdf-binary (0.12.5.4)
xpath (3.2.0)
nokogiri (~> 1.8)
yard (0.9.24)
yard (0.9.26)
PLATFORMS
ruby
x86_64-linux
DEPENDENCIES
aasm
@ -490,10 +485,11 @@ DEPENDENCIES
simple_form
simple_xlsx_reader
sinatra
solargraph (~> 0.38.0)
solargraph (~> 0.30.0)
spreadsheet
spring
spring-watcher-listen (~> 2.0.0)
thor (~> 0.20.3)
turbolinks (~> 5)
tzinfo-data
uglifier (>= 1.3.0)
@ -501,4 +497,4 @@ DEPENDENCIES
wkhtmltopdf-binary
BUNDLED WITH
2.1.4
2.2.15

View File

@ -0,0 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.

View File

@ -0,0 +1,3 @@
// Place all the styles related to the persona controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,128 @@
class PersonaController < ApplicationController
def show
#平台用户总数
#@total_users_count = User.count
#平台被Foller数量
#@total_follow_count = Watcher.count
#平台总项目数
#@total_project_count = Project.count
#平台不同语言项目数量
#@total_project_languages_count = Project.joins(:project_language).group("project_languages.name").count
# 平台不同种类项目数量
#@total_project_category_count = Project.joins(:project_category).group("project_categories.name").count
# 平台用户被fork数量
#@total_fork_count = Project.sum('forked_count')
#平台所有项目关注数
#@total_project_watchers_count = Project.sum('watchers_count')
#平台所有项目点赞数
#@total_project_praises_count = Project.sum('praises_count')
#平台所有项目下的Issue数量
#@total_project_issues_count = Project.sum('issues_count')
#平台所有PR数量
#@total_pullrequest_count = PullRequest.count
@user = User.find_by_login(params[:id]) || User.find_by(id: params[:id])
#用户被Foller数量
@follow_count = Watcher.where(watchable_id:@user.id).count
#三个月90dFoller数量
@recent_follow_count = Watcher.where(watchable_id:@user.id,created_at: (Time.now.midnight - 90.day)..Time.now.midnight).count
#用户总项目数
@project_count = Project.where(user_id:@user.id).count
#用户三个月90d总项目数
@recent_project_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
# 用户不同语言项目数量
@project_languages_count = Project.where(user_id:@user.id).joins(:project_language).group("project_languages.name").count
#三个月90d不同语言项目数量
@recent_project_languages_count = Project.where(user_id:@user.id).joins(:project_language).group("project_languages.name").where(created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
# 用户不同种类项目数量
@project_category_count = Project.where(user_id:@user.id).joins(:project_category).group("project_categories.name").count
# 三个月90d不同种类项目数量
@recent_project_category_count = Project.where(user_id:@user.id).joins(:project_category).group("project_categories.name").where(created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
# 用户被fork数量
@fork_count = Project.where(user_id:@user.id).sum('forked_count')
# 三个月90d用户被fork数量
@recent_fork_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).sum('forked_count')
#用户所有项目关注数
@project_watchers_count = Project.where(user_id:@user.id).sum('watchers_count')
#三个月90d用户所有项目关注数
@recent_project_watchers_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).sum('watchers_count')
#用户所有项目点赞数
@project_praises_count = Project.where(user_id:@user.id).sum('praises_count')
#三个月90d用户所有项目点赞数
@recent_project_praises_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).sum('praises_count')
#用户所有项目下的Issue数量
@project_issues_count = Project.where(user_id:@user.id).sum('issues_count')
#三个月90d用户所有项目下的Issue数量
@recent_project_issues_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).sum('issues_count')
#用户创建的总Issue数量
@issues_count = Issue.where(author_id:@user.id).count
#三个月90d用户创建的总Issue数量
@recent_issues_count = Issue.where(author_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
#用户总PR数量
@pullrequest_count = PullRequest.where(user_id:@user.id).count
#三个月90d用户总PR数量
@recent_pullrequest_count = PullRequest.where(user_id:@user.id).count
#####用户画像展示数据#####
#影响力
@influence = (60.0 + @follow_count / (@follow_count + 20.0) * 40.0).to_i
#@recent_influence = (60.0 + @recent_follow_count / (@recent_follow_count + 10.0) * 40.0).to_i
#贡献度
@contribution = (60.0 + @pullrequest_count / (@pullrequest_count + 20.0) * 40.0).to_i
@recent_contribution = (60.0 + @recent_pullrequest_count / (@recent_pullrequest_count + 10.0) * 40.0).to_i
#活跃度
@activity = (60.0 + @issues_count / (@issues_count + 80.0) * 40.0).to_i
@recent_activity = (60.0 + @recent_issues_count / (@recent_issues_count + 10.0) * 40.0).to_i
#项目经验
@experience = 10 * @project_count + 5 * @fork_count + @project_watchers_count + @project_praises_count
@experience = (60.0 + @experience / (@experience + 100.0) * 40.0).to_i
@recent_experience = 10 * @recent_project_count + 5 * @recent_fork_count + @recent_project_watchers_count + @recent_project_praises_count
@recent_experience = (60.0 + @recent_experience / (@recent_experience + 100.0) * 40.0).to_i
#语言能力
@language = (60.0 + @project_languages_count.length / (@project_languages_count.length + 5.0) * 40.0).to_i
@recent_language = (60.0 + @recent_project_languages_count.length / (@recent_project_languages_count.length + 5.0) * 40.0).to_i
#词云图数据
@project_category_count
@recent_project_category_count
#语言百分比
@languages_percent = Hash.new
for key in @project_languages_count.keys do
@languages_percent[key] = @project_languages_count[key].to_f / @project_languages_count.values.sum
end
@recent_languages_percent = Hash.new
for key in @recent_project_languages_count.keys do
@recent_languages_percent[key] = @recent_project_languages_count[key].to_f / @recent_project_languages_count.values.sum
end
#各门语言分数
@each_language_score = Hash.new
for key in @project_languages_count.keys do
@each_language_score[key] = (60.0 + @project_languages_count[key] / (@project_languages_count[key] + 5.0) * 40.0).to_i
end
@recent_each_language_score = Hash.new
for key in @recent_project_languages_count.keys do
@recent_each_language_score[key] = (60.0 + @recent_project_languages_count[key] / (@recent_project_languages_count[key] + 5.0) * 40.0).to_i
end
end
end

View File

@ -56,6 +56,81 @@ class UsersController < ApplicationController
@watchers = paginate(watchers)
end
#def persona
#平台用户总数
#@total_users_count = User.count
#平台被Foller数量
#@total_follow_count = Watcher.count
#平台总项目数
#@total_project_count = Project.count
#平台不同语言项目数量
#@total_project_languages_count = Project.joins(:project_language).group("project_languages.name").count
# 平台不同种类项目数量
#@total_project_category_count = Project.joins(:project_category).group("project_categories.name").count
# 平台用户被fork数量
#@total_fork_count = Project.sum('forked_count')
#平台所有项目关注数
#@total_project_watchers_count = Project.sum('watchers_count')
#平台所有项目点赞数
#@total_project_praises_count = Project.sum('praises_count')
#平台所有项目下的Issue数量
#@total_project_issues_count = Project.sum('issues_count')
#平台所有PR数量
#@total_pullrequest_count = PullRequest.count
#用户被Foller数量
#@follow_count = watchers.where(watchable_id:@user.id).count
#三个月90dFoller数量
#@recent_follow_count = watchers.where(watchable_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
#用户总项目数
#@project_count = Project.where(user_id:@user.id).count
#用户三个月90d总项目数
#@recent_project_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
# 用户不同语言项目数量
#@project_languages_count = Project.where(user_id:@user.id).joins(:project_language).group("project_languages.name").count
#三个月90d不同语言项目数量
#@recent_project_languages_count = Project.where(user_id:@user.id).joins(:project_language).group("project_languages.name").where(created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
# 用户不同种类项目数量
#@project_category_count = Project.where(user_id:@user.id).joins(:project_category).group("project_categories.name").count
# 三个月90d不同种类项目数量
#@recent_project_category_count = Project.where(user_id:@user.id).joins(:project_category).group("project_categories.name").where(created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
# 用户被fork数量
#@fork_count = Project.where(user_id:@user.id).sum('forked_count')
# 三个月90d用户被fork数量
#@recent_fork_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).sum('forked_count')
#用户所有项目关注数
#@project_watchers_count = Project.where(user_id:@user.id).sum('watchers_count')
#三个月90d用户所有项目关注数
#@recent_project_watchers_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight)).sum('watchers_count')
#用户所有项目点赞数
#@project_praises_count = Project.where(user_id:@user.id).sum('praises_count')
#三个月90d用户所有项目点赞数
#@recent_project_praises_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight)).sum('praises_count')
#用户所有项目下的Issue数量
#@project_issues_count = Project.where(user_id:@user.id).sum('issues_count')
#三个月90d用户所有项目下的Issue数量
#@recent_project_issues_count = Project.where(user_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight)).sum('issues_count')
#用户创建的总Issue数量
#@issues_count = Issue.where(author_id:@user.id).count
#三个月90d用户创建的总Issue数量
#@recent_issues_count = Issue.where(author_id:@user.id,created_on: (Time.now.midnight - 90.day)..Time.now.midnight).count
#用户总PR数量
#@pullrequest_count = PullRequest.where(user_id:@user.id).count
#三个月90d用户总PR数量
#@recent_pullrequest_count = PullRequest.where(user_id:@user.id).count
#end
def update
@user = User.find params[:id]
@user.update!(user_params)

View File

@ -0,0 +1,2 @@
module PersonaHelper
end

View File

@ -0,0 +1,18 @@
<h1> 影响力 <%=@influence %> </h1>
<h1> 近期影响力 <%=@recent_influence %> </h1>
<h1> 贡献度 <%=@contribution %> </h1>
<h1> 近期贡献度 <%=@recent_contribution %> </h1>
<h1> 活跃度 <%=@activity %> </h1>
<h1> 近期活跃度 <%=@recent_activity %> </h1>
<h1> 项目经验 <%=@experience %> </h1>
<h1> 近期项目经验 <%=@recent_experience %> </h1>
<h1> 语言能力 <%=@language %> </h1>
<h1> 近期语言能力 <%=@recent_language %> </h1>
<h1> 词云图数据 <%=@project_category_count %> </h1>
<h1> 近期词云图数据 <%=@recent_project_category_count %> </h1>
<h1> 语言百分比 <%=@languages_percent %> </h1>
<h1> 近期语言百分比 <%=@recent_languages_percent %> </h1>
<h1> 各门语言分数 <%=@each_language_score %> </h1>
<h1> 近期各门语言分数 <%=@recent_each_language_score %> </h1>

View File

@ -1,5 +1,6 @@
Rails.application.routes.draw do
get 'persona/show/:id', to:'persona#show'
require 'sidekiq/web'
require 'sidekiq/cron/web'
require 'admin_constraint'
@ -198,6 +199,7 @@ Rails.application.routes.draw do
get :projects
get :watch_users
get :fan_users
#get :persona, :to => 'users#persona'
end
collection do
post :following

BIN
dump.rdb

Binary file not shown.

View File

@ -0,0 +1,12 @@
require 'rails_helper'
RSpec.describe PersonaController, type: :controller do
describe "GET #show" do
it "returns http success" do
get :show
expect(response).to have_http_status(:success)
end
end
end

View File

@ -0,0 +1,15 @@
require 'rails_helper'
# Specs in this file have access to a helper object that includes
# the PersonaHelper. For example:
#
# describe PersonaHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
RSpec.describe PersonaHelper, type: :helper do
pending "add some examples to (or delete) #{__FILE__}"
end

View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe "persona/show.html.erb", type: :view do
pending "add some examples to (or delete) #{__FILE__}"
end