From 11155590fa5f397d682577c8f41874d394dfcea5 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 8 Jan 2020 20:09:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 1 + .../subjects/user_used_info_service.rb | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 app/services/subjects/user_used_info_service.rb diff --git a/app/models/user.rb b/app/models/user.rb index 54aa8d85e..dd606f7bc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -43,6 +43,7 @@ class User < ApplicationRecord has_many :shixun_members, :dependent => :destroy has_many :shixuns, :through => :shixun_members has_many :myshixuns, :dependent => :destroy + has_many :games, :dependent => :destroy has_many :study_shixuns, through: :myshixuns, source: :shixun # 已学习的实训 has_many :course_messages has_many :courses, foreign_key: 'tea_id', dependent: :destroy diff --git a/app/services/subjects/user_used_info_service.rb b/app/services/subjects/user_used_info_service.rb new file mode 100644 index 000000000..4d5f54f9e --- /dev/null +++ b/app/services/subjects/user_used_info_service.rb @@ -0,0 +1,30 @@ +class Subject::UserUsedInfoService < ApplicationService + attr_reader :subject, :shixun_ids + + def initialize(subject) + @subject = subject + @shixun_ids = subject.shixuns.pluck(:id) + + end + + def call + users = User.joins(:myshixuns).where(myshixuns: {shixun_id: shixun_ids}).group(:user_id) + + users_info = [] + users.includes(:myshixuns, :games).each do |user| + games = user.games + name = "#{user.lastname}#{user.firstname}" + passed_myshixun_count = user.myshixuns.select{|m| m.status == 1}.size + passed_games_count = games.select{|g| g.status == 2}.size + code_line_count = "未完成" + evaluate_count = games.sum(evaluate_count) + cost_time = games.sum(:cost_time) + user_login = user.login + users_info << {login: user_login, name: name, passed_myshixun_count: passed_myshixun_count, + passed_games_count: passed_games_count, code_line_count: code_line_count, + evaluate_count: evaluate_count, cost_time: cost_time} + end + users_info + end + +end