|
|
|
@ -128,7 +128,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
if @homework.publish_time.blank? || (@homework.publish_time > Time.now)
|
|
|
|
|
@student_works = []
|
|
|
|
|
if (params[:format] == "xlsx") || (params[:format] == "zip")
|
|
|
|
|
normal_status(-1,"作业未发布")
|
|
|
|
|
normal_status(-1, "作业未发布")
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if @user_course_identity == Course::STUDENT
|
|
|
|
@ -182,7 +182,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
# 作品状态 0: 未提交, 1 按时提交, 2 延迟提交
|
|
|
|
|
if params[:work_status].present?
|
|
|
|
|
params_work_status = params[:work_status]
|
|
|
|
|
work_status = params_work_status.map{|status| status.to_i}
|
|
|
|
|
work_status = params_work_status.map {|status| status.to_i}
|
|
|
|
|
if @homework.homework_type == "practice"
|
|
|
|
|
@student_works = @student_works.where(compelete_status: work_status)
|
|
|
|
|
else
|
|
|
|
@ -241,17 +241,17 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
if @user_course_identity >= Course::STUDENT
|
|
|
|
|
tip_exception(403, "无权限操作")
|
|
|
|
|
elsif @work_excel.blank? || @work_excel.size == 0
|
|
|
|
|
normal_status(-1,"暂无用户提交!")
|
|
|
|
|
normal_status(-1, "暂无用户提交!")
|
|
|
|
|
elsif params[:export].present? && params[:export]
|
|
|
|
|
normal_status(0,"正在下载中")
|
|
|
|
|
normal_status(0, "正在下载中")
|
|
|
|
|
else
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.xlsx{
|
|
|
|
|
format.xlsx {
|
|
|
|
|
set_export_cookies
|
|
|
|
|
student_work_to_xlsx(@work_excel,@homework)
|
|
|
|
|
student_work_to_xlsx(@work_excel, @homework)
|
|
|
|
|
exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
|
|
|
|
|
render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals:
|
|
|
|
|
{table_columns: @work_head_cells,task_users: @work_cells_column}
|
|
|
|
|
render xlsx: "#{exercise_export_name.strip}", template: "homework_commons/works_list.xlsx.axlsx", locals:
|
|
|
|
|
{table_columns: @work_head_cells, task_users: @work_cells_column}
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
@ -268,10 +268,10 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
|
|
|
|
|
if status == 0
|
|
|
|
|
if params[:export].present? && params[:export]
|
|
|
|
|
normal_status(0,"正在下载中")
|
|
|
|
|
normal_status(0, "正在下载中")
|
|
|
|
|
else
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.zip{
|
|
|
|
|
format.zip {
|
|
|
|
|
set_export_cookies
|
|
|
|
|
zipfile = zip_homework_common @homework, zip_works
|
|
|
|
|
file = decode64(zipfile[0][:base64file])
|
|
|
|
@ -289,21 +289,14 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
|
|
|
|
|
def update_score
|
|
|
|
|
tip_exception("作业还未发布,暂不能计算成绩") if @homework.publish_time.nil? || @homework.publish_time > Time.now
|
|
|
|
|
begin
|
|
|
|
|
@homework.update_homework_work_score
|
|
|
|
|
normal_status("更新成功")
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update_student_score
|
|
|
|
|
work = @homework.student_works.find_by(user_id: current_user.id)
|
|
|
|
|
myshixun = Myshixun.find_by(shixun_id: params[:shixun_id], user_id: current_user.id)
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
begin
|
|
|
|
|
if work && myshixun
|
|
|
|
|
challenge_settings = @homework.homework_challenge_settings
|
|
|
|
|
games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id))
|
|
|
|
@ -312,11 +305,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
else
|
|
|
|
|
normal_status("还未开启挑战,暂不能更新成绩")
|
|
|
|
|
end
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -382,7 +370,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
begin
|
|
|
|
|
@homework = HomeworkCommon.new(homework_params)
|
|
|
|
|
@homework.reference_answer = params[:reference_answer].to_s.strip
|
|
|
|
|
@homework.homework_type = @homework_type
|
|
|
|
@ -413,11 +400,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
else
|
|
|
|
|
tip_exception("创建失败")
|
|
|
|
|
end
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -432,7 +414,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
begin
|
|
|
|
|
@homework.update_attributes!(homework_params)
|
|
|
|
|
@homework.reference_answer = params[:reference_answer].to_s.strip
|
|
|
|
|
|
|
|
|
@ -451,11 +432,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
Attachment.associate_container(params[:reference_attachment_ids], @homework.id, @homework.class, 2) if params[:reference_attachment_ids]
|
|
|
|
|
|
|
|
|
|
normal_status(0, "更新成功")
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -467,7 +444,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update_settings
|
|
|
|
|
begin
|
|
|
|
|
# 课堂结束后不能再更新
|
|
|
|
|
unless @course.is_end
|
|
|
|
|
|
|
|
|
@ -515,7 +491,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
# tip_exception("challenge_id参数的长度与challenge_score参数的长度不匹配") if
|
|
|
|
|
# params[:challenge_settings][:challenge_score].length != params[:challenge_settings][:challenge_id].length
|
|
|
|
|
|
|
|
|
|
sum_challenge_score = params[:challenge_settings].pluck(:challenge_score).reject(&:blank?)&.map{|score| score.to_f}.sum
|
|
|
|
|
sum_challenge_score = params[:challenge_settings].pluck(:challenge_score).reject(&:blank?)&.map {|score| score.to_f}.sum
|
|
|
|
|
total_score = params[:work_efficiency] ? (params[:eff_score].to_f + sum_challenge_score) : sum_challenge_score
|
|
|
|
|
tip_exception("分值之和必须等于总分值:#{params[:total_score]}分") if params[:total_score].to_f.round(2) != total_score.to_f.round(2)
|
|
|
|
|
|
|
|
|
@ -760,11 +736,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
# uid_logger(ex.message)
|
|
|
|
|
# render_error(ex.message)
|
|
|
|
|
# raise ActiveRecord::Rollback
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.backtrace)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# 选用实训
|
|
|
|
@ -830,7 +801,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
## 分页参数
|
|
|
|
|
page = params[:page] || 1
|
|
|
|
|
limit = params[:limit] || 15
|
|
|
|
|
offset = (page.to_i-1) * limit
|
|
|
|
|
offset = (page.to_i - 1) * limit
|
|
|
|
|
|
|
|
|
|
# 最热排序
|
|
|
|
|
if reorder == "myshixun_count"
|
|
|
|
@ -935,16 +906,14 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
if params[:detail].blank?
|
|
|
|
|
tip_exception("缺少截止时间参数") if params[:end_time].blank?
|
|
|
|
|
tip_exception("截止时间不能早于当前时间") if params[:end_time] <= strf_time(Time.now)
|
|
|
|
|
tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if
|
|
|
|
|
@course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day)
|
|
|
|
|
tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day)
|
|
|
|
|
else
|
|
|
|
|
tip_exception("缺少分班截止时间参数") if params[:group_end_times].blank?
|
|
|
|
|
group_end_times = params[:group_end_times].reject(&:blank?)&.map{|time| time.to_time}
|
|
|
|
|
group_end_times = params[:group_end_times].reject(&:blank?)&.map {|time| time.to_time}
|
|
|
|
|
tip_exception("截止时间和分班参数的个数不一致") if group_end_times.length != group_ids.length
|
|
|
|
|
group_end_times.each do |time|
|
|
|
|
|
tip_exception("分班截止时间不能早于当前时间") if time <= Time.now
|
|
|
|
|
tip_exception("分班截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if
|
|
|
|
|
@course.end_date.present? && time > @course.end_date.end_of_day
|
|
|
|
|
tip_exception("分班截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && time > @course.end_date.end_of_day
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -955,7 +924,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
publish_groups = charge_group_ids & group_ids if group_ids
|
|
|
|
|
|
|
|
|
|
# ActiveRecord::Base.transaction do
|
|
|
|
|
begin
|
|
|
|
|
homeworks.each do |homework|
|
|
|
|
|
# 作业未发布时
|
|
|
|
|
if homework.homework_detail_manual.try(:comment_status) == 0
|
|
|
|
@ -1030,7 +998,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# 补交结束时间
|
|
|
|
|
homework.late_time = Time.at(homework.end_time.to_i + 30*24*3600) if homework.allow_late && homework.late_time.nil?
|
|
|
|
|
homework.late_time = Time.at(homework.end_time.to_i + 30 * 24 * 3600) if homework.allow_late && homework.late_time.nil?
|
|
|
|
|
|
|
|
|
|
homework.save!
|
|
|
|
|
|
|
|
|
@ -1038,11 +1006,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
# HomeworkPublishUpdateWorkStatusJob.perform_later(tiding_group_ids, homework.id)
|
|
|
|
|
end
|
|
|
|
|
normal_status(0, "发布成功")
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception("发布失败")
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -1074,7 +1038,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
group_ids = params[:group_ids]&.reject(&:blank?)&.map(&:to_i)
|
|
|
|
|
end_groups = charge_group_ids & group_ids if group_ids
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
homeworks.each do |homework|
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
homework_detail_manual = homework.homework_detail_manual
|
|
|
|
@ -1119,11 +1082,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
HomeworkEndUpdateScoreJob.perform_later(homework.id) if !homework.allow_late && homework.end_time <= time
|
|
|
|
|
end
|
|
|
|
|
normal_status(0, "更新成功")
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception("操作失败")
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def set_public
|
|
|
|
@ -1156,7 +1114,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
# 删除多个作业
|
|
|
|
|
def multi_destroy
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
begin
|
|
|
|
|
homeworks = @course.homework_commons.where(id: params[:homework_ids])
|
|
|
|
|
homeworks.destroy_all
|
|
|
|
|
|
|
|
|
@ -1164,11 +1121,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
StudentWork.where(homework_common_id: homeworks.pluck(:id)).destroy_all
|
|
|
|
|
normal_status(0, "删除成功")
|
|
|
|
|
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception("删除失败")
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -1178,7 +1130,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
|
|
|
|
|
homeworks.each do |homework|
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
begin
|
|
|
|
|
homework_bank = current_user.homework_banks.find_by(homework_common_id: homework.id)
|
|
|
|
|
if homework_bank.present?
|
|
|
|
|
# 如果作业加入过题库则更新参数
|
|
|
|
@ -1208,11 +1159,6 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
homework.update_attributes!(homework_bank_id: new_homework_bank.id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
normal_status(0, "加入成功")
|
|
|
|
@ -1229,7 +1175,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
|
|
|
|
|
# 班级作品查重
|
|
|
|
|
def homework_code_repeat
|
|
|
|
|
tip_exception(-1,"分班id不能为空!") if params[:group_ids].nil?
|
|
|
|
|
tip_exception(-1, "分班id不能为空!") if params[:group_ids].nil?
|
|
|
|
|
shixun = @homework.shixuns.take
|
|
|
|
|
# 通过代码文件来判断语言
|
|
|
|
|
language = shixun.challenges.practice_type.pluck(:path).first
|
|
|
|
@ -1270,13 +1216,13 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
normal_status("代码查重成功")
|
|
|
|
|
else
|
|
|
|
|
if result.status == 1
|
|
|
|
|
tip_exception(-4,"代码查重异常,请稍后重试")
|
|
|
|
|
tip_exception(-4, "代码查重异常,请稍后重试")
|
|
|
|
|
else
|
|
|
|
|
tip_exception(-3,"正在查重,请在几分钟后刷新页面查看结果")
|
|
|
|
|
tip_exception(-3, "正在查重,请在几分钟后刷新页面查看结果")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
tip_exception(-2,"平台目前支持java、python语言的查重<br/>其他语言正在规划中,敬请期待")
|
|
|
|
|
tip_exception(-2, "平台目前支持java、python语言的查重<br/>其他语言正在规划中,敬请期待")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -1374,8 +1320,8 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
# 代码部分
|
|
|
|
|
code_list = []
|
|
|
|
|
challenge.path.split(";").each do |path|
|
|
|
|
|
if code_info.select{|info| path == info.origin_path}.size > 0
|
|
|
|
|
info = code_info.select{|info| path == info.origin_path}[0]
|
|
|
|
|
if code_info.select {|info| path == info.origin_path}.size > 0
|
|
|
|
|
info = code_info.select {|info| path == info.origin_path}[0]
|
|
|
|
|
code_list << {path: path, origin_content: info.origin_content, target_content: info.target_content}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
@ -1461,7 +1407,7 @@ class HomeworkCommonsController < ApplicationController
|
|
|
|
|
user_rate = 0
|
|
|
|
|
# 计算每个关卡的相似度
|
|
|
|
|
challenges.each do |challenge|
|
|
|
|
|
game_codes = results.user_lists.select{|user_list| user_list.user_id == user &&
|
|
|
|
|
game_codes = results.user_lists.select {|user_list| user_list.user_id == user &&
|
|
|
|
|
challenge.path.split(";").include?(user_list.origin_path)}
|
|
|
|
|
# 先判断用户该关卡是否查重了 取多个待补充文件的平均值
|
|
|
|
|
if game_codes.count > 0
|
|
|
|
|