diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index f663bc272..1a55c947b 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -586,11 +586,31 @@ class AdminController < ApplicationController
#代码测试列表
def code_work_tests
- @code_work_tests = StudentWorkTest.find_by_sql("select status,results,created_at, student_work_id from student_work_tests order by id desc ")
- #@code_work_tests = StudentWorkTest.find_by_sql("select a.status,a.results,a.created_at ,b.id as homeworkid,d.language from student_work_tests as a , homework_commons as b ,student_works as c, homework_detail_programings as d where a.student_work_id = c.id and b.id = c.homework_common_id and c.homework_common_id = d.homework_common_id order by a.id desc ")
- #@code_work_tests = StudentWorkTest.order('created_at desc')
+ #求出所有条数
+ tCount = StudentWorkTest.find_by_sql("select count(*) from code_tests").first['count(*)']
+
+ #设置个空的数组 以便paginateHelper来分页
+ @code_work_tests = []
+ @code_work_tests[tCount-1] = {}
+
@code_work_tests = paginateHelper @code_work_tests,30
@page = (params['page'] || 1).to_i - 1
+
+ #取出需要的那一页数据
+ tStart = @page*30
+ @code_work_tests = CodeTests.find_by_sql("select * from code_tests order by id desc limit #{tStart},30 ")
+
+ #取出各个作业是否是模拟答题的
+ is_test = {}
+ @code_work_tests.each do |test|
+ if is_test[test['student_work_id']] != nil
+ test['is_test'] = is_test[test['student_work_id']]
+ else
+ test['is_test'] = CodeTests.find_by_sql("select is_test from student_works where id = #{test['student_work_id']}").first['is_test']
+ is_test[test['student_work_id']] = test['is_test']
+ end
+ end
+
respond_to do |format|
format.html
end
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 89ee77053..43fe10bfe 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -100,8 +100,17 @@ class StudentWorkController < ApplicationController
test = @homework.homework_tests[index - 1]
#请求测试
- result = test_realtime_ex(test, params[:src])
+ begin
+ result = test_realtime_ex(test, params[:src])
+ rescue Timeout::Error
+ tEndtime = Time.now
+ tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000
+ logger.debug "program_test_ex user wait time = #{tUsedtime} 毫秒"
+ #status 0:答案正确 -3http超时 -2:编译错误 -1:答案错误 2:程序运行超时
+ CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>-3,:wait_time=>tUsedtime,:student_work_id=>student_work.id)
+
+ end
if result["status"].to_i != -2
#result["results"].first['output'] = result["results"].first['output'].gsub(" ","□")
#result["results"].first['result'] = result["results"].first['result'].gsub(" ","□")
@@ -116,11 +125,19 @@ class StudentWorkController < ApplicationController
resultObj[:results] = result["results"].first #本次测试结果
resultObj[:error_msg] = result["error_msg"] #编译错误时的信息
+ #该状态用于存入CodeTests
+ tmpstatus = -1
if result["status"].to_i == -2 #编译错误
resultObj[:results] = result["error_msg"]
resultObj[:status] = -2
+ tmpstatus = -2
elsif result["results"][0]["status"].to_i == 2
resultObj[:status] = 2
+ tmpstatus = 2
+ end
+
+ if result["status"] == 0
+ tmpstatus = 0
end
unless student_work.save
@@ -136,9 +153,6 @@ class StudentWorkController < ApplicationController
end
#每次从数据库取出上次的结果加上本次的结果再存入数据库
- tEndtime = Time.now
- tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000
-
if result["status"].to_i != -2
result["results"].first['user_wait'] = tUsedtime
@@ -175,11 +189,19 @@ class StudentWorkController < ApplicationController
resultObj[:index] = student_work.student_work_tests.count
end
+ #将每次用户等待时间都存起来以便管理界面显示用
tEndtime = Time.now
tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000
-
logger.debug "program_test_ex user wait time = #{tUsedtime} 毫秒"
+ time_used = 0
+ if result["status"].to_i != -2
+ #至少一毫秒
+ time_used = result["results"].first['time_used'] == 0 ? 1:result["results"].first['time_used']
+ end
+ #0:答案正确 -3http超时 -2:编译错误 -1:答案错误 2:程序运行超时
+ CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>tmpstatus,:time_used=>time_used,:wait_time=>tUsedtime,:student_work_id=>student_work.id)
+
#渲染返回结果
render :json => resultObj
end
@@ -223,6 +245,7 @@ class StudentWorkController < ApplicationController
JSON.parse(res.body)
end
+ #点击代码查重按钮
def work_canrepeat
@homework_id = params[:homework]
@course_id = params[:course_id]
@@ -280,13 +303,14 @@ class StudentWorkController < ApplicationController
render :json => resultObj
end
+ #上次代码查重时间
def last_codecomparetime
resultObj = {status: 0}
@homework = HomeworkCommon.find params[:homework]
#转换一下
if @homework.simi_time != nil
- resultObj[:comparetime] = Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M")
+ resultObj[:comparetime] = Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M:%S")
else
resultObj[:comparetime] = 0
end
@@ -1277,7 +1301,6 @@ class StudentWorkController < ApplicationController
request["Content-Type"] = "application/json"
client.request(request)
end
-
JSON.parse(res.body)
end
diff --git a/app/models/code_tests.rb b/app/models/code_tests.rb
new file mode 100644
index 000000000..f5a358b07
--- /dev/null
+++ b/app/models/code_tests.rb
@@ -0,0 +1,3 @@
+class CodeTests < ActiveRecord::Base
+ attr_accessible :homework_id, :language, :status, :time_used, :wait_time, :student_work_id
+end
diff --git a/app/models/student_work_test.rb b/app/models/student_work_test.rb
index 0246ecabf..54d5ab07a 100644
--- a/app/models/student_work_test.rb
+++ b/app/models/student_work_test.rb
@@ -1,6 +1,6 @@
# encoding: utf-8
class StudentWorkTest < ActiveRecord::Base
- attr_accessible :student_work_id, :results, :status, :src
+ attr_accessible :student_work_id, :results, :status, :src, :uwait_time
belongs_to :student_work
serialize :results, Array
diff --git a/app/views/admin/code_work_tests.html.erb b/app/views/admin/code_work_tests.html.erb
index 29fb588c2..385f97169 100644
--- a/app/views/admin/code_work_tests.html.erb
+++ b/app/views/admin/code_work_tests.html.erb
@@ -10,51 +10,51 @@
- 作业id
+ 作业id
+ |
+
+ 作品id
|
- 平均等待时间
+ 用户等待时间
|
- 语言
+ 语言
|
-
- 提交测试时间
+ |
+ 测试完成时间
+ |
+
+ 答题状态
|
- 答题状态
- |
-
- 测试集数
- |
-
- 最小耗时
- |
-
- 最大耗时
+ 耗时
|
<% @code_work_tests.each do |test| %>
- <% infos = StudentWorkTest.find_by_sql("select a.homework_common_id as homeworkid,b.language from student_works as a, homework_detail_programings as b where a.id = #{test.student_work_id} and a.homework_common_id = b.homework_common_id
- ").first %>
- <% if infos != nil %>
+ <% if test['homework_id'] != nil %>
">
-
- <%=link_to(infos.homeworkid, student_work_index_path(:homework => infos.homeworkid))%>
+ | '>
+ <%=link_to(test['homework_id'], student_work_index_path(:homework => test['homework_id']))%>
+ |
+ '>
+ <% if test['is_test'] == 0 %>
+ <%=link_to(test['student_work_id'], student_work_index_path(:homework => test['homework_id'],:student_work_id=>test['student_work_id']))%>
+ <% else %>
+ <%=link_to(test['student_work_id'], new_user_commit_homework_users_path(homework_id: test['homework_id'], is_test: true))%>
+ <% end %>
|
- <% if test.status != -2 && test.results.first['user_wait'] %>
- <% wait_time = 0 %>
- <% test.results.each do |result| wait_time = wait_time + result['user_wait'] end %>
- <%=(wait_time/test.results.count).to_s+"毫秒" %>
+ <% if test.wait_time != 0 %>
+ <%=test.wait_time.to_s+"毫秒" %>
<% else %>
<%="未记录"%>
<% end %>
|
- <%=%W(C C++ Python Java).at(infos.language.to_i - 1)%>
+ <%=%W(C C++ Python Java).at(test['language'].to_i - 1)%>
|
<%=Time.parse(test.created_at.to_s).strftime("%Y-%m-%d %H:%M:%S")%>
@@ -64,26 +64,17 @@
<%= "答题正确" %>
<% elsif test.status == -2 %>
<%= "编译错误" %>
- <% elsif test.status == 2 || test.results.last['status'] == 2 %>
- <%= "超时" %>
+ <% elsif test.status == 2 %>
+ <%= "代码超时" %>
+ <% elsif test.status == -3 %>
+ <%= "请求超时" %>
<% else %>
<%= "答题错误" %>
<% end %>
|
- <% if test.status != -2 %>
- <%=test.results.count%>
- <% end %>
- |
-
- <% if test.status != -2 %>
- <%test.results = test.results.sort_by {|result| result['time_used'] }%>
- <%=test.results.first['time_used'] == 0 ? "1毫秒":test.results.first['time_used'].to_s+"毫秒"%>
- <% end %>
- |
-
- <% if test.status != -2 %>
- <%=test.results.last['time_used'] == 0 ? "1毫秒":test.results.last['time_used'].to_s+"毫秒"%>
+ <% if test.time_used > 0 %>
+ <%=test.time_used.to_s+"毫秒"%>
<% end %>
|
diff --git a/app/views/courses/code_repeat.html.erb b/app/views/courses/code_repeat.html.erb
index 0748dc30f..87cf539fa 100644
--- a/app/views/courses/code_repeat.html.erb
+++ b/app/views/courses/code_repeat.html.erb
@@ -2,8 +2,8 @@
查重结果
diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb
index ac06d900e..e0b6def7a 100644
--- a/app/views/student_work/_student_work_list.html.erb
+++ b/app/views/student_work/_student_work_list.html.erb
@@ -14,14 +14,14 @@
<% end %>
<%if @is_teacher || @homework.homework_detail_manual.comment_status == 3 || @homework.is_open == 1%>
-
+
+ <%= select_tag(:student_work_in_group,options_for_select(course_group_list(@course),@group), {:class => "classSplit fl mr20"}) unless course_group_list(@course).empty? %>
<%if @homework.homework_type == 2 && @is_teacher %>
- <%= link_to "代码查重", work_canrepeat_student_work_index_path(homework:@homework.id, course_id:@course.id), class: 'BlueCirBtn fr',:remote => true %>
+ <%= link_to "代码查重", work_canrepeat_student_work_index_path(homework:@homework.id, course_id:@course.id), class: 'BlueCirBtn fl',:remote => true %>
<% end %>
- <%= select_tag(:student_work_in_group,options_for_select(course_group_list(@course),@group), {:class => "classSplit"}) unless course_group_list(@course).empty? %>
<% end%>
[ 显示作业信息 ]
@@ -50,8 +50,12 @@
\ No newline at end of file
diff --git a/app/views/student_work/work_canrepeat.js.erb b/app/views/student_work/work_canrepeat.js.erb
index 353a150cf..29fd61c97 100644
--- a/app/views/student_work/work_canrepeat.js.erb
+++ b/app/views/student_work/work_canrepeat.js.erb
@@ -81,7 +81,7 @@
test_repeat();
<% else%>
$("#ajax-modal").html('<%= escape_javascript( render :partial => 'courses/compare_code_tips_1',:locals => {:homework=> @homework,:courseid=>@course_id })%>');
- $('#compare-tips-1').html('您上次查重的时间为<%= Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H-%M-%S")%>');
+ $('#compare-tips-1').html('您上次查重的时间为<%= Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M:%S")%>');
showModal('ajax-modal', '580px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("");
diff --git a/db/migrate/20160419061745_create_code_tests.rb b/db/migrate/20160419061745_create_code_tests.rb
new file mode 100644
index 000000000..565378ccd
--- /dev/null
+++ b/db/migrate/20160419061745_create_code_tests.rb
@@ -0,0 +1,13 @@
+class CreateCodeTests < ActiveRecord::Migration
+ def change
+ create_table :code_tests do |t|
+ t.integer :homework_id
+ t.integer :wait_time, default: 0
+ t.integer :language
+ t.integer :status
+ t.integer :time_used, default: 0
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20160419074016_add_student_work_id_to_code_tests.rb b/db/migrate/20160419074016_add_student_work_id_to_code_tests.rb
new file mode 100644
index 000000000..d2fc6b1f4
--- /dev/null
+++ b/db/migrate/20160419074016_add_student_work_id_to_code_tests.rb
@@ -0,0 +1,5 @@
+class AddStudentWorkIdToCodeTests < ActiveRecord::Migration
+ def change
+ add_column :code_tests, :student_work_id, :integer,:default=>0
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7c1efce6d..2fecd9f48 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20160330103916) do
+ActiveRecord::Schema.define(:version => 20160419074016) do
create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
@@ -334,6 +334,17 @@ ActiveRecord::Schema.define(:version => 20160330103916) do
t.boolean "diff_all"
end
+ create_table "code_tests", :force => true do |t|
+ t.integer "homework_id"
+ t.integer "wait_time", :default => 0
+ t.integer "language"
+ t.integer "status"
+ t.integer "time_used", :default => 0
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "student_work_id", :default => 0
+ end
+
create_table "comments", :force => true do |t|
t.string "commented_type", :limit => 30, :default => "", :null => false
t.integer "commented_id", :default => 0, :null => false
@@ -1290,6 +1301,7 @@ ActiveRecord::Schema.define(:version => 20160330103916) do
t.datetime "updated_at", :null => false
t.string "field_type"
t.integer "hide", :default => 0
+ t.integer "status", :default => 1
end
create_table "organizations", :force => true do |t|
@@ -1302,6 +1314,7 @@ ActiveRecord::Schema.define(:version => 20160330103916) do
t.datetime "updated_at", :null => false
t.boolean "allow_guest_download", :default => true
t.integer "visits", :default => 0
+ t.integer "show_mode", :default => 0
end
create_table "phone_app_versions", :force => true do |t|
@@ -1666,6 +1679,7 @@ ActiveRecord::Schema.define(:version => 20160330103916) do
t.integer "status", :default => 9
t.text "results"
t.text "src"
+ t.integer "uwait_time", :default => 0
end
create_table "student_works", :force => true do |t|
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 5162bcb16..3764ceb04 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -2847,29 +2847,4 @@ img.school_avatar {
}
.admin_message_warn{font-size: 12px;color: red;}
-a.btn_message_free{ background:#15BCCF; display:block; text-align:center; color:#fff; padding:3px 0; width:60px; margin-bottom:10px;margin-left: 58px;}
-
-/*20160401袁可------------------ 查重结果样式*/
-.conbox{ width:1000px; margin:0 auto; border:3px solid #f0f0f0; background:#fff;}
-.conbox-h2{ font-size:16px; padding:10px 0; padding-left:25px;}
-.chabox{ width:1000px;}
-.chabox ul li{ float:left; width:82px; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
-.chabox ul li.chabox-w-401{ width:151px; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
-.chabox ul li.chabox-r-line{ border-right:1px solid #D1D1D1;}
-.chabox-top{ width:1000px; }
-.chabox-top li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000;}
-.chabox-con li{font-size:12px; line-height:35px; height:35px; color:#888; border-bottom:1px solid #DFDFDF;}
-a.cha-btn{ display:block; width:50px; height:20px; line-height:20px; margin:0 auto; border:1px solid #269ac9; color:#269ac9;-webkit-border-radius: 3px;border-radius:3px; margin-top:8px;}
-a:hover.cha-btn{ background:#269ac9; color:#fff;}
-.chabox-header li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; border-top:1px solid #E4E4E4; border-right:1px solid #E4E4E4; color:#000;}
-.chabox ul li.chabox-w-500{ width:499px;}
-.chabox ul li.chabox-w-40{ width:39px; border-right:1px solid #D1D1D1;}
-.chabox ul li.chabox-txt-left{ text-align:left;text-indent:1em; }
-
-.contrast-box{ width:1200px;box-shadow: 0 0 5px #6B6B6B; background:#fff; margin:0 auto; }
-.contrast-con{ width:599px; border-right:1px solid #D1D1D1; float:left;}
-.contrast-con h3{font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
-.contrast-txt{ padding:10px;}
-.showCodeC{ width:580px; float:left;}
-
-.resourceClose {background:url(images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000;}
\ No newline at end of file
+a.btn_message_free{ background:#15BCCF; display:block; text-align:center; color:#fff; padding:3px 0; width:60px; margin-bottom:10px;margin-left: 58px;}
\ No newline at end of file
diff --git a/public/stylesheets/nyan.css b/public/stylesheets/nyan.css
index dc380f6ef..e9fd46adf 100644
--- a/public/stylesheets/nyan.css
+++ b/public/stylesheets/nyan.css
@@ -1452,3 +1452,28 @@ ul.contest-notification-list li span{
color: #136b3b !important;
font-weight:normal !important;
}
+
+/*20160401袁可------------------ 查重结果样式*/
+.conbox{ width:1000px; margin:0 auto; border:3px solid #f0f0f0; background:#fff;}
+.conbox-h2{ font-size:16px; padding:10px 0; padding-left:25px;}
+.chabox{ width:1000px;}
+.chabox ul li{ float:left; width:82px; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
+.chabox ul li.chabox-w-401{ width:151px; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
+.chabox ul li.chabox-r-line{ border-right:1px solid #D1D1D1;}
+.chabox-top{ width:1000px; }
+.chabox-top li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000;}
+.chabox-con li{font-size:12px; line-height:35px; height:35px; color:#888; border-bottom:1px solid #DFDFDF;}
+a.cha-btn{ display:block; width:50px; height:20px; line-height:20px; margin:0 auto; border:1px solid #269ac9; color:#269ac9;-webkit-border-radius: 3px;border-radius:3px; margin-top:8px;}
+a:hover.cha-btn{ background:#269ac9; color:#fff;}
+.chabox-header li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; border-top:1px solid #E4E4E4; border-right:1px solid #E4E4E4; color:#000;}
+.chabox ul li.chabox-w-500{ width:499px;}
+.chabox ul li.chabox-w-40{ width:39px; border-right:1px solid #D1D1D1;}
+.chabox ul li.chabox-txt-left{ text-align:left;text-indent:1em; }
+
+.contrast-box{ width:1200px;box-shadow: 0 0 5px #6B6B6B; background:#fff; margin:0 auto; }
+.contrast-con{ width:599px; border-right:1px solid #D1D1D1; float:left;}
+.contrast-con h3{font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
+.contrast-txt{ padding:10px;}
+.showCodeC{ width:580px; float:left;}
+
+.resourceClose {background:url(images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000;}
diff --git a/spec/factories/code_tests.rb b/spec/factories/code_tests.rb
new file mode 100644
index 000000000..b8eed45fb
--- /dev/null
+++ b/spec/factories/code_tests.rb
@@ -0,0 +1,10 @@
+FactoryGirl.define do
+ factory :code_test, :class => 'CodeTests' do
+ homework_id 1
+wait_time 1
+language 1
+status 1
+time_used "MyString"
+ end
+
+end
diff --git a/spec/models/code_tests_spec.rb b/spec/models/code_tests_spec.rb
new file mode 100644
index 000000000..4e0d71cf3
--- /dev/null
+++ b/spec/models/code_tests_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe CodeTests, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end