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