From 8928f1c4919ad7d661ed046dc1e31192c87f45b3 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 13 Feb 2020 19:58:41 +0800 Subject: [PATCH] 1 --- app/services/subjects/user_used_info_service.rb | 2 +- lib/tasks/statistic_subject_info.rake | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/app/services/subjects/user_used_info_service.rb b/app/services/subjects/user_used_info_service.rb index 78dbfe8e9..2e6594575 100644 --- a/app/services/subjects/user_used_info_service.rb +++ b/app/services/subjects/user_used_info_service.rb @@ -13,7 +13,7 @@ class Subjects::UserUsedInfoService < ApplicationService users_info = [] users = User.includes(myshixuns: :games).where(myshixuns: {shixun_id: shixun_ids}, games: {status: 2}, users: {is_test: false}) users.find_in_batches(batch_size: 500) do |u| - Parallel.each(u, in_processes: 2) do |user| + u.each do |user| myshixuns = user.myshixuns.select{|m| shixun_ids.include?(m.shixun_id)} name = "#{user.lastname}#{user.firstname}" passed_myshixun_count = myshixuns.select{|m| m.status == 1}.size diff --git a/lib/tasks/statistic_subject_info.rake b/lib/tasks/statistic_subject_info.rake index e338754f7..f7e6ca100 100644 --- a/lib/tasks/statistic_subject_info.rake +++ b/lib/tasks/statistic_subject_info.rake @@ -119,29 +119,26 @@ namespace :subjects do subjects = Subject.where(status: 2, hidden: 0) column_value = "user_id, subject_id, username, passed_myshixun_count, passed_games_count, " + "code_line_count, evaluate_count, cost_time, created_at, updated_at" - subjects.find_in_batches(batch_size: 50) do |s| - str = [] - Parallel.each(s, in_processes: 4) do |subject| + Parallel.each_with_index(s, in_processes: 4) do |subject, index, str = []| puts("---------------------user_info_statistic: #{subject.id}") data = Subjects::UserUsedInfoService.call(subject) data.each do |key| - next if key[:user_id].nil? str << ("(#{key[:user_id]}, #{subject.id}, '#{key[:name].gsub(/'/, '"')}', #{key[:passed_myshixun_count]}, " + "#{key[:passed_games_count]}, #{key[:code_line_count]}, #{key[:evaluate_count]}, #{key[:cost_time]}, " + "'#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')") if str.size == 1000 - sql = "REPLACE INTO subject_user_infos(#{column_value}) VALUES #{str}" + sql = "REPLACE INTO subject_user_infos(#{column_value}) VALUES #{str.join(",")}" ActiveRecord::Base.connection.execute sql end end + if str > 0 + sql = "REPLACE INTO subject_user_infos(#{column_value}) VALUES #{str.join(",")}" + puts sql + ActiveRecord::Base.connection.execute sql + end end end - if buffer_size > 0 - sql = "REPLACE INTO subject_user_infos(#{column_value}) VALUES #{str}" - puts sql - ActiveRecord::Base.connection.execute sql - end puts("---------------------user_info_statistic_end") Rails.logger.info("---------------------user_info_statistic_end") end