Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

dev_forum
jingquan huang 5 years ago
commit fd3790b451

@ -142,7 +142,7 @@ class AccountsController < ApplicationController
# params[:login] 手机号或者邮箱号
# params[:type]为事件通知类型 1用户注册注册 2忘记密码 3: 绑定手机 4: 绑定邮箱 # 如果有新的继续后面加
# 发送验证码send_type 1注册手机验证码 2找回密码手机验证码 3找回密码邮箱验证码 4绑定手机 5绑定邮箱
# 6手机验证码登录 7邮箱验证码登录 8邮箱注册验证码
# 6手机验证码登录 7邮箱验证码登录 8邮箱注册验证码 9: 验收手机号有效
def get_verification_code
code = %W(0 1 2 3 4 5 6 7 8 9)
value = params[:login]
@ -151,6 +151,8 @@ class AccountsController < ApplicationController
send_type = verify_type(login_type, type)
verification_code = code.sample(6).join
logger.info("########get_verification_code: login_type #{login_type} send_type#{send_type}, ")
# 记录验证码
check_verification_code(verification_code, send_type, value)
sucess_status

@ -72,7 +72,7 @@ class ApplicationController < ActionController::Base
UserMailer.register_email(value, code).deliver_now
# Mailer.run.email_register(code, value)
rescue Exception => e
uid_logger_error(e.message)
logger_error(e)
tip_exception("邮件发送失败,请稍后重试")
end
end

@ -45,7 +45,13 @@ class CommonsController < ApplicationController
code =
case params[:object_type].strip
when 'message'
if current_user.course_identity(@object.board.course) >= 5 && @object.author != current_user
if current_user.course_identity(@object.board.course) >= Course::STUDENT && @object.author != current_user
403
else
200
end
when 'journals_for_message'
if current_user.course_identity(@object.jour.course) >= Course::STUDENT && @object.user != current_user
403
else
200

@ -12,5 +12,8 @@ module ControllerRescueHandler
rescue_from ActiveModel::ValidationError do |ex|
render_error(ex.model.errors.full_messages.join(','))
end
rescue_from ActiveRecord::RecordInvalid do |ex|
render_error(ex.record.errors.full_messages.join(','))
end
end
end

@ -13,7 +13,7 @@ class CoursesController < ApplicationController
before_action :require_login, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups, :left_banner, :top_banner]
before_action :set_course, :user_course_identity, only: [:show, :update, :destroy, :settings, :set_invite_code_halt,
:set_public_or_private, :search_teacher_candidate, :teachers,
:set_public_or_private, :search_teacher_candidate, :teachers, :apply_teachers,
:top_banner, :left_banner, :add_teacher_popup, :add_teacher,
:graduation_group_list, :create_graduation_group, :join_graduation_group,
:course_group_list, :set_course_group, :change_course_admin, :change_course_teacher,
@ -26,10 +26,10 @@ class CoursesController < ApplicationController
:transfer_to_course_group, :delete_from_course,
:search_users, :add_students_by_search, :get_historical_courses, :add_teacher_popup, :add_teacher]
before_action :admin_allowed, only: [:set_invite_code_halt, :set_public_or_private, :change_course_admin,
:set_course_group, :delete_course_teacher, :teacher_application_review,
:create_group_by_importing_file]
:set_course_group, :delete_course_teacher, :create_group_by_importing_file]
before_action :teacher_or_admin_allowed, only: [:graduation_group_list, :create_graduation_group, :join_graduation_group,
:change_course_teacher, :export_member_scores_excel, :course_group_list]
:change_course_teacher, :export_member_scores_excel, :course_group_list,
:teacher_application_review, :apply_teachers]
before_action :validate_course_name, only: [:create, :update]
before_action :find_board, only: :board_list
before_action :validate_page_size, only: :mine
@ -251,46 +251,53 @@ class CoursesController < ApplicationController
if @course.try(:id) != 1309 || current_user.admin? || current_user.try(:id) == 15582
@teacher_list = @course.course_members.joins(:user).where("course_members.role in (1, 2, 3)
and LOWER(concat(users.lastname, users.firstname)) LIKE '%#{@search_str}%'")
and LOWER(concat(users.lastname, users.firstname)) LIKE ?", "%#{@search_str}%")
else
@teacher_list = @course.course_members.joins(:user).where("(course_members.role in (1, 3) or (course_members.user_id = #{current_user.id}
and course_members.role = 2)) and LOWER(concat(users.lastname, users.firstname))
LIKE '%#{@search_str}%'")
LIKE ?", "%#{@search_str}%")
end
@teacher_list_size = @teacher_list.size
@has_graduation_design = @course.course_modules.graduation_module_not_hidden.any?
sort = params[:sort] || "desc"
@order = params[:order].to_i
if @order.present?
case @order
when 1
@teacher_list = @teacher_list.includes(:user).order("CONVERT(CONCAT(users.lastname, users.firstname) USING gbk) COLLATE gbk_chinese_ci asc")
@teacher_list = @teacher_list.order("role #{sort}")
when 2
@teacher_list = @teacher_list.order("created_at")
@teacher_list = @teacher_list.includes(:user).order("CONVERT(CONCAT(users.lastname, users.firstname) USING gbk) COLLATE gbk_chinese_ci #{sort}")
when 3
@teacher_list = @teacher_list.includes(:course, :graduation_group).order("graduation_groups.name")
@teacher_list = @teacher_list.includes(:course, :graduation_group).order("graduation_groups.name #{sort}")
else
@teacher_list = @teacher_list.order("created_at")
@teacher_list = @teacher_list.order("role #{sort}")
end
else
if @has_graduation_design
@teacher_list = @teacher_list.includes(:course, :graduation_group).order("graduation_groups.name")
else
@teacher_list = @teacher_list.order("created_at")
end
@teacher_list = @teacher_list.order("role #{sort}")
end
@is_admin = @user_course_identity < Course::PROFESSOR
@applications = @is_admin ? CourseMessage.unhandled_join_course_requests_by_course(@course) : CourseMessage.none
@applications_size = CourseMessage.unhandled_join_course_requests_by_course(@course).size
page = params[:page] || 1
limit = params[:limit] || 20
@teacher_list = @teacher_list.page(page).per(limit)
end
def apply_teachers
search_str = params[:search].present? ? params[:search].strip : ""
@applications = CourseMessage.unhandled_join_course_requests_by_course(@course).
joins("join users on course_messages.course_message_id=users.id").
where("LOWER(concat(users.lastname, users.firstname)) LIKE ?", "%#{search_str}%")
@teacher_list_size = @course.teachers.size
@applications_size = CourseMessage.unhandled_join_course_requests_by_course(@course).size
@is_admin = @user_course_identity < Course::PROFESSOR
end
# 打开添加教师或助教弹窗时访问的接口(需要返回该课堂所有答辩组和所有)
def add_teacher_popup
@graduation_groups = @course.graduation_groups
@ -577,6 +584,18 @@ class CoursesController < ApplicationController
end
new_teacher.save!
# 课堂管理员才有分配权限且课堂分班数大于0
if @user_course_identity < Course::PROFESSOR && @course.course_groups_count > 0 && params[:group_id] && params[:group_id].size > 0
# 分班全选则是不限,不需要做处理
unless @course.course_groups.where(id: params[:group_id]).size == @course.course_groups_count
@course.course_groups.where(id: params[:group_id]).each do |group|
unless TeacherCourseGroup.where(course_id: @course.id, user_id: applier_user.id, course_group_id: group.id, course_member_id: new_teacher.id).exists?
TeacherCourseGroup.create(course_id: @course.id, user_id: applier_user.id, course_member_id: new_teacher.id, course_group_id: group.id)
end
end
end
end
elsif approval == 2
course_message.reject!
else
@ -993,8 +1012,8 @@ class CoursesController < ApplicationController
normal_status(-1,"课堂暂时没有学生")
else
member_to_xlsx(@course, @all_members, @c_homeworks, @c_exercises, @c_tasks)
filename = current_user.real_name + "_" + @course.name + "_全部成绩" + Time.now.strftime('%Y%m%d_%H%M%S')
render xlsx: "#{format_sheet_name filename.strip.first(30)}",template: "courses/export_member_scores_excel.xlsx.axlsx",
filename_ = "#{current_user.real_name}_#{@course.name}_全部成绩"
render xlsx: "#{format_sheet_name filename_.strip.first(30)}",template: "courses/export_member_scores_excel.xlsx.axlsx",
locals: {course_info:@course_info, activity_level:@user_activity_level,
course_scores:@course_user_scores,shixun_works:@shixun_work_arrays,
common_works:@common_work_arrays,group_works:@group_work_arrays,task_works:@task_work_arrays,

@ -9,15 +9,18 @@ class DiscussesController < ApplicationController
# 总数,分页使用
if current_user.admin?
@disscuss_count = Discuss.where(:dis_id => @container.id, :dis_type => @container.class.to_s, :root_id => nil).count
@discusses = Discuss.limit(LIMIT).where(:dis_id => @container.id, :dis_type => @container.class.to_s,
:root_id => nil).includes(:user, :praise_treads).offset(offset)
disscusses = Discuss.where(:dis_id => @container.id, :dis_type => @container.class.to_s,
:root_id => nil).joins(challenge: :games)
.where("discusses.user_id = games.user_id").select("discusses.*, games.identifier")
else
disscusses = Discuss.where("dis_id = :dis_id and dis_type = :dis_type and root_id is null and
(hidden = :hidden or user_id = :user_id)",
(discusses.hidden = :hidden or discusses.user_id = :user_id)",
{dis_id: @container.id, dis_type: @container.class.to_s, hidden: false, user_id: current_user.id})
@disscuss_count = disscusses.count
@discusses = disscusses.limit(LIMIT).includes(:user, :praise_treads).offset(offset)
.joins(challenge: :games).where("discusses.user_id = games.user_id").select("discusses.*, games.identifier")
@disscuss_count = disscusses.count("discusses.id")
end
@discusses = disscusses.limit(LIMIT).includes(:user, :praise_treads).offset(offset)
@manger = @container.has_manager?(current_user)
@current_user = current_user
end

@ -1,14 +1,5 @@
class Ecs::BaseController < ApplicationController
# model validation error
rescue_from ActiveRecord::RecordInvalid do |ex|
render_error(ex.record.errors.full_messages.join(','))
end
# form validation error
rescue_from ActiveModel::ValidationError do |ex|
render_error(ex.model.errors.full_messages.join(','))
end
before_action :require_login
before_action :check_user_permission!

@ -97,7 +97,7 @@ class ExerciseAnswersController < ApplicationController
@exercise = @exercise_question&.exercise
@course = @exercise&.course
@exercise_user = @exercise&.exercise_users.find_by(user_id: current_user.id) #当前用户
@exercise_user_status = @exercise.get_exercise_status(current_user.id)
@exercise_user_status = @exercise.get_exercise_status(current_user)
if @exercise_question.blank?
normal_status(-1,"试卷问题不存在!")

@ -23,7 +23,6 @@ class ExercisesController < ApplicationController
before_action :commit_shixun_present,only: [:commit_shixun]
include ExportHelper
include ExercisesHelper
# require 'pdfkit'
def index
ActiveRecord::Base.transaction do
@ -43,45 +42,38 @@ class ExercisesController < ApplicationController
@exercises = @exercises_all #老师能看到全部的试卷,不管是已发布的/未发布的/已截止的/统一设置的/私有设置的(看到内容不同)
elsif @user_course_identity == Course::STUDENT # 2为课堂成员能看到统一设置的和自己班级的
@is_teacher_or = 2
# get_exercise_left_time(@exercise,current_user)
member_group_id = @current_student.first.try(:course_group_id).to_i # 成员的分班id默认为0
if member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的)
@member_group_id = @current_student.first.try(:course_group_id).to_i # 成员的分班id默认为0
if @member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的)
@exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : []
else #已分班级的成员,可以查看统一设置和单独设置(试卷是发布在该班级)试卷
# 已发布 当前用户班级分组的 试卷id
exercise_settings_ids = @course.exercise_group_settings.exercise_group_published
.where(course_group_id: member_group_id).pluck(:exercise_id).uniq
@exercises = member_show_exercises.exists? ?
member_show_exercises.unified_setting.or(member_show_exercises.where(id: exercise_settings_ids))
: []
not_exercise_ids = @course.exercise_group_settings.exercise_group_not_published.where("course_group_id = #{@member_group_id}").pluck(:exercise_id)
@exercises = member_show_exercises.where.not(id: not_exercise_ids)
end
else #用户未登陆或不是该课堂成员,仅显示统一设置的(已发布的/已截止的),如有公开,则不显示锁,不公开,则显示锁
@is_teacher_or = 0
@exercises = member_show_exercises.exists? ? member_show_exercises.unified_setting : []
@exercises = member_show_exercises.unified_setting
end
if @exercises.size > 0
if params[:type].present?
choose_type = params[:type].to_i
member_group_id = @current_student.first.try(:course_group_id).to_i
if @is_teacher_or == 2 && member_group_id > 0
exercise_groups_sets = @course.exercise_group_settings.where(course_group_id: member_group_id)
.exercise_group_published
exercise_settings_ids = exercise_groups_sets.pluck(:exercise_id)
exercise_ended_ids = exercise_groups_sets.exercise_group_ended.pluck(:exercise_id).uniq
if choose_type == 2
@exercises = @exercises_all.exists? ?
@exercises_all.exercise_by_status(2).unified_setting
.or(@exercises_all.where(id: (exercise_settings_ids - exercise_ended_ids).uniq))
: []
elsif choose_type == 3
@exercises = @exercises_all.exists? ?
@exercises_all.exercise_by_status(3).unified_setting
.or(@exercises_all.where(id: exercise_ended_ids))
: []
end
ex_setting_ids = []
if @is_teacher_or != 2
@exercises = @exercises.where("exercise_status = #{choose_type}")
else
@exercises = @exercises.exercise_by_status(choose_type)
case choose_type
when 1
ex_setting_ids = @course.exercise_group_settings.where("course_group_id = #{@member_group_id}").exercise_group_not_published.pluck(:exercise_id)
when 2
ex_setting_ids = @course.exercise_group_settings.where("course_group_id = #{@member_group_id}")
.where("publish_time is not null and publish_time <= ? and end_time > ?",Time.now,Time.now).pluck(:exercise_id)
when 3
ex_setting_ids = @course.exercise_group_settings.where("course_group_id = #{@member_group_id}").exercise_group_ended.pluck(:exercise_id)
end
unified_setting_ids = @exercises.unified_setting.where("exercise_status = #{choose_type}").pluck(:id)
ex_ids = (ex_setting_ids + unified_setting_ids).uniq
@exercises = @exercises.where(id: ex_ids)
end
end
@ -97,7 +89,7 @@ class ExercisesController < ApplicationController
@page = params[:page] || 1
@limit = params[:limit] || 15
@exercises = @exercises.page(@page).per(@limit)
@exercises = @exercises&.includes(:exercise_users,:exercise_questions,:exercise_group_settings)
@exercises = @exercises&.includes(:published_settings)
else
@exercises = []
end
@ -213,7 +205,7 @@ class ExercisesController < ApplicationController
@user_exercise_answer = 3 #教师页面
@user_commit_counts = @exercise.exercise_users.where(commit_status:1).count #已提交的用户数
end
@ex_status = @exercise.get_exercise_status(current_user.id)
@ex_status = @exercise.get_exercise_status(current_user)
exercise_id_array = [@exercise.id]
@exercise_publish_count = get_user_permission_course(exercise_id_array,2).count #是否存在已发布的
@ -227,7 +219,6 @@ class ExercisesController < ApplicationController
end
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception("没有权限")
@ -451,7 +442,7 @@ class ExercisesController < ApplicationController
# course_group_ids = @course.teacher_course_group_ids(current_user.id) #当前老师的班级id数组
course_group_ids = @course.charge_group_ids(current_user) #当前老师的班级id数组
exercise_status = @exercise.get_exercise_status(current_user.id)
exercise_status = @exercise.get_exercise_status(current_user)
if exercise_status == 1 && course_group_ids.size > 0 # 试卷未发布且老师的分班大于1 ,才可以修改统一设置,否则按试卷默认的来处理
unified_setting = params[:unified_setting]
@ -805,7 +796,7 @@ class ExercisesController < ApplicationController
check_ids = Exercise.where(id:params[:check_ids])
course_students = @course.students #课堂的全部学生数
check_ids.each do |exercise|
exercise_status= exercise.get_exercise_status(current_user.id)
exercise_status= exercise.get_exercise_status(current_user)
if exercise_status == 2 #跳过已截止的或未发布的
g_course = params[:group_ids]
if g_course.present?
@ -900,7 +891,7 @@ class ExercisesController < ApplicationController
ex_question_ids = @exercise.exercise_questions.pluck(:id)
exercise_user = @exercise.exercise_users.exercise_commit_users(current_user.id).first
if exercise_user.present?
if exercise_user.commit_status == 1 && @exercise.get_exercise_status(current_user.id) == 2 #用户已提交且试卷提交中
if exercise_user.commit_status == 1 && @exercise.get_exercise_status(current_user) == 2 #用户已提交且试卷提交中
if @exercise.time == -1 || ((Time.now.to_i - exercise_user.start_at.to_i) < @exercise.time.to_i * 60)
exercise_user.update_attributes(:score => nil, :end_at => nil, :status => nil, :commit_status => 0,
:objective_score => 0.0, :subjective_score => -1.0)
@ -1027,7 +1018,7 @@ class ExercisesController < ApplicationController
# @user_left_time = (time_mill < exercise_user_left_time) ? nil : (time_mill - exercise_user_left_time) #当前用户对试卷的回答剩余时间
# end
@t_user_exercise_status = @exercise.get_exercise_status(current_user.id)
@t_user_exercise_status = @exercise.get_exercise_status(current_user)
@user_left_time = nil
if @user_course_identity < Course::STUDENT || (@t_user_exercise_status == 3) ||
@ -1049,6 +1040,7 @@ class ExercisesController < ApplicationController
@exercise_questions = @exercise_questions.order("question_number ASC")
end
# 判断问题是否已回答还是未回答
@exercise_questions = @exercise_questions.includes(:exercise_stand_answers,:exercise_answers,:exercise_shixun_answers)
if @t_user_exercise_status == 3
get_each_student_exercise(@exercise.id,@exercise_questions,@exercise_current_user_id)
@ -1138,9 +1130,9 @@ class ExercisesController < ApplicationController
@is_teacher_or = @user_course_identity < Course::STUDENT ? 1 : 0
@student_status = 2
# @exercise_answerer = User.find_by(id:@exercise_current_user_id) #试卷回答者
@exercise_questions = @exercise.exercise_questions.order("question_number ASC")
@exercise_questions = @exercise.exercise_questions.includes(:exercise_shixun_challenges,:exercise_standard_answers,:exercise_answers,:exercise_shixun_answers).order("question_number ASC")
@question_status = []
get_exercise_status = @exercise.get_exercise_status(current_user.id)
get_exercise_status = @exercise.get_exercise_status(current_user)
if @ex_user.present? && @is_teacher_or == 0
if get_exercise_status == 2 #当前用户已提交,且试卷未截止
if @ex_user.commit_status == 0 #学生未提交,且当前为学生
@ -1168,7 +1160,7 @@ class ExercisesController < ApplicationController
begin
@current_user_id = current_user.id
exercise_ids = [@exercise.id]
@exercise_status = @exercise.get_exercise_status(current_user.id)
@exercise_status = @exercise.get_exercise_status(current_user)
@course_all_members = @course.students
@c_group_counts = @course.course_groups_count
question_types = @exercise.exercise_questions.pluck(:question_type).uniq
@ -1192,12 +1184,12 @@ class ExercisesController < ApplicationController
ex_common_ids = @exercise.common_published_ids(current_user.id)
@exercise_course_groups = @course.get_ex_published_course(ex_common_ids)
@exercise_users_list = @exercise.all_exercise_users(current_user.id) #当前老师所在班级的全部学生
get_exercise_answers(@exercise_users_list)
get_exercise_answers(@exercise_users_list, @exercise_status)
end
elsif @user_course_identity > Course::ASSISTANT_PROFESSOR #当前为学生或者有过答题的(提交/未提交)
@ex_user_end_time = @exercise.get_exercise_end_time(current_user.id) #当前用户所看到的剩余时间
@exercise_all_users = @exercise.get_stu_exercise_users
get_exercise_answers(@exercise_all_users) # 未答和已答的
get_exercise_answers(@exercise_all_users, @exercise_status) # 未答和已答的
exercise_current_user = @exercise_all_users.exercise_commit_users(current_user.id) #当前用户是否开始做试卷(提交/未提交/没做)
if exercise_current_user.present?
@exercise_current_user_status = 1 #当前用户的状态,为学生
@ -1211,11 +1203,9 @@ class ExercisesController < ApplicationController
end
else
@exercise_all_users = @exercise.get_stu_exercise_users
get_exercise_answers(@exercise_all_users) # 未答和已答的
get_exercise_answers(@exercise_all_users, @exercise_status) # 未答和已答的
@exercise_current_user_status = 2 #当前用户非课堂成员
@exercise_users_list = []
# @exercise_unanswers = 0
# @exercise_answers = 0
end
end
@ -1302,9 +1292,9 @@ class ExercisesController < ApplicationController
respond_to do |format|
format.xlsx{
get_export_users(@exercise,@course,@export_ex_users)
exercise_export_name =
exercise_export_name_ =
"#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
render xlsx: "#{exercise_export_name.strip.first(30)}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns}
render xlsx: "#{exercise_export_name_.strip.first(30)}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns}
}
end
end
@ -1321,9 +1311,9 @@ class ExercisesController < ApplicationController
def export_exercise
@request_url = request.base_url
@exercise_questions = @exercise.exercise_questions.includes(:exercise_choices).order("question_number ASC")
filename = "#{@exercise.user.real_name}_#{@exercise.exercise_name}_#{Time.current.strftime('%Y%m%d_%H%M')}.pdf"
filename_ = "#{@exercise.user.real_name}_#{@course.name}__#{Time.now.strftime('%Y%m%d_%H%M%S')}"
stylesheets = "#{Rails.root}/app/templates/exercise_export/exercise_export.css"
render pdf: 'exercise_export/blank_exercise', filename: filename, stylesheets: stylesheets
render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets
end
#空白试卷预览页面,仅供测试使用,无其他任何用途
@ -1370,7 +1360,7 @@ class ExercisesController < ApplicationController
@exercise_commit_users = @exercise_all_users.commit_exercise_by_status(1) #试卷的已提交用户
@exercise_commit_user_ids = @exercise_commit_users.pluck(:user_id).uniq #已提交试卷的全部用户id
@exercise_commit_user_counts = @exercise_commit_users.count #试卷的已提交用户人数
@exercise_status = @exercise.get_exercise_status(current_user.id)
@exercise_status = @exercise.get_exercise_status(current_user)
#提交率
if @course_all_members_count == 0
@ -1552,13 +1542,12 @@ class ExercisesController < ApplicationController
exercises_all.each do |exercise|
if exercise.present?
if exercise.unified_setting #统一设置只有两种情况,全部发布,全部截止
exercise_user_status = exercise.get_exercise_status(current_user.id) #当前用户的能看到的试卷
if exercise_user_status == exercise_status || exercise_status == 3 #未发布的情况
exercise_user_status = exercise.get_exercise_status(current_user) #当前用户的能看到的试卷
if (exercise_user_status == exercise_status) || exercise_status == 3 #未发布的情况
unpublish_group = unpublish_group + user_groups_id
else
unpublish_group = []
end
# unpublish_group = unpublish_group + user_groups_id
else
ex_all_group_settings = exercise.exercise_group_settings
ex_group_settings = ex_all_group_settings.exercise_group_published.pluck(:course_group_id).uniq #问卷设置的班级
@ -1586,13 +1575,13 @@ class ExercisesController < ApplicationController
def set_exercise_status(publish_time,end_time)
time_now_i = Time.now
if publish_time.present? && publish_time <= time_now_i && end_time > time_now_i
if publish_time.present? && (publish_time <= time_now_i) && (end_time > time_now_i)
2
elsif publish_time.nil? || (publish_time.present? && publish_time > time_now_i)
1
elsif end_time.present? && end_time <= time_now_i
elsif end_time.present? && (end_time <= time_now_i)
3
elsif end_time.present? && publish_time.present? && end_time < publish_time
elsif end_time.present? && publish_time.present? && (end_time < publish_time)
normal_status(-1,"时间设置错误!")
else
1
@ -1622,7 +1611,7 @@ class ExercisesController < ApplicationController
## 判断开始答题页面的用户权限
def check_user_on_answer
if @user_course_identity == Course::STUDENT && @exercise.get_exercise_status(current_user.id) == 1 #试卷未发布,且当前用户不为老师/管理员
if @user_course_identity == Course::STUDENT && @exercise.get_exercise_status(current_user) == 1 #试卷未发布,且当前用户不为老师/管理员
normal_status(-1, "未发布试卷!")
elsif @user_course_identity > Course::STUDENT && (!@exercise.is_public || (@exercise.is_public && !@exercise.unified_setting)) ##不为课堂成员,且试卷不为公开的,或试卷公开,但不是统一设置的
normal_status(-1, "试卷暂未公开!")
@ -1639,7 +1628,7 @@ class ExercisesController < ApplicationController
#打回重做时的初步判断
def check_exercise_status
@exercise_users = @exercise.all_exercise_users(current_user.id).commit_exercise_by_status(1) #当前教师所在分班的全部已提交的学生数
if @exercise.get_exercise_status(current_user.id) != 2
if @exercise.get_exercise_status(current_user) != 2
normal_status(-1,"非提交中的试卷不允许打回重做!")
elsif @exercise_users.count < 1
normal_status(-1,"暂无人提交试卷!")
@ -1649,7 +1638,7 @@ class ExercisesController < ApplicationController
#查看试题页面,当为学生时,除非试卷已截止,或已提交才可以查看
def check_exercise_is_end
ex_status = @exercise.get_exercise_status(current_user.id)
ex_status = @exercise.get_exercise_status(current_user)
@ex_user = @exercise.exercise_users.find_by(user_id:@exercise_current_user_id) #该试卷的回答者
if @user_course_identity > Course::ASSISTANT_PROFESSOR
if ex_status == 1
@ -1666,7 +1655,7 @@ class ExercisesController < ApplicationController
def check_exercise_public
if @user_course_identity > Course::ASSISTANT_PROFESSOR #当前为学生,试卷公开统计,且已截止,且已提交
ex_user = @exercise.exercise_users.exercise_commit_users(current_user.id).first
unless @exercise.get_exercise_status(current_user.id) == 3 && ex_user.present? && ex_user.commit_status == 1 &&
unless @exercise.get_exercise_status(current_user) == 3 && ex_user.present? && ex_user.commit_status == 1 &&
@exercise.show_statistic
normal_status(-1,"学生暂不能查看")
end
@ -1759,6 +1748,4 @@ class ExercisesController < ApplicationController
end
end
end

@ -77,7 +77,7 @@ class GamesController < ApplicationController
# 区分选择题和编程题st0编程题
if @st == 0
has_answer = game_challenge.challenge_answers.size == 0 ? false : true
has_answer = game_challenge.challenge_answers.size != 0
game_challenge.answer = nil
mirror_name = @shixun.mirror_name
@ -87,7 +87,7 @@ class GamesController < ApplicationController
rescue
uid_logger("实训平台繁忙繁忙等级81")
end
tpm_cases_modified = (game_challenge.modify_time != @game.modify_time ? true : false) # modify_time 决定TPM测试集是否有更新
tpm_cases_modified = (game_challenge.modify_time != @game.modify_time) # modify_time 决定TPM测试集是否有更新
@task_result = {tpm_modified: tpm_modified, tpm_cases_modified: tpm_cases_modified, mirror_name: mirror_name, has_answer: has_answer}
@ -311,7 +311,7 @@ class GamesController < ApplicationController
# 扣除总分计算
@game.update_attributes!(:answer_open => 1, :answer_deduction => 100)
end
@challenge_answers = @challenge.challenge_chooses
@challenge_chooses = @challenge.challenge_chooses
rescue Exception => e
uid_logger_error("#######金币扣除异常: #{e.message}")
raise ActiveRecord::Rollback
@ -539,7 +539,7 @@ class GamesController < ApplicationController
# 编程题评测
def game_build
sec_key = params[:sec_key]
game_challenge = Challenge.select([:id, :position, :picture_path]).find(@game.challenge_id)
game_challenge = Challenge.select([:id, :position, :picture_path, :exec_time]).find(@game.challenge_id)
# 更新评测次数
@game.update_column(:evaluate_count, (@game.evaluate_count.to_i + 1))
@ -587,7 +587,7 @@ class GamesController < ApplicationController
:times => params[:first].to_i, :podType => @shixun.webssh, :content_modified => content_modified,
:containers => "#{Base64.urlsafe_encode64(shixun_container_limit(@shixun))}",
:persistenceName => @shixun.identifier, :tpmScript => "#{tpmScript}", :sec_key => sec_key,
:timeLimit => "#{@shixun.exec_time}", :isPublished => (@shixun.status < 2 ? 0 : 1) }
:timeLimit => "#{game_challenge.exec_time}", :isPublished => (@shixun.status < 2 ? 0 : 1) }
# 评测有文件输出的需要特殊传字段 path表示文件存储的位置
br_params['file'] = Base64.urlsafe_encode64({path: "#{game_challenge.picture_path}"}.to_json) if game_challenge.picture_path.present?
@ -629,7 +629,7 @@ class GamesController < ApplicationController
# user_answer虽然是传的数组,但是可能存在多选择提的情况.
user_answer_tran = user_answer[index].size > 1 ? user_answer[index].split("").sort.join("") : user_answer[index]
standard_answer_tran = choose.standard_answer.size > 1 ? choose.standard_answer.split("").sort.join("") : choose.standard_answer
correct = (user_answer_tran == standard_answer_tran) ? true : false
correct = (user_answer_tran == standard_answer_tran)
if str.present?
str += ","
end
@ -903,7 +903,7 @@ class GamesController < ApplicationController
end
# actual_output为空表示暂时没有评测答题不允许查看
actual_output = output.try(:actual_output).try(:strip)
has_answer << choose.answer if choose.answer.present?
#has_answer << choose.answer if choose.answer.present?
# 标准答案处理,错误的不让用户查看,用-1替代
standard_answer = (actual_output.blank? || !output.try(:result)) ? -1 : choose.standard_answer
result = output.try(:result)
@ -914,7 +914,7 @@ class GamesController < ApplicationController
@chooses << sin_choose
test_sets << sin_test_set
end
@has_answer = has_answer.present?
@has_answer = true # 选择题永远都有答案
@choose_test_cases = {:had_submmit => had_submmit, :challenge_chooses_count => challenge_chooses_count,
:choose_correct_num => choose_correct_num, :test_sets => test_sets}
end

@ -37,7 +37,7 @@ class GraduationTasksController < ApplicationController
@all_count = @course.graduation_tasks.size
@published_count = @course.graduation_tasks.where("publish_time <= '#{Time.now}'").size
@task_count = @tasks.size
@tasks = @tasks.reorder("#{default_order}").page(page).per(15).includes(:graduation_works, course: [course_members: :teacher_course_groups])
@tasks = @tasks.reorder("#{default_order}").page(page).per(15).includes(:graduation_works)
end
# 任务问答
@ -72,7 +72,7 @@ class GraduationTasksController < ApplicationController
@work_list = @task.graduation_works.where(user_id: user_ids).includes(user: [:user_extension])
@all_work_count = @work_list.count
@teachers = @course.teachers.where.not(user_id: current_user.id)
@teachers = @course.teachers.where.not(user_id: current_user.id).includes(:user)
# 教师评阅搜索 0: 未评, 1 已评
unless params[:teacher_comment].blank?
graduation_work_ids = GraduationWorkScore.where(graduation_work_id: @work_list.map(&:id)).pluck(:graduation_work_id)
@ -110,9 +110,9 @@ class GraduationTasksController < ApplicationController
end
# 排序
rorder = params[:order].blank? ? "updated_at" : params[:order]
rorder = params[:order].blank? ? "update_time" : params[:order]
b_order = params[:b_order].blank? ? "desc" : params[:b_order]
if rorder == "created_at" || rorder == "work_score"
if rorder == "update_time" || rorder == "work_score"
@work_list = @work_list.order("graduation_works.#{rorder} #{b_order}")
elsif rorder == "student_id"
@work_list = @work_list.joins(user: :user_extension).order("user_extensions.#{rorder} #{b_order}")
@ -123,6 +123,8 @@ class GraduationTasksController < ApplicationController
@work_count = @work_list.count
@work_excel = @work_list
@work_list = @work_list.page(page).per(limit)
@students = @course.students
@assign_power = @user_course_identity < Course::STUDENT && @task.cross_comment && @task.comment_status == 2
if params[:format] == "xlsx"
complete_works = @work_excel.where("work_status > 0").size
@ -134,8 +136,8 @@ class GraduationTasksController < ApplicationController
respond_to do |format|
format.xlsx{
graduation_work_to_xlsx(@work_excel,@task,current_user)
exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@task.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
render xlsx: "#{exercise_export_name.strip.first(30)}",template: "graduation_tasks/tasks_list.xlsx.axlsx",locals: {table_columns:@head_cells_column, task_users:@task_cells_column}
task_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@task.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
render xlsx: "#{task_export_name_.strip.first(30)}",template: "graduation_tasks/tasks_list.xlsx.axlsx",locals: {table_columns:@head_cells_column, task_users:@task_cells_column}
}
end
end

@ -270,8 +270,8 @@ class GraduationTopicsController < ApplicationController
course = @course
students = course.students.joins(user: :user_extension).order("user_extensions.student_id")
graduation_topic_to_xlsx(students,course)
exercise_export_name = "#{current_user.real_name}_#{course.name}_毕设选题_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
render xlsx: "#{exercise_export_name.strip.first(30)}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells}
topic_export_name_ = "#{current_user.real_name}_#{course.name}_毕设选题_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
render xlsx: "#{topic_export_name_.strip.first(30)}",template: "graduation_topics/export.xlsx.axlsx",locals: {table_columns:@topic_head_cells,topic_users:@topic_body_cells}
rescue Exception => e
uid_logger(e.message)
missing_template

@ -118,11 +118,11 @@ class HomeworkCommonsController < ApplicationController
# 学生已提交作品且补交(提交)已截止、作品公开、非匿评阶段
if @work&.work_status.to_i > 0 && (@homework.work_public || @homework.score_open) &&
((!@homework.anonymous_comment && @homework.end_or_late) || @homework_detail_manual.comment_status > 4)
((!@homework.anonymous_comment && @homework.end_or_late) || (@homework_detail_manual.comment_status > 4 && @homework.end_or_late))
@student_works = student_works.where("user_id != #{@work.user_id}")
# 匿评、申诉阶段只能看到分配给自己的匿评作品
elsif @work&.work_status.to_i > 0 && @homework.anonymous_comment && @homework_detail_manual.comment_status > 2
elsif @work&.work_status.to_i > 0 && @homework.anonymous_comment && @homework_detail_manual.comment_status > 2 && @homework_detail_manual.comment_status <= 4
@is_evaluation = true
@student_works = student_works.joins(:student_works_evaluation_distributions).where(
"student_works_evaluation_distributions.user_id = #{@current_user.id}")
@ -206,11 +206,8 @@ class HomeworkCommonsController < ApplicationController
respond_to do |format|
format.xlsx{
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')
# response.set_header("Content-Disposition","attachment; filename=#{exercise_export_name.strip.first(30)}};filename*=utf-8''#{exercise_export_name.strip.first(30)}}")
file_name = Base64.urlsafe_encode64(exercise_export_name.strip.first(30))
# response.setHeader['Content-Disposition'] = "attachment; filename=\"#{exercise_export_name.strip.first(30)}\""
render xlsx: "#{file_name}",template: "homework_commons/works_list.xlsx.axlsx",locals:
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.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals:
{table_columns: @work_head_cells,task_users: @work_cells_column}
}
end
@ -243,7 +240,7 @@ class HomeworkCommonsController < ApplicationController
end
def update_score
tip_exception("作业还未发布,暂不能计算成绩") if @homework.end_or_late_none_group
tip_exception("作业还未发布,暂不能计算成绩") if @homework.publish_time.nil? || @homework.publish_time > Time.now
begin
if @homework.unified_setting
student_works = @homework.student_works
@ -253,12 +250,12 @@ class HomeworkCommonsController < ApplicationController
student_works = @homework.student_works.where(user_id: user_ids)
end
myshixuns = Myshixun.where(shixun_id: params[:shixun_id], user_id: user_ids).
myshixuns = Myshixun.where(shixun_id: @homework.homework_commons_shixun&.shixun_id, user_id: user_ids).
includes(:games).where(games: {challenge_id: @homework.homework_challenge_settings.pluck(:challenge_id)})
challenge_settings = @homework.homework_challenge_settings
myshixuns.find_each(batch_size: 100) do |myshixun|
work = student_works.select{|work| work.user_id == myshixun.user_id}.first
if work && myshixun && (work.update_time.nil? || work.update_time < myshixun.games.pluck(:updated_at).max)
if work && myshixun
games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id))
HomeworksService.new.update_myshixun_work_score work, myshixun, games, @homework, challenge_settings
end
@ -279,13 +276,13 @@ class HomeworkCommonsController < ApplicationController
myshixun = Myshixun.find_by(shixun_id: params[:shixun_id], user_id: current_user.id)
ActiveRecord::Base.transaction do
begin
if work && myshixun && (work.update_time.nil? || work.update_time < myshixun.games.pluck(:updated_at).max)
if work && myshixun
challenge_settings = @homework.homework_challenge_settings
games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id))
HomeworksService.new.update_myshixun_work_score work, myshixun, games, @homework, challenge_settings
normal_status("更新成功")
else
normal_status("已是最新成绩")
normal_status("还开启挑战,暂不能更新成绩")
end
rescue Exception => e
uid_logger(e.message)
@ -1324,7 +1321,7 @@ class HomeworkCommonsController < ApplicationController
.where(:user_id => user_ids).joins(user: :user_extension)
# 按学号和姓名搜索
if params[:search]
@users_reviews = @users_reviews.where("concat(lastname, firstname) like ? or student_id like ?", params[:search], params[:search])
@users_reviews = @users_reviews.where("concat(lastname, firstname) like :keyword or student_id like :keyword", keyword: "%#{params[:search]}%")
end
# 抄袭作品数
@copy_reviews_count = @users_reviews.count
@ -1357,7 +1354,7 @@ class HomeworkCommonsController < ApplicationController
if results.status == 0
code_info = results.code_info
homework_challenge_settings = @homework.homework_challenge_settings
@challenges = @shixun.challenges.where(id: homework_challenge_settings.pluck(:challenge_id), st: 0).includes(:games)
@challenges = @shixun.challenges.where(id: homework_challenge_settings.pluck(:challenge_id), st: 0)
@challenges =
@challenges.map do |challenge|
code_rate = 0
@ -1371,24 +1368,8 @@ class HomeworkCommonsController < ApplicationController
game = challenge.games.find_by(user_id: @user.id)
end_time = game.end_time
# 用户关卡的得分
all_score = homework_challenge_settings.find_by(challenge_id: challenge.id).try(:score)
final_score =
if @student_work.challenge_work_scores.where(challenge_id: challenge.id).last.present?
@student_work.challenge_work_scores.where(:challenge_id => game.challenge_id).last.score
else
if game.status == 2 && ((game.end_time && game.end_time < @homework.end_time) ||
(@homework.allow_late && (@course.end_date.nil? ||
(game.end_time && game.end_time < @course.end_date.end_of_day))))
answer_open_evaluation = @homework.homework_detail_manual.answer_open_evaluation
# 设置了查看答案也获得满分的话就取总分。否则取关卡的百分比分支
if answer_open_evaluation.present?
all_score
else
# 关卡的百分比 * 作业设置的分数 = 总得分
((game.final_score) / challenge.score) * all_score
end
end
end
all_score = homework_challenge_settings.find_by(challenge_id: challenge.id).try(:score).to_f
final_score = @student_work.work_challenge_score game, all_score
# 抄袭用户
copy_user = User.find_by_id(game_codes[0].target_user_id)
copy_end_time = copy_user.games.find_by(challenge_id: challenge.id).try(:end_time) if copy_user.present?

@ -87,7 +87,10 @@ class MessagesController < ApplicationController
end
def show
@message = Message.includes(:attachments, :message_detail, :children, :author => :user_extension, :board => [{course: :board_course_modules}]).find_by_id params[:id]
@message = Message.includes(:attachments, :message_detail,
:children, :author => :user_extension,
:board => [{course: :board_course_modules}])
.find_by_id params[:id]
return normal_status(-2, "ID为#{params[:id]}的帖子不存在") if @message.nil?
@attachment_size = @message.attachments.size

@ -33,7 +33,7 @@ class MyshixunsController < ApplicationController
uid_logger_error("版本库删除异常,详情:#{e.message}")
end
StudentWork.where(:myshixun_id => @myshixun.id).update_all(:myshixun_id => nil, :work_status => 0)
StudentWork.where(:myshixun_id => @myshixun.id).update_all(:myshixun_id => 0, :work_status => 0)
rescue Exception => e
uid_logger_error("myshixun reset failed #{e}")
@ -278,7 +278,6 @@ class MyshixunsController < ApplicationController
end
end
if game.status == 2
@resubmit = Time.now.to_i
end

@ -134,7 +134,7 @@ class PollVotesController < ApplicationController
end
def check_answer_in_question
poll_user_status = @poll.get_poll_status(current_user.id)
poll_user_status = @poll.get_poll_status(current_user)
poll_user = @poll.poll_users.find_by(user_id: current_user.id) #当前用户
question_type = @poll_question&.question_type

@ -31,50 +31,48 @@ class PollsController < ApplicationController
@current_user_ = current_user
@course_status = @course.is_end ? 0 : 1 # 课堂是否结束
@course_is_public = @course.is_public
@polls_count = @polls_all.count # 全部页面,需返回
@polls_unpublish_counts = @polls_all.poll_by_status(1).count #未发布的问卷数
@polls_published_counts = @polls_all.poll_by_status([2, 3]).count # 已发布的问卷数
# 课堂的学生人数
@course_all_members = @course.students #当前课堂的全部学生
@course_all_members_count = @course_all_members.count #当前课堂的学生数
@current_student = @course_all_members.find_by(user_id: current_user.id) #当前用户是否为课堂的学生
# polls的不同用户群体的显示
if @user_course_identity < Course::STUDENT # @is_teacher_or 1为老师/管理员/助教
@is_teacher_or = 1
@teacher_groups_ids = @course.charge_group_ids(current_user)
@polls = @polls_all #老师能看到全部的问卷,不管是已发布的/未发布的/已截止的/统一设置的/私有设置的(看到内容不同)
elsif @user_course_identity == Course::STUDENT # 2为课堂成员能看到统一设置的和自己班级的
@is_teacher_or = 2
member_group_id = @current_student.try(:course_group_id).to_i # 成员的分班id默认为0
if member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的)
@member_group_id = @current_student.try(:course_group_id).to_i # 成员的分班id默认为0
if @member_group_id == 0 #表示是课堂的未分班成员,只能查看统一设置的试卷(已发布的/已截止的)
@polls = member_show_polls.size > 0 ? member_show_polls.public_or_unset : []
else #已分班级的成员,可以查看统一设置和单独设置(试卷是发布在该班级)试卷
# 已发布 当前用户班级分组的 试卷id
poll_settings_ids = @course.poll_group_settings.where(course_group_id: member_group_id).poll_group_published.pluck(:poll_id).uniq # 选择成员的班级id等于课堂问卷设置的班级id
@polls = member_show_polls.present? ? member_show_polls.public_or_unset.or(member_show_polls.where(id: poll_settings_ids)) : []
not_poll_ids = @course.poll_group_settings.poll_group_not_published.where("course_group_id = #{@member_group_id}").pluck(:poll_id)
@polls = member_show_polls.where.not(id: not_poll_ids)
end
else #用户未登陆或不是该课堂成员,仅显示统一设置的(已发布的/已截止的),如有公开,则不显示锁,不公开,则显示锁
@is_teacher_or = 0
@polls = member_show_polls.size > 0 ? member_show_polls.public_or_unset : []
@polls = member_show_polls.public_or_unset
end
if @polls.count > 0
if params[:type].present?
choose_type = params[:type]
member_group_id = @current_student.try(:course_group_id).to_i # 成员的分班id默认为0
if @is_teacher_or == 2 && member_group_id > 0
poll_groups_sets = @course.poll_group_settings.where(course_group_id: member_group_id).poll_group_published
poll_settings_ids = poll_groups_sets.pluck(:poll_id)
poll_ended_ids = poll_groups_sets.poll_group_ended.pluck(:poll_id).uniq
# poll_settings_ids = @course.poll_group_settings.where(course_group_id: member_group_id).poll_group_ended.pluck(:poll_id).uniq
if choose_type.to_i == 2
@polls = @polls_all.present? ? @polls_all.poll_by_status(2).public_or_unset.or(@polls_all.where(id:(poll_settings_ids - poll_ended_ids).uniq)).distinct : []
elsif choose_type.to_i == 3
@polls = @polls_all.present? ? @polls_all.poll_by_status(3).public_or_unset.or(@polls_all.where(id: poll_ended_ids)).distinct : []
end
poll_setting_ids = []
if @is_teacher_or != 2
@polls = @polls.where("polls_status = #{choose_type}")
else
@polls = @polls.poll_by_status(choose_type)
case choose_type
when 1
poll_setting_ids = @course.poll_group_settings.where("course_group_id = #{@member_group_id}").poll_group_not_published.pluck(:poll_id)
when 2
poll_setting_ids = @course.poll_group_settings.where("course_group_id = #{@member_group_id}")
.where("publish_time is not null and publish_time <= ? and end_time > ?",Time.now,Time.now).pluck(:poll_id)
when 3
poll_setting_ids = @course.poll_group_settings.where("course_group_id = #{@member_group_id}").poll_group_ended.pluck(:poll_id)
end
unified_setting_ids = @polls.public_or_unset.where("polls_status = #{choose_type}").pluck(:id)
ex_ids = (poll_setting_ids + unified_setting_ids).uniq
@polls = @polls.where(id: ex_ids)
end
end
@ -90,11 +88,16 @@ class PollsController < ApplicationController
@limit = params[:limit] || 15
@polls = @polls.page(@page).per(@limit)
@polls = @polls&.includes(:poll_users,:poll_questions,:poll_group_settings)
@polls = @polls&.includes(:published_settings)
else
@polls = []
end
@polls_count = @polls_all.size # 全部页面,需返回
@polls_unpublish_counts = @polls_all.poll_by_status(1).size #未发布的问卷数
@polls_published_counts = @polls_count - @polls_unpublish_counts # 已发布的问卷数
@course_all_members_count = @course_all_members.size #当前课堂的学生数
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
@ -202,7 +205,7 @@ class PollsController < ApplicationController
@is_teacher_or = 1
@user_poll_answer = 3 #教师页面
end
poll_status = @poll.get_poll_status(current_user.id)
poll_status = @poll.get_poll_status(current_user)
poll_id_array = [@poll.id]
@poll_publish_count = get_user_permission_course(poll_id_array,2).count #是否存在已发布的
@poll_unpublish_count = get_user_permission_course(poll_id_array,1).count #是否存在未发布的
@ -344,7 +347,7 @@ class PollsController < ApplicationController
begin
check_ids = Poll.where(id: params[:check_ids])
check_ids.each do |poll|
poll_status = poll.get_poll_status(current_user.id)
poll_status = poll.get_poll_status(current_user)
if poll_status == 2 #跳过已截止的或未发布的
g_course = params[:group_ids] #表示是否传入分班参数,如果传入分班的参数那么poll的统一设置需修改poll_group_settings
if g_course
@ -687,7 +690,7 @@ class PollsController < ApplicationController
course_group_ids = @course.charge_group_ids(current_user) #当前老师的班级id数组
poll_status = @poll.get_poll_status(current_user.id)
poll_status = @poll.get_poll_status(current_user)
if poll_status == 1 && course_group_ids.size > 0 # 问卷未发布且老师的分班大于1 才可以修改统一设置否则按poll默认的来处理
unified_setting = params[:unified_setting]
else
@ -847,7 +850,7 @@ class PollsController < ApplicationController
ActiveRecord::Base.transaction do
begin
poll_user_current = @poll.poll_users.find_by_group_ids(@poll_current_user_id).first #查找当前用户是否有过答题
@poll_status = @poll.get_poll_status(current_user.id)
@poll_status = @poll.get_poll_status(current_user)
if poll_user_current.blank?
if @user_course_identity > Course::ASSISTANT_PROFESSOR #当为老师的时候不创建poll_user表理论上老师是不能进入答题的
poll_user_params = {
@ -933,9 +936,9 @@ class PollsController < ApplicationController
else
respond_to do |format|
format.xlsx{
polls_export_name = "#{current_user.real_name}_#{@course.name}_#{@poll.polls_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
polls_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@poll.polls_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
polls_user_commit = poll_commit_result(@poll,@poll_export_questions,@poll_users,@poll_commit_ids)
render xlsx: "#{polls_export_name.strip.first(30)}",template: "polls/commit_result.xlsx.axlsx",locals: {polls_user_commit:polls_user_commit}
render xlsx: "#{polls_export_name_.strip.first(30)}",template: "polls/commit_result.xlsx.axlsx",locals: {polls_user_commit:polls_user_commit}
}
end
end
@ -953,7 +956,7 @@ class PollsController < ApplicationController
ActiveRecord::Base.transaction do
begin
poll_ids = [@poll.id]
@poll_list_status = @poll.get_poll_status(current_user.id)
@poll_list_status = @poll.get_poll_status(current_user)
@poll_publish_count = get_user_permission_course(poll_ids,2).count
@poll_unpublish_count = get_user_permission_course(poll_ids,1).count
@course_all_members = @course.students
@ -962,7 +965,7 @@ class PollsController < ApplicationController
if @user_course_identity < Course::STUDENT #当前为老师,而且老师只能查看自己班级的/课堂的问卷
@poll_current_user_status = 0
@poll_users_list = @poll.all_poll_users(current_user.id) #该老师分班的全部学生
get_poll_answers(@poll_users_list)
get_poll_answers(@poll_users_list, @poll_list_status)
if @poll_list_status == 1
@poll_course_groups =[]
else
@ -974,7 +977,7 @@ class PollsController < ApplicationController
end
elsif @user_course_identity > Course::ASSISTANT_PROFESSOR
@poll_all_users = @poll.get_poll_exercise_users
get_poll_answers(@poll_all_users) # 未答和已答的
get_poll_answers(@poll_all_users, @poll_list_status) # 未答和已答的
@poll_course_groups = [] #当为学生的时候,不显示分班情况
@poll_current_user_status = 1 #当前用户的状态,为学生
poll_current_user = @poll_all_users.find_by_group_ids(current_user.id) #当前用户是否开始做问卷(提交/未提交/没做)
@ -985,7 +988,7 @@ class PollsController < ApplicationController
end
else
@poll_all_users = @poll.get_poll_exercise_users
get_poll_answers(@poll_all_users) # 未答和已答的
get_poll_answers(@poll_all_users, @poll_list_status) # 未答和已答的
@poll_current_user_status = 2 #当前用户非课堂成员
@poll_users_list = []
end
@ -1101,7 +1104,7 @@ class PollsController < ApplicationController
## 判断开始答题页面的用户权限
def check_user_on_answer
poll_status = @poll.get_poll_status(current_user.id)
poll_status = @poll.get_poll_status(current_user)
if @user_course_identity == Course::STUDENT && poll_status == 1 #问卷未发布,且当前用户不为老师/管理员
normal_status(-1, "未发布问卷!")
elsif @user_course_identity > Course::STUDENT && (!@poll.is_public || (@poll.is_public && !@poll.unified_setting)) ##不为课堂成员,且问卷不为公开的,或问卷公开,但是不是统一设置的
@ -1158,7 +1161,7 @@ class PollsController < ApplicationController
def check_poll_question_complete #commit_poll 的权限
poll_user_current = @poll.poll_users.find_by_group_ids(current_user.id).first
poll_status = @poll.get_poll_status(current_user.id)
poll_status = @poll.get_poll_status(current_user)
if @user_course_identity < Course::STUDENT || (poll_status == 3) || (poll_user_current.present? && poll_user_current.commit_status == 1)
normal_status(-1,"用户没有权限!") #老师/管理员在提交时没有权限
else
@ -1180,7 +1183,7 @@ class PollsController < ApplicationController
end
def check_poll_commit_result
poll_status = @poll.get_poll_status(current_user.id)
poll_status = @poll.get_poll_status(current_user)
commit_poll_user = @poll.poll_users.find_by_group_ids(current_user.id).commit_by_status(1) #当前用户已提交问卷的
unless (@user_course_identity < Course::STUDENT) || ((@poll.show_result == 1) && (poll_status == 3) && commit_poll_user.present?)
normal_status(-1,"没有权限!") #当前为老师/问卷公开统计,且问卷已截止,且用户有过回答的
@ -1212,18 +1215,12 @@ class PollsController < ApplicationController
def get_user_permission_course(poll_ids,status) #获取用户权限范围内的已发布/未发布
poll_status = status.to_i
unpublish_group = []
# g_course_ids = @course.teacher_course_groups.get_user_groups(current_user.id).pluck(:course_group_id).reject(&:blank?).uniq
# if g_course_ids.blank? || g_course_ids.include?(0) #当前用户的分班权限为空,即具体全部的分班权限
# user_groups_id = @course.course_groups.pluck(:id)
# else
# user_groups_id = g_course_ids
# end
user_groups_id = @course.charge_group_ids(current_user)
all_polls = Poll.where(id:poll_ids)
all_polls.each do |poll|
if poll.present?
if poll.unified_setting
poll_user_status = poll.get_poll_status(current_user.id) #当前用户的能看到的试卷
poll_user_status = poll.get_poll_status(current_user) #当前用户的能看到的试卷
if poll_user_status == poll_status || poll_status == 3 #未发布的情况
unpublish_group = unpublish_group + user_groups_id
else

@ -0,0 +1,5 @@
class RepertoiresController < ApplicationController
def index
render_ok(repertoires: Repertoire.cache_data)
end
end

@ -44,11 +44,12 @@ class ShixunsController < ApplicationController
## 搜索关键字 匹配关卡名, 用户名, 实训名 和 空格多搜索
if params[:keyword].present?
keyword = params[:keyword].strip
@shixuns = @shixuns.joins(:users, challenges: :challenge_tags).
where("challenge_tags.name like '%#{keyword}%'
or challenges.subject like '%#{keyword}%'
or concat(lastname, firstname) like '%#{keyword}%'
or shixuns.name like '%#{keyword.split(" ").join("%")}%'").distinct
@shixuns = @shixuns.joins(:user, challenges: :challenge_tags).
where("challenge_tags.name like :keyword
or challenges.subject like :keyword
or concat(lastname, firstname) like :keyword
or shixuns.name like :name",
keyword: "%#{keyword}%", name: "%#{keyword.split(" ").join("%")}%").distinct
end
## 筛选 状态
@ -68,15 +69,15 @@ class ShixunsController < ApplicationController
when 'new'
@shixuns = @shixuns.order("shixuns.status = 2 desc, shixuns.created_at #{bsort}")
when 'hot'
@shixuns = @shixuns.order("shixuns.status = 2 desc, myshixuns_count #{bsort}")
@shixuns = @shixuns.order("shixuns.status = 2 desc, shixuns.myshixuns_count #{bsort}")
when 'mine'
@shixuns = @shixuns.order("shixuns.created_at #{bsort}")
else
@shixuns = @shixuns.order("shixuns.status = 2 desc, publish_time #{bsort}")
@shixuns = @shixuns.order("shixuns.status = 2 desc, shixuns.publish_time #{bsort}")
end
@total_count = @shixuns.count
# 用id计数会快10+MS左右,对于搜索的内容随着数据的增加,性能会提升一些。
@total_count = @shixuns.count("shixuns.id")
## 分页参数
page = params[:page] || 1

@ -334,7 +334,9 @@ class StudentWorksController < ApplicationController
ActiveRecord::Base.transaction do
begin
# 没传score则取上次评分成绩
reviewer_role = @user_course_identity == Course::STUDENT ? 3 : @user_course_identity == Course::ASSISTANT_PROFESSOR ? 2 : 1
new_score = StudentWorksScore.new
score = StudentWorksScore.where(user_id: current_user.id, student_work_id: @work.id, reviewer_role: reviewer_role).last
new_score.score = params[:score].blank? ? score.try(:score) : params[:score].to_f
new_score.comment = params[:comment] if params[:comment] && params[:comment].strip != ""
new_score.user_id = current_user.id
@ -347,9 +349,7 @@ class StudentWorksController < ApplicationController
@work.update_attributes(group_id: @homework.max_group_id) if @homework.homework_type == "group"
end
reviewer_role = @user_course_identity == Course::STUDENT ? 3 : @user_course_identity == Course::ASSISTANT_PROFESSOR ? 2 : 1
new_score.reviewer_role = reviewer_role
score = StudentWorksScore.where(user_id: current_user.id, student_work_id: @work.id, reviewer_role: reviewer_role).last
if new_score.save!
Attachment.associate_container(params[:attachment_ids], new_score.id, new_score.class)
@ -456,9 +456,9 @@ class StudentWorksController < ApplicationController
@echart_data = student_efficiency(@homework, @work)
@myself_eff = @echart_data[:efficiency_list].find { |item| item.last == @user.id }
@myself_consume = @echart_data[:consume_list].find { |item| item.last == @user.id }
# filename = "实训报告_#{@shixun.name}_#{@use.real_name}_#{Time.current.strftime('%Y%m%d%H%M%S')}.pdf" #下载报错 unknown nil name,下面为修改的-hs-0606
filename = "实训报告_#{@shixun&.name}_#{@use&.real_name}_#{Time.current.strftime('%Y%m%d%H%M%S')}.pdf"
filename_ = "实训报告_#{@shixun&.name}_#{@use&.real_name}"
filename = Base64.urlsafe_encode64(filename_.strip.first(30))
stylesheets = %w(shixun_work/shixun_work.css shared/codemirror.css)
render pdf: 'shixun_work/shixun_work', filename: filename, stylesheets: stylesheets
end
@ -631,16 +631,35 @@ class StudentWorksController < ApplicationController
# 查重作品调分
def adjust_review_score
if params[:score].nil? || params[:challenge_id].nil? || params[:code_rate].nil? || params[:copy_user_id].nil?
tip_exception("缺少type参数") if params[:type].blank? || !["review", "report"].include?(params[:type])
if params[:type] == "review" && (params[:score].nil? || params[:challenge_id].nil? || params[:code_rate].nil? || params[:copy_user_id].nil?)
tip_exception("参数错误score和challenge_id和code_rate和copy_user_id不能为空")
elsif params[:type] == "report" && (params[:score].nil? || params[:challenge_id].nil?)
tip_exception("参数错误score和challenge_id")
end
challenge_setting = @homework.homework_challenge_settings.find_by(challenge_id: params[:challenge_id])
challenge = challenge_setting&.challenge
tip_exception("不能小于零") if params[:score] < 0
tip_exception("不能大于关卡分值:#{challenge_setting.score}") if challenge_setting.score < params[:score]
ActiveRecord::Base.transaction do
begin
if params[:type] == "review"
copy_user = User.find params[:copy_user_id]
comment = "代码查重结果显示与#{copy_user.try(:show_real_name)}的代码相似度#{params[:code_rate]}%"
@work.challenge_work_scores.create(challenge_id: params[:challenge_id], user_id: current_user.id, score: params[:score],
else
comment = "根据实训报告中最终提交的代码调整第#{challenge.position}关分数"
end
challenge_score = @work.challenge_work_scores.create(challenge_id: params[:challenge_id], user_id: current_user.id, score: params[:score],
comment: comment)
HomeworksService.new.set_shixun_final_score(@work)
@work_score = @homework.student_works.find_by(id: @work.id).try(:work_score)
challenge_score.create_tiding current_user.id
HomeworksService.new.update_myshixun_work_score @work, @work&.myshixun, @work&.myshixun&.games, @homework, @homework.homework_challenge_settings
rescue Exception => e
uid_logger(e.message)
tip_exception(e.message)
raise ActiveRecord::Rollback
end
end
end

@ -22,16 +22,16 @@ class SubjectsController < ApplicationController
# 最热排序
if reorder == "myshixun_count"
if select
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
subjects.shixuns_count, COUNT(myshixuns.id) AS myshixun_member_count FROM myshixuns, stage_shixuns, subjects
WHERE myshixuns.shixun_id = stage_shixuns.shixun_id AND stage_shixuns.subject_id = subjects.id
AND `subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%'
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns
on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where
'subjects'.'hidden' = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%'
AND `subjects`.`repertoire_id` = #{select} GROUP BY subjects.id ORDER BY myshixun_member_count DESC")
else
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
subjects.shixuns_count, COUNT(myshixuns.id) AS myshixun_member_count FROM myshixuns, stage_shixuns, subjects
WHERE myshixuns.shixun_id = stage_shixuns.shixun_id AND stage_shixuns.subject_id = subjects.id
AND `subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%'
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns
on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where
`subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%'
GROUP BY subjects.id ORDER BY myshixun_member_count DESC")
end
else
@ -65,9 +65,11 @@ class SubjectsController < ApplicationController
@total_count = @subjects.size
if reorder != "myshixun_count"
@subjects = @subjects.page(page).per(limit).includes(:shixuns)
@subjects = @subjects.page(page).per(limit).includes(:shixuns, :repertoire)
else
@subjects = @subjects[offset, limit]
subject_ids = @subjects.pluck(:id)
@subjects = Subject.where(id: subject_ids).order("field(id,#{subject_ids.join(',')})").includes(:shixuns, :repertoire)
end
end

@ -0,0 +1,25 @@
class Users::InterestsController < Users::BaseController
skip_before_action :check_observed_user_exists!
before_action :require_login
def create
identity = params[:identity].to_s.strip
extension = current_user.user_extension || current_user.build_user_extension
return render_error('请选择职业') unless %w(teacher student professional).include?(identity)
ActiveRecord::Base.transaction do
extension.update_column(:identity, identity)
# 兴趣
current_user.user_interests.delete_all
UserInterest.bulk_insert(:user_id, :repertoire_id) do |worker|
(Repertoire.pluck(:id) & Array.wrap(params[:interest_ids]).map(&:to_i)).each do |repertoire_id|
worker.add(user_id: current_user.id, repertoire_id: repertoire_id)
end
end
end
render_ok
end
end

@ -6,12 +6,9 @@ class ZipsController < ApplicationController
before_action :require_admin_or_teacher
def shixun_report
service = BatchExportShixunReportService.new(@homework, @all_student_works)
filename = filename_for_content_disposition(service.filename)
send_file service.zip, filename: filename, type: 'application/zip'
filename_ = filename_for_content_disposition(service.filename)
send_file service.zip, filename: filename_, type: 'application/zip'
rescue BatchExportShixunReportService::Error => ex
normal_status(-1, ex.message)
end
@ -20,9 +17,8 @@ class ZipsController < ApplicationController
@request_url = request.base_url
exercises = ExportExercisesService.new(@exercise,@ex_users,@request_url)
file_name = filename_for_content_disposition(exercises.filename)
send_file exercises.ex_zip, filename: file_name, type: 'application/zip'
file_name_ = filename_for_content_disposition(exercises.filename)
send_file exercises.ex_zip, filename: file_name_, type: 'application/zip'
rescue Exception => e
normal_status(-1, e.message)
end
@ -42,7 +38,7 @@ class ZipsController < ApplicationController
ActiveRecord::Base.transaction do
begin
@exercise = Exercise.includes(:exercise_users,:exercise_questions).find_by(id:params[:exercise_id])
@exercise_status = @exercise.present? ? @exercise.get_exercise_status(current_user.id) : 1
@exercise_status = @exercise.present? ? @exercise.get_exercise_status(current_user) : 1
group_id = params[:exercise_group_id]
if @exercise.blank?
normal_status(-1,"试卷不存在")

@ -9,9 +9,29 @@ module ExercisesHelper
@ex_obj_array = []
exercise_obj_status.each do |q|
if q.question_type == 5
ques_score = q.exercise_shixun_answers.search_shixun_answers("user_id",user_id).pluck(:score).sum
answers_content = q.exercise_shixun_answers.search_shixun_answers("user_id",user_id)
else
ques_score = q.exercise_answers.search_answer_users("user_id",user_id).score_reviewed.pluck(:score).sum
answers_content = q.exercise_answers.search_answer_users("user_id",user_id)
end
if q.question_type <= 2
if answers_content.present? #学生有回答时
answer_choice_array = []
answers_content.each do |a|
answer_choice_array.push(a.exercise_choice.choice_position) #学生答案的位置
end
user_answer_content = answer_choice_array.sort
standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个
if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分
ques_score = q.question_score
else
ques_score = 0.0
end
else
ques_score = 0.0
end
else
ques_score = answers_content.select(:score).pluck(:score).sum
end
if ques_score >= q.question_score #满分作答为正确
@ -89,11 +109,7 @@ module ExercisesHelper
if ex.question_type <= 2 #单选题
standard_answer = ex.exercise_standard_answers.pluck(:exercise_choice_id) #标准答案的位置
ex.exercise_choices.each do |c|
if standard_answer.include?(c.choice_position) #选项的标准答案为选项的位置
right_answer = true
else
right_answer = false
end
right_answer = standard_answer.include?(c.choice_position) #选项的标准答案为选项的位置
answer_this_choice = effictive_users.search_exercise_answer("exercise_choice_id",c.id)
answer_users_count = answer_this_choice.count
if effictive_users_count == 0
@ -176,11 +192,7 @@ module ExercisesHelper
# zero_scores = all_zero_scores - un_review_scores #已评阅且答案未0分的人数
main_scores_array = [full_scores,no_full_scores,zero_scores,un_review_scores]
main_scores_array.each_with_index do |s,index|
if index == 0
right_answer = true
else
right_answer = false
end
right_answer = (index == 0)
if effictive_users_count == 0 || s < 0
s = 0
score_percent = 0.0
@ -207,11 +219,7 @@ module ExercisesHelper
shixun_score_array = [full_scores,no_full_scores,all_zero_scores]
shixun_chas = []
shixun_score_array.each_with_index do |s,index|
if index == 0
right_answer = true
else
right_answer = false
end
right_answer = (index == 0)
if effictive_users_count == 0
score_percent = 0.0
else
@ -250,14 +258,18 @@ module ExercisesHelper
end
#获取试卷的已答/未答人数
def get_exercise_answers(ex_users)
def get_exercise_answers(ex_users, status)
if status == 1
@exercise_answers = 0
@exercise_unanswers = 0
else
@exercise_answers = ex_users.commit_exercise_by_status(1).size #表示已经提交了的用户
course_all_members_count = ex_users.exists? ? ex_users.size : 0
course_all_members_count = ex_users.size
@exercise_unanswers = (course_all_members_count - @exercise_answers)
end
end
def exercise_index_show(exercise,course,is_teacher_or,user)
# exercise_all_users = exercise.exercise_users
# lock_icon 0出现锁1不出现锁
ex_show_text = []
@ -266,7 +278,7 @@ module ExercisesHelper
elsif is_teacher_or == 1 #当前为老师的时候,显示的是老师身份的对应试卷的状态,因为该试卷,可能对应老师的多个分班
exercise_status = exercise.exercise_status
else
exercise_status = exercise.get_exercise_status(user.id) #当前用户查看的试卷的发布状态
exercise_status = exercise.get_exercise_status(user) #当前用户查看的试卷的发布状态
end
case exercise_status
@ -282,8 +294,8 @@ module ExercisesHelper
if is_teacher_or == 1
exercise_users_list = exercise.all_exercise_users(user.id) #当前老师所在班级的全部学生
unreview_count = exercise_users_list.exercise_unreview.size
get_exercise_answers(exercise_users_list)
unreview_count = exercise_status == 1 ? 0 : exercise_users_list.exercise_unreview.size
get_exercise_answers(exercise_users_list, exercise_status)
ex_pb_time = exercise.get_exercise_times(user.id,true)
exercise_publish_time = ex_pb_time[:publish_time]
exercise_end_time = ex_pb_time[:end_time]
@ -296,8 +308,8 @@ module ExercisesHelper
end
elsif is_teacher_or == 2
exercise_users_list = exercise.get_stu_exercise_users
get_exercise_answers(exercise_users_list) # 未答和已答的
unreview_count = exercise_users_list.exercise_unreview.size
get_exercise_answers(exercise_users_list, exercise_status) # 未答和已答的
unreview_count = exercise_status == 1 ? 0 : exercise_users_list.exercise_unreview.size
ex_pb_time = exercise.get_exercise_times(user.id,false)
exercise_publish_time = ex_pb_time[:publish_time]
exercise_end_time = ex_pb_time[:end_time]
@ -308,7 +320,7 @@ module ExercisesHelper
end
else
exercise_users_list = exercise.get_stu_exercise_users
get_exercise_answers(exercise_users_list) # 未答和已答的
get_exercise_answers(exercise_users_list, exercise_status) # 未答和已答的
exercise_publish_time = exercise.publish_time
exercise_end_time = exercise.end_time
unreview_count = nil
@ -378,7 +390,8 @@ module ExercisesHelper
standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个
if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分
if standard_answer.count > 0
q_score_1 = (q.question_score.to_f / standard_answer.count) #当多选答案正确时每个answer的分数均摊。
q_score_1 = q.question_score
# q_score_1 = (q.question_score.to_f / standard_answer.count) #当多选答案正确时每个answer的分数均摊。
else
q_score_1 = 0.0
end
@ -509,9 +522,9 @@ module ExercisesHelper
ex_user_user = ex_user.user
exercise_user_name = ex_user_user.real_name
exercise_user_id = ex_user_user.id
ex_user_exercise_status = exercise.get_exercise_status(exercise_user_id)
ex_user_exercise_status = exercise.get_exercise_status(ex_user_user)
ex_user_student_id = ex_user_user.student_id
if ex_user.start_at.present? && ex_user.commit_status == 0 #用户已回答,但未提交
if ex_user.start_at.present? && (ex_user.commit_status == 0) #用户已回答,但未提交
commit_status = 2 #继续答题
else
commit_status = ex_user.commit_status
@ -649,6 +662,7 @@ module ExercisesHelper
user_score = nil
shixun_type = 0
question_comment = []
# user_score_pre = nil
if ques_type == 5
exercise_answers = q.exercise_shixun_answers.search_shixun_answers("user_id",ex_answerer_id)
else
@ -656,10 +670,26 @@ module ExercisesHelper
end
if student_status == 2 #当前为老师,或为学生且已提交
user_score_pre = exercise_answers.score_reviewed
if ques_type == 4 && user_score_pre.blank? #主观题时且没有大于0的分数时为空
user_score = nil
else
if ques_type == 4 #主观题时且没有大于0的分数时为空
user_score = user_score_pre.present? ? user_score_pre.pluck(:score).sum : nil
elsif ques_type == 5 || ques_type == 3
user_score = user_score_pre.present? ? user_score_pre.pluck(:score).sum : 0.0
else
if exercise_answers.present? #判断题和选择题时,
answer_choice_array = []
exercise_answers.each do |a|
answer_choice_array.push(a.exercise_choice.choice_position) #学生答案的位置
end
user_answer_content = answer_choice_array.sort
standard_answer = q.exercise_standard_answers.pluck(:exercise_choice_id).sort #该问题的标准答案,可能有多个
if user_answer_content == standard_answer #答案一致,多选或单选才给分,答案不对不给分
user_score = q.question_score
else
user_score = 0.0
end
else
user_score = 0.0
end
end
end
@ -667,9 +697,9 @@ module ExercisesHelper
user_score = q.question_score
end
if ques_type <= 2
answered_content = exercise_answers.pluck(:exercise_choice_id)
answered_content = exercise_answers&.pluck(:exercise_choice_id)
elsif ques_type == 3
exercise_answers.each do |a|
exercise_answers&.each do |a|
u_answer = {
"choice_id":a.exercise_choice_id,
"answer_text": a.answer_text
@ -677,7 +707,7 @@ module ExercisesHelper
answered_content.push(u_answer)
end
elsif ques_type == 4
answered_content = exercise_answers.pluck(:answer_text)
answered_content = exercise_answers&.pluck(:answer_text)
end
if ques_type == 5 #存在实训题,及已经做了实训题的
if ex_status == 3 || is_teacher_or == 1 #如果试卷已截止,则可以看到分数,否则不能查看分数
@ -723,8 +753,8 @@ module ExercisesHelper
if ex_time > 0
exercise_user = exercise.exercise_users.find_by(user_id:user.id)
time_mill = ex_time * 60 #转为秒
exercise_end_time = exercise.end_time.exists? ? exercise.end_time.to_i : 0
exercise_user_start = exercise_user&.start_at.exists? ? exercise_user.start_at.to_i : 0
exercise_end_time = exercise.end_time.present? ? exercise.end_time.to_i : 0
exercise_user_start = exercise_user&.start_at.present? ? exercise_user.start_at.to_i : 0
#用户未开始答题时即exercise_user_start为0
if exercise_user_start == 0
if (exercise_end_time - time_now_i) > time_mill

@ -100,7 +100,7 @@ module ExportHelper
user_time = format_time(t.updated_at)
user_score = t&.score
user_comment = t.comment.present? ? t.comment : "--"
comment_title = "教师:#{user_name}\n时间:#{user_time.to_s}\n分数:#{user_score.to_s}\n评语:#{user_comment}\n\n"
comment_title = "#{user_name} #{user_time.to_s} #{user_score.to_s}\n#{user_comment}\n\n"
w_18 = w_18 + comment_title
end
else
@ -172,7 +172,7 @@ module ExportHelper
user_time = format_time(t.updated_at)
user_score = t&.score
user_comment = t.comment.present? ? t.comment : "--"
comment_title = "教师:#{user_name}\n时间:#{user_time.to_s}\n分数:#{user_score.to_s}\n评语:#{user_comment}\n\n"
comment_title = "#{user_name} #{user_time.to_s} #{user_score.to_s}\n#{user_comment}\n\n"
# ("教师:" + user_name + "\n" + "时间:" + user_time.to_s + "\n" + "分数:" + user_score.to_s + "分" + "\n" + "评语:" + user_comment + "\n\n")
w_18 = w_18 + comment_title
end
@ -206,7 +206,7 @@ module ExportHelper
head_cells_format = head_cells_format + ["交叉评分"]
end
head_cells_format = head_cells_format + %w(迟交扣分 最终成绩 提交时间 更新时间)
head_cells_format = head_cells_format + %w(迟交扣分 最终成绩 提交时间 更新时间 评语)
@head_cells_column = head_cells_format
@task_cells_column = []
@ -257,8 +257,22 @@ module ExportHelper
w_13 = work.work_score.nil? ? "未评分" : work.work_score.round(1)
w_14 = work.commit_time.present? ? format_time(work.commit_time) : "--"
w_15 = work.update_time.present? ? format_time(work.update_time) : "--"
row_cells_column = [w_1,w_2,w_3,w_3_1,w_4,w_5,w_6,w_7,w_8,w_9,w_10,w_11,w_12,w_13,w_14,w_15]
teacher_comments = work.graduation_work_scores
if teacher_comments.present?
w_16 = ""
teacher_comments.each do |t|
user_name = t.user&.real_name
user_time = format_time(t.updated_at)
user_score = t&.score
user_comment = t.comment.present? ? t.comment : "--"
comment_title = "#{user_name} #{user_time.to_s} #{user_score.to_s}\n#{user_comment}\n\n"
# ("教师:" + user_name + "\n" + "时间:" + user_time.to_s + "\n" + "分数:" + user_score.to_s + "分" + "\n" + "评语:" + user_comment + "\n\n")
w_16 = w_16 + comment_title
end
else
w_16 = "--"
end
row_cells_column = [w_1,w_2,w_3,w_3_1,w_4,w_5,w_6,w_7,w_8,w_9,w_10,w_11,w_12,w_13,w_14,w_15,w_16]
row_cells_column = row_cells_column.reject(&:blank?)
@task_cells_column.push(row_cells_column)

@ -67,7 +67,7 @@ module GraduationTasksHelper
# 作品数统计type 1 已提交 0 未提交
def grduationwork_count task, type
works = task.graduation_works
type == 1 ? works.where("work_status !=?", 0).size : works.where("work_status =?", 0).size
type == 1 ? works.select{|work| work.work_status != 0}.size : works.select{|work| work.work_status == 0}.size
end
# 普通/分组 作业作品状态数组

@ -1,12 +1,16 @@
module PollsHelper
#获取试卷的已答/未答人数
def get_poll_answers(poll_users)
@commit_poll_users = poll_users.commit_by_status(1) #当前老师的全部学生中已提交的
@poll_answers = @commit_poll_users.present? ? @commit_poll_users.size : 0 #表示已经提交了的用户
course_all_members_count = poll_users.present? ? poll_users.size : 0
def get_poll_answers(poll_users, status)
if status == 1
@poll_answers = 0
@poll_unanswers = 0
else
@poll_answers = poll_users.commit_by_status(1).size #表示已经提交了的用户
course_all_members_count = poll_users.size
@poll_unanswers = (course_all_members_count - @poll_answers)
end
end
def poll_votes_count(votes,user_ids)
votes.find_current_vote("user_id",user_ids.uniq).size
@ -55,29 +59,29 @@ module PollsHelper
#当前为老师(非课堂成员、统一设置)的时候,显示的是老师身份的对应试卷的状态,因为该试卷,可能对应老师的多个分班
poll_status = poll.polls_status
else
poll_status = poll.get_poll_status(user.id) #当前用户查看的试卷的发布状态
poll_status = poll.get_poll_status(user) #当前用户查看的试卷的发布状态
end
if is_teacher_or == 1
poll_users_list = poll.all_poll_users(user.id) #当前老师所在班级的全部学生
get_poll_answers(poll_users_list)
get_poll_answers(poll_users_list, poll_status)
ex_pb_time = poll.get_poll_times(user.id,true)
poll_publish_time = ex_pb_time[:publish_time]
poll_end_time = ex_pb_time[:end_time]
current_status = 3
lock_icon = 1 #不显示锁图标
lock_icon = 0 #不显示锁图标
elsif is_teacher_or == 2
poll_users_list = poll.get_poll_exercise_users
get_poll_answers(poll_users_list) # 未答和已答的
get_poll_answers(poll_users_list, poll_status) # 未答和已答的
# get_poll_answers(poll_all_users)
ex_pb_time = poll.get_poll_times(user.id,false)
poll_publish_time = ex_pb_time[:publish_time]
poll_end_time = ex_pb_time[:end_time]
current_status = poll.check_user_votes_status(user)
lock_icon = 1 #不显示锁图标
lock_icon = 0 #不显示锁图标
else
poll_users_list = poll.get_poll_exercise_users
get_poll_answers(poll_users_list) # 未答和已答的
get_poll_answers(poll_users_list, poll_status) # 未答和已答的
poll_publish_time = poll.publish_time
poll_end_time = poll.end_time
current_status = 4
@ -87,6 +91,9 @@ module PollsHelper
lock_icon = 0 #显示锁图标
end
end
if (course.is_public == 1) && poll.is_public
lock_icon = 1
end
{
"publish_time":poll_publish_time,
"end_time":poll_end_time,

@ -1,6 +1,6 @@
# 学生加入课堂时创建相关任务作品
class CourseAddStudentCreateWorksJob < ApplicationJob
queue_as :course_member
queue_as :default
def perform(course_id, student_ids)
course = Course.find_by(id: course_id)

@ -1,5 +1,5 @@
class CourseDeleteStudentDeleteWorksJob < ApplicationJob
queue_as :course_member
queue_as :default
def perform(course_id, student_ids)
course = Course.find_by(id: course_id)

@ -1,6 +1,6 @@
# 毕设任务的交叉评阅分配
class GraduationTaskCrossCommentJob < ApplicationJob
queue_as :evaluation_comment
queue_as :default
def perform(graduation_task_id)
task = GraduationTask.find_by(id: graduation_task_id)

@ -1,5 +1,5 @@
class HomeworkAbsencePenaltyCalculationJob < ApplicationJob
queue_as :score
queue_as :default
def perform(homework_common_id)
homework_common = HomeworkCommon.find_by(id: homework_common_id)

@ -1,6 +1,6 @@
class HomeworkEndUpdateScoreJob < ApplicationJob
# 不允许补交的作业截止后,或者补交截止后需要重新计算一次作业成绩
queue_as :score
queue_as :default
def perform(homework_id)
homework = HomeworkCommon.find_by(id: homework_id)

@ -1,5 +1,5 @@
class HomeworkEvaluationCommentAssginJob < ApplicationJob
queue_as :evaluation_comment
queue_as :default
def get_assigned_homeworks(student_works, n, index)
student_works += student_works

@ -1,6 +1,6 @@
class HomeworkPublishUpdateWorkStatusJob < ApplicationJob
# 作业发布时更新学生(发布前已开启过实训)的作业状态和成绩
queue_as :score
queue_as :default
def perform(group_ids, homework_id)
# Do something later

@ -16,6 +16,8 @@ class Challenge < ApplicationRecord
# 参考答案
has_many :challenge_answers, :dependent => :destroy
has_many :exercise_bank_shixun_challenges, :dependent => :destroy
# 回复
has_many :discusses, :dependent => :destroy
# acts_as_attachable

@ -2,4 +2,12 @@ class ChallengeWorkScore < ApplicationRecord
belongs_to :user
belongs_to :student_work
belongs_to :challenge
has_many :tidings, as: :container, dependent: :destroy
def create_tiding trigger_user_id
tidings << Tiding.new(user_id: student_work.user_id, trigger_user_id: trigger_user_id, container_id: id,
container_type: "ChallengeWorkScore", parent_container_id: student_work_id,
parent_container_type: "StudentWork", belong_container_id: student_work&.homework_common&.course_id,
belong_container_type: "Course", viewed: 0, tiding_type: "HomeworkCommon")
end
end

@ -124,7 +124,7 @@ class Course < ApplicationRecord
#当前老师的班级id
def teacher_course_ids(user_id)
course_teacher_member = teacher_course_groups.get_user_groups(user_id) #获取当前老师的分班
course_teacher_member = teacher_course_groups.get_user_groups(user_id).select(:course_group_id) #获取当前老师的分班
if course_teacher_member.blank?
if none_group_count > 0 #有未分班的,则发布到未发布分班
un_group_ids = [0]
@ -258,7 +258,7 @@ class Course < ApplicationRecord
# 是否具有分班权限,返回分班的id
def group_course_power(user_id)
teacher_course_groups.where(user_id: user_id).pluck(:id)
teacher_course_groups.where(user_id: user_id).pluck(:course_group_id)
end
#课程动态公共表记录
@ -308,12 +308,12 @@ class Course < ApplicationRecord
teacher_power_courses = []
if course_groups.present?
common_ids.each do |i|
student_count = students.where(course_group_id:i).count
if i == 0
student_count = students.where(course_group_id:i).count
teacher_power_courses << {course_name:"未分班",course_id:0,student_count:student_count}
else
course_group_name = course_groups.find_by(id:i)
teacher_power_courses << {course_name:course_group_name&.name,course_id:i,student_count:student_count}
teacher_power_courses << {course_name:course_group_name&.name,course_id:i,student_count:course_group_name&.course_members_count}
end
end
end

@ -9,6 +9,7 @@ class Discuss < ApplicationRecord
has_many :tidings, as: :container, dependent: :destroy
has_one :praise_tread_cache, as: :object, dependent: :destroy
belongs_to :challenge
after_create :send_tiding
scope :children, -> (discuss_id){ where(parent_id: discuss_id).includes(:user).reorder(created_at: :asc) }

@ -7,6 +7,8 @@ class Exercise < ApplicationRecord
has_many :score_exercise_users, -> { where("is_delete = 0 and commit_status != 0").order("score desc") }, class_name: "ExerciseUser"
has_many :exercise_questions, :dependent => :delete_all
has_many :exercise_group_settings, :dependent => :delete_all
has_many :published_settings, -> { exercise_group_published }, class_name: "ExerciseGroupSetting"
has_many :tidings, as: :container
has_many :course_acts, class_name: 'CourseActivity', as: :course_act, :dependent => :delete_all
@ -40,9 +42,9 @@ class Exercise < ApplicationRecord
if unified_setting #试卷统一设置
exercise_users
else
ex_group_setting_ids = exercise_group_settings.exercise_group_published.pluck(:course_group_id)
course_user_ids = course.students.where(course_group_id:ex_group_setting_ids).pluck(:user_id)
exercise_users.where(user_id:course_user_ids)
ex_group_setting_ids = published_settings.pluck(:course_group_id)
exercise_users.joins("join course_members on exercise_users.user_id=course_members.user_id").
where(course_members: {course_group_id: ex_group_setting_ids})
end
end
@ -55,31 +57,53 @@ class Exercise < ApplicationRecord
end
end
#统一设置,为当前老师有权限的分班学生,分班设置,也为当前老师有权限的分班的学生
def all_exercise_users(user_id)
ex_users = self.exercise_users
group_ids = common_published_ids(user_id)
if group_ids.present?
ex_users = ex_users.where(user_id: course.students.where(course_group_id: group_ids).pluck(:user_id))
# 根据是否统一发布获取作业的作品列表
def all_works
ex_users = unified_setting ? exercise_users :
exercise_users.joins("join course_members on exercise_users.user_id=course_members.user_id").
where(course_members: {course_group_id: published_settings.pluck(:course_group_id)})
end
# 分班权限的老师可见的作品列表
def all_exercise_users user_id
# member = course.course_member(user_id)
teacher_course_groups = course.teacher_course_groups.get_user_groups(user_id)
ex_users = self.all_works
# 有分班权限的统计管理的分班且已发布的学生情况
if teacher_course_groups.exists?
group_ids = teacher_course_groups.pluck(:course_group_id)
ex_users = ex_users.joins("join course_members on exercise_users.user_id=course_members.user_id").
where(course_members: {course_group_id: group_ids})
end
ex_users
end
# #统一设置,为当前老师有权限的分班学生,分班设置,也为当前老师有权限的分班的学生
# def all_exercise_users(user_id)
# ex_users = exercise_users
# group_ids = common_published_ids(user_id)
# if group_ids.present?
# ex_users = ex_users.joins("join course_members on exercise_users.user_id=course_members.user_id").
# where(course_members: {course_group_id: group_ids})
# end
# ex_users
# end
#当前用户已发布的班级id和试卷分组已发布的班级id的交集
def common_published_ids(user_id)
current_user_groups = course.teacher_course_ids(user_id)
if unified_setting
un_group_ids = (course.none_group_count > 0) ? [0] : []
published_group_ids = (current_user_groups + un_group_ids).uniq #统一设置时为当前用户的分班id及未分班
# un_group_ids = (course.none_group_count > 0) ? [0] : []
# published_group_ids = (current_user_groups + un_group_ids).uniq #统一设置时为当前用户的分班id及未分班
published_group_ids = current_user_groups
else
ex_group_setting = exercise_group_settings.pluck("course_group_id").uniq
ex_group_setting = exercise_group_settings.select(:course_group_id).pluck("course_group_id").uniq
common_all_ids = ex_group_setting & current_user_groups #当前用户有权限的已发布的分班id #非统一设置时为当前用户有权限的且已发布分班的id
published_group_ids = common_all_ids.uniq
end
published_group_ids
end
#判断用户是否属于试卷分班的学生中
def check_user_in_course(user_id,user_identity)
ex_group_settings = exercise_group_settings.pluck(:course_group_id)
@ -89,11 +113,9 @@ class Exercise < ApplicationRecord
end
#判断是否为分班,如果分班,试卷的截止时间为当前分班时间,否则为试卷的截止时间
def get_exercise_status(user_id)
user_group = course.course_members.find_by(user_id: user_id)
if user_group.present? && user_group.role == "STUDENT" #当为学生的时候,需根据分班来判断试卷状态
def get_exercise_status(user)
if user.student_of_course?(course) #当为学生的时候,需根据分班来判断试卷状态
ex_time = get_exercise_times(user_id,false)
pb_time = ex_time[:publish_time]
ed_time = ex_time[:end_time]
@ -115,18 +137,17 @@ class Exercise < ApplicationRecord
if unified_setting || teacher #当试卷为统一设置或当前为老师的时候
pb_time = publish_time
en_time = end_time
if en_time.present? && (en_time <= Time.now) && (exercise_status != 3)
if (exercise_status != 3) && en_time.present? && (en_time <= Time.now)
update_column("exercise_status",3)
end
else
ex_group_setting = exercise_group_settings
user_group = course.students.course_find_by_ids("user_id",user_id)
user_group = course.students.where(user_id:user_id).select(:course_group_id)
if user_group.exists?
user_group_id = user_group.first.course_group_id
user_ex_group_setting = ex_group_setting.find_in_exercise_group("course_group_id",user_group_id)
pb_time = user_ex_group_setting.exists? ? user_ex_group_setting.first.publish_time : nil
en_time = user_ex_group_setting.exists? ? user_ex_group_setting.first.end_time : nil
user_group_id = user_group.first&.course_group_id
user_ex_group_setting = ex_group_setting.where(course_group_id:user_group_id).select(:publish_time,:end_time)
pb_time = user_ex_group_setting.first&.publish_time
en_time = user_ex_group_setting.first&.end_time
else
pb_time = nil
en_time = nil
@ -141,13 +162,13 @@ class Exercise < ApplicationRecord
#判断当前用户的答题状态
def check_user_answer_status(user)
ex_answer_user = exercise_users.find_by(user_id: user.id)
user_ex_status = get_exercise_status(user.id)
ex_answer_user = exercise_users.where(user_id: user.id).select(:start_at,:end_at,:commit_status)
user_ex_status = get_exercise_status(user)
user_status = 2
if ex_answer_user.exists? && (ex_answer_user.start_at.exists? || ex_answer_user.end_at.exists?) #学生有过答题的,或者立即截止,但学生未做试卷的
user_status = ex_answer_user.commit_status
if ex_answer_user.exists? && (ex_answer_user.first&.start_at.present? || ex_answer_user.first&.end_at.present?) #学生有过答题的,或者立即截止,但学生未做试卷的
user_status = ex_answer_user.first.commit_status
end
if ex_answer_user.exists? && ex_answer_user.start_at.blank? && user_ex_status == 3
if ex_answer_user.exists? && ex_answer_user.first&.start_at.blank? && user_ex_status == 3
user_status = 4
end

@ -20,9 +20,9 @@ class Game < ApplicationRecord
#全部关卡数
scope :ch_games, lambda { |challenge_id| where(challenge_id:challenge_id) }
# 已通关的数量
scope :finished_num, -> (challenge_id) { where(:challenge_id => challenge_id, :status => 1)}
scope :finished_num, -> (challenge_id) { where(:challenge_id => challenge_id, :status => 2)}
# 正在通关的数量
scope :doing_num, -> (challenge_id) { where(:challenge_id => challenge_id, :status => 0)}
scope :doing_num, -> (challenge_id) { where(:challenge_id => challenge_id, :status => [0,1])}
#用户的全部关卡
scope :user_games, lambda { |user_id,challenge_id| where("user_id = ? AND challenge_id = ?",user_id,challenge_id) }

@ -100,15 +100,15 @@ class GraduationTask < ApplicationRecord
SELECT count(distinct graduation_work_id) cnt FROM graduation_work_scores WHERE reviewer_role IN(1,2) AND graduation_work_id
IN(SELECT id FROM graduation_works WHERE graduation_task_id = #{self.id} AND user_id
IN(SELECT user_id FROM course_members WHERE role = 4 AND course_group_id
IN(SELECT course_group_id FROM teacher_course_groups WHERE id IN(#{course_group_ids.join(",")}))
IN(#{course_group_ids.join(",")})
)
)
}
else
%Q{
SELECT COUNT(distinct graduation_work_id) cnt FROM graduation_works gw
JOIN graduation_work_scores gwc ON gw.graduation_task_id = gwc.graduation_task_id
WHERE reviewer_role IN(1,2) AND gwc.graduation_task_id = #{self.id}
JOIN graduation_work_scores gwc ON gw.id = gwc.graduation_work_id
WHERE reviewer_role IN(1,2) AND gw.graduation_task_id = #{self.id}
}
end
GraduationWorkScore.find_by_sql(sql).first.try(:cnt).to_i
@ -127,7 +127,7 @@ class GraduationTask < ApplicationRecord
sql = %Q{
SELECT count(*) cnt FROM graduation_works gw WHERE work_status = 0 AND gw.graduation_task_id = #{self.id} AND gw.user_id
IN( SELECT user_id FROM course_members WHERE role = 4 AND course_group_id
IN( SELECT course_group_id FROM teacher_course_groups WHERE id not IN(#{course_group_ids.join(",")}) )
IN(#{course_group_ids.join(",")})
)
}
GraduationWork.find_by_sql(sql).first.try(:cnt)
@ -144,7 +144,7 @@ class GraduationTask < ApplicationRecord
sql = %Q{
SELECT count(*) cnt FROM graduation_works gw WHERE work_status = 1 AND gw.graduation_task_id = #{self.id} AND gw.user_id
IN( SELECT user_id FROM course_members WHERE role = 4 AND course_group_id
IN( SELECT course_group_id FROM teacher_course_groups WHERE id IN(#{course_group_ids.join(",")}) )
IN(#{course_group_ids.join(",")})
)
}
GraduationWork.find_by_sql(sql).first.try(:cnt)
@ -160,7 +160,7 @@ class GraduationTask < ApplicationRecord
sql = %Q{
SELECT count(*) cnt FROM graduation_works gw WHERE work_status = 2 AND gw.graduation_task_id = #{self.id} AND gw.user_id
IN( SELECT user_id FROM course_members WHERE role = 4 AND course_group_id
IN( SELECT course_group_id FROM teacher_course_groups WHERE id IN(#{course_group_ids.join(",")}) )
IN(#{course_group_ids.join(",")})
)
}
GraduationWork.find_by_sql(sql).first.try(:cnt)

@ -68,7 +68,7 @@ class GraduationWork < ApplicationRecord
# 作品是否能够分配指导老师
def assign_power?(course_identity)
course_identity < Course::STUDENT && self.graduation_task.cross_comment.present? && self.graduation_task.comment_status == 2
course_identity < Course::STUDENT && graduation_task.cross_comment && graduation_task.comment_status == 2
end
# 老师评阅分

@ -79,7 +79,8 @@ class HomeworkCommon < ApplicationRecord
# 根据是否统一发布获取作业的作品列表
def all_works
student_works = self.unified_setting ? self.student_works :
self.student_works.joins("join course_members on student_works.user_id=course_members.user_id").where(course_members: {course_group_id: self.published_settings.pluck(:course_group_id)})
self.student_works.joins("join course_members on student_works.user_id=course_members.user_id").
where(course_members: {course_group_id: self.published_settings.pluck(:course_group_id)})
end
# 分班权限的老师可见的作品列表
@ -88,7 +89,7 @@ class HomeworkCommon < ApplicationRecord
teacher_course_groups = member.try(:teacher_course_groups)
all_student_works = self.all_works
# 有分班权限的统计管理的分班且已发布的学生情况
if member.present? && teacher_course_groups.size > 0
if member.present? && teacher_course_groups.exists?
group_ids = teacher_course_groups.pluck(:course_group_id)
all_student_works = all_student_works.joins("join course_members on student_works.user_id=course_members.user_id").
where(course_members: {course_group_id: group_ids})
@ -196,7 +197,7 @@ class HomeworkCommon < ApplicationRecord
JOIN student_works_scores sws on sws.student_work_id = sw.id WHERE
reviewer_role IN(1,2) AND sw.id IN (SELECT id FROM student_works WHERE homework_common_id = #{self.id}
AND user_id IN (SELECT user_id FROM course_members WHERE role = 4 AND course_group_id
IN (SELECT course_group_id FROM teacher_course_groups WHERE id IN(#{course_group_ids.join(",")}))
IN (#{course_group_ids.join(",")})
)
)
}
@ -259,4 +260,8 @@ class HomeworkCommon < ApplicationRecord
self.homework_group_settings.where("end_time is not null").pluck(:end_time).max
end
def challenge_score challenge_id
homework_challenge_settings.find_by(challenge_id: challenge_id)&.score.to_f
end
end

@ -73,7 +73,7 @@ class Message < ApplicationRecord
# 包含二级回复的总点赞数
def total_praises_count
descendants.sum(:praises_count)
praises_count + descendants.sum(:praises_count)
end
# 包含二级回复数的总回复数

@ -8,6 +8,7 @@ class Poll < ApplicationRecord
has_many :poll_users, -> { where("is_delete != 1") }, :dependent => :delete_all
has_many :users, :through => :poll_users #该文件被哪些用户提交答案过
has_many :poll_group_settings, :dependent => :delete_all
has_many :published_settings, -> { poll_group_published }, class_name: "PollGroupSetting"
has_many :course_acts, class_name: 'CourseActivity', as: :course_act, dependent: :delete_all
has_many :tidings, as: :container, dependent: :delete_all
@ -44,47 +45,63 @@ class Poll < ApplicationRecord
if unified_setting #试卷统一设置
poll_users
else
ex_group_setting_ids = poll_group_settings.poll_group_published.pluck(:course_group_id)
course_user_ids = course.students.where(course_group_id:ex_group_setting_ids).pluck(:user_id)
poll_users.where(user_id:course_user_ids)
ex_group_setting_ids = published_settings.pluck(:course_group_id)
poll_users.joins("join course_members on poll_users.user_id=course_members.user_id").
where(course_members: {course_group_id: ex_group_setting_ids})
end
end
# 统一设置,为当前老师有权限的分班学生,分班设置,也为当前老师有权限的分班的学生
def all_poll_users(user_id)
poll_all_users = poll_users
group_ids = poll_published_ids(user_id)
if group_ids.present?
poll_all_users = poll_all_users.where(user_id: course.students.where(course_group_id: group_ids).pluck(:user_id).uniq)
# 根据是否统一发布获取作业的作品列表
def all_works
po_users = unified_setting ? poll_users :
poll_users.joins("join course_members on poll_users.user_id=course_members.user_id").
where(course_members: {course_group_id: published_settings.pluck(:course_group_id)})
end
poll_all_users
# 分班权限的老师可见的作品列表
def all_poll_users user_id
# member = course.course_member(user_id)
teacher_course_groups = course.teacher_course_groups.get_user_groups(user_id)
poll_users = self.all_works
# 有分班权限的统计管理的分班且已发布的学生情况
if teacher_course_groups.exists?
group_ids = teacher_course_groups.pluck(:course_group_id)
poll_users = poll_users.joins("join course_members on poll_users.user_id=course_members.user_id").
where(course_members: {course_group_id: group_ids})
end
poll_users
end
# # 统一设置,为当前老师有权限的分班学生,分班设置,也为当前老师有权限的分班的学生
# def all_poll_users(user_id)
# poll_all_users = poll_users
# group_ids = poll_published_ids(user_id)
# if group_ids.present?
# poll_all_users = poll_all_users.where(user_id: course.students.where(course_group_id: group_ids).select(:user_id).pluck(:user_id).uniq)
# end
# poll_all_users
# end
#当前用户已发布的班级id和试卷分组已发布的班级id的交集
def poll_published_ids(user_id)
current_user_groups = course.teacher_course_ids(user_id)
if unified_setting
if course.none_group_count > 0 #有未分班的,则发布到未发布
un_group_ids = [0]
else
un_group_ids = []
end
(current_user_groups + un_group_ids).uniq #统一设置时为当前用户的分班id
current_user_groups.uniq
# if course.none_group_count > 0 #有未分班的,则发布到未发布
# un_group_ids = [0]
# else
# un_group_ids = []
# end
# (current_user_groups + un_group_ids).uniq #统一设置时为当前用户的分班id
else
ex_group_setting = poll_group_settings.pluck("course_group_id").uniq
ex_group_setting & current_user_groups #当前用户有权限的已发布的分班id #非统一设置时为当前用户有权限的且已发布分班的id
ex_group_setting = poll_group_settings.select(:course_group_id).pluck("course_group_id").uniq
(ex_group_setting & current_user_groups).uniq #当前用户有权限的已发布的分班id #非统一设置时为当前用户有权限的且已发布分班的id
end
end
def get_poll_status(user_id)
user_group = course.course_members.find_by(user_id: user_id, is_active: 1)
if user_group.present?
if user_group.role == "STUDENT" #为学生
is_teacher = false
else
is_teacher = true
end
ex_time = get_poll_times(user_id,is_teacher)
def get_poll_status(user)
if user.student_of_course?(course)
ex_time = get_poll_times(user_id,false)
pb_time = ex_time[:publish_time]
ed_time = ex_time[:end_time]
if pb_time.present? && ed_time.present? && pb_time <= Time.now && ed_time > Time.now
@ -102,32 +119,22 @@ class Poll < ApplicationRecord
#获取问卷的发布时间和截止时间。teacher 为boolean,当为true时表示的是当前为老师
def get_poll_times(user_id,teacher)
if unified_setting
if unified_setting || teacher
pb_time = publish_time
en_time = end_time
else
poll_group_setting = poll_group_settings
if teacher #当前为老师,为设置组的最大值和最小值
user_group = course.teacher_course_groups.get_user_groups(user_id)
user_group_ids = user_group.present? ? user_group.pluck(:course_group_id) : course.course_groups.pluck(:id)
user_poll_group_settings = poll_group_setting.find_in_poll_group("course_group_id",user_group_ids)
pb_time_min = user_poll_group_settings.publish_time_present.map(&:publish_time)
en_time_max = user_poll_group_settings.end_time_present.map(&:end_time)
pb_time = pb_time_min.size > 0 ? pb_time_min.min : nil
en_time = en_time_max.size > 0 ? en_time_max.max : nil
else
user_group = course.students.find_by(user_id: user_id)
if user_group.present?
user_group_id = user_group.course_group_id
user_p_group_setting = poll_group_setting.find_by(course_group_id: user_group_id)
pb_time = user_p_group_setting.present? ? user_p_group_setting.publish_time : nil
en_time = user_p_group_setting.present? ? user_p_group_setting.end_time : nil
user_group = course.course_members.where(user_id: user_id).select(:course_group_id)
if user_group.exists?
user_group_id = user_group.first&.course_group_id
user_p_group_setting = poll_group_setting.where(course_group_id: user_group_id).select(:publish_time,:end_time)
pb_time = user_p_group_setting.first&.publish_time
en_time = user_p_group_setting.first&.end_time
else
pb_time = nil
en_time = nil
end
end
end
{
"publish_time":pb_time,
"end_time":en_time
@ -136,19 +143,11 @@ class Poll < ApplicationRecord
#判断当前用户的答题状态
def check_user_votes_status(user)
poll_answer_user = poll_users.find_by(user_id: user.id)
# user_poll_status = get_poll_status(user.id)
poll_answer_user = poll_users.where(user_id: user.id).select(:start_at,:end_at,:commit_status)
user_status = 2
if poll_answer_user.present? && (poll_answer_user.start_at.present? || poll_answer_user.end_at.present?) #学生有过答题的,或者立即截止,但学生未做试卷的
user_status = poll_answer_user.commit_status
if poll_answer_user.exists? && (poll_answer_user.first&.start_at.present? || poll_answer_user.first&.end_at.present?) #学生有过答题的,或者立即截止,但学生未做试卷的
user_status = poll_answer_user.first.commit_status
end
#
# if poll_answer_user.present? && poll_answer_user.start_at.blank? && user_poll_status == 3
# # user_status = 4
# user_status = 2 #问卷用户存在,且未开始答题,且问卷已截止时,返回未提交标示
# end
user_status
end

@ -2,4 +2,24 @@ class Repertoire < ApplicationRecord
has_many :sub_repertoires, ->{order(updated_at: :desc)}, :dependent => :destroy
has_many :tag_repertoires, through: :sub_repertoires
has_many :user_interests, dependent: :delete_all
after_create_commit :reset_cache_data
after_update_commit :reset_cache_data
def self.cache_data
Rails.cache.fetch(data_cache_key, expires_in: 1.days) do
Repertoire.select(:id, :name).order(:created_at).as_json
end
end
def self.data_cache_key
'repertoire/cache_data'
end
private
def reset_cache_data
Rails.cache.delete(self.class.data_cache_key)
end
end

@ -52,7 +52,7 @@ class Shixun < ApplicationRecord
end
}
scope :visible, -> { where("status != -1") }
scope :visible, -> { where.not(status: -1) }
scope :published, lambda{ where(status: 2) }
scope :unhidden, lambda{ where(hidden: 0, status: 2) }
scope :field_for_recommend, lambda{ select([:id, :name, :identifier, :myshixuns_count]) }
@ -73,9 +73,8 @@ class Shixun < ApplicationRecord
# 实训用户tag
def user_tags_name(user = User.current)
challenge_ids = challenges.pluck(:id)
user_challenge_ids = user.games.where(challenge_id: challenge_ids, status: 2).pluck(:challenge_id)
ChallengeTag.where(challenge_id: user_challenge_ids).pluck(:name).uniq
Shixun.joins(challenges: [:challenge_tags, :games]).where(games: {status: 2, user_id: user.id}, shixuns: {id:id})
.pluck("challenge_tags.name").uniq
end
# 实训关卡tag
@ -158,13 +157,11 @@ class Shixun < ApplicationRecord
# 实训评分信息
# return [实训评分, 5星评分比例 4星评分比例 3星评分比例 2星评分比例 1星评分比例]
def shixun_preference_info
game_star_info = Game.find_by_sql("select g.star from
(games g left join (myshixuns m join shixuns s on s.id = m.shixun_id) on m.id = g.myshixun_id)
where g.star != 0 and s.id = #{self.id}")
game_star_info = Game.joins(challenge: :shixun).where(shixuns: {id: id}).where.not(games: {star: 0}).pluck(:star)
star_info = []
if game_star_info.present?
5.downto(1) do |i|
star_info << ((game_star_info.select{|s| s.star == i}.count / game_star_info.count.to_f) * 100).round
star_info << ((game_star_info.select{|s| s == i}.count / game_star_info.count.to_f) * 100).round
end
sum = star_info.sum
max = star_info.max
@ -175,7 +172,7 @@ class Shixun < ApplicationRecord
star_info = star_info.map{|s| s == max ? s + 1 : s}
end
cnt = game_star_info.count
sum = game_star_info.sum(&:star)
sum = game_star_info.sum
star_info.unshift((sum / cnt.to_f).round(1))
else
star_info = [5.0, 100, 0, 0, 0, 0]

@ -193,4 +193,19 @@ class StudentWork < ApplicationRecord
def scored?
student_works_scores.where.not(reviewer_role: 3).exists?
end
def work_challenge_score game, score
game_score = 0
adjust_score = challenge_work_scores.where(challenge_id: game.challenge_id).last
if adjust_score.present?
game_score = adjust_score.score
else
setting = homework_common.homework_group_setting user_id
if game.status == 2 && ((game.end_time && game.end_time < setting.end_time) || (homework_common.allow_late && game.end_time && game.end_time < homework_common.late_time))
answer_open_evaluation = homework_common.homework_detail_manual.answer_open_evaluation
game_score = answer_open_evaluation ? score : (game.final_score > 0 ? game.real_score(score) : 0)
end
end
game_score
end
end

@ -31,7 +31,7 @@ class Subject < ApplicationRecord
# 挑战过路径的成员数
def member_count
shixuns.sum(:myshixuns_count)
shixuns.pluck(:myshixuns_count).sum
end
def all_score

@ -115,6 +115,10 @@ class User < ApplicationRecord
has_many :attendances
# 兴趣
has_many :user_interests, dependent: :delete_all
has_many :interests, through: :user_interests, source: :repertoire
# Groups and active users
scope :active, lambda { where(status: STATUS_ACTIVE) }

@ -0,0 +1,4 @@
class UserInterest < ApplicationRecord
belongs_to :user
belongs_to :repertoire
end

@ -14,7 +14,7 @@ class BatchExportShixunReportService
end
def filename
@_filename ||= "#{homework.name}-#{Time.now.strftime('%Y%m%d%H%M%S')}.zip"
@_filename ||= "#{homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
end
def zip

@ -10,7 +10,7 @@ class ExportExercisesService
end
def filename
exercise_export_name = "#{exercise.user.real_name}_#{exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M')}"
exercise_export_name = "#{exercise.user.real_name}_#{exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
"#{exercise_export_name.strip}.zip"
end

@ -316,7 +316,7 @@ class HomeworksService
if work.work_status == 0
is_complete = myshixun_endtime && (myshixun_endtime < setting_time.end_time)
if is_complete || (!homework.allow_late && myshixun.created_at < setting_time.end_time)
if is_complete || (myshixun.created_at < setting_time.end_time && (!homework.allow_late || setting_time.end_time >= Time.now))
work.work_status = 1
elsif homework.allow_late && myshixun.created_at < homework.late_time
work.work_status = 2

@ -1,2 +1,2 @@
json.status 0
json.right_url course_board_messages_path(@course, @course_board)
json.right_url board_messages_path(@course_board)

@ -0,0 +1,13 @@
json.teacher_list_size @teacher_list_size
json.apply_size @applications_size
json.is_admin @is_admin
json.application_list do
json.array! @applications do |application|
json.application_id application.id
json.user_id application.course_message_id
json.name application.application_user.real_name
json.name_link user_path(application.application_user)
json.login application.application_user.login
json.role application.content.to_i == 3 || application.content.to_i == 7 ? "助教" : application.content.to_i == 2 || application.content.to_i == 9 ? "教师" : ""
end
end

@ -4,7 +4,7 @@ wb.styles do |s|
no_wrap_sz = s.add_style :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: false,:horizontal => :center,:vertical => :center }
sz_all = s.add_style :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: true,:horizontal => :center,:vertical => :center }
row_cell = s.add_style :bg_color=> "FAEBDC",:border => { :style => :thin, :color =>"000000" },alignment: {wrap_text: true,:horizontal => :center,:vertical => :center }
blue_cell = s.add_style :bg_color => "FAEBDC", :sz => 10,:height => 20,:b => true, :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: true,:horizontal => :center,:vertical => :center}
blue_cell = s.add_style :bg_color => "FAEBDC", :sz => 10,:height => 25,:b => true, :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: true,:horizontal => :center,:vertical => :center}
#课堂信息摘要
wb.add_worksheet(name:course_info[0]) do |sheet|
@ -32,12 +32,12 @@ wb.styles do |s|
sheet.sheet_view.show_grid_lines = false
sheet_title = activity_level[1]
sheet_content = activity_level[2]
sheet.add_row sheet_title, :style => blue_cell
sheet.add_row sheet_title, :height => 25,:style => blue_cell
if sheet_content.count > 0
sheet_content.each_with_index do |c,index|
c_1 = (index+1)
c_2 = [c_1] + c.values
sheet.add_row c_2, :style => sz_all #用户id
sheet.add_row c_2, :height => 25, :style => sz_all #用户id
end
sheet.column_widths *([20]*sheet.column_info.count)
sheet.column_info.first.width = 8
@ -82,7 +82,7 @@ wb.styles do |s|
sheet_content.each_with_index do |c,index|
c_1 = (index+1)
c_2 = [c_1] + c
sheet.add_row c_2, :style => sz_all #用户id
sheet.add_row c_2, :height => 25,:style => sz_all #用户id
end
end
sheet.column_widths *([15]*sheet.column_info.count)
@ -100,7 +100,7 @@ wb.styles do |s|
sheet.add_row head_title, :style => blue_cell
if content_shixun.count > 0
content_shixun.each do |user|
sheet.add_row user, :style => sz_all
sheet.add_row user, :height => 25,:style => sz_all
end #each_widh_index
end
sheet.column_widths *([20]*sheet.column_info.count)
@ -119,7 +119,7 @@ wb.styles do |s|
sheet.add_row head_title, :style => blue_cell
if content_.count > 0
content_.each do |user|
sheet.add_row user, :style => no_wrap_sz
sheet.add_row user, :height => 25,:style => no_wrap_sz
end #each_widh_index
end
sheet.column_widths *([20]*sheet.column_info.count)
@ -138,7 +138,7 @@ wb.styles do |s|
sheet.add_row head_title, :style => blue_cell
if content_.count > 0
content_.each do |user|
sheet.add_row user, :style => sz_all
sheet.add_row user, :height => 25,:style => sz_all
end #each_widh_index
end
sheet.column_widths *([20]*sheet.column_info.count)
@ -155,7 +155,7 @@ wb.styles do |s|
content_ = task[2]
sheet.add_row task[1], :style => blue_cell
content_.each do |user|
sheet.add_row user, :style => sz_all
sheet.add_row user, :height => 25,:style => sz_all
end #each_widh_index
sheet.column_widths *([20]*sheet.column_info.count)
sheet.column_info.first.width = 12
@ -171,7 +171,7 @@ wb.styles do |s|
content_ = ex[2]
sheet.add_row ex[1], :style => blue_cell
content_.each do |user|
sheet.add_row user, :style => sz_all #用户id
sheet.add_row user, :height => 25,:style => sz_all #用户id
end #each_widh_index
sheet.column_widths *([20]*sheet.column_info.count)
sheet.column_info.first.width = 12

@ -17,14 +17,5 @@ json.teacher_list do
end
end
json.teacher_list_size @teacher_list_size
json.application_list do
json.array! @applications do |application|
json.application_id application.id
json.user_id application.course_message_id
json.name application.application_user.real_name
json.name_link user_path(application.application_user)
json.login application.application_user.login
json.role application.content.to_i == 3 || application.content.to_i == 7 ? "助教" : application.content.to_i == 2 || application.content.to_i == 9 ? "教师" : ""
end
end
json.apply_size @applications_size
json.is_admin @is_admin

@ -9,7 +9,8 @@ json.shixun_id discuss.dis_id
json.hidden discuss.hidden
json.manage current_user.manager_of_shixun?(container)
json.reward discuss.reward
json.game_url discuss.game_url(container, current_user)
#json.game_url discuss.game_url(container, current_user)
json.game_url "/tasks/#{discuss.identifier}" if @manger
# 主贴和回复有一些不同点
if discuss.parent_id
json.can_delete discuss.can_deleted?(current_user)

@ -36,7 +36,7 @@ elsif student_status == 1
json.question_status question_status
end
exercise_status = exercise.get_exercise_status(ex_answerer.id)
exercise_status = exercise.get_exercise_status(ex_answerer)
#当前为老师,或为学生,但在试卷截止后且答案选择公开的
if is_teacher_or == 1 || (exercise_status == 3 && exercise.answer_open)

@ -2,13 +2,12 @@
if @exercises_count > 0
json.exercises do
json.array! @exercises do |exercise|
ex_index = exercise_index_show(exercise,@course,@is_teacher_or,@current_user_)
json.extract! exercise, :id, :exercise_name,:is_public,:created_at
if @is_teacher_or == 2
second_left = get_exercise_left_time(exercise,@current_user_)
json.time second_left.present? ? (second_left / 60) : nil
end
ex_index = exercise_index_show(exercise,@course,@is_teacher_or,@current_user_)
json.exercise_status ex_index[:ex_status]
json.lock_status ex_index[:lock_icon]
json.publish_time ex_index[:publish_time] # 试卷的发布时间

@ -1,10 +1,6 @@
json.course_identity @identity
json.course_public @course.is_public == 1
json.is_end @course.is_end
json.all_count @all_count
json.published_count @published_count
json.unpublished_count @all_count - @published_count
json.task_count @task_count
json.tasks @tasks.each do |task|
# task_private = @identity > Course::STUDENT && !task.is_public
@ -29,3 +25,7 @@ json.tasks @tasks.each do |task|
end
end
json.all_count @all_count
json.published_count @published_count
json.unpublished_count @all_count - @published_count
json.task_count @task_count

@ -34,6 +34,7 @@ if @task.published? || @user_course_identity < Course::STUDENT
json.work_count @work_count
json.all_work_count @all_work_count
end
# 学生数据
json.work_lists do
json.array! @work_list do |work|
@ -41,7 +42,7 @@ if @task.published? || @user_course_identity < Course::STUDENT
json.user_id work.user.id
json.name work.user.real_name
json.student_id work.user.student_id
json.class_grouping_name work.class_grouping_name
json.class_grouping_name @students.select{|student| student.user_id == work.user_id}.first.try(:course_group_name)
json.ultimate_score work.ultimate_score
if @task.have_grouping?
json.grouping_name work.grouping_name
@ -58,7 +59,7 @@ if @task.published? || @user_course_identity < Course::STUDENT
end
json.late_penalty work.late_penalty if @task.allow_late
json.final_score work_final_score work, @current_user, @user_course_identity
json.assign work.assign_power?(@user_course_identity)
json.assign @assign_power
json.view_work @view_work || @current_user.id == work.user_id
end
end

@ -5,10 +5,12 @@ wb.styles do |s|
blue_cell = s.add_style :bg_color => "FAEBDC", :sz => 10,:height => 20,:b => true, :border => { :style => :thin, :color =>"000000" },:alignment => {:horizontal => :center}
wb.add_worksheet(:name =>"学生成绩") do |sheet|
sheet.add_row table_columns, :style => blue_cell
sheet.add_row table_columns,:height =>20, :style => blue_cell
sheet.column_info.first.width = 12
task_users.each do |user|
sheet.add_row user, :style => sz_all
sheet.add_row user, :height =>20, :style => sz_all
end #each_widh_index
sheet.column_widths *([25]*sheet.column_info.count)
sheet.column_info.first.width = 12
end #add_worksheet
end

@ -3,6 +3,8 @@ json.task_type @task.task_type
json.work_id @work.id
json.description @work.description
json.user_name @task_user.real_name
json.max_num @task.max_num
json.min_num @task.min_num
json.attachments @work.attachments do |atta|
json.partial! "attachments/attachment_simple", locals: {attachment: atta, delete: @work.delete_atta(atta)}

@ -6,4 +6,6 @@ if @task.task_type == 2
json.user_id @user.id
json.user_student_id @user.student_id
json.group_name @course.course_member(@user.id).try(:course_group_name)
json.max_num @task.max_num
json.min_num @task.min_num
end

@ -2,18 +2,26 @@ json.course_id @course.id
json.course_name @course.name
json.homework_common_id @homework.id
json.homework_common_name @homework.name
json.work_id @student_work.id
json.work_name @student_work.name
json.username @user.full_name
json.user_id @user.id
json.user_login @user.login
json.work_score @student_work.work_score
if @student_work.ultimate_score
json.adjust_score @student_work.work_score < 0 ? 0 : number_with_precision(@student_work.work_score, precision: 1)
else
json.final_score @student_work.final_score
json.late_penalty @student_work.late_penalty
json.score @student_work.work_score < 0 ? 0 : number_with_precision(@student_work.work_score, precision: 1)
if @homework.work_efficiency
json.eff_score_full number_with_precision @homework.eff_score, precision: 1
json.eff_score number_with_precision @student_work.eff_score, precision: 1
json.challenge_score_full number_with_precision (100 - @homework.eff_score), precision: 1
json.challenge_score number_with_precision @student_work.final_score, precision: 1
end
end
json.challenge_list do
@ -25,6 +33,7 @@ json.challenge_list do
json.final_score challenge[:final_score]
json.username challenge[:username]
json.all_score challenge[:all_score]
json.copy_user_id challenge[:copy_user_id]
json.copy_username challenge[:copy_username]
json.copy_end_time challenge[:copy_end_time]
json.code_rate challenge[:code_rate]

@ -25,14 +25,16 @@ json.homeworks @homework_commons.each do |homework|
if @user_course_identity < Course::STUDENT
if homework.homework_type == "practice"
json.shixun_identifier homework.shixuns.first.try(:identifier)
json.shixun_identifier homework.shixuns.take.try(:identifier)
end
elsif @user_course_identity == Course::STUDENT
if homework.homework_type == "practice"
shixun = homework.shixuns.take
# json.challenge_count homework.shixuns.first.try(:challenges_count).to_i
current_myshixun = homework.user_work(@user.id).try(:myshixun)
myshixun = current_myshixun ? current_myshixun : shixun.myshixuns.find_by(user_id: @user.id)
# json.game_count current_myshixun ? current_myshixun.exec_count : 0
json.task_operation task_operation_url(current_myshixun, homework.shixuns.first)
json.task_operation task_operation_url(myshixun, shixun)
else
work = homework.user_work(@user.id)
json.work_id work.try(:id)

@ -1,18 +1,4 @@
json.polls_counts do
json.polls_total_counts @polls_count #全部问卷数
json.polls_all_counts @polls_select_count #选择后的问卷数
json.polls_unpublish_counts @polls_unpublish_counts #未发布问卷数
json.polls_published_counts @polls_published_counts #已发布问卷数
# json.polls_ended_counts @polls_ended_counts #已截止问卷数
json.left_banner_id @left_banner_id
json.left_banner_name @left_banner_name
end
json.course_types do
json.course_status @course_status # 课堂的当前是否结束如结束则为1否则为0
json.course_is_public @course_is_public #判断课堂是否为公开,只有公开课才有设为公开的按钮
json.user_permission @is_teacher_or # 当前用户存在且为课堂教师/管理员/超级管理员时为1 课堂成员为2否则为0
end
if @polls_count > 0
json.polls do
@ -32,3 +18,17 @@ else
json.polls []
end
json.polls_counts do
json.polls_total_counts @polls_count #全部问卷数
json.polls_all_counts @polls_select_count #选择后的问卷数
json.polls_unpublish_counts @polls_unpublish_counts #未发布问卷数
json.polls_published_counts @polls_published_counts #已发布问卷数
json.left_banner_id @left_banner_id
json.left_banner_name @left_banner_name
end
json.course_types do
json.course_status @course_status # 课堂的当前是否结束如结束则为1否则为0
json.course_is_public @course_is_public #判断课堂是否为公开,只有公开课才有设为公开的按钮
json.user_permission @is_teacher_or # 当前用户存在且为课堂教师/管理员/超级管理员时为1 课堂成员为2否则为0
end

@ -0,0 +1,4 @@
json.status 0
json.message "调分成功"
json.work_score number_with_precision @work.work_score, 1
json.challenge_score number_with_precision @work.final_score, 1

@ -1,6 +1,7 @@
json.homework_common_id @homework.id
json.category @homework.category_info
json.course_name @course.name
json.work_id @work.id
if @shixun
json.shixun_name @shixun.name
# 总体评价
@ -8,9 +9,15 @@ if @shixun
json.myself_experience @work.myshixun.try(:total_score)
json.total_experience @shixun.all_score
json.work_score number_with_precision @work.work_score, precision: 1
json.all_work_score 100
json.all_work_score number_with_precision 100, precision: 1
json.time_consuming @work.myshixun_consume
json.evaluate_count @user_evaluate_count.to_i
if @homework.work_efficiency
json.eff_score_full number_with_precision @homework.eff_score, precision: 1
json.eff_score number_with_precision @work.eff_score, precision: 1
json.challenge_score_full number_with_precision (100 - @homework.eff_score), precision: 1
json.challenge_score number_with_precision @work.final_score, precision: 1
end
# 阶段成绩
json.stage_list do
@ -24,6 +31,10 @@ if @shixun
json.myself_experience game.final_score
json.experience game.challenge.all_score
json.complete_status game_status(game, @homework)
json.challenge_id game.challenge_id
challenge_score = @homework.challenge_score game.challenge_id
json.game_score_full challenge_score
json.game_score @work.work_challenge_score game, challenge_score
end
end

@ -1,4 +1,11 @@
'zh-CN':
activerecord:
models:
user: '用户'
attributes:
user:
phone: '手机号'
mail: '邮箱'
user:
identity:
teacher: 教师

@ -69,6 +69,8 @@ Rails.application.routes.draw do
resources :tidings, only: [:index]
scope module: :users do
resource :interest, only: [:create]
resources :accounts, only: [:show, :update] do
resource :phone_bind, only: [:create]
resource :email_bind, only: [:create]
@ -293,6 +295,7 @@ Rails.application.routes.draw do
get 'course_group_list'
get 'add_teacher_popup'
get 'teachers'
get 'apply_teachers'
get 'graduation_group_list'
get 'top_banner'
get 'left_banner'
@ -660,6 +663,8 @@ Rails.application.routes.draw do
get :export_exercises
end
end
resources :repertoires, only: [:index]
end
#git 认证回调

@ -3,7 +3,4 @@
:logfile: log/sidekiq.log
:queues:
- [default, 3]
- [score, 4]
- [evaluation_comment, 5]
- [course_member, 6]
- [notify, 100]

@ -0,0 +1,8 @@
class CreateUserInterests < ActiveRecord::Migration[5.2]
def change
create_table :user_interests do |t|
t.references :user
t.references :repertoire
end
end
end

@ -0,0 +1,5 @@
class AddIndexForRunCodeMessage < ActiveRecord::Migration[5.2]
def change
add_index :run_code_messages, :game_id
end
end

@ -0,0 +1,11 @@
class ModifyChallengeIdForDiscusses < ActiveRecord::Migration[5.2]
def change
discusses = Discuss.where(challenge_id: nil)
discusses.each do |dis|
challenge_id = Shixun.find(dis.dis_id).challenges.first.id
dis.update_column(:challenge_id, challenge_id)
end
add_index :discusses, :challenge_id
end
end
Loading…
Cancel
Save