缺评扣分:{{act.homework_common_detail.absence_penalty}}分/作品 匿评关闭时间:{{act.homework_common_detail.evaluation_end}}
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index d1d9fbdf5..e6e0ec087 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -595,11 +595,33 @@ 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 = CodeTests.count()
+
+ #设置个空的数组 以便paginateHelper来分页
+ @code_work_tests = []
+ if tCount >= 1
+ @code_work_tests[tCount-1] = {}
+ end
@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'] = StudentWork.find(test['student_work_id']).is_test
+ #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/attachments_controller.rb b/app/controllers/attachments_controller.rb
index 1dacffb6f..fe3c3272a 100644
--- a/app/controllers/attachments_controller.rb
+++ b/app/controllers/attachments_controller.rb
@@ -660,8 +660,8 @@ class AttachmentsController < ApplicationController
end
def has_login
- unless @attachment && @attachment.container_type == "Organization"
- unless @attachment && @attachment.container_type == "PhoneAppVersion"
+ unless (@attachment && @attachment.container_type == "Organization").nil?
+ unless (@attachment && @attachment.container_type == "PhoneAppVersion").nil?
render_403 if !User.current.logged? && !(@attachment.container_type == 'OrgSubfield' && @attachment.container.organization.allow_guest_download) && !(@attachment.container_type == 'OrgDocumentComment' && @attachment.container.organization.allow_guest_download)
end
end
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 5a841d473..9d2548a36 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/helpers/application_helper.rb b/app/helpers/application_helper.rb
index f0f959830..606c9b5fd 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -120,59 +120,52 @@ module ApplicationHelper
case type
when "HomeworkCommon"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0,
- :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0, :homework_journal_num => 1)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :homework_journal_num => 1)
else
- score = course_contributor_score.homework_journal_num + 1
+ score = course_contributor_score.homework_journal_num.to_i + 1
course_contributor_score.update_attributes(:homework_journal_num => score)
end
# 课程留言
when "Course"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0,
- :news_reply_num => 0, :resource_num => 0, :journal_num => 1, :journal_reply_num => 0)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :journal_num => 1)
else
- score = course_contributor_score.journal_num + 1
+ score = course_contributor_score.journal_num.to_i + 1
course_contributor_score.update_attributes(:journal_num => score)
end
when "Message"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 1, :message_reply_num => 0,
- :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 1)
else
- score = course_contributor_score.message_num + 1
+ score = course_contributor_score.message_num.to_i + 1
course_contributor_score.update_attributes(:message_num => score)
end
when "MessageReply"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 1,
- :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_reply_num => 1)
else
- score = course_contributor_score.message_reply_num + 1
+ score = course_contributor_score.message_reply_num.to_i + 1
course_contributor_score.update_attributes(:message_reply_num => score)
end
when "NewReply"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0,
- :news_reply_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :news_reply_num => 1)
else
- score = course_contributor_score.news_reply_num + 1
+ score = course_contributor_score.news_reply_num.to_i + 1
course_contributor_score.update_attributes(:news_reply_num => score)
end
when "News"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0,
- :news_reply_num => 0, :news_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :news_num => 1)
else
- score = course_contributor_score.news_num + 1
+ score = course_contributor_score.news_num.to_i + 1
course_contributor_score.update_attributes(:news_num => score)
end
when "Attachment"
if course_contributor_score.nil?
- CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0,
- :news_reply_num => 0, :news_num => 0, :resource_num => 1, :journal_num => 0, :journal_reply_num => 0)
+ CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :resource_num => 1)
else
- score = course_contributor_score.resource_num + 1
+ score = course_contributor_score.resource_num.to_i + 1
course_contributor_score.update_attributes(:resource_num => score)
end
end
@@ -184,38 +177,38 @@ module ApplicationHelper
case type
when "HomeworkCommon"
unless course_contributor_score.nil?
- score = course_contributor_score.homework_journal_num - 1
+ score = course_contributor_score.homework_journal_num.to_i - 1
course_contributor_score.update_attribute(:homework_journal_num, score < 0 ? 0 : score)
end
# 课程留言
when "Course"
unless course_contributor_score.nil?
- score = course_contributor_score.journal_num - 1
+ score = course_contributor_score.journal_num.to_i - 1
course_contributor_score.update_attribute(:journal_num, score < 0 ? 0 : score)
end
when "Message"
unless course_contributor_score.nil?
- score = course_contributor_score.message_num - 1
+ score = course_contributor_score.message_num.to_i - 1
course_contributor_score.update_attribute(:message_num, score < 0 ? 0 : score)
end
when "MessageReply"
unless course_contributor_score.nil?
- score = course_contributor_score.message_reply_num - 1
+ score = course_contributor_score.message_reply_num.to_i - 1
course_contributor_score.update_attribute(:message_reply_num, score < 0 ? 0 : score)
end
when "NewReply"
unless course_contributor_score.nil?
- score = course_contributor_score.news_reply_num - 1
+ score = course_contributor_score.news_reply_num.to_i - 1
course_contributor_score.update_attribute(:news_reply_num, score < 0 ? 0 : score)
end
when "News"
unless course_contributor_score.nil?
- score = course_contributor_score.news_num - 1
+ score = course_contributor_score.news_num.to_i - 1
course_contributor_score.update_attribute(:news_num, score < 0 ? 0 : score)
end
when "Attachment"
unless course_contributor_score.nil?
- score = course_contributor_score.resource_num - 1
+ score = course_contributor_score.resource_num.to_i - 1
course_contributor_score.update_attribute(:resource_num, score < 0 ? 0 : score)
end
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/message.rb b/app/models/message.rb
index 5dc5dcc2e..e6df9493b 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -80,12 +80,10 @@ class Message < ActiveRecord::Base
validates_length_of :subject, :maximum => 255
validate :cannot_reply_to_locked_topic, :on => :create
- after_create :add_author_as_watcher, :reset_counters!, :add_boards_count
+ # after_create :add_author_as_watcher, :reset_counters!, :add_boards_count
after_update :update_messages_board, :update_activity
after_destroy :reset_counters!,:down_user_score,:delete_kindeditor_assets, :decrease_boards_count, :down_course_score
-
- after_create :act_as_activity,:act_as_course_activity,:be_user_score,:act_as_forge_activity,
- :act_as_system_message, :send_mail, :act_as_student_score, act_as_at_message(:content, :author_id)
+ after_create :act_as_course_activity, :act_as_forge_activity, :act_as_student_score, act_as_at_message(:content, :author_id), :add_author_as_watcher, :reset_counters!, :add_boards_count
#before_save :be_user_score
scope :visible, lambda {|*args|
@@ -137,11 +135,11 @@ class Message < ActiveRecord::Base
if self.project && !project.project_score.nil?
# 讨论区
if self.parent_id.nil?
- count = self.project.project_score.board_num + 1
- self.project.project_score.update_attribute(:board_num, count)
+ count = self.project.project_score.board_num.to_i + 1
+ self.project.project_score.update_column(:board_num, count)
else # 回复
- count = self.project.project_score.board_message_num + 1
- self.project.project_score.update_attribute(:board_message_num, count)
+ count = self.project.project_score.board_message_num.to_i + 1
+ self.project.project_score.update_column(:board_message_num, count)
end
end
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..cb113f1e6 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
-
- 提交测试时间
+
+ 用户等待时间
- 答题状态
+ 语言
-
- 测试集数
+
+ 测试完成时间
-
- 最小耗时
+
+ 答题状态
- 最大耗时
+ 耗时
<%=x["result"].force_encoding("UTF-8")%>正确输出: -
<%=x["output"]%>+
<%=x["output"].force_encoding("UTF-8")%>耗时:
<%=x["time_used"]==0?1:x["time_used"]%>毫秒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%> -
<%=x["result"]%>+
<%=x["result"].force_encoding("UTF-8")%>正确输出: -
<%= x["output"] %>+
<%= x["output"].force_encoding("UTF-8") %>耗时:
<%=x["time_used"]==0?1:x["time_used"]%>毫秒diff --git a/db/migrate/20160418074429_delete_other_works.rb b/db/migrate/20160418074429_delete_other_works.rb new file mode 100644 index 000000000..54944a6ec --- /dev/null +++ b/db/migrate/20160418074429_delete_other_works.rb @@ -0,0 +1,11 @@ +class DeleteOtherWorks < ActiveRecord::Migration + def up + works = StudentWork.where("homework_common_id = 3253 and user_id = 10740 and final_score = 0") + unless works.empty? + works.destroy_all + end + end + + def down + end +end 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 2fd7fd91d..14753784a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,11 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160408074854) do + + + +ActiveRecord::Schema.define(:version => 20160405021915) do +ActiveRecord::Schema.define(:version => 20160419074016) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -334,6 +338,17 @@ ActiveRecord::Schema.define(:version => 20160408074854) 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 @@ -809,6 +824,7 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.integer "anonymous_comment", :default => 0 t.integer "quotes", :default => 0 t.integer "is_open", :default => 0 + t.datetime "simi_time" end add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" @@ -1520,6 +1536,18 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.string "topic_resource" end + create_table "rep_statics", :force => true do |t| + t.integer "project_id" + t.integer "commits_num" + t.string "uname" + t.string "email" + t.integer "add" + t.integer "del" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "changeset" + end + create_table "repositories", :force => true do |t| t.integer "project_id", :default => 0, :null => false t.string "url", :default => "", :null => false @@ -1667,6 +1695,7 @@ ActiveRecord::Schema.define(:version => 20160408074854) 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| @@ -1685,6 +1714,8 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.integer "absence_penalty", :default => 0 t.float "system_score", :default => 0.0 t.boolean "is_test", :default => false + t.integer "simi_id" + t.integer "simi_value" end add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" diff --git a/lib/tasks/sync_files.rake b/lib/tasks/sync_files.rake new file mode 100644 index 000000000..5c9326356 --- /dev/null +++ b/lib/tasks/sync_files.rake @@ -0,0 +1,38 @@ +require 'trustie/gitlab/sync' + +namespace :trustie do + namespace :files do + desc "sync course'file" + task :course => :environment do + # Course.all.each do |course| + # unless course.attachments.count.to_i == 0 + # attachment_count = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{course.id} and container_type ='Course'").count + # project_score = ProjectScore.where("project_id=?", project.id).first + # if project_score.nil? + # ProjectScore.create(:project_id => project.id, :attach_num => 0) + # else + # project_score.attach_num = attachment_count + # project_score.save + # end + # end + # end + end + + desc "sync project'file" + task :project => :environment do + Project.all.each do |project| + unless project.attachments.count.to_i == 0 + attachment_count = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{project.id} and container_type ='Project'").count + project_score = ProjectScore.where("project_id=?", project.id).first + if project_score.nil? + ProjectScore.create(:project_id => project.id, :attach_num => 0) + else + project_score.attach_num = attachment_count + project_score.save + end + end + end + end + + end +end diff --git a/public/app.html b/public/app.html index 5ebcdc286..90dc64956 100644 --- a/public/app.html +++ b/public/app.html @@ -14,6 +14,57 @@ + diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index f5eded3ee..f87af796f 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -7,29 +7,32 @@