diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 656dba0ae..233d94c8f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -240,7 +240,7 @@ class ApplicationController < ActionController::Base uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous")) if !User.current.logged? && Rails.env.development? - User.current = User.find 12 + User.current = User.find 1 end diff --git a/app/controllers/exercise_questions_controller.rb b/app/controllers/exercise_questions_controller.rb index 4ce18b59d..e6f17778a 100644 --- a/app/controllers/exercise_questions_controller.rb +++ b/app/controllers/exercise_questions_controller.rb @@ -357,20 +357,20 @@ class ExerciseQuestionsController < ApplicationController #当试卷已发布时(试卷的总状态),当标准答案修改时,如有已提交的学生,需重新计算分数. if standard_answer_change && @exercise.exercise_status >= Exercise::PUBLISHED - ex_users_committed = @exercise.exercise_users.exercise_user_committed - if ex_users_committed.size > 0 - ex_users_committed.each do |ex_user| - update_objective_score = update_single_score(@exercise_question,ex_user.user_id,standard_answer) - if update_objective_score != 0 - objective_score = ex_user.objective_score - new_objective_score = objective_score + update_objective_score - total_score = ex_user.score + update_objective_score - total_score = total_score < 0.0 ? 0.0 : total_score - ex_user.update_attributes(objective_score:new_objective_score,score:total_score) - end - end - end - normal_status(0,"试卷更新成功,因标准答案修改,需重新计算学生成绩!") + # ex_users_committed = @exercise.exercise_users.exercise_user_committed + # if ex_users_committed.size > 0 + # ex_users_committed.each do |ex_user| + # update_objective_score = update_single_score(@exercise_question,ex_user.user_id,standard_answer) + # if update_objective_score != 0 + # objective_score = ex_user.objective_score + # new_objective_score = objective_score + update_objective_score + # total_score = ex_user.score + update_objective_score + # total_score = total_score < 0.0 ? 0.0 : total_score + # ex_user.update_attributes(objective_score:new_objective_score,score:total_score) + # end + # end + # end + normal_status(3,"修改了标准答案\n是否重新计算学生答题的成绩?") else normal_status(0,"试卷更新成功!") end @@ -383,6 +383,31 @@ class ExerciseQuestionsController < ApplicationController end end + def update_scores + ActiveRecord::Base.transaction do + begin + standard_answer = params[:standard_answers] + ex_users_committed = @exercise.exercise_users.exercise_user_committed + if ex_users_committed.size > 0 + ex_users_committed.each do |ex_user| + update_objective_score = update_single_score(@exercise_question,ex_user.user_id,standard_answer) + if update_objective_score != 0 + objective_score = ex_user.objective_score + new_objective_score = objective_score + update_objective_score + total_score = ex_user.score + update_objective_score + total_score = total_score < 0.0 ? 0.0 : total_score + ex_user.update_attributes(objective_score:new_objective_score,score:total_score) + end + end + end + normal_status(0,"学生成绩更新成功") + rescue Exception => e + uid_logger_error(e.message) + tip_exception("答案删除失败!") + end + end + end + # 试卷问题的上下移动 def up_down ActiveRecord::Base.transaction do diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index eb3576f24..b95d0d2b4 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -992,13 +992,15 @@ class HomeworkCommonsController < ApplicationController @total_count = @subjects.size if reorder != "myshixun_count" - @subjects = @subjects.page(page).per(limit).includes(:shixuns, user: [user_extension: :school]) + # @subjects = @subjects.page(page).per(limit).includes(:shixuns, user: [user_extension: :school]) + @subjects = @subjects.page(page).per(limit).includes(:shixuns) else @subjects = @subjects[offset, limit] unless @subjects.blank? subject_ids = @subjects.pluck(:id) order_ids = subject_ids.size > 0 ? subject_ids.join(',') : -1 - @subjects = Subject.where(id: subject_ids).order("field(id,#{order_ids})").includes(:shixuns, user: [user_extension: :school]) + # @subjects = Subject.where(id: subject_ids).order("field(id,#{order_ids})").includes(:shixuns, user: [user_extension: :school]) + @subjects = Subject.where(id: subject_ids).order("field(id,#{order_ids})").includes(:shixuns) end end end diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb index 6c5481787..a62707536 100644 --- a/app/controllers/subjects_controller.rb +++ b/app/controllers/subjects_controller.rb @@ -87,14 +87,6 @@ class SubjectsController < ApplicationController @courses = @subject.courses if @subject.excellent @members = @subject.subject_members.includes(:user) - shixuns = @subject.shixuns.published.pluck(:id) - challenge_ids = Challenge.where(shixun_id: shixuns).pluck(:id) - # 实训路径中的所有实训标签 - @tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq - # 用户获取的实训标签 - # @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq - @user_tags = user_shixun_tags challenge_ids, @user.id - @my_subject_progress = @subject.my_subject_progress # 访问数变更 @subject.increment!(:visits) end diff --git a/app/helpers/exercises_helper.rb b/app/helpers/exercises_helper.rb index 7caed7fae..0b18ff6f8 100644 --- a/app/helpers/exercises_helper.rb +++ b/app/helpers/exercises_helper.rb @@ -461,45 +461,50 @@ module ExercisesHelper end elsif q.question_type == 5 #实训题时,主观题这里不评分 q.exercise_shixun_challenges&.each do |exercise_cha| - game = Game.user_games(user.id,exercise_cha.challenge_id)&.first #当前用户的关卡 - if game.present? - exercise_cha_score = 0.0 - answer_status = 0 - # if game.status == 2 && game.final_score >= 0 - if game.final_score > 0 - exercise_cha_score = game.real_score(exercise_cha.question_score) - # exercise_cha_score = exercise_cha.question_score #每一关卡的得分 - answer_status = 1 - end - ex_shixun_answer_content = answers_content&.where(exercise_shixun_challenge_id: exercise_cha.id) - code = nil - if exercise_cha.challenge&.path.present? - cha_path = challenge_path(exercise_cha.challenge&.path) - game_challenge = game.game_codes.search_challenge_path(cha_path)&.first - if game_challenge.present? - game_code = game_challenge - code = game_code.try(:new_code) + user_shixun_score = exercise_cha&.exercise_shixun_answers&.where(user_id:user.id,exercise_question_id:q.id) + if user_shixun_score.present? + score5 += user_shixun_score&.first.score + else + game = Game.user_games(user.id,exercise_cha.challenge_id)&.first #当前用户的关卡 + if game.present? + exercise_cha_score = 0.0 + answer_status = 0 + # if game.status == 2 && game.final_score >= 0 + if game.final_score > 0 + exercise_cha_score = game.real_score(exercise_cha.question_score) + # exercise_cha_score = exercise_cha.question_score #每一关卡的得分 + answer_status = 1 + end + ex_shixun_answer_content = answers_content&.where(exercise_shixun_challenge_id: exercise_cha.id) + code = nil + if exercise_cha.challenge&.path.present? + cha_path = challenge_path(exercise_cha.challenge&.path) + game_challenge = game.game_codes.search_challenge_path(cha_path)&.first + if game_challenge.present? + game_code = game_challenge + code = game_code.try(:new_code) + else + code = git_fle_content(game.myshixun.repo_path,cha_path) + end + end + if ex_shixun_answer_content.blank? #把关卡的答案存入试卷的实训里 + ### Todo 实训题的_shixun_details里的代码是不是直接从这里取出就可以了?涉及到code的多个版本库的修改 + sx_option = { + :exercise_question_id => q.id, + :exercise_shixun_challenge_id => exercise_cha.id, + :user_id => user.id, + :score => exercise_cha_score.round(1), + :answer_text => code, + :status => answer_status + } + ExerciseShixunAnswer.create(sx_option) else - code = git_fle_content(game.myshixun.repo_path,cha_path) + ex_shixun_answer_content.first.update_attributes(score:exercise_cha_score.round(1),answer_text:code) end - end - if ex_shixun_answer_content.blank? #把关卡的答案存入试卷的实训里 - ### Todo 实训题的_shixun_details里的代码是不是直接从这里取出就可以了?涉及到code的多个版本库的修改 - sx_option = { - :exercise_question_id => q.id, - :exercise_shixun_challenge_id => exercise_cha.id, - :user_id => user.id, - :score => exercise_cha_score.round(1), - :answer_text => code, - :status => answer_status - } - ExerciseShixunAnswer.create(sx_option) + score5 += exercise_cha_score else - ex_shixun_answer_content.first.update_attributes(score:exercise_cha_score.round(1),answer_text:code) + score5 += 0.0 end - score5 += exercise_cha_score - else - score5 += 0.0 end end end diff --git a/app/jobs/create_student_work_job.rb b/app/jobs/create_student_work_job.rb new file mode 100644 index 000000000..1fd9a9b00 --- /dev/null +++ b/app/jobs/create_student_work_job.rb @@ -0,0 +1,21 @@ +class CreateStudentWorkJob < ApplicationJob + queue_as :default + + def perform(homework_id) + homework = HomeworkCommon.find_by(id: homework_id) + course = homework&.course + return if homework.blank? || course.blank? + + attrs = %i[homework_common_id user_id created_at updated_at] + + same_attrs = {homework_common_id: homework.id} + + StudentWork.bulk_insert(*attrs) do |worker| + student_ids = course.students.pluck(:user_id) + + student_ids.each do |user_id| + worker.add same_attrs.merge(user_id: user_id) + end + end + end +end diff --git a/app/services/homeworks_service.rb b/app/services/homeworks_service.rb index 78be3b8f9..64aec92c6 100644 --- a/app/services/homeworks_service.rb +++ b/app/services/homeworks_service.rb @@ -15,7 +15,8 @@ class HomeworksService homework_detail_manual.save! if homework_detail_manual HomeworkCommonsShixun.create!(homework_common_id: homework.id, shixun_id: shixun.id) HomeworksService.new.create_shixun_homework_cha_setting(homework, shixun) - HomeworksService.new.create_works_list(homework, course) + CreateStudentWorkJob.perform_later(homework.id) + # HomeworksService.new.create_works_list(homework, course) end homework end diff --git a/app/views/homework_commons/subjects.json.jbuilder b/app/views/homework_commons/subjects.json.jbuilder index 257fcc9d5..f24ff2097 100644 --- a/app/views/homework_commons/subjects.json.jbuilder +++ b/app/views/homework_commons/subjects.json.jbuilder @@ -6,12 +6,12 @@ end json.subject_list @subjects do |subject| json.subject_id subject.id json.subject_name subject.name - json.challenge_tags subject.shixun_tags + # json.challenge_tags subject.shixun_tags json.shixun_count subject.shixuns.unhidden.size json.myshixun_count subject.shixuns.pluck(:myshixuns_count).sum - json.creator subject.user&.full_name - json.creator_login subject.user&.login - json.school subject.user&.school_name + # json.creator subject.user&.full_name + # json.creator_login subject.user&.login + # json.school subject.user&.school_name end json.subjects_count @total_count \ No newline at end of file diff --git a/app/views/subjects/show.json.jbuilder b/app/views/subjects/show.json.jbuilder index ec76b5a2d..53e76a96f 100644 --- a/app/views/subjects/show.json.jbuilder +++ b/app/views/subjects/show.json.jbuilder @@ -23,26 +23,4 @@ if @subject.excellent json.course_identity @user.course_identity(course) json.course_status subject_course_status course end -end - - -json.members @members do |member| - json.partial! 'subject_member', locals: { user: member.user } - json.role member.role -end - -# 技能标签 -json.tags @tags do |tag| - unless tag.blank? - json.tag_name tag - json.status @user_tags.include?(tag) - end -end - -# 我的进展 -json.progress do - json.my_score @subject.my_subject_score - json.all_score @subject.all_score - json.learned @subject.my_subject_progress - json.time @subject.my_consume_time end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 035b86d5f..de4f46a40 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -603,6 +603,7 @@ Rails.application.routes.draw do post :up_down post :delete_answer post :adjust_score + post :update_scores end resource :exercise_answers,only:[:create,:destroy] end diff --git a/db/migrate/20190822022306_add_exercise_user_update.rb b/db/migrate/20190822022306_add_exercise_user_update.rb index 223ee520b..7a8784c30 100644 --- a/db/migrate/20190822022306_add_exercise_user_update.rb +++ b/db/migrate/20190822022306_add_exercise_user_update.rb @@ -1,19 +1,39 @@ class AddExerciseUserUpdate < ActiveRecord::Migration[5.2] - include ExercisesHelper - def change - # exs = Exercise.all.is_exercise_published.where("publish_time > ?",(Time.now - 2.months)).includes(:exercise_questions,:exercise_users) - # exs.each do |ex| - # ex_users = ex.exercise_users.exercise_user_committed.where("end_at is not null and end_at > ?",(Time.now - 2.months)) - # if ex_users.present? - # ex_users.each do |ex_user| - # calculate_score = calculate_student_score(ex,ex_user.user)[:total_score] - # subjective_score = ex_user.subjective_score - # total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score - # total_score = calculate_score + total_score_subjective_score - # ex_user.update_attributes(score:total_score,objective_score:calculate_score) - # puts ex_user.id - # end - # end - # end - end + + # include ExercisesHelper + # def change + # #2019,8,22添加 + # two_months = Time.now - 2.months + # exs = Exercise.all.is_exercise_published.where("publish_time > ?",two_months).includes(:exercise_questions,:exercise_users) + # exs.each do |ex| + # if ex.exercise_questions.where("created_at < ?",Time.now - 1.month).pluck(:question_type).include?(1) #含有多选题,且是1个月前创建的才更新 + # ex_users = ex.exercise_users.exercise_user_committed.where("end_at is not null and end_at > ?",two_months) + # if ex_users.exists? + # ex_users.each do |ex_user| + # calculate_score = calculate_student_score(ex,ex_user.user)[:total_score] + # subjective_score = ex_user.subjective_score + # total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score + # total_score = calculate_score + total_score_subjective_score + # ex_user.update_attributes(score:total_score,objective_score:calculate_score) + # puts ex_user.id + # end + # end + # end + # end + # + # #1936的试卷成绩有问题。 + # # #https://www.educoder.net/courses/2935/exercises/1936/users/pizfnr5ts + # ex_special = Exercise.find_by_id(1936) + # ex_special_users = ex_special.exercise_users.exercise_user_committed.where("end_at is not null and end_at > ?",two_months) + # if ex_special.present? && ex_special_users.exists? + # ex_special_users.each do |ex_user| + # calculate_score = calculate_student_score(ex_special,ex_user.user)[:total_score] + # subjective_score = ex_user.subjective_score + # total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score + # total_score = calculate_score + total_score_subjective_score + # ex_user.update_attributes(score:total_score,objective_score:calculate_score) + # puts ex_user.id + # end + # end + # end end diff --git a/db/migrate/20190823023738_change_exericse_1936_scores.rb b/db/migrate/20190823023738_change_exericse_1936_scores.rb index 202909276..ea3f66182 100644 --- a/db/migrate/20190823023738_change_exericse_1936_scores.rb +++ b/db/migrate/20190823023738_change_exericse_1936_scores.rb @@ -1,9 +1,10 @@ class ChangeExericse1936Scores < ActiveRecord::Migration[5.2] + include ExercisesHelper def change #1936的试卷成绩有问题。 # #https://www.educoder.net/courses/2935/exercises/1936/users/pizfnr5ts ex_special = Exercise.find_by_id(1936) - ex_special_users = ex_special.exercise_users.exercise_user_committed.where("end_at is not null and end_at > ?",Time.now - 2.months) + ex_special_users = ex_special&.exercise_users&.exercise_user_committed&.where("end_at is not null and end_at > ?",Time.now - 2.months) if ex_special.present? && ex_special_users.exists? ex_special_users.each do |ex_user| calculate_score = calculate_student_score(ex_special,ex_user.user)[:total_score] diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js index 43be980ed..d2b218f3d 100644 --- a/public/react/src/modules/courses/boards/BoardsNew.js +++ b/public/react/src/modules/courses/boards/BoardsNew.js @@ -17,6 +17,7 @@ import {getUploadActionUrl, bytesToSize, uploadNameSizeSeperator, appendFileSize const confirm = Modal.confirm; const $ = window.$ const { Option } = Select; +const MAX_TITLE_LENGTH = 60 // https://lanhuapp.com/web/#/item/project/board/detail?pid=a3bcd4b1-99ce-4e43-8ead-5b8b0a410807&project_id=a3bcd4b1-99ce-4e43-8ead-5b8b0a410807&image_id=71072679-b925-4824-aceb-4649535e3652 class BoardsNew extends Component{ constructor(props){ @@ -27,7 +28,7 @@ class BoardsNew extends Component{ this.state = { fileList: [], boards: [], - title_num: 60 + title_num: 0 } } addSuccess = () => { @@ -95,7 +96,7 @@ class BoardsNew extends Component{ } }) - this.setState({ fileList: _fileList, board_name: data.board_name, title_num: 60 - parseInt(data.subject.length) }) + this.setState({ fileList: _fileList, board_name: data.board_name, title_num: parseInt(data.subject.length) }) } } }) @@ -233,9 +234,15 @@ class BoardsNew extends Component{ changeTitle=(e)=>{ console.log(e.target.value.length); this.setState({ - title_num: 60 - parseInt(e.target.value.length) + title_num: parseInt(e.target.value.length) }) } + goBack = () => { + // this.props.history.goBack() + const courseId=this.props.match.params.coursesId; + const boardId = this.props.match.params.boardId + this.props.toListPage(courseId, boardId) + } render() { let { addGroup, fileList, course_id, title_num } = this.state; const { getFieldDecorator } = this.props.form; @@ -309,8 +316,8 @@ class BoardsNew extends Component{
{this.isEdit ? "编辑" : "新建"}帖子 this.props.history.goBack()}> - {/*返回*/} + onClick={this.goBack}> + 返回
{/* notRequired */} @@ -339,11 +346,11 @@ class BoardsNew extends Component{ rules: [{ required: true, message: '请输入标题', }, { - max: 60, message: '最大限制为60个字符', + max: MAX_TITLE_LENGTH, message: `最大限制为${MAX_TITLE_LENGTH}个字符`, }], })( - + )} diff --git a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js index 65cda33a9..bd1cafaa1 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkDetailIndex.js @@ -75,15 +75,15 @@ class CommonWorkDetailIndex extends Component{ }) } goback = () => { - // let workId=this.props.match.params.workId; + let workId=this.props.match.params.workId; // - // if ( window.location.pathname.indexOf('appraise') == -1) { - // let category_id= this.state.category.category_id; - // this.props.toListPage(this.props.match.params, category_id) - // } else { - // this.props.toWorkListPage(this.props.match.params, workId) - // } - this.props.history.goBack() + if ( window.location.pathname.indexOf('appraise') == -1) { + let category_id= this.state.category.category_id; + this.props.toListPage(this.props.match.params, category_id) + } else { + this.props.toWorkListPage(this.props.match.params, workId) + } + // this.props.history.goBack() } // 补交附件 diff --git a/public/react/src/modules/courses/busyWork/NewWork.js b/public/react/src/modules/courses/busyWork/NewWork.js index 410d12a3f..83e792d68 100644 --- a/public/react/src/modules/courses/busyWork/NewWork.js +++ b/public/react/src/modules/courses/busyWork/NewWork.js @@ -9,6 +9,7 @@ import CBreadcrumb from '../common/CBreadcrumb' const confirm = Modal.confirm; const $ = window.$ +const MAX_TITLE_LENGTH = 60; class NewWork extends Component{ constructor(props){ super(props); @@ -17,7 +18,7 @@ class NewWork extends Component{ this.state={ title_value:"", - title_num:60, + title_num: 0, contentFileList: [], answerFileList: [], workLoaded: false, @@ -91,7 +92,7 @@ class NewWork extends Component{ // course_id: data.course_id, // course_name: data.course_name, // category: data.category, - title_num: 60 - parseInt(data.name.length), + title_num: parseInt(data.name.length), workLoaded: true, init_min_num: data.min_num, init_max_num: data.max_num, @@ -125,7 +126,7 @@ class NewWork extends Component{ changeTitle=(e)=>{ console.log(e.target.value.length); this.setState({ - title_num: 60 - parseInt(e.target.value.length) + title_num: parseInt(e.target.value.length) }) } handleSubmit = () => { @@ -398,7 +399,7 @@ class NewWork extends Component{ required: true, message: '请输入标题' }], })( - + )}