From 554f88525e6a41d405c7b9fe1dd89dd43ce45ccd Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 31 Jul 2025 15:32:10 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E7=AB=9E=E8=B5=9B=E6=89=93=E6=A6=9C?= =?UTF-8?q?=E9=83=BD=E6=8C=89=E9=98=B6=E6=AE=B5=E4=BF=9D=E5=AD=98=E6=89=80?= =?UTF-8?q?=E6=9C=89=E6=89=93=E5=88=86=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../competition_infos_controller.rb | 7 ++-- app/jobs/competition_auto_score_new_job.rb | 39 ++++++++----------- app/models/competition_user.rb | 12 +++--- 3 files changed, 26 insertions(+), 32 deletions(-) diff --git a/app/controllers/competition_infos_controller.rb b/app/controllers/competition_infos_controller.rb index c496ced31..e069209ef 100644 --- a/app/controllers/competition_infos_controller.rb +++ b/app/controllers/competition_infos_controller.rb @@ -410,8 +410,7 @@ class CompetitionInfosController < ApplicationController stage = competition_user.ext5 # 作品驳回时得分清0 if old_status.to_i == 3 && params[:status].to_i ==2 - stage_score = competition_user.competition_user_scores.find_by(stage: stage.to_i) - stage_score.update_attributes!(score: 0, last_score: 0) if stage_score.present? + competition_user.competition_user_scores.where(stage: stage.to_i).update_all(score: 0, last_score: 0) competition_user.update_attributes!(score: 0) cache_key = "limit_forbid_control:#{@competition_info.identifier}:competition_api_score:#{competition_user.id}-#{stage}" Rails.cache.delete(cache_key) @@ -547,6 +546,8 @@ class CompetitionInfosController < ApplicationController else Rails.cache.write(cache_key, count_control.to_i + 1, expires_in: 5.minutes) end + elsif @competition_info.identifier.to_s == "zstp2025" + return normal_status(-1, "打分已达上限5次") if competition_user.competition_user_scores.count >= 5 else api_score_control = LimitForbidControl::CompetitionApiScore.new(competition_user.id) return normal_status(-1, "今日打分已达上限,请明日再试") if api_score_control.forbid? @@ -626,7 +627,7 @@ class CompetitionInfosController < ApplicationController @stage = 1 end if @stage.present? - competition_users = @competition_info.competition_users.joins(:competition_user_scores) + competition_users = @competition_info.competition_users.select("distinct competition_users.*").joins(:competition_user_scores) .where("competition_users.status = 3") .where("competition_user_scores.stage = ? ", @stage.to_i) .where("competition_user_scores.score > 0") diff --git a/app/jobs/competition_auto_score_new_job.rb b/app/jobs/competition_auto_score_new_job.rb index 4d61cb261..cb0e12269 100644 --- a/app/jobs/competition_auto_score_new_job.rb +++ b/app/jobs/competition_auto_score_new_job.rb @@ -1,13 +1,12 @@ class CompetitionAutoScoreNewJob < ApplicationJob queue_as :default - def perform(competition_user_id, api_url, filePath, stage=nil) + def perform(competition_user_id, api_url, filePath, stage = 1) competition_user = CompetitionUser.find competition_user_id - if stage.present? - stage_score = competition_user.competition_user_scores.find_or_initialize_by(stage: stage.to_i) - stage_score.api_status = 1 - stage_score.save - end + stage_score = competition_user.competition_user_scores.new(stage: stage.to_i) + stage_score.api_status = 1 + stage_score.save + # 开始打分 domain = EduSetting.get("auto_score_api_url") || "http://114.116.228.69:8888" url = api_url || "/script/eye" params = { "filePath" => "#{filePath}", "userId" => competition_user.user_id } @@ -42,24 +41,18 @@ class CompetitionAutoScoreNewJob < ApplicationJob # 取最高分 competition_user.score = score if score.to_f > competition_user.score.to_f # data["repeatTripleSet"] if data["repeatTripleSet"].present? - if stage.present? - stage_score = competition_user.competition_user_scores.find_or_initialize_by(stage: stage.to_i) - stage_score.score = score if score.to_f > stage_score.score.to_f - stage_score.created_at = Time.now - stage_score.last_score = score - stage_score.api_status = status - stage_score.api_result = data.to_json - stage_score.save - end + stage_score.score = score + stage_score.created_at = Time.now + stage_score.last_score = 0.to_f + stage_score.api_status = status + stage_score.api_result = data.to_json + stage_score.save else - if stage.present? - stage_score = competition_user.competition_user_scores.find_or_initialize_by(stage: stage.to_i) - stage_score.created_at = Time.now - stage_score.last_score = 0.to_f - stage_score.api_status = status - stage_score.api_result = data.to_json - stage_score.save - end + stage_score.created_at = Time.now + stage_score.last_score = 0.to_f + stage_score.api_status = status + stage_score.api_result = data.to_json + stage_score.save end competition_user.api_status = status competition_user.api_result = data.to_json diff --git a/app/models/competition_user.rb b/app/models/competition_user.rb index a636ca6d9..c8c205d21 100644 --- a/app/models/competition_user.rb +++ b/app/models/competition_user.rb @@ -109,18 +109,18 @@ class CompetitionUser < ApplicationRecord end def stage_score(stage) - competition_user_score = self.competition_user_scores.find_by(stage: stage.to_i) - competition_user_score.blank? ? 0 : competition_user_score.score.to_f + competition_user_scores = self.competition_user_scores.where(stage: stage.to_i).order(score: :desc) + competition_user_scores.blank? ? 0 : competition_user_scores.first.score.to_f end def stage_last_score(stage) - competition_user_score = self.competition_user_scores.find_by(stage: stage.to_i) - competition_user_score.blank? ? 0 : competition_user_score.last_score.to_f + competition_user_scores = self.competition_user_scores.where(stage: stage.to_i).order(created_at: :desc) + competition_user_scores.blank? ? 0 : competition_user_scores.first.score.to_f end def stage_api_status(stage) - competition_user_score = self.competition_user_scores.find_by(stage: stage.to_i) - competition_user_score.blank? ? 0 : competition_user_score.api_status + competition_user_scores = self.competition_user_scores.where(stage: stage.to_i).order(created_at: :desc) + competition_user_scores.blank? ? 0 : competition_user_scores.first.api_status end def stage_api_result_text(stage)