|
|
|
@ -81,6 +81,7 @@ class StudentWorkController < ApplicationController
|
|
|
|
|
#根据传入的tIndex确定是第几次测试
|
|
|
|
|
#之后如果觉得很卡 可以改成将结果传回JS再以参数形式传回来
|
|
|
|
|
def program_test_ex
|
|
|
|
|
|
|
|
|
|
tStarttime = Time.now
|
|
|
|
|
|
|
|
|
|
is_test = params[:is_test] == 'true'
|
|
|
|
@ -106,108 +107,123 @@ class StudentWorkController < ApplicationController
|
|
|
|
|
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:程序运行超时
|
|
|
|
|
#status 0:答案正确 -5program_test_ex 函数出错 -4judge代码出错 -3http超时 -2:编译错误 -1:答案错误 2:程序运行超时
|
|
|
|
|
resultObj[:status] = -3
|
|
|
|
|
CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>-3,:wait_time=>tUsedtime,:student_work_id=>student_work.id)
|
|
|
|
|
|
|
|
|
|
rescue
|
|
|
|
|
#-4 judge代码 出错
|
|
|
|
|
logger.debug "program_test_error 1"
|
|
|
|
|
resultObj[:status] = -4
|
|
|
|
|
tmpstatus = -4
|
|
|
|
|
CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>tmpstatus,:time_used=>0,:wait_time=>0,: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(" ","□")
|
|
|
|
|
space_replace_1(result["results"].first['output'])
|
|
|
|
|
space_replace_1(result["results"].first['result'])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
logger.debug result
|
|
|
|
|
|
|
|
|
|
#-1 默认值 0全部正确并结束 2 超时 -2 编译错误
|
|
|
|
|
resultObj[:status] = -1
|
|
|
|
|
resultObj[:results] = result["results"].first #本次测试结果
|
|
|
|
|
if result["status"].to_i == -2 #编译错误
|
|
|
|
|
result["error_msg"] = result["error_msg"][0..2047]
|
|
|
|
|
end
|
|
|
|
|
resultObj[:error_msg] = result["error_msg"] #编译错误时的信息
|
|
|
|
|
begin
|
|
|
|
|
if resultObj[:status] != -3 && resultObj[:status] != -4
|
|
|
|
|
if result["status"].to_i != -2
|
|
|
|
|
#result["results"].first['output'] = result["results"].first['output'].gsub(" ","□")
|
|
|
|
|
#result["results"].first['result'] = result["results"].first['result'].gsub(" ","□")
|
|
|
|
|
space_replace_1(result["results"].first['output'])
|
|
|
|
|
space_replace_1(result["results"].first['result'])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#该状态用于存入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
|
|
|
|
|
logger.debug result
|
|
|
|
|
|
|
|
|
|
#-1 默认值 0全部正确并结束 2 超时 -2 编译错误
|
|
|
|
|
resultObj[:status] = -1
|
|
|
|
|
resultObj[:results] = result["results"].first #本次测试结果
|
|
|
|
|
# if result["status"].to_i == -2 #编译错误
|
|
|
|
|
result["error_msg"] = result["error_msg"][0..2047]
|
|
|
|
|
# end
|
|
|
|
|
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
|
|
|
|
|
if result["status"] == 0
|
|
|
|
|
tmpstatus = 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
unless student_work.save
|
|
|
|
|
resultObj[:status] = 200
|
|
|
|
|
else
|
|
|
|
|
student_work.name = params[:title]
|
|
|
|
|
student_work.description = params[:src]
|
|
|
|
|
unless student_work.save
|
|
|
|
|
resultObj[:status] = 200
|
|
|
|
|
else
|
|
|
|
|
student_work.name = params[:title]
|
|
|
|
|
student_work.description = params[:src]
|
|
|
|
|
|
|
|
|
|
if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d")
|
|
|
|
|
student_work.late_penalty = @homework.late_penalty
|
|
|
|
|
else
|
|
|
|
|
student_work.late_penalty = 0
|
|
|
|
|
end
|
|
|
|
|
if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d")
|
|
|
|
|
student_work.late_penalty = @homework.late_penalty
|
|
|
|
|
else
|
|
|
|
|
student_work.late_penalty = 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#每次从数据库取出上次的结果加上本次的结果再存入数据库
|
|
|
|
|
if result["status"].to_i != -2
|
|
|
|
|
result["results"].first['user_wait'] = tUsedtime
|
|
|
|
|
#每次从数据库取出上次的结果加上本次的结果再存入数据库
|
|
|
|
|
if result["status"].to_i != -2
|
|
|
|
|
result["results"].first['user_wait'] = tUsedtime
|
|
|
|
|
|
|
|
|
|
if result["results"][0]["status"].to_i == 2
|
|
|
|
|
result["status"] = 2
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if result["results"][0]["status"].to_i == 2
|
|
|
|
|
result["status"] = 2
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
status = result["status"]
|
|
|
|
|
if index == 1
|
|
|
|
|
student_work_test = student_work.student_work_tests.build(status: status,
|
|
|
|
|
results: [resultObj[:results]],src: params[:src])
|
|
|
|
|
student_work_test.save!
|
|
|
|
|
resultObj[:testid] = student_work_test.id
|
|
|
|
|
else
|
|
|
|
|
#先从数据库取出result
|
|
|
|
|
student_work_test = StudentWorkTest.find(params[:testid])
|
|
|
|
|
results = student_work_test.results
|
|
|
|
|
results << resultObj[:results]
|
|
|
|
|
student_work_test.results = results
|
|
|
|
|
student_work_test.status = (result["status"] != 0 ? result["status"] : student_work_test.status)
|
|
|
|
|
student_work_test.save!
|
|
|
|
|
status = student_work_test.status
|
|
|
|
|
resultObj[:testid] = student_work_test.id
|
|
|
|
|
end
|
|
|
|
|
status = result["status"]
|
|
|
|
|
if index == 1
|
|
|
|
|
student_work_test = student_work.student_work_tests.build(status: status,
|
|
|
|
|
results: [resultObj[:results]],src: params[:src])
|
|
|
|
|
student_work_test.save!
|
|
|
|
|
resultObj[:testid] = student_work_test.id
|
|
|
|
|
else
|
|
|
|
|
#先从数据库取出result
|
|
|
|
|
student_work_test = StudentWorkTest.find(params[:testid])
|
|
|
|
|
results = student_work_test.results
|
|
|
|
|
results << resultObj[:results]
|
|
|
|
|
student_work_test.results = results
|
|
|
|
|
student_work_test.status = (result["status"] != 0 ? result["status"] : student_work_test.status)
|
|
|
|
|
student_work_test.save!
|
|
|
|
|
status = student_work_test.status
|
|
|
|
|
resultObj[:testid] = student_work_test.id
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#超时或编译错误则直接返回了并存入数据库
|
|
|
|
|
if resultObj[:status] == 2 || resultObj[:status] == -2 || index == @homework.homework_tests.size
|
|
|
|
|
if status == 0
|
|
|
|
|
resultObj[:status] = 0
|
|
|
|
|
end
|
|
|
|
|
student_work.save!
|
|
|
|
|
resultObj[:time] = student_work_test.created_at.to_s(:db)
|
|
|
|
|
resultObj[:index] = student_work.student_work_tests.count
|
|
|
|
|
end
|
|
|
|
|
#超时或编译错误则直接返回了并存入数据库
|
|
|
|
|
if resultObj[:status] == 2 || resultObj[:status] == -2 || index == @homework.homework_tests.size
|
|
|
|
|
if status == 0
|
|
|
|
|
resultObj[:status] = 0
|
|
|
|
|
end
|
|
|
|
|
student_work.save!
|
|
|
|
|
resultObj[:time] = student_work_test.created_at.to_s(:db)
|
|
|
|
|
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} 毫秒"
|
|
|
|
|
#将每次用户等待时间都存起来以便管理界面显示用
|
|
|
|
|
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']
|
|
|
|
|
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)
|
|
|
|
|
end
|
|
|
|
|
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
|
|
|
|
|
rescue
|
|
|
|
|
#-5 program_test_ex 函数出错
|
|
|
|
|
logger.debug "program_test_error 2"
|
|
|
|
|
resultObj[:status] = -5
|
|
|
|
|
tmpstatus = -5
|
|
|
|
|
CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>tmpstatus,:time_used=>0,:wait_time=>0,:student_work_id=>student_work.id)
|
|
|
|
|
end
|
|
|
|
|
#渲染返回结果
|
|
|
|
|
render :json => resultObj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|