forked from Gitlink/forgeplus
add 竞赛打榜都按阶段保存所有打分记录
This commit is contained in:
parent
40fd6a2bc1
commit
554f88525e
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue