diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index ed81fd98a..c02e62fdf 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -104,6 +104,17 @@ class CoursesController < ApplicationController
@import_attachments = Attachment.where(:container_id => @course.id, :container_type => "ImportStudent")
end
+ def shixun_statistics
+ @homeworks = @course.homework_commons.where("homework_type = 4").order("created_at asc")
+ filename="#{format_date(Time.now)}_#{@course.teacher.show_real_name.to_s}_#{@course.name}_实训数据报告";
+
+ respond_to do |format|
+ format.xls {
+ send_data(shixun_xls(@homeworks,@course), :type => 'application/octet-stream', :filename => filename_for_content_disposition("#{filename}.xls"))
+ }
+ end
+ end
+
# REDO:性能需要优化,这块是管理员后台任务,不影响用户使用
def sync_students
school_id = User.find(@course.tea_id).try(:user_extensions).try(:school_id)
@@ -1989,6 +2000,87 @@ class CoursesController < ApplicationController
@results = paginateHelper @results, @limit
end
+ def shixun_xls homeworks, course
+ xls_report = StringIO.new
+ book = Spreadsheet::Workbook.new
+ blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
+ black = Spreadsheet::Format.new :color => :black, :weight => :bold, :size => 10
+ current_row = 0
+ homeworks.each_with_index do |homework, i|
+ sheet = book.create_worksheet :name => "第#{i+1}次作业"
+ sheet.row(0).default_format = blue
+ sheet[0,0] = "课堂编号"
+ sheet[0,1] = "主讲老师"
+ sheet[0,2] = "课堂名称"
+ sheet[0,3] = "作业编号"
+ sheet[0,4] = "作业/实训名称"
+ sheet[0,5] = "关卡"
+ sheet[0,6] = "学生id"
+ sheet[0,7] = "学生姓名"
+ sheet[0,8] = "经验值"
+ sheet[0,9] = "金币"
+ sheet[0,10] = "评测历史"
+ sheet[0,11] = "评测时间"
+ sheet[0,12] = "评测结果"
+ sheet[1,0] = course.id
+ sheet[1,1] = course.teacher.show_real_name
+ sheet[1,2] = course.name
+ sheet[1,3] = "# #{i + 1}"
+ sheet[1,4] = homework.name
+ current_row = 1
+ shixun = homework.homework_commons_shixuns.shixun if homework.homework_commons_shixuns
+ if shixun
+ shixun.challenges.each_with_index do |challenge, j|
+ sheet[current_row,5] = "第#{j+1}关"
+ games = Game.where(:challenge_id => challenge.id, :user_id => homework.student_works.where("work_status != 0").map(&:user_id))
+ count_exp_score = 0
+ count_gold_score = 0
+ count_test = 0
+ count_time = 0
+ if games.count > 0
+ games.each do |game|
+ user = game.user
+ sheet[current_row,6] = user.login
+ sheet[current_row,7] = user.show_real_name
+ sheet[current_row,8] = game.final_score ? "+#{game.final_score.to_s} 经验值" : "--"
+ count_exp_score = count_exp_score + (game.final_score ? game.final_score.to_i : 0)
+ sheet[current_row,9] = game.final_score ? (game.answer_open? ? "#{-challenge.score.to_i} 金币" : "+#{game.final_score.to_i} 金币") : "--"
+ count_gold_score = count_gold_score + (game.final_score ? (game.answer_open? ? -challenge.score.to_i : game.final_score.to_i) : 0)
+
+ count = game.outputs.count
+ if count > 0
+ outputs = game.outputs.where(:test_set_position => 1).order("created_at asc")
+ outputs.each_with_index do |output, k|
+ count_test = count_test + 1
+ sheet[current_row,10] = "第#{k+1}次评测"
+ sheet[current_row,11] = k == 0 ? game_spend_time((output.created_at - game.created_at).to_i) : game_spend_time((output.created_at - outputs[k-1].created_at).to_i)
+ count_time += count_time + (k == 0 ? (output.created_at - game.created_at).to_i : (output.created_at - outputs[k-1].created_at).to_i)
+ sheet[current_row,12] = game.outputs.where(:query_index => output.query_index).select{|ou| ou.result == false}.count > 0 ? "失败" : "成功"
+ current_row = current_row + 1
+ end
+ else
+ current_row = current_row + 1
+ end
+ end
+ else
+ current_row = current_row + 1
+ end
+
+ sheet[current_row,6] = "合计"
+ sheet[current_row,7] = games.count.to_s + "人"
+ sheet[current_row,8] = count_exp_score >= 0 ? "+#{count_exp_score} 经验值" : "-#{count_exp_score} 经验值"
+ sheet[current_row,9] = count_gold_score >= 0 ? "+#{count_gold_score} 金币" : "-#{count_gold_score} 金币"
+ sheet[current_row,10] = "共#{count_test}次评测"
+ sheet[current_row,11] = game_spend_time(count_time.to_i)
+ sheet.row(current_row).default_format = black
+ current_row = current_row + 1
+ end
+ end
+ end
+ book.write xls_report
+ xls_report.string
+ end
+
def member_to_xls homeworks, course, members,groups
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
diff --git a/app/controllers/games_controller.rb b/app/controllers/games_controller.rb
index 69194f1f8..23d8a220a 100644
--- a/app/controllers/games_controller.rb
+++ b/app/controllers/games_controller.rb
@@ -316,9 +316,9 @@ class GamesController < ApplicationController
answer_right = []
@game_challenge.challenge_chooses.each_with_index do |choose, index|
correct = (params[:answer][index] == choose.standard_answer) ? true : false
- if choose.current_choose_outputs.blank?
- ChooseOutputs.create(:challenge_choose_id => choose.id, :user_id => User.current.id, :answer => params[:answer][index], :correct => correct)
- end
+ #choose.current_choose_outputs.delete if choose.current_choose_outputs.present?
+ #ChooseOutputs.create(:challenge_choose_id => choose.id, :user_id => User.current.id, :answer => params[:answer][index], :correct => correct)
+ Output.create(:game_id => @game.id, :test_set_position => choose.position, :actual_output => params[:answer][index], :result => correct, :query_index => @game.query_index)
if @shixun.status > 1 && !@game.answer_open
if correct
score += choose.score
@@ -332,14 +332,15 @@ class GamesController < ApplicationController
end
answer_right << correct
end
- @game.update_attributes(:status => 2, :end_time => Time.now)
@had_done = @game.had_done
- reward_grade(@game.user, @game.id, 'Game', score)
- reward_experience(@game.user, @game.id, 'Game', score)
- @game.update_attribute(:final_score, score)
-
+ if @right
+ @game.update_attributes(:status => 2, :end_time => Time.now)
+ reward_grade(@game.user, @game.id, 'Game', score)
+ reward_experience(@game.user, @game.id, 'Game', score)
+ @game.update_attribute(:final_score, score)
+ end
respond_to do |format|
- format.js{redirect_to myshixun_game_path(@game, :myshixun_id => @myshixun, :choose => 1)}
+ format.js{redirect_to myshixun_game_path(@game, :myshixun_id => @myshixun, :choose => @right)}
end
end
@@ -407,7 +408,7 @@ class GamesController < ApplicationController
if(params[:choose] == "true")
challenge.challenge_chooses.each_with_index do |choose, index|
@answer += "第"+ ((index + 1).to_s) +"题:
"
- @answer += choose.answer
+ @answer += (choose.answer.blank? ? choose.standard_answer : choose.answer)
@answer += "
"
end
else
diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index 813c790b4..a2aadf706 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -127,7 +127,6 @@ class MyshixunsController < ApplicationController
compile_success = jsonTestDetails['compileSuccess']
# message = Base64.decode64(params[:msg]) unless params[:msg].blank?
logger.info(outPut)
- logger.info("##################"+ compile_success)
game = Game.find(game_id)
challenge = game.challenge
unless jenkins_testsets.blank?
@@ -135,7 +134,6 @@ class MyshixunsController < ApplicationController
actual_output = tran_base64_decode64(j_test_set['output'])
game_outputs = Output.create(:code => status, :game_id => game_id, :out_put => outPut, :test_set_position => j_test_set['caseId'],
:actual_output => actual_output, :result => j_test_set['passed'].to_i, :query_index => game.query_index, :compile_success => compile_success.to_i)
- logger.info("compile_success:"+ compile_success)
# output = Output.where(:game_id => game.id, :test_set_position => j_test_set['caseId'].to_i).first
# logger.info("#############{outPut}")
# if output.nil?
diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb
index d11285bc7..799dac04f 100644
--- a/app/controllers/shixuns_controller.rb
+++ b/app/controllers/shixuns_controller.rb
@@ -16,7 +16,7 @@ class ShixunsController < ApplicationController
def statistics_students
- @statistics = @shixun.myshixuns.order("created_at desc")
+ @statistics = @shixun.myshixuns.where("").order("created_at desc")
@statistics_count = @statistics.count
@limit = 10
@is_remote = true
@@ -254,9 +254,9 @@ class ShixunsController < ApplicationController
# 确定 sort 1升序 2 降序
@order = params[:order] || "myshixun_count"
bsort = params[:sort] || "desc"
- @sort = bsort == "desc" ? "asc" : "desc"
+ @sort = bsort == "asc" ? "desc" : "asc"
if @order == "updated_at"
- order_str = "#{Shixun.table_name}.updated_at #{bsort}"
+ order_str = "#{Shixun.table_name}.updated_at #{@sort}"
else
order_str = "myshixun_count #{bsort}, #{Shixun.table_name}.updated_at #{bsort}"
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 2ec3d4db3..acc541cd4 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -831,7 +831,7 @@ module ApplicationHelper
end
# 项目issue列表导出Excel功能
- def issue_list_xls issues
+ def issue_list_xls issues
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => "issues"
diff --git a/app/models/challenge_choose.rb b/app/models/challenge_choose.rb
index c14a0c02d..9ea356870 100644
--- a/app/models/challenge_choose.rb
+++ b/app/models/challenge_choose.rb
@@ -7,6 +7,7 @@ class ChallengeChoose < ActiveRecord::Base
has_many :challenge_tags, :dependent => :destroy
has_many :challenge_questions, :dependent => :destroy
has_one :choose_outputs, :dependent => :destroy
+ has_many :outputs, :dependent => :destroy
validates_presence_of :subject
diff --git a/app/models/game.rb b/app/models/game.rb
index 7c0e913ae..62f0c24ad 100644
--- a/app/models/game.rb
+++ b/app/models/game.rb
@@ -66,4 +66,18 @@ class Game < ActiveRecord::Base
challenge = self.challenge
challenge.try(:position).to_i == challenge.shixun.challenges.count ? true : false
end
+
+ def choose_correct_num
+ num = 0
+ self.challenge.challenge_chooses.each do |choose|
+ outputs = Output.where(:game_id => self.id, :test_set_position => choose.position).first
+ if outputs.nil?
+ num = nil
+ else
+ num += (outputs.result ? 1 : 0)
+ end
+ end
+ return num
+ end
+
end
diff --git a/app/models/output.rb b/app/models/output.rb
index 4ce462eff..fe82c2a07 100644
--- a/app/models/output.rb
+++ b/app/models/output.rb
@@ -4,5 +4,5 @@ class Output < ActiveRecord::Base
# compile_success 1 表示程序未报错,有正常输出, 0.表示程序抛异常了,报错!
default_scope :order => 'query_index desc'
belongs_to :game
-
+ belongs_to :challenge_choose
end
diff --git a/app/views/challenges/_edit_evaluating.html.erb b/app/views/challenges/_edit_evaluating.html.erb
index 891458a70..16b58d8ea 100644
--- a/app/views/challenges/_edit_evaluating.html.erb
+++ b/app/views/challenges/_edit_evaluating.html.erb
@@ -49,8 +49,8 @@
<% end %>
<%= match_specific_symbol test.input unless test.input.blank? %>
<%= match_specific_symbol test.output unless test.output.blank? %>
<%= match_specific_symbol test.input unless test.input.blank? %>
<%= match_specific_symbol test.output unless test.output.blank? %>
- <%= group.name %> + <%= group.name %> <%= group.members.count %>
@@ -27,3 +27,13 @@ <%= render :partial => "courses/settings/all_student_list_block" %> + + \ No newline at end of file diff --git a/app/views/courses/settings/_all_teacher_list_ul.erb b/app/views/courses/settings/_all_teacher_list_ul.erb index db3e22090..9886dbec3 100644 --- a/app/views/courses/settings/_all_teacher_list_ul.erb +++ b/app/views/courses/settings/_all_teacher_list_ul.erb @@ -12,11 +12,20 @@ <% unless @course.course_groups.empty? %> <% @course.course_groups.each do |group| %>+
<%= group.name %> <%= group.members.count %> -
+
<%= group.name %> <%= group.members.count %> @@ -26,4 +26,14 @@ <%= render :partial => "courses/settings/has_group_student_list_block" %> - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/views/courses/settings/_members.html.erb b/app/views/courses/settings/_members.html.erb index 1c1806e00..cdb8e9d0b 100644 --- a/app/views/courses/settings/_members.html.erb +++ b/app/views/courses/settings/_members.html.erb @@ -46,20 +46,22 @@ <% end %> - <% @apply_users.each_with_index do |apply, index| %> - <% user = User.find(apply.course_message_id) %> -
+
<%= group.name %> <%= group.members.count %> @@ -26,3 +26,14 @@ <%= render :partial => "courses/settings/no_group_student_list_block" %> + + + \ No newline at end of file diff --git a/app/views/files/_course_list.html.erb b/app/views/files/_course_list.html.erb index c1836895b..67c6a458d 100644 --- a/app/views/files/_course_list.html.erb +++ b/app/views/files/_course_list.html.erb @@ -1,3 +1,10 @@ + <% if curse_attachments.count != 0 %> <% curse_attachments.each do |file| %> <% if file.is_public? || User.current.member_of_course?(course) || User.current.admin? %> @@ -8,10 +15,15 @@
<%= (index + 1).to_s + "." + (choose.category == 1 ? "单选题" : "多选题") %>
<% if choose.category == 1 %> - name="answer[<%= index + 1 %>]" category="<%= choose.category %>" value="<%= (question.position + 65).chr %>" id="result_<%= index %>_<%= i %>" class="ml-3 mr5 magic-radio ml5"> + name="answer[<%= index + 1 %>]" category="<%= choose.category %>" value="<%= (question.position + 65).chr %>" id="result_<%= index %>_<%= i %>" class="ml-3 mr5 magic-radio ml5"> <% else %> - name="answer[]" category="<%= choose.category %>" value="<%= (question.position + 65).chr %>" id="result_<%= index %>_<%= i %>" class="ml-3 mr5 magic-checkbox ml5"> + name="answer[]" category="<%= choose.category %>" value="<%= (question.position + 65).chr %>" id="result_<%= index %>_<%= i %>" class="ml-3 mr5 magic-checkbox ml5"> <% end %> - +
<% end %> - +编辑帖子
<%= @course.name %> > <%= @homework.homework_type_ch %>作业 > <%#= link_to get_hw_index(@homework, @is_teacher, @homework.homework_type) + 1, student_work_index_path(:homework => @homework.id) %> - #<%= get_hw_index(@homework, @is_teacher, @homework.homework_type) + 1 %> + #<%= get_hw_index(@homework, @is_teacher, @homework.homework_type) + 1 %> > <% if @is_teacher || @work.user == User.current || (@homework.homework_detail_manual.comment_status != 3 && @homework.homework_detail_manual.comment_status != 4) %> <%= link_to @work.user.try(:show_real_name), user_path(@work.user) %> <% else %> diff --git a/app/views/users/user_fanslist.html.erb b/app/views/users/user_fanslist.html.erb index edc5bb134..45d3a81a4 100644 --- a/app/views/users/user_fanslist.html.erb +++ b/app/views/users/user_fanslist.html.erb @@ -13,7 +13,7 @@ <%= str %>的粉丝 <%= @user_fanlist_count %> -