From 3dbc4814378bcf4388b8ecd834bbde8778acc645 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 08:53:17 +0800 Subject: [PATCH 01/31] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20190426010412_add_is_invalid_to_student_works_scores.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb b/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb index 2d782f924..7b893db6d 100644 --- a/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb +++ b/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb @@ -1,6 +1,6 @@ class AddIsInvalidToStudentWorksScores < ActiveRecord::Migration[5.2] def change - add_column :student_works_scores, :is_invalid, :boolean, default: false + # add_column :student_works_scores, :is_invalid, :boolean, default: false StudentWorksScore.where("score is not null").order("id desc").find_each do |score| unless score.is_invalid From be653f8a9430c0a0dd93b7e2ddc3497bfcb4853c Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 08:57:50 +0800 Subject: [PATCH 02/31] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20190426010412_add_is_invalid_to_student_works_scores.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb b/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb index 7b893db6d..2d782f924 100644 --- a/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb +++ b/db/migrate/20190426010412_add_is_invalid_to_student_works_scores.rb @@ -1,6 +1,6 @@ class AddIsInvalidToStudentWorksScores < ActiveRecord::Migration[5.2] def change - # add_column :student_works_scores, :is_invalid, :boolean, default: false + add_column :student_works_scores, :is_invalid, :boolean, default: false StudentWorksScore.where("score is not null").order("id desc").find_each do |score| unless score.is_invalid From db2b3a4058f0949644e94a67d5bdf9f333de3eb4 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:03:44 +0800 Subject: [PATCH 03/31] =?UTF-8?q?=E6=AF=95=E8=AE=BE=E9=80=89=E9=A2=98?= =?UTF-8?q?=E5=88=86=E7=8F=AD=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/graduation_topics_controller.rb | 10 ---------- app/views/graduation_topics/show.json.jbuilder | 8 +------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index bcc947642..36f51ce6e 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -45,16 +45,6 @@ class GraduationTopicsController < ApplicationController end ## 分页参数 @current_user = current_user - course_group_ids = @course.course_members.where(user_id: current_user.id, role: [1,2,3]).pluck(:course_group_id).uniq - #6.11 -hs - if course_group_ids.present? - if course_group_ids.include?(0) - course_group_ids = @course.course_groups.pluck(:id) - end - end - - @group_list = CourseGroup.where(id: course_group_ids) - page = params[:page] || 1 limit = params[:limit] || 50 @users_count = @student_graduation_topics.try(:count).to_i diff --git a/app/views/graduation_topics/show.json.jbuilder b/app/views/graduation_topics/show.json.jbuilder index 440dc776e..a75ac5240 100644 --- a/app/views/graduation_topics/show.json.jbuilder +++ b/app/views/graduation_topics/show.json.jbuilder @@ -7,13 +7,7 @@ json.edit_url edit_course_graduation_topic_path(@course, graduation_topic_id: @g json.users_count @users_count json.course_identity @current_user.course_identity(@course) json.user_selected_topic @graduation_topic.user_status(current_user.id) - -json.group_list do - json.array! @group_list do |group| - json.course_group_id group.id - json.group_name group.name - end -end +json.group_list @course.teacher_group(current_user.id) # 列表数据 json.users_list do From ee2838bd9d101a9220031363a70a694dbb83ec61 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 09:10:33 +0800 Subject: [PATCH 04/31] =?UTF-8?q?=E6=AF=95=E8=AE=BE=E5=88=86=E7=BB=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=B0=83=E6=95=B4=E6=9C=80=E5=A4=A7=E5=88=86?= =?UTF-8?q?=E7=BB=84=E4=BA=BA=E6=95=B0=E7=9A=84=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/migrate/20190505093440_init_use_index.rb | 6 +++--- db/migrate/20190621010002_change_default_to_max_num.rb | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20190621010002_change_default_to_max_num.rb diff --git a/db/migrate/20190505093440_init_use_index.rb b/db/migrate/20190505093440_init_use_index.rb index d885c3a9d..b7c3101dd 100644 --- a/db/migrate/20190505093440_init_use_index.rb +++ b/db/migrate/20190505093440_init_use_index.rb @@ -2,8 +2,8 @@ class InitUseIndex < ActiveRecord::Migration[5.2] def change remove_index :users, name: :index_users_on_login if index_exists?(:users, :login, name: :index_users_on_login) remove_index :users, name: :index_users_on_mail if index_exists?(:users, :mail, name: :index_users_on_mail) - add_index :users, :login, unique: true - add_index :users, :mail, unique: true - add_index :users, :phone, unique: true + # add_index :users, :login, unique: true + # add_index :users, :mail, unique: true + # add_index :users, :phone, unique: true end end diff --git a/db/migrate/20190621010002_change_default_to_max_num.rb b/db/migrate/20190621010002_change_default_to_max_num.rb new file mode 100644 index 000000000..435756cd8 --- /dev/null +++ b/db/migrate/20190621010002_change_default_to_max_num.rb @@ -0,0 +1,5 @@ +class ChangeDefaultToMaxNum < ActiveRecord::Migration[5.2] + def change + change_column :graduation_tasks, :max_num, :integer, default: 5 + end +end From 82cc18596c9f9488fe60d4befefe8f5dc450c8ee Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:17:43 +0800 Subject: [PATCH 05/31] =?UTF-8?q?=E9=80=89=E9=A2=98=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E7=94=A8=E6=88=B7=E6=98=AF=E5=90=A6=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E4=BA=86=E5=85=B6=E4=BB=96=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/graduation_topics_controller.rb | 4 ++++ app/views/graduation_topics/show.json.jbuilder | 1 + 2 files changed, 5 insertions(+) diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index 36f51ce6e..366b6d9ca 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -45,6 +45,10 @@ class GraduationTopicsController < ApplicationController end ## 分页参数 @current_user = current_user + user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, + status: [0, 1], + graduation_topic_id: @graduation_topic.pluck(:id)) + @user_selected = user_graduation_topics.size > 0 page = params[:page] || 1 limit = params[:limit] || 50 @users_count = @student_graduation_topics.try(:count).to_i diff --git a/app/views/graduation_topics/show.json.jbuilder b/app/views/graduation_topics/show.json.jbuilder index a75ac5240..87fcc87aa 100644 --- a/app/views/graduation_topics/show.json.jbuilder +++ b/app/views/graduation_topics/show.json.jbuilder @@ -8,6 +8,7 @@ json.users_count @users_count json.course_identity @current_user.course_identity(@course) json.user_selected_topic @graduation_topic.user_status(current_user.id) json.group_list @course.teacher_group(current_user.id) +json.user_selected @user_selected # 列表数据 json.users_list do From 3cc0e9b7ba7c414bd3e7441704fda7f625aab3b1 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 21 Jun 2019 09:17:52 +0800 Subject: [PATCH 06/31] fix bug --- .../exercises/exercise_lists.json.jbuilder | 2 +- app/views/polls/poll_lists.json.jbuilder | 1 + lib/tasks/exercise_publish.rake | 155 +++++++++++------- 3 files changed, 99 insertions(+), 59 deletions(-) diff --git a/app/views/exercises/exercise_lists.json.jbuilder b/app/views/exercises/exercise_lists.json.jbuilder index b51e781c7..5e7c83b35 100644 --- a/app/views/exercises/exercise_lists.json.jbuilder +++ b/app/views/exercises/exercise_lists.json.jbuilder @@ -15,6 +15,7 @@ json.exercise_types do json.exercise_id @exercise.id json.subjective @subjective_type #是否包含主观题,1为包括,0为不包括 json.exercise_end_time ((@ex_user_end_time.nil? || @ex_user_end_time < Time.now) ? "--" : how_much_time(@ex_user_end_time)) + json.groups_count @exercise_course_groups.size end if @exercise_current_user_status == 0 #当为老师的时候 @@ -29,7 +30,6 @@ if @exercise_current_user_status == 0 #当为老师的时候 else json.course_groups [] end - end if @current_user_ex_answers.present? diff --git a/app/views/polls/poll_lists.json.jbuilder b/app/views/polls/poll_lists.json.jbuilder index fef129599..8278ac3e0 100644 --- a/app/views/polls/poll_lists.json.jbuilder +++ b/app/views/polls/poll_lists.json.jbuilder @@ -16,6 +16,7 @@ json.poll_types do json.user_permission @poll_current_user_status #当前用户存在且为课堂教师/管理员/超级管理员时为0 ,其他否则为1 json.poll_id @poll.id json.poll_end_time @poll.end_time + json.groups_count @poll_course_groups.size end if @poll_current_user_status == 0 diff --git a/lib/tasks/exercise_publish.rake b/lib/tasks/exercise_publish.rake index 8a13154cc..7d80dc2e9 100644 --- a/lib/tasks/exercise_publish.rake +++ b/lib/tasks/exercise_publish.rake @@ -25,83 +25,118 @@ namespace :exercise_publish do end end - # def calculate_student_score(exercise, user) - # score = 0 - # score1 = 0 - # score2 = 0 - # score3 = 0 - # score4 = 0 - # exercise_qustions = exercise.exercise_questions - # exercise_qustions.each do |question| - # if question.question_type != 5 - # answer = question.exercise_answers.where("#{ExerciseAnswer.table_name}.user_id = #{user.id}") - # if question.question_type == 3 - # standard_answer =[] - # question.exercise_standard_answers.each do |answer| - # standard_answer << answer.answer_text.strip.downcase + #计算试卷的总分和试卷的答题状态 + # def calculate_student_score(exercise,user) + # score1 = 0.0 #选择题/判断题 + # score2 = 0.0 #填空题 + # score5 = 0.0 #实训题 + # ques_stand = [] #问题是否正确 + # exercise_questions = exercise.exercise_questions + # exercise_questions.each do |q| + # if q.question_type != 5 + # answers_content = q.exercise_answers.search_answer_users("user_id",user.id) #学生的答案 + # else + # answers_content = q.exercise_shixun_answers.search_shixun_answers("user_id",user.id) #学生的答案 + # end + # if q.question_type <= 2 #为选择题或判断题时 + # answer_choice_array = [] + # answers_content.each do |a| + # answer_choice_array.push(a.exercise_choice.choice_position) #学生答案的位置 + # end + # user_answer_content = answer_choice_array.sort + # standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个 + # if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分 + # if standard_answer.count > 0 + # multi_each_score = (q.question_score / standard_answer.count) #当多选答案正确时,每个answer的分数均摊。 + # else + # multi_each_score = 0.0 # end + # answers_content.update_all(:score => multi_each_score) + # score1 = score1 + q.question_score + # end + # elsif q.question_type == 3 #填空题 + # null_standard_answer = q.exercise_standard_answers + # standard_answer_array = null_standard_answer.select(:exercise_choice_id,:answer_text) + # standard_answer_ids = standard_answer_array.pluck(:exercise_choice_id).reject(&:blank?).uniq #标准答案的exercise_choice_id数组 + # standard_answer_count = standard_answer_ids.count + # if standard_answer_count > 0 #存在标准答案时才有分数 + # each_standard_score = (q.question_score.to_f / standard_answer_count).round(1) #每一空的得分 # else - # standard_answer = question.exercise_standard_answers.first + # each_standard_score = 0.0 # end - # - # unless answer.empty? - # # 问答题有多个答案 - # if question.question_type == 3 && !standard_answer.empty? - # if standard_answer.include?(answer.first.answer_text.strip.downcase) - # score1 = score1+ question.question_score unless question.question_score.nil? - # end - # elsif question.question_type == 1 && !standard_answer.nil? - # if answer.first.exercise_choice.choice_position == standard_answer.exercise_choice_id - # score2 = score2 + question.question_score unless question.question_score.nil? + # if q.is_ordered + # answers_content.each do |u| + # i_standard_answer = standard_answer_array.where(exercise_choice_id:u.exercise_choice_id).pluck(:answer_text).reject(&:blank?).map!(&:downcase) #该选项的全部标准答案 + # if i_standard_answer.include?(u.answer_text.downcase) #该空的标准答案包含用户的答案才有分数 + # u.update_attribute("score",each_standard_score) + # score2 = score2 + each_standard_score # end - # elsif question.question_type == 2 && !standard_answer.nil? - # arr = get_mulscore(question, user) - # if arr.to_i == standard_answer.exercise_choice_id - # score3 = score3 + question.question_score unless question.question_score.nil? + # end + # else + # st_answer_text = standard_answer_array.pluck(:answer_text).reject(&:blank?).map!(&:downcase) + # answers_content.each do |u| + # u_answer_text = u.answer_text.downcase + # if st_answer_text.include?(u_answer_text) #只要标准答案包含用户的答案,就有分数。同时,下一次循环时,就会删除该标准答案。防止用户的相同答案获分 + # u.update_attribute("score",each_standard_score) + # score2 = score2 + each_standard_score + # st_answer_text.delete(u_answer_text) # end # end # end - # else - # question.exercise_shixun_challenges.each do |exercise_cha| - # game = Game.where(:user_id => user.id, :challenge_id => exercise_cha.challenge_id).first + # elsif q.question_type == 5 #实训题时,主观题这里不评分 + # q.exercise_shixun_challenges.each do |exercise_cha| + # game = Game.user_games(user.id,exercise_cha.challenge_id).first #当前用户的关卡 # if game.present? # exercise_cha_score = 0 # answer_status = 0 - # cha_path = exercise_cha.challenge.path.present? ? exercise_cha.challenge.path.split(";") : [] - # challeng_path = cha_path.reject(&:blank?)[0].try(:strip) + # cha_path = challenge_path exercise_cha.challenge.path # if game.status == 2 && game.final_score >= 0 - # exercise_cha_score = exercise_cha.question_score + # exercise_cha_score = game.real_score exercise_cha.question_score #每一关卡的得分 # answer_status = 1 # end - # if exercise_cha.exercise_shixun_answers.where(:user_id => user.id).empty? - # if GameCode.where(:game_id => game.try(:id), :path => challeng_path).first.present? - # game_code = GameCode.where(:game_id => game.try(:id), :path => challeng_path).first + # if exercise_cha.exercise_shixun_answers.search_shixun_answers("user_id",user.id).blank? #把关卡的答案存入试卷的实训里 + # game_challenge = game.game_codes.search_challenge_path(cha_path).first + # if game_challenge.present? + # game_code = game_challenge # code = game_code.try(:new_code) # else - # begin - # g = Gitlab.client - # Rails.logger.info "commit_exercise_path---- #{challeng_path}" - # if game.present? - # code = g.files(game.myshixun.gpid, challeng_path, "master").try(:content) - # else - # code = g.files(question.shixun.gpid, challeng_path, "master").try(:content) - # end - # code = tran_base64_decode64(code) - # rescue Exception => e - # @error_messages = e.message - # Rails.logger.info "commit_exercise---- #{@error_messages}" - # end + # code = git_fle_content(exercise_cha.shixun.repo_path,cha_path) # end - # ExerciseShixunAnswer.create(:exercise_question_id => question.id, :exercise_shixun_challenge_id => exercise_cha.id, :user_id => user.id, - # :score => exercise_cha_score, :answer_text => code, :status => answer_status) - # + # sx_option = { + # :exercise_question_id => q.id, + # :exercise_shixun_challenge_id => exercise_cha.id, + # :user_id => user.id, + # :score => exercise_cha_score, + # :answer_text => code, + # :status => answer_status + # } + # ex_shixun_answer = ExerciseShixunAnswer.new(sx_option) + # ex_shixun_answer.save! # end - # score4 += exercise_cha_score + # score5 += exercise_cha_score # end # end # end + # user_scores = answers_content.score_reviewed.pluck(:score).sum + # if user_scores > 0 + # stand_answer = 1 + # else + # stand_answer = 0 + # end + # ques_option = { + # "q_id":q.id, #该问题的id + # "q_type":q.question_type, + # "q_position":q.question_number, #该问题的位置 + # "stand_status":stand_answer, #该问题是否正确,1为正确,0为错误 + # "user_score":user_scores #每个问题的总得分 + # } + # ques_stand.push(ques_option) # end - # score = score1 + score2 + score3 + score4 + # total_score = score1 + score2 + score5 + # { + # "total_score":total_score, + # "stand_status":ques_stand + # } # end task :publish => :environment do @@ -169,6 +204,9 @@ namespace :exercise_publish do end task :end => :environment do + # include ExercisesHelper + # include ApplicationController + exercises = Exercise.where("end_time <=? and exercise_status = 2",Time.now) exercises.each do |exercise| course = exercise.course @@ -180,7 +218,7 @@ namespace :exercise_publish do s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) - if exercise_user.user.exercise_answer.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? + if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? exercise_user.update_attributes(:subjective_score => 0) end end @@ -201,11 +239,12 @@ namespace :exercise_publish do s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) - if exercise_user.user.exercise_answer.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? + if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? exercise_user.update_attributes(:subjective_score => 0) end end end end + logger.info("") end end From 79328e29207b6f6437f089b188d852febd79f16d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:20:33 +0800 Subject: [PATCH 07/31] =?UTF-8?q?=E9=80=89=E9=A2=98=E6=8A=A5500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/graduation_topics_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index 366b6d9ca..56a0d5a3f 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -47,7 +47,7 @@ class GraduationTopicsController < ApplicationController @current_user = current_user user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1], - graduation_topic_id: @graduation_topic.pluck(:id)) + graduation_topic_id: @graduation_topic.id) @user_selected = user_graduation_topics.size > 0 page = params[:page] || 1 limit = params[:limit] || 50 From 281417e6b27471a7bfa6e6e613da84385f21180b Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:29:46 +0800 Subject: [PATCH 08/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E9=80=89=E9=A2=98?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E4=B8=AD=E5=AD=A6=E7=94=9F=E9=80=89=E9=A2=98?= =?UTF-8?q?=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/graduation_topics_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index 56a0d5a3f..cd1726d1c 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -46,8 +46,7 @@ class GraduationTopicsController < ApplicationController ## 分页参数 @current_user = current_user user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, - status: [0, 1], - graduation_topic_id: @graduation_topic.id) + status: [0, 1]) @user_selected = user_graduation_topics.size > 0 page = params[:page] || 1 limit = params[:limit] || 50 From 2aaa0fe652000239969dedf3ccf684fe82917658 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:31:10 +0800 Subject: [PATCH 09/31] =?UTF-8?q?=E6=98=AF=E5=90=A6=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/graduation_topics_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/graduation_topics_controller.rb b/app/controllers/graduation_topics_controller.rb index cd1726d1c..a6903dbc7 100644 --- a/app/controllers/graduation_topics_controller.rb +++ b/app/controllers/graduation_topics_controller.rb @@ -24,8 +24,7 @@ class GraduationTopicsController < ApplicationController end # 当前用户是否已经选过题 - # @user_selected = StudentGraduationTopic.where(graduation_topic_id: @graduation_topic, user_id: current_user.id).count > 0 - user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1], graduation_topic_id: @graduation_topic.pluck(:id)) #6.12 -hs + user_graduation_topics = @course.student_graduation_topics.where(user_id: current_user.id, status: [0, 1]) #6.12 -hs @user_selected = user_graduation_topics.size > 0 ## 分页参数 page = params[:page] || 1 From 559eb0da65cf52ad753c693a86a869400afffa7f Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:33:32 +0800 Subject: [PATCH 10/31] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E4=B8=BB=E9=A1=B5=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index dc68f47c6..17281087b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -61,7 +61,7 @@ class UsersController < ApplicationController # 新消息数 @new_message = @user.tidings.where("created_at > '#{@user.click_time}'").count > 0 || @user.private_messages.where("created_at > '#{@user.click_time}'").count > 0 - @user_url = "#{@old_domain}/users/#{@user.login}" + @user_url = "/users/#{@user.login}" @career = Career.where(status: true).order("created_at asc").pluck(:id, :name) ec_user = EcSchoolUser.where(:user_id => current_user.id).first @auth = ec_user ? "#{@old_domain}/ecs/department?school_id=#{ec_user.school_id}" : nil From c19744e25fd6a604a123850d835b08379ed5159a Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:42:19 +0800 Subject: [PATCH 11/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/index.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/courses/index.json.jbuilder b/app/views/courses/index.json.jbuilder index 23e8715af..58a75e317 100644 --- a/app/views/courses/index.json.jbuilder +++ b/app/views/courses/index.json.jbuilder @@ -10,7 +10,7 @@ json.courses do json.tasks_count get_tasks_count course json.visits course.visits json.is_public course.is_public - json.is_accessible course.is_public? ? true : (course.tea_id == @user.id || @user.course_identity(course) < 5) + json.is_accessible course.is_public? || course.tea_id == @user.id || @user.course_identity(course) < Course::NORMAL json.is_end course.is_end json.first_category_url module_url(course.course_modules.first, course) end From db58702645069aa7dcefa4fb32f330854aca96f1 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:42:44 +0800 Subject: [PATCH 12/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/index.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/courses/index.json.jbuilder b/app/views/courses/index.json.jbuilder index 58a75e317..94da87af5 100644 --- a/app/views/courses/index.json.jbuilder +++ b/app/views/courses/index.json.jbuilder @@ -10,7 +10,7 @@ json.courses do json.tasks_count get_tasks_count course json.visits course.visits json.is_public course.is_public - json.is_accessible course.is_public? || course.tea_id == @user.id || @user.course_identity(course) < Course::NORMAL + json.is_accessible course.is_public? || @user.course_identity(course) < Course::NORMAL json.is_end course.is_end json.first_category_url module_url(course.course_modules.first, course) end From 63dba0f703041c5b4bf3bd44b3eeb2d349863774 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 09:44:43 +0800 Subject: [PATCH 13/31] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20190517080313_add_test_set_average_for_challenges.rb | 2 +- .../20190517083326_change_test_set_averger_for_challenges.rb | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 db/migrate/20190517083326_change_test_set_averger_for_challenges.rb diff --git a/db/migrate/20190517080313_add_test_set_average_for_challenges.rb b/db/migrate/20190517080313_add_test_set_average_for_challenges.rb index 59fabec9d..cac1d80bc 100644 --- a/db/migrate/20190517080313_add_test_set_average_for_challenges.rb +++ b/db/migrate/20190517080313_add_test_set_average_for_challenges.rb @@ -1,5 +1,5 @@ class AddTestSetAverageForChallenges < ActiveRecord::Migration[5.2] def change - add_column :challenges, :test_set_average, :boolean, :default => false + add_column :challenges, :test_set_average, :boolean, :default => true end end diff --git a/db/migrate/20190517083326_change_test_set_averger_for_challenges.rb b/db/migrate/20190517083326_change_test_set_averger_for_challenges.rb deleted file mode 100644 index bf474245f..000000000 --- a/db/migrate/20190517083326_change_test_set_averger_for_challenges.rb +++ /dev/null @@ -1,5 +0,0 @@ -class ChangeTestSetAvergerForChallenges < ActiveRecord::Migration[5.2] - def change - change_column :challenges, :test_set_average, :boolean, :default => true - end -end From 544152cdf60aee6287003304fefcaa19a9958d69 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 09:57:38 +0800 Subject: [PATCH 14/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 2b988e89c..ec34126ac 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -77,11 +77,17 @@ class CoursesController < ApplicationController # 根据搜索关键字进一步筛选 if params[:search].present? # REDO:Extension - user_ids = User.includes(user_extension: :school).where("schools.name like ?", "%#{params[:search]}%").pluck(:id) - course_ids = CourseMember.includes(:user, :course).where("course_members.course_id in (?) and course_members.role in (1,2,3) - and CONCAT(users.lastname, users.firstname) like ?", @courses.map(&:id), "%#{params[:search]}%") - .pluck(:course_id) - @courses = @courses.where("name like ?", "%#{params[:search]}%").or(@courses.where(tea_id: user_ids)).or(@courses.where(id: course_ids)) + #user_ids = User.includes(user_extension: :school).where("schools.name like ?", "%#{params[:search]}%").pluck(:id) + #course_ids = CourseMember.includes(:user, :course).where("course_members.course_id in (?) and course_members.role in (1,2,3) + # and CONCAT(users.lastname, users.firstname) like ?", @courses.map(&:id), "%#{params[:search]}%") + # .pluck(:course_id) + #@courses = @courses.where("name like ?", "%#{params[:search]}%").or(@courses.where(tea_id: user_ids)).or(@courses.where(id: course_ids)) + # 6:21 daiao + sql = %Q{ + (course_members.role in (1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword + or schools.name like :keyword + } + @courses.includes(course_members: [user: [user_extension: :school]]).where(sql, keyword: "%#{params[:search]}%") end @courses_count = @courses.size From 62bd057317c28271e1688c4af5f17fd3c1e2d94c Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 21 Jun 2019 09:59:21 +0800 Subject: [PATCH 15/31] fix bug --- app/controllers/exercises_controller.rb | 1 + app/controllers/poll_votes_controller.rb | 11 ++++++++++- app/controllers/polls_controller.rb | 2 ++ app/views/exercises/exercise_lists.json.jbuilder | 2 +- app/views/polls/poll_lists.json.jbuilder | 2 +- lib/tasks/exercise_publish.rake | 2 +- 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 2239f570d..e2d6110bd 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1140,6 +1140,7 @@ class ExercisesController < ApplicationController exercise_ids = [@exercise.id] @exercise_status = @exercise.get_exercise_status(current_user.id) @course_all_members = @course.students + @c_group_counts = @course.course_groups_count question_types = @exercise.exercise_questions.pluck(:question_type) @exercise_publish_count = get_user_permission_course(exercise_ids,2).count #判断是否有已发布的分班 @exercise_unpublish_count = get_user_permission_course(exercise_ids,1).count #判断是否有未发布的分班 diff --git a/app/controllers/poll_votes_controller.rb b/app/controllers/poll_votes_controller.rb index eef953d5e..d8a4ce852 100644 --- a/app/controllers/poll_votes_controller.rb +++ b/app/controllers/poll_votes_controller.rb @@ -30,16 +30,25 @@ class PollVotesController < ApplicationController #begin if question_type == 1 if user_votes.present? #用户曾经回答过的,答案选择不一样,否则新建 + logger.info("########___________user_votes.present1111____________________#######") current_user_answer = user_votes.first - if current_user_answer.poll_answer_id != question_answer_id #如果说更换了答案,则以前的答案删除,并新建记录 + if current_user_answer&.poll_answer_id != question_answer_id #如果说更换了答案,则以前的答案删除,并新建记录 + logger.info("########___________user_votes.present22222____________________#######") + current_user_answer.destroy PollVote.create(vote_answer_params) else + logger.info("########___________user_votes.present33333____________________#######") + if question_answer_text.present? + logger.info("########___________user_votes.present4444444____________________#######") + current_user_answer.update_attribute("vote_text", question_answer_text) end end else + logger.info("########___________user_votes.present555555____________________#######") + PollVote.create(vote_answer_params) end elsif question_type == 2 #多选题的话,答案应该是1个以上 diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index ae93357cc..675e3283c 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -956,6 +956,8 @@ class PollsController < ApplicationController @poll_publish_count = get_user_permission_course(poll_ids,2).count @poll_unpublish_count = get_user_permission_course(poll_ids,1).count @course_all_members = @course.students + @poll_group_counts = @course.course_groups_count + if @user_course_identity < Course::STUDENT #当前为老师,而且老师只能查看自己班级的/课堂的问卷 @poll_current_user_status = 0 @poll_users_list = @poll.all_poll_users(current_user.id).distinct #该老师分班的全部学生 diff --git a/app/views/exercises/exercise_lists.json.jbuilder b/app/views/exercises/exercise_lists.json.jbuilder index 5e7c83b35..26723c894 100644 --- a/app/views/exercises/exercise_lists.json.jbuilder +++ b/app/views/exercises/exercise_lists.json.jbuilder @@ -15,7 +15,7 @@ json.exercise_types do json.exercise_id @exercise.id json.subjective @subjective_type #是否包含主观题,1为包括,0为不包括 json.exercise_end_time ((@ex_user_end_time.nil? || @ex_user_end_time < Time.now) ? "--" : how_much_time(@ex_user_end_time)) - json.groups_count @exercise_course_groups.size + json.groups_count @c_group_counts end if @exercise_current_user_status == 0 #当为老师的时候 diff --git a/app/views/polls/poll_lists.json.jbuilder b/app/views/polls/poll_lists.json.jbuilder index 8278ac3e0..f134967c9 100644 --- a/app/views/polls/poll_lists.json.jbuilder +++ b/app/views/polls/poll_lists.json.jbuilder @@ -16,7 +16,7 @@ json.poll_types do json.user_permission @poll_current_user_status #当前用户存在且为课堂教师/管理员/超级管理员时为0 ,其他否则为1 json.poll_id @poll.id json.poll_end_time @poll.end_time - json.groups_count @poll_course_groups.size + json.groups_count @poll_group_counts end if @poll_current_user_status == 0 diff --git a/lib/tasks/exercise_publish.rake b/lib/tasks/exercise_publish.rake index 7d80dc2e9..bc9330b66 100644 --- a/lib/tasks/exercise_publish.rake +++ b/lib/tasks/exercise_publish.rake @@ -245,6 +245,6 @@ namespace :exercise_publish do end end end - logger.info("") + Rails.logger.info("log--------------------------------exercise_end completed") end end From 85df7ce8fc243b357d44c3d0a40bade6011bdde9 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 10:01:53 +0800 Subject: [PATCH 16/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ec34126ac..31e886d36 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -87,7 +87,7 @@ class CoursesController < ApplicationController (course_members.role in (1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword or schools.name like :keyword } - @courses.includes(course_members: [user: [user_extension: :school]]).where(sql, keyword: "%#{params[:search]}%") + @courses = @courses.includes(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") end @courses_count = @courses.size From 843f6becc989dd139b2c3ce0f0fe1005506b674e Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 21 Jun 2019 10:04:55 +0800 Subject: [PATCH 17/31] fix bug --- app/controllers/poll_votes_controller.rb | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/app/controllers/poll_votes_controller.rb b/app/controllers/poll_votes_controller.rb index d8a4ce852..81126b044 100644 --- a/app/controllers/poll_votes_controller.rb +++ b/app/controllers/poll_votes_controller.rb @@ -30,26 +30,21 @@ class PollVotesController < ApplicationController #begin if question_type == 1 if user_votes.present? #用户曾经回答过的,答案选择不一样,否则新建 - logger.info("########___________user_votes.present1111____________________#######") current_user_answer = user_votes.first if current_user_answer&.poll_answer_id != question_answer_id #如果说更换了答案,则以前的答案删除,并新建记录 - logger.info("########___________user_votes.present22222____________________#######") - current_user_answer.destroy - PollVote.create(vote_answer_params) + user_votes = PollVote.new(vote_answer_params) + user_votes.save! else - logger.info("########___________user_votes.present33333____________________#######") if question_answer_text.present? - logger.info("########___________user_votes.present4444444____________________#######") current_user_answer.update_attribute("vote_text", question_answer_text) end end else - logger.info("########___________user_votes.present555555____________________#######") - - PollVote.create(vote_answer_params) + user_votes = PollVote.new(vote_answer_params) + user_votes.save! end elsif question_type == 2 #多选题的话,答案应该是1个以上 question_answer_ids = params[:poll_answer_id] ? params[:poll_answer_id] : [] #该答案的id @@ -107,6 +102,7 @@ class PollVotesController < ApplicationController @current_question_necessary = @poll_question.is_necessary #问答记录存在,且有值,才会有返回值。 @current_question_status = 0 + if user_votes.present? vote_answer_id = user_votes.pluck(:poll_answer_id).reject(&:blank?).size vote_text_count = user_votes.pluck(:vote_text).reject(&:blank?).size From 5c40a97fef33325a671ece1f1c99259341b721d8 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 10:05:06 +0800 Subject: [PATCH 18/31] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=8A=A5500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 31e886d36..c442e5a6c 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -84,10 +84,10 @@ class CoursesController < ApplicationController #@courses = @courses.where("name like ?", "%#{params[:search]}%").or(@courses.where(tea_id: user_ids)).or(@courses.where(id: course_ids)) # 6:21 daiao sql = %Q{ - (course_members.role in (1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword + (course_members.role in(1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword or schools.name like :keyword } - @courses = @courses.includes(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") + @courses = @courses.joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") end @courses_count = @courses.size From 2f5d7ca4512ae71b19ee24edc2b6ca64676e3e8d Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 21 Jun 2019 10:07:45 +0800 Subject: [PATCH 19/31] fix bug --- app/controllers/poll_votes_controller.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/controllers/poll_votes_controller.rb b/app/controllers/poll_votes_controller.rb index 81126b044..a2f805a97 100644 --- a/app/controllers/poll_votes_controller.rb +++ b/app/controllers/poll_votes_controller.rb @@ -33,8 +33,7 @@ class PollVotesController < ApplicationController current_user_answer = user_votes.first if current_user_answer&.poll_answer_id != question_answer_id #如果说更换了答案,则以前的答案删除,并新建记录 current_user_answer.destroy - user_votes = PollVote.new(vote_answer_params) - user_votes.save! + PollVote.create(vote_answer_params) else if question_answer_text.present? @@ -43,8 +42,7 @@ class PollVotesController < ApplicationController end end else - user_votes = PollVote.new(vote_answer_params) - user_votes.save! + PollVote.create(vote_answer_params) end elsif question_type == 2 #多选题的话,答案应该是1个以上 question_answer_ids = params[:poll_answer_id] ? params[:poll_answer_id] : [] #该答案的id @@ -102,10 +100,10 @@ class PollVotesController < ApplicationController @current_question_necessary = @poll_question.is_necessary #问答记录存在,且有值,才会有返回值。 @current_question_status = 0 - - if user_votes.present? - vote_answer_id = user_votes.pluck(:poll_answer_id).reject(&:blank?).size - vote_text_count = user_votes.pluck(:vote_text).reject(&:blank?).size + new_user_votes = question_votes.where(user_id: current_user.id) + if new_user_votes.present? + vote_answer_id = new_user_votes.pluck(:poll_answer_id).reject(&:blank?).size + vote_text_count = new_user_votes.pluck(:vote_text).reject(&:blank?).size if vote_text_count > 0 || vote_answer_id > 0 @current_question_status = 1 end From a42ce8c0246a8c76c0eb68e85e5acfd89ca02e5e Mon Sep 17 00:00:00 2001 From: p31729568 Date: Fri, 21 Jun 2019 10:16:18 +0800 Subject: [PATCH 20/31] add search bank slim api --- app/controllers/courses_controller.rb | 14 ++++++++++++++ app/models/course.rb | 2 ++ config/routes.rb | 1 + 3 files changed, 17 insertions(+) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index c442e5a6c..5097536d5 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -994,6 +994,20 @@ class CoursesController < ApplicationController end end + def search_slim + courses = current_user.manage_courses.not_deleted.processing + + keyword = params[:keyword].to_s.strip + if keyword.present? + courses = courses.where('name LIKE ?', "%#{keyword}%") + end + + count = courses.count + courses = paginate(courses) + + render_ok(count: count, courses: courses.select(:id, :name).as_json) + end + private # Use callbacks to share common setup or constraints between actions. diff --git a/app/models/course.rb b/app/models/course.rb index c0c7f1f23..61e48d350 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -61,6 +61,8 @@ class Course < ApplicationRecord scope :hidden, ->(is_hidden = true) { where(is_hidden: is_hidden) } scope :ended, ->(is_end = true) { where(is_end: is_end) } + scope :processing, -> { where(is_end: false) } + scope :not_deleted, -> { where(is_delete: false) } scope :deleted, ->(is_delete = 1) { where(is_delete: is_delete) } scope :by_user, ->(user) { joins(:course_members).where('course_members.user_id = ?', user.id).order(updated_at: :desc) } scope :by_keywords, lambda { |keywords| diff --git a/config/routes.rb b/config/routes.rb index e7fac7331..ecd54c8c0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -303,6 +303,7 @@ Rails.application.routes.draw do post 'search_course_list' get 'board_list' get 'mine' + get 'search_slim' end resources :polls, only:[:index,:new,:create] do From 8ab306550aafc3385ee357b8292e1a091ff48364 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 10:31:41 +0800 Subject: [PATCH 21/31] =?UTF-8?q?=E4=BB=8E=E9=A2=98=E5=BA=93=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=AF=95=E8=AE=BE=E4=BB=BB=E5=8A=A1=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E5=BA=94=E4=B8=BA=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/question_banks_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/question_banks_controller.rb b/app/controllers/question_banks_controller.rb index 299224527..bf55db9dd 100644 --- a/app/controllers/question_banks_controller.rb +++ b/app/controllers/question_banks_controller.rb @@ -240,7 +240,7 @@ class QuestionBanksController < ApplicationController ActiveRecord::Base.transaction do new_task = GraduationTask.new new_task.attributes = task.attributes.dup.except("id", "course_id", "user_id", "quotes", "graduation_task_id", - "course_list_id", "gtask_bank_id") + "course_list_id", "gtask_bank_id", "created_at", "updated_at") new_task.course_id = course.id new_task.gtask_bank_id = task.id new_task.user_id = current_user.id @@ -266,7 +266,7 @@ class QuestionBanksController < ApplicationController ActiveRecord::Base.transaction do new_topic = GraduationTopic.new new_topic.attributes = topic.attributes.dup.except("id", "course_id", "user_id", "graduation_topic_id", - "course_list_id", "gtopic_bank_id") + "course_list_id", "gtopic_bank_id", "created_at", "updated_at") new_topic.course_id = course.id new_topic.gtopic_bank_id = topic.id new_topic.user_id = current_user.id From c7287122af88b31aa07ffd2eb797b2f4c3a076cd Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 10:37:53 +0800 Subject: [PATCH 22/31] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/index.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/courses/index.json.jbuilder b/app/views/courses/index.json.jbuilder index 94da87af5..1993851e8 100644 --- a/app/views/courses/index.json.jbuilder +++ b/app/views/courses/index.json.jbuilder @@ -10,7 +10,7 @@ json.courses do json.tasks_count get_tasks_count course json.visits course.visits json.is_public course.is_public - json.is_accessible course.is_public? || @user.course_identity(course) < Course::NORMAL + json.is_accessible course.is_public == 1 || @user.course_identity(course) < Course::NORMAL json.is_end course.is_end json.first_category_url module_url(course.course_modules.first, course) end From e86cb487a3eab919edf7ed2b42bc5e796d10678e Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 10:50:16 +0800 Subject: [PATCH 23/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 5097536d5..753999e54 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -87,7 +87,7 @@ class CoursesController < ApplicationController (course_members.role in(1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword or schools.name like :keyword } - @courses = @courses.joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") + @courses = @courses.left_joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") end @courses_count = @courses.size From e442c30823aaf821238b642e686c37cdd1c70723 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 21 Jun 2019 10:52:23 +0800 Subject: [PATCH 24/31] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=9C=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 753999e54..cd1e9a0ea 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -87,7 +87,7 @@ class CoursesController < ApplicationController (course_members.role in(1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword or schools.name like :keyword } - @courses = @courses.left_joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") + @courses = @courses.left_outer_joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") end @courses_count = @courses.size From bea98cb44a6b35bc14a6e08fbc74a8deb24ac785 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Fri, 21 Jun 2019 10:58:44 +0800 Subject: [PATCH 25/31] add course board message count rake --- app/models/message.rb | 7 +++---- lib/tasks/course_board_message_count.rake | 24 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 lib/tasks/course_board_message_count.rake diff --git a/app/models/message.rb b/app/models/message.rb index 26946f6d0..d3d507a72 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -56,11 +56,10 @@ class Message < ApplicationRecord from_board = Board.find(messages.first.board_id) root_ids = messages.map(&:id) - children = Message.where(parent_id: root_ids).select(:id).to_a - children_ids = children.map(&:id) - second_children = Message.where(parent_id: children_ids).select(:id).to_a + children_ids = Message.where(parent_id: root_ids).pluck(:id) + second_children_ids = Message.where(parent_id: children_ids).pluck(:id) - ids = root_ids.concat(children_ids).concat(second_children.map(&:id)).uniq + ids = root_ids.concat(children_ids).concat(second_children_ids).uniq ActiveRecord::Base.transaction do Message.where(id: ids, board_id: from_board.id).update_all(board_id: to_board.id) diff --git a/lib/tasks/course_board_message_count.rake b/lib/tasks/course_board_message_count.rake new file mode 100644 index 000000000..d1ac5524d --- /dev/null +++ b/lib/tasks/course_board_message_count.rake @@ -0,0 +1,24 @@ +namespace :course_board do + desc 'transfer children message to root message board' + task children_message_transfer: :environment do + Board.find_each do |board| + logger("Current transfer board id: #{board.id} ~") + + root_subquery = board.messages.where(parent_id: nil).reorder(nil).pluck(:id) + next if root_subquery.blank? + children_subquery = Message.where(parent_id: root_subquery).reorder(nil).pluck(:id) + next if children_subquery.blank? + second_children_subquery = Message.where(parent_id: children_subquery).reorder(nil).pluck(:id) + + ids = children_subquery.concat(second_children_subquery).uniq + Message.where(id: ids).update_all(board_id: board.id) + + Board.reset_counters(board.id, :messages) + logger("transfer success ~") + end + end + + def logger(msg) + puts msg + end +end \ No newline at end of file From f53b5af75b5953103ed6426d8a6be70adb15fa3b Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 10:59:47 +0800 Subject: [PATCH 26/31] =?UTF-8?q?=E8=AF=BE=E5=A0=82=E9=A6=96=E9=A1=B5tiaoz?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 5097536d5..252664139 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -87,7 +87,7 @@ class CoursesController < ApplicationController (course_members.role in(1,2,3) and CONCAT(users.lastname, users.firstname) like :keyword) or courses.name like :keyword or schools.name like :keyword } - @courses = @courses.joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%") + @courses = @courses.joins(course_members: [user: [user_extension: :school]]).where("#{sql}", keyword: "%#{params[:search]}%").distinct end @courses_count = @courses.size From 819b2347c48447b71c4212081ae07804a0cb95f1 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 11:14:41 +0800 Subject: [PATCH 27/31] =?UTF-8?q?=E4=BA=A4=E5=8F=89=E8=AF=84=E9=98=85?= =?UTF-8?q?=E6=9C=AA=E5=BC=80=E5=90=AF=E5=89=8D=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/graduation_tasks/tasks_list.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/graduation_tasks/tasks_list.json.jbuilder b/app/views/graduation_tasks/tasks_list.json.jbuilder index fe7ffddc4..cda1eb6d4 100644 --- a/app/views/graduation_tasks/tasks_list.json.jbuilder +++ b/app/views/graduation_tasks/tasks_list.json.jbuilder @@ -9,7 +9,7 @@ if @task.published? || @user_course_identity < Course::STUDENT json.teacher_comment teacher_comment @task, @current_user.id json.task_status task_status @task, @current_user.id json.course_group_info course_group_info @course, @current_user.id - json.cross_comment cross_comment @task, @current_user + json.cross_comment cross_comment @task, @current_user if @task.status >= 3 end # 课堂下所有老师 TODO: 考虑以后在点击分配时,再获取老师列表 json.teacher_list do From 4a6909b59f32a697624a4d8997aa757339a9f5a4 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 21 Jun 2019 11:19:21 +0800 Subject: [PATCH 28/31] =?UTF-8?q?D=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/graduation_tasks_helper.rb | 2 +- app/views/graduation_tasks/tasks_list.json.jbuilder | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/graduation_tasks_helper.rb b/app/helpers/graduation_tasks_helper.rb index 5253b0d56..a5f05d623 100644 --- a/app/helpers/graduation_tasks_helper.rb +++ b/app/helpers/graduation_tasks_helper.rb @@ -14,7 +14,7 @@ module GraduationTasksHelper # 交叉评阅 def cross_comment task, user_id - if task.cross_comment + if task.cross_comment && task.status >= 3 [{id: 1, name: "只看我的交叉评阅", count: task.graduation_work_comment_assignations.myself(user_id).count}] else [] diff --git a/app/views/graduation_tasks/tasks_list.json.jbuilder b/app/views/graduation_tasks/tasks_list.json.jbuilder index cda1eb6d4..fe7ffddc4 100644 --- a/app/views/graduation_tasks/tasks_list.json.jbuilder +++ b/app/views/graduation_tasks/tasks_list.json.jbuilder @@ -9,7 +9,7 @@ if @task.published? || @user_course_identity < Course::STUDENT json.teacher_comment teacher_comment @task, @current_user.id json.task_status task_status @task, @current_user.id json.course_group_info course_group_info @course, @current_user.id - json.cross_comment cross_comment @task, @current_user if @task.status >= 3 + json.cross_comment cross_comment @task, @current_user end # 课堂下所有老师 TODO: 考虑以后在点击分配时,再获取老师列表 json.teacher_list do From 4fd4b579af190ce80d5700e8fe6ef6ed74284454 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Fri, 21 Jun 2019 11:20:32 +0800 Subject: [PATCH 29/31] fix rake --- lib/tasks/course_board_message_count.rake | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/tasks/course_board_message_count.rake b/lib/tasks/course_board_message_count.rake index d1ac5524d..35e439403 100644 --- a/lib/tasks/course_board_message_count.rake +++ b/lib/tasks/course_board_message_count.rake @@ -5,13 +5,15 @@ namespace :course_board do logger("Current transfer board id: #{board.id} ~") root_subquery = board.messages.where(parent_id: nil).reorder(nil).pluck(:id) - next if root_subquery.blank? - children_subquery = Message.where(parent_id: root_subquery).reorder(nil).pluck(:id) - next if children_subquery.blank? - second_children_subquery = Message.where(parent_id: children_subquery).reorder(nil).pluck(:id) + if root_subquery.present? + children_subquery = Message.where(parent_id: root_subquery).reorder(nil).pluck(:id) + if children_subquery.present? + second_children_subquery = Message.where(parent_id: children_subquery).reorder(nil).pluck(:id) - ids = children_subquery.concat(second_children_subquery).uniq - Message.where(id: ids).update_all(board_id: board.id) + ids = children_subquery.concat(second_children_subquery).uniq + Message.where(id: ids).update_all(board_id: board.id) + end + end Board.reset_counters(board.id, :messages) logger("transfer success ~") From 1253844369cb8438b1b2a0af7ff314bad5a0f2ed Mon Sep 17 00:00:00 2001 From: p31729568 Date: Fri, 21 Jun 2019 13:54:07 +0800 Subject: [PATCH 30/31] modify --- app/controllers/courses_controller.rb | 2 +- app/models/course.rb | 2 +- app/services/users/course_service.rb | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 252664139..cb3b5c929 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -937,7 +937,7 @@ class CoursesController < ApplicationController @page = params[:page] || 1 @page_size = params[:page_size] || 15 - @courses = Course.by_user(current_user).hidden(false).ended(false).deleted(0).by_keywords(params[:search]).distinct + @courses = Course.by_user(current_user).hidden(false).processing.not_deleted.by_keywords(params[:search]).distinct # @total_count = @courses.count # offset = 0 diff --git a/app/models/course.rb b/app/models/course.rb index 61e48d350..e4ade6e9f 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -62,7 +62,7 @@ class Course < ApplicationRecord scope :hidden, ->(is_hidden = true) { where(is_hidden: is_hidden) } scope :ended, ->(is_end = true) { where(is_end: is_end) } scope :processing, -> { where(is_end: false) } - scope :not_deleted, -> { where(is_delete: false) } + scope :not_deleted, -> { where(is_delete: 0) } scope :deleted, ->(is_delete = 1) { where(is_delete: is_delete) } scope :by_user, ->(user) { joins(:course_members).where('course_members.user_id = ?', user.id).order(updated_at: :desc) } scope :by_keywords, lambda { |keywords| diff --git a/app/services/users/course_service.rb b/app/services/users/course_service.rb index 6271db17b..9eb34917e 100644 --- a/app/services/users/course_service.rb +++ b/app/services/users/course_service.rb @@ -11,7 +11,7 @@ class Users::CourseService end def call - courses = category_scope_courses.deleted(false) + courses = category_scope_courses.not_deleted courses = status_filter(courses) @@ -38,9 +38,9 @@ class Users::CourseService case params[:status] when 'processing' then - relations.ended(false) + relations.processing when 'end' then - relations.ended(true) + relations.ended else relations end From 88c1d7c48ac4795bb4992ea6819c7057ed55f509 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 21 Jun 2019 13:54:21 +0800 Subject: [PATCH 31/31] fix bug --- app/controllers/application_controller.rb | 61 +-- app/controllers/concerns/git_helper.rb | 52 +++ app/controllers/concerns/logger_helper.rb | 16 + app/tasks/exercise_publish_task.rb | 111 +++++ lib/tasks/exercise_publish.rake | 518 +++++++++++----------- 5 files changed, 449 insertions(+), 309 deletions(-) create mode 100644 app/controllers/concerns/git_helper.rb create mode 100644 app/controllers/concerns/logger_helper.rb create mode 100644 app/tasks/exercise_publish_task.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index cffe2df15..9482dc2dd 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,6 +5,8 @@ class ApplicationController < ActionController::Base include RenderExpand include RenderHelper include ControllerRescueHandler + include GitHelper + include LoggerHelper protect_from_forgery prepend: true, unless: -> { request.format.json? } @@ -202,55 +204,6 @@ class ApplicationController < ActionController::Base # end end - # 版本库目录空间 - def repo_namespace(user_login, shixun_identifier) - "#{user_login}/#{shixun_identifier}.git" - end - - # 版本库文件内容,带转码 - def git_fle_content(repo_path, path) - begin - content = GitService.file_content(repo_path: repo_path, path: path)["content"] - logger.info("@@@@@@@@@@@@@@@@@@#{content}") - - decode_content = nil - if content.present? - content = Base64.decode64(content) - cd = CharDet.detect(content) - logger.info "encoding: #{cd['encoding']} confidence: #{cd['confidence']}" - - decode_content = - if cd["encoding"] == 'GB18030' && cd['confidence'] > 0.8 - content.encode('UTF-8', 'GBK', {:invalid => :replace, :undef => :replace, :replace => ' '}) - else - content.force_encoding('UTF-8') - end - end - - decode_content - rescue Exception => e - uid_logger_error(e.message) - raise Educoder::TipException.new("文档内容获取异常") - end - end - - # 更新文件代码 - # content: 文件内容;message:提交描述 - def update_file_content(content, repo_path, path, mail, username, message) - GitService.update_file(repo_path: repo_path, file_path: path, message: message, - content: content, author_name: username, author_email: mail) - end - - # 版本库Fork功能 - def project_fork(container, original_rep_path, username) - raise Educoder::TipException.new("fork源路径为空,fork失败!") if original_rep_path.blank? - # 将要生成的仓库名字 - new_repo_name = "#{username}/#{container.try(:identifier)}#{ Time.now.strftime("%Y%m%d%H%M%S")}" - uid_logger("start fork container: repo_name is #{new_repo_name}") - GitService.fork_repository(repo_path: original_rep_path, fork_repository_path: (new_repo_name + ".git")) - container.update_attributes!(:repo_name => new_repo_name) - end - def start_user_session(user) session[:user_id] = user.id session[:ctime] = Time.now.utc.to_i @@ -330,16 +283,6 @@ class ApplicationController < ActionController::Base end end - # 以用户id开始的日志定义 - def uid_logger(message) - Rails.logger.info("##:#{current_user.try(:id)} --#{message}") - end - - # 以用户id开始的日志定义 - def uid_logger_error(message) - Rails.logger.error("##:#{current_user.try(:id)} --#{message}") - end - ## 输出错误信息 def error_status(message = nil) @status = -1 diff --git a/app/controllers/concerns/git_helper.rb b/app/controllers/concerns/git_helper.rb new file mode 100644 index 000000000..0d8c91a55 --- /dev/null +++ b/app/controllers/concerns/git_helper.rb @@ -0,0 +1,52 @@ +module GitHelper + extend ActiveSupport::Concern + + # 版本库目录空间 + def repo_namespace(user_login, shixun_identifier) + "#{user_login}/#{shixun_identifier}.git" + end + + # 版本库文件内容,带转码 + def git_fle_content(repo_path, path) + begin + content = GitService.file_content(repo_path: repo_path, path: path)["content"] + logger.info("@@@@@@@@@@@@@@@@@@#{content}") + + decode_content = nil + if content.present? + content = Base64.decode64(content) + cd = CharDet.detect(content) + logger.info "encoding: #{cd['encoding']} confidence: #{cd['confidence']}" + + decode_content = + if cd["encoding"] == 'GB18030' && cd['confidence'] > 0.8 + content.encode('UTF-8', 'GBK', {:invalid => :replace, :undef => :replace, :replace => ' '}) + else + content.force_encoding('UTF-8') + end + end + + decode_content + rescue Exception => e + uid_logger_error(e.message) + raise Educoder::TipException.new("文档内容获取异常") + end + end + + # 更新文件代码 + # content: 文件内容;message:提交描述 + def update_file_content(content, repo_path, path, mail, username, message) + GitService.update_file(repo_path: repo_path, file_path: path, message: message, + content: content, author_name: username, author_email: mail) + end + + # 版本库Fork功能 + def project_fork(container, original_rep_path, username) + raise Educoder::TipException.new("fork源路径为空,fork失败!") if original_rep_path.blank? + # 将要生成的仓库名字 + new_repo_name = "#{username}/#{container.try(:identifier)}#{ Time.now.strftime("%Y%m%d%H%M%S")}" + uid_logger("start fork container: repo_name is #{new_repo_name}") + GitService.fork_repository(repo_path: original_rep_path, fork_repository_path: (new_repo_name + ".git")) + container.update_attributes!(:repo_name => new_repo_name) + end +end \ No newline at end of file diff --git a/app/controllers/concerns/logger_helper.rb b/app/controllers/concerns/logger_helper.rb new file mode 100644 index 000000000..44d0448ce --- /dev/null +++ b/app/controllers/concerns/logger_helper.rb @@ -0,0 +1,16 @@ +module LoggerHelper + extend ActiveSupport::Concern + + extend LoggerHelper + + + # 以用户id开始的日志定义 + def uid_logger(message) + Rails.logger.info("##:#{current_user.try(:id)} --#{message}") + end + + # 以用户id开始的日志定义 + def uid_logger_error(message) + Rails.logger.error("##:#{current_user.try(:id)} --#{message}") + end +end \ No newline at end of file diff --git a/app/tasks/exercise_publish_task.rb b/app/tasks/exercise_publish_task.rb new file mode 100644 index 000000000..d0a52646b --- /dev/null +++ b/app/tasks/exercise_publish_task.rb @@ -0,0 +1,111 @@ +class ExercisePublishTask + include ExercisesHelper + include GitHelper + + def publish + Rails.logger.info("log--------------------------------exercise_publish start") + puts "--------------------------------exercise_publish start" + exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) + exercises.each do |exercise| + exercise.update_column('exercise_status', 2) + course = exercise.course + tid_str = "" + course.teachers.find_each do |member| + tid_str += "," if tid_str != "" + tid_str += "(#{member.user_id}, #{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" + end + if exercise.unified_setting + course.student.find_each do |student| + tid_str += "," if tid_str != "" + tid_str += "(#{student.student_id}, #{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" + end + end + if tid_str != "" + tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id, parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at, updated_at) values" + tid_str + ActiveRecord::Base.connection.execute tid_sql + end + + if exercise.exercise_users.count == 0 + str = "" + course.students.find_each do |student| + str += "," if str != "" + str += "(#{student.user_id}, #{exercise.id}, 0, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" + end + + if str != "" + sql = "insert into exercise_users (user_id, exercise_id, commit_status, created_at, updated_at) values" + str + ActiveRecord::Base.connection.execute sql + end + end + + if exercise.course_acts.size == 0 + exercise.course_acts << CourseActivity.new(:user_id => exercise.user_id,:course_id => exercise.course_id) + end + end + + # 分组设置发布时间的测验 + exercise_group_settings = ExerciseGroupSetting.where("publish_time < ? and publish_time > ?", Time.now + 1800, Time.now - 1800) + exercise_group_settings.each do |exercise_group| + exercise = exercise_group.exercise + if exercise.present? + course = exercise.course + exercise.update_attributes(:exercise_status => 2) if exercise.exercise_status == 1 + tid_str = "" + members = course.students.where(:course_group_id => exercise_group.course_group_id) + members.find_each do |member| + tid_str += "," if tid_str != "" + tid_str += "(#{member.user_id},#{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" + end + if tid_str != "" + tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id, parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at, updated_at) values" + tid_str + ActiveRecord::Base.connection.execute tid_sql + end + end + end + Rails.logger.info("log--------------------------------exercise_publish end") + puts "--------------------------------exercise_publish end" + end + + def end + exercises = Exercise.where("end_time <=? and exercise_status = 2",Time.now) + exercises.each do |exercise| + course = exercise.course + exercise.update_column('exercise_status', 3) + + exercise.exercise_users.each do |exercise_user| + if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? + exercise_user.update_attributes(:commit_status => 1, :end_at => Time.now, :status => true) + + s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] + exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) + if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? + exercise_user.update_attributes(:subjective_score => 0) + end + end + end + end + + all_exercises = Exercise.where("end_time > ? and exercise_status = 2",Time.now) + exercise_ids = all_exercises.blank? ? "(-1)" : "(" + all_exercises.map(&:id).join(",") + ")" + ExerciseGroupSetting.where("end_time <= '#{Time.now}' and exercise_id in #{exercise_ids}").each do |exercise_setting| + exercise = exercise_setting.exercise + + users = exercise.course.students.where(:course_group_id => exercise_setting.course_group_id) + exercise_users = exercise.exercise_users.where(:user_id => users.map(&:user_id)) + + exercise_users.each do |exercise_user| + if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? + exercise_user.update_attributes(:commit_status => 1, :end_at => Time.now, :status => true) + + s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] + exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) + if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? + exercise_user.update_attributes(:subjective_score => 0) + end + end + end + end + Rails.logger.info("log--------------------------------exercise_end completed") + end + +end \ No newline at end of file diff --git a/lib/tasks/exercise_publish.rake b/lib/tasks/exercise_publish.rake index bc9330b66..a26de1499 100644 --- a/lib/tasks/exercise_publish.rake +++ b/lib/tasks/exercise_publish.rake @@ -1,250 +1,268 @@ -#coding=utf-8 - -namespace :exercise_publish do - desc "publish exercise and end exercise" - def get_mulscore(question, user) - ecs = ExerciseAnswer.where("user_id =? and exercise_question_id =?", user.id, question.id) - arr = [] - ecs.each do |ec| - arr << ec.exercise_choice.choice_position - end - #arr = arr.sort - str = arr.sort.join("") - return str - end - - def tran_base64_decode64 str - if str.blank? - str - else - s_size = str.size % 4 - if s_size != 0 - str += "=" * (4 - s_size) - end - Base64.decode64(str.tr("-_", "+/")).force_encoding("utf-8") - end - end - - #计算试卷的总分和试卷的答题状态 - # def calculate_student_score(exercise,user) - # score1 = 0.0 #选择题/判断题 - # score2 = 0.0 #填空题 - # score5 = 0.0 #实训题 - # ques_stand = [] #问题是否正确 - # exercise_questions = exercise.exercise_questions - # exercise_questions.each do |q| - # if q.question_type != 5 - # answers_content = q.exercise_answers.search_answer_users("user_id",user.id) #学生的答案 - # else - # answers_content = q.exercise_shixun_answers.search_shixun_answers("user_id",user.id) #学生的答案 - # end - # if q.question_type <= 2 #为选择题或判断题时 - # answer_choice_array = [] - # answers_content.each do |a| - # answer_choice_array.push(a.exercise_choice.choice_position) #学生答案的位置 - # end - # user_answer_content = answer_choice_array.sort - # standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个 - # if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分 - # if standard_answer.count > 0 - # multi_each_score = (q.question_score / standard_answer.count) #当多选答案正确时,每个answer的分数均摊。 - # else - # multi_each_score = 0.0 - # end - # answers_content.update_all(:score => multi_each_score) - # score1 = score1 + q.question_score - # end - # elsif q.question_type == 3 #填空题 - # null_standard_answer = q.exercise_standard_answers - # standard_answer_array = null_standard_answer.select(:exercise_choice_id,:answer_text) - # standard_answer_ids = standard_answer_array.pluck(:exercise_choice_id).reject(&:blank?).uniq #标准答案的exercise_choice_id数组 - # standard_answer_count = standard_answer_ids.count - # if standard_answer_count > 0 #存在标准答案时才有分数 - # each_standard_score = (q.question_score.to_f / standard_answer_count).round(1) #每一空的得分 - # else - # each_standard_score = 0.0 - # end - # if q.is_ordered - # answers_content.each do |u| - # i_standard_answer = standard_answer_array.where(exercise_choice_id:u.exercise_choice_id).pluck(:answer_text).reject(&:blank?).map!(&:downcase) #该选项的全部标准答案 - # if i_standard_answer.include?(u.answer_text.downcase) #该空的标准答案包含用户的答案才有分数 - # u.update_attribute("score",each_standard_score) - # score2 = score2 + each_standard_score - # end - # end - # else - # st_answer_text = standard_answer_array.pluck(:answer_text).reject(&:blank?).map!(&:downcase) - # answers_content.each do |u| - # u_answer_text = u.answer_text.downcase - # if st_answer_text.include?(u_answer_text) #只要标准答案包含用户的答案,就有分数。同时,下一次循环时,就会删除该标准答案。防止用户的相同答案获分 - # u.update_attribute("score",each_standard_score) - # score2 = score2 + each_standard_score - # st_answer_text.delete(u_answer_text) - # end - # end - # end - # elsif q.question_type == 5 #实训题时,主观题这里不评分 - # q.exercise_shixun_challenges.each do |exercise_cha| - # game = Game.user_games(user.id,exercise_cha.challenge_id).first #当前用户的关卡 - # if game.present? - # exercise_cha_score = 0 - # answer_status = 0 - # cha_path = challenge_path exercise_cha.challenge.path - # if game.status == 2 && game.final_score >= 0 - # exercise_cha_score = game.real_score exercise_cha.question_score #每一关卡的得分 - # answer_status = 1 - # end - # if exercise_cha.exercise_shixun_answers.search_shixun_answers("user_id",user.id).blank? #把关卡的答案存入试卷的实训里 - # game_challenge = game.game_codes.search_challenge_path(cha_path).first - # if game_challenge.present? - # game_code = game_challenge - # code = game_code.try(:new_code) - # else - # code = git_fle_content(exercise_cha.shixun.repo_path,cha_path) - # end - # sx_option = { - # :exercise_question_id => q.id, - # :exercise_shixun_challenge_id => exercise_cha.id, - # :user_id => user.id, - # :score => exercise_cha_score, - # :answer_text => code, - # :status => answer_status - # } - # ex_shixun_answer = ExerciseShixunAnswer.new(sx_option) - # ex_shixun_answer.save! - # end - # score5 += exercise_cha_score - # end - # end - # end - # user_scores = answers_content.score_reviewed.pluck(:score).sum - # if user_scores > 0 - # stand_answer = 1 - # else - # stand_answer = 0 - # end - # ques_option = { - # "q_id":q.id, #该问题的id - # "q_type":q.question_type, - # "q_position":q.question_number, #该问题的位置 - # "stand_status":stand_answer, #该问题是否正确,1为正确,0为错误 - # "user_score":user_scores #每个问题的总得分 - # } - # ques_stand.push(ques_option) - # end - # total_score = score1 + score2 + score5 - # { - # "total_score":total_score, - # "stand_status":ques_stand - # } - # end - - task :publish => :environment do - Rails.logger.info("log--------------------------------exercise_publish start") - puts "--------------------------------exercise_publish start" - exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) - exercises.each do |exercise| - exercise.update_column('exercise_status', 2) - course = exercise.course - tid_str = "" - course.teachers.find_each do |member| - tid_str += "," if tid_str != "" - tid_str += "(#{member.user_id}, #{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" - end - if exercise.unified_setting - course.student.find_each do |student| - tid_str += "," if tid_str != "" - tid_str += "(#{student.student_id}, #{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" - end - end - if tid_str != "" - tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id, parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at, updated_at) values" + tid_str - ActiveRecord::Base.connection.execute tid_sql - end - - if exercise.exercise_users.count == 0 - str = "" - course.student.find_each do |student| - str += "," if str != "" - str += "(#{student.user_id}, #{exercise.id}, 0, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" - end - - if str != "" - sql = "insert into exercise_users (user_id, exercise_id, commit_status, created_at, updated_at) values" + str - ActiveRecord::Base.connection.execute sql - end - end - - if exercise.course_acts.size == 0 - exercise.course_acts << CourseActivity.new(:user_id => exercise.user_id,:course_id => exercise.course_id) - end - end - - # 分组设置发布时间的测验 - exercise_group_settings = ExerciseGroupSetting.where("publish_time < ? and publish_time > ?", Time.now + 1800, Time.now - 1800) - exercise_group_settings.each do |exercise_group| - exercise = exercise_group.exercise - if exercise.present? - course = exercise.course - exercise.update_attributes(:exercise_status => 2) if exercise.exercise_status == 1 - tid_str = "" - members = course.students.where(:course_group_id => exercise_group.course_group_id) - members.find_each do |member| - tid_str += "," if tid_str != "" - tid_str += "(#{member.user_id},#{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" - end - if tid_str != "" - tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id, parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at, updated_at) values" + tid_str - ActiveRecord::Base.connection.execute tid_sql - end - end - end - Rails.logger.info("log--------------------------------exercise_publish end") - puts "--------------------------------exercise_publish end" - end - - task :end => :environment do - # include ExercisesHelper - # include ApplicationController - - exercises = Exercise.where("end_time <=? and exercise_status = 2",Time.now) - exercises.each do |exercise| - course = exercise.course - exercise.update_column('exercise_status', 3) - - exercise.exercise_users.each do |exercise_user| - if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? - exercise_user.update_attributes(:commit_status => 1, :end_at => Time.now, :status => true) - - s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] - exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) - if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? - exercise_user.update_attributes(:subjective_score => 0) - end - end - end - end - - all_exercises = Exercise.where("end_time > ? and exercise_status = 2",Time.now) - exercise_ids = all_exercises.blank? ? "(-1)" : "(" + all_exercises.map(&:id).join(",") + ")" - ExerciseGroupSetting.where("end_time <= '#{Time.now}' and exercise_id in #{exercise_ids}").each do |exercise_setting| - exercise = exercise_setting.exercise - - users = exercise.course.students.where(:course_group_id => exercise_setting.course_group_id) - exercise_users = exercise.exercise_users.where(:user_id => users.map(&:user_id)) - - exercise_users.each do |exercise_user| - if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? - exercise_user.update_attributes(:commit_status => 1, :end_at => Time.now, :status => true) - - s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] - exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) - if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? - exercise_user.update_attributes(:subjective_score => 0) - end - end - end - end - Rails.logger.info("log--------------------------------exercise_end completed") - end -end +# #coding=utf-8 +# +# namespace :exercise_publish do +# desc "publish exercise and end exercise" +# def get_mulscore(question, user) +# ecs = ExerciseAnswer.where("user_id =? and exercise_question_id =?", user.id, question.id) +# arr = [] +# ecs.each do |ec| +# arr << ec.exercise_choice.choice_position +# end +# #arr = arr.sort +# str = arr.sort.join("") +# return str +# end +# +# def tran_base64_decode64 str +# if str.blank? +# str +# else +# s_size = str.size % 4 +# if s_size != 0 +# str += "=" * (4 - s_size) +# end +# Base64.decode64(str.tr("-_", "+/")).force_encoding("utf-8") +# end +# end +# +# #计算试卷的总分和试卷的答题状态 +# def calculate_student_score(exercise,user) +# score1 = 0.0 #选择题/判断题 +# score2 = 0.0 #填空题 +# score5 = 0.0 #实训题 +# ques_stand = [] #问题是否正确 +# exercise_questions = exercise.exercise_questions +# exercise_questions.each do |q| +# if q.question_type != 5 +# answers_content = q.exercise_answers.search_answer_users("user_id",user.id) #学生的答案 +# else +# answers_content = q.exercise_shixun_answers.search_shixun_answers("user_id",user.id) #学生的答案 +# end +# if q.question_type <= 2 #为选择题或判断题时 +# answer_choice_array = [] +# answers_content.each do |a| +# answer_choice_array.push(a.exercise_choice.choice_position) #学生答案的位置 +# end +# user_answer_content = answer_choice_array.sort +# standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个 +# if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分 +# if standard_answer.count > 0 +# multi_each_score = (q.question_score / standard_answer.count) #当多选答案正确时,每个answer的分数均摊。 +# else +# multi_each_score = 0.0 +# end +# answers_content.update_all(:score => multi_each_score) +# score1 = score1 + q.question_score +# end +# elsif q.question_type == 3 #填空题 +# null_standard_answer = q.exercise_standard_answers +# standard_answer_array = null_standard_answer.select(:exercise_choice_id,:answer_text) +# standard_answer_ids = standard_answer_array.pluck(:exercise_choice_id).reject(&:blank?).uniq #标准答案的exercise_choice_id数组 +# standard_answer_count = standard_answer_ids.count +# if standard_answer_count > 0 #存在标准答案时才有分数 +# each_standard_score = (q.question_score.to_f / standard_answer_count).round(1) #每一空的得分 +# else +# each_standard_score = 0.0 +# end +# if q.is_ordered +# answers_content.each do |u| +# i_standard_answer = standard_answer_array.where(exercise_choice_id:u.exercise_choice_id).pluck(:answer_text).reject(&:blank?).map!(&:downcase) #该选项的全部标准答案 +# if i_standard_answer.include?(u.answer_text.downcase) #该空的标准答案包含用户的答案才有分数 +# u.update_attribute("score",each_standard_score) +# score2 = score2 + each_standard_score +# end +# end +# else +# st_answer_text = standard_answer_array.pluck(:answer_text).reject(&:blank?).map!(&:downcase) +# answers_content.each do |u| +# u_answer_text = u.answer_text.downcase +# if st_answer_text.include?(u_answer_text) #只要标准答案包含用户的答案,就有分数。同时,下一次循环时,就会删除该标准答案。防止用户的相同答案获分 +# u.update_attribute("score",each_standard_score) +# score2 = score2 + each_standard_score +# st_answer_text.delete(u_answer_text) +# end +# end +# end +# elsif q.question_type == 5 #实训题时,主观题这里不评分 +# q.exercise_shixun_challenges.each do |exercise_cha| +# game = Game.user_games(user.id,exercise_cha.challenge_id).first #当前用户的关卡 +# if game.present? +# exercise_cha_score = 0 +# answer_status = 0 +# cha_path = exercise_cha.challenge.path.present? ? exercise_cha.challenge.path.split(";").reject(&:blank?) : [] +# if game.status == 2 && game.final_score >= 0 +# exercise_cha_score = game.real_score exercise_cha.question_score #每一关卡的得分 +# answer_status = 1 +# end +# if exercise_cha.exercise_shixun_answers.search_shixun_answers("user_id",user.id).blank? #把关卡的答案存入试卷的实训里 +# game_challenge = game.game_codes.search_challenge_path(cha_path).first +# if game_challenge.present? +# game_code = game_challenge +# code = game_code.try(:new_code) +# else +# begin +# content = GitService.file_content(repo_path: exercise_cha.shixun.repo_path, path: cha_path)["content"] +# decode_content = nil +# if content.present? +# content = Base64.decode64(content) +# cd = CharDet.detect(content) +# decode_content = +# if cd["encoding"] == 'GB18030' && cd['confidence'] > 0.8 +# content.encode('UTF-8', 'GBK', {:invalid => :replace, :undef => :replace, :replace => ' '}) +# else +# content.force_encoding('UTF-8') +# end +# end +# decode_content +# rescue Exception => e +# uid_logger_error(e.message) +# raise Educoder::TipException.new("文档内容获取异常") +# end +# code = git_fle_content(exercise_cha.shixun.repo_path,cha_path) +# end +# sx_option = { +# :exercise_question_id => q.id, +# :exercise_shixun_challenge_id => exercise_cha.id, +# :user_id => user.id, +# :score => exercise_cha_score, +# :answer_text => code, +# :status => answer_status +# } +# ex_shixun_answer = ExerciseShixunAnswer.new(sx_option) +# ex_shixun_answer.save! +# end +# score5 += exercise_cha_score +# end +# end +# end +# user_scores = answers_content.score_reviewed.pluck(:score).sum +# if user_scores > 0 +# stand_answer = 1 +# else +# stand_answer = 0 +# end +# ques_option = { +# "q_id":q.id, #该问题的id +# "q_type":q.question_type, +# "q_position":q.question_number, #该问题的位置 +# "stand_status":stand_answer, #该问题是否正确,1为正确,0为错误 +# "user_score":user_scores #每个问题的总得分 +# } +# ques_stand.push(ques_option) +# end +# total_score = score1 + score2 + score5 +# { +# "total_score":total_score, +# "stand_status":ques_stand +# } +# end +# +# task :publish => :environment do +# Rails.logger.info("log--------------------------------exercise_publish start") +# puts "--------------------------------exercise_publish start" +# exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) +# exercises.each do |exercise| +# exercise.update_column('exercise_status', 2) +# course = exercise.course +# tid_str = "" +# course.teachers.find_each do |member| +# tid_str += "," if tid_str != "" +# tid_str += "(#{member.user_id}, #{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" +# end +# if exercise.unified_setting +# course.student.find_each do |student| +# tid_str += "," if tid_str != "" +# tid_str += "(#{student.student_id}, #{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" +# end +# end +# if tid_str != "" +# tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id, parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at, updated_at) values" + tid_str +# ActiveRecord::Base.connection.execute tid_sql +# end +# +# if exercise.exercise_users.count == 0 +# str = "" +# course.student.find_each do |student| +# str += "," if str != "" +# str += "(#{student.user_id}, #{exercise.id}, 0, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" +# end +# +# if str != "" +# sql = "insert into exercise_users (user_id, exercise_id, commit_status, created_at, updated_at) values" + str +# ActiveRecord::Base.connection.execute sql +# end +# end +# +# if exercise.course_acts.size == 0 +# exercise.course_acts << CourseActivity.new(:user_id => exercise.user_id,:course_id => exercise.course_id) +# end +# end +# +# # 分组设置发布时间的测验 +# exercise_group_settings = ExerciseGroupSetting.where("publish_time < ? and publish_time > ?", Time.now + 1800, Time.now - 1800) +# exercise_group_settings.each do |exercise_group| +# exercise = exercise_group.exercise +# if exercise.present? +# course = exercise.course +# exercise.update_attributes(:exercise_status => 2) if exercise.exercise_status == 1 +# tid_str = "" +# members = course.students.where(:course_group_id => exercise_group.course_group_id) +# members.find_each do |member| +# tid_str += "," if tid_str != "" +# tid_str += "(#{member.user_id},#{exercise.user_id}, #{exercise.id}, 'Exercise', #{exercise.id}, 'ExercisePublish', #{course.id}, 'Course', 0, 'Exercise', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" +# end +# if tid_str != "" +# tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id, parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at, updated_at) values" + tid_str +# ActiveRecord::Base.connection.execute tid_sql +# end +# end +# end +# Rails.logger.info("log--------------------------------exercise_publish end") +# puts "--------------------------------exercise_publish end" +# end +# +# task :end => :environment do +# # include ExercisesHelper +# # include ApplicationController +# +# exercises = Exercise.where("end_time <=? and exercise_status = 2",Time.now) +# exercises.each do |exercise| +# course = exercise.course +# exercise.update_column('exercise_status', 3) +# +# exercise.exercise_users.each do |exercise_user| +# if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? +# exercise_user.update_attributes(:commit_status => 1, :end_at => Time.now, :status => true) +# +# s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] +# exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) +# if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? +# exercise_user.update_attributes(:subjective_score => 0) +# end +# end +# end +# end +# +# all_exercises = Exercise.where("end_time > ? and exercise_status = 2",Time.now) +# exercise_ids = all_exercises.blank? ? "(-1)" : "(" + all_exercises.map(&:id).join(",") + ")" +# ExerciseGroupSetting.where("end_time <= '#{Time.now}' and exercise_id in #{exercise_ids}").each do |exercise_setting| +# exercise = exercise_setting.exercise +# +# users = exercise.course.students.where(:course_group_id => exercise_setting.course_group_id) +# exercise_users = exercise.exercise_users.where(:user_id => users.map(&:user_id)) +# +# exercise_users.each do |exercise_user| +# if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? +# exercise_user.update_attributes(:commit_status => 1, :end_at => Time.now, :status => true) +# +# s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] +# exercise_user.update_attributes(:objective_score => s_score, :score => (s_score + (exercise_user.subjective_score && exercise_user.subjective_score > 0 ? exercise_user.subjective_score : 0))) +# if exercise_user.user.exercise_answers.where(:exercise_question_id => exercise.exercise_questions.where(:question_type => 4).map(&:id)).empty? +# exercise_user.update_attributes(:subjective_score => 0) +# end +# end +# end +# end +# Rails.logger.info("log--------------------------------exercise_end completed") +# end +# end