|
|
|
@ -38,32 +38,34 @@ class CompetitionTeamsController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def create
|
|
|
|
|
if params[:name]
|
|
|
|
|
# 判断用户是否已创建过战队
|
|
|
|
|
if @competition.competition_teams.where(:user_id => User.current.id).count > 0 && !User.current.is_teacher
|
|
|
|
|
@status = 1
|
|
|
|
|
else
|
|
|
|
|
invite_code = generate_team_code
|
|
|
|
|
teacher_id = User.current.user_extensions.identity == 0 ? User.current.id : params[:teacher]
|
|
|
|
|
|
|
|
|
|
new_team = CompetitionTeam.create(:competition_id => @competition.id, :name => params[:name],
|
|
|
|
|
:invite_code => invite_code, :user_id => User.current.id, :teacher_id => teacher_id)
|
|
|
|
|
new_team.team_members << TeamMember.new(:user_id => User.current.id, :role => 1, :competition_id => @competition.id, :is_teacher => User.current.user_extensions.identity == 0 ? 1 : 0)
|
|
|
|
|
if params[:member_ids]
|
|
|
|
|
params[:member_ids].each do |user_id|
|
|
|
|
|
new_team.team_members << TeamMember.new(:user_id => user_id, :role => 2, :competition_id => @competition.id)
|
|
|
|
|
@status, @message = -1, '您已创建过战队,不能重复创建'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if params[:name].blank?
|
|
|
|
|
@status, @message = -1, '战队名称不能为空'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if params[:teacher] && params[:teacher].strip != ""
|
|
|
|
|
new_team.team_members << TeamMember.new(:user_id => params[:teacher], :role => 2, :competition_id => @competition.id, :is_teacher => 1)
|
|
|
|
|
# 创建成功且配置了指导老师
|
|
|
|
|
@status = 0
|
|
|
|
|
elsif User.current.user_extensions.identity != 0
|
|
|
|
|
# 创建成功未配置指导老师
|
|
|
|
|
@status = 2
|
|
|
|
|
elsif User.current.user_extensions.identity == 0
|
|
|
|
|
@status = 0
|
|
|
|
|
|
|
|
|
|
is_teacher = User.current.user_extensions.identity == 0
|
|
|
|
|
return unless member_and_teacher_count_valid?(is_teacher)
|
|
|
|
|
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
invite_code = generate_team_code
|
|
|
|
|
new_team = CompetitionTeam.create(:competition_id => @competition.id, :name => params[:name],
|
|
|
|
|
:invite_code => invite_code, :user_id => User.current.id)
|
|
|
|
|
new_team.team_members.create!(user_id: User.current.id, role: 1, competition_id: @competition.id, is_teacher: User.current.user_extensions.identity == 0 ? 1 : 0)
|
|
|
|
|
|
|
|
|
|
params[:member_ids].try(:each) do |user_id|
|
|
|
|
|
next if user_id.to_i == User.current.id
|
|
|
|
|
new_team.team_members.create!(user_id: user_id, role: 2, competition_id: @competition.id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
params[:teacher_ids].try(:each) do |user_id|
|
|
|
|
|
next if user_id.to_i == User.current.id
|
|
|
|
|
new_team.team_members.create!(user_id: user_id, role: 3, competition_id: @competition.id, is_teacher: 1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
@ -89,79 +91,80 @@ class CompetitionTeamsController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update
|
|
|
|
|
unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now
|
|
|
|
|
if params[:name]
|
|
|
|
|
teacher_id = User.current.user_extensions.identity == 0 ? User.current.id : params[:teacher]
|
|
|
|
|
is_teacher = @team.user.user_extensions.identity == 0
|
|
|
|
|
return unless member_and_teacher_count_valid?(is_teacher)
|
|
|
|
|
|
|
|
|
|
@team.update_attributes(:name => params[:name], :teacher_id => teacher_id)
|
|
|
|
|
@team.team_members.update_all(:is_teacher => 0)
|
|
|
|
|
if @team.user.user_extensions.identity == 0
|
|
|
|
|
@team.team_members.where(:user_id => @team.user_id).update_all(:is_teacher => 1)
|
|
|
|
|
end
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
unless @competition.enroll_end_time.present? && @competition.enroll_end_time < Time.now
|
|
|
|
|
@team.update_attributes(name: params[:name]) if params[:name].present?
|
|
|
|
|
|
|
|
|
|
team_member_ids = @team.team_members.where(:role => 2, :is_teacher => 0).map(&:user_id)
|
|
|
|
|
new_member_ids = (params[:member_ids] || []).collect(&:to_i)
|
|
|
|
|
team_member_ids = @team.team_members.where(role: 2, is_teacher: 0).pluck(:user_id)
|
|
|
|
|
new_member_ids = (params[:member_ids].presence || []).map(&:to_i)
|
|
|
|
|
new_member_ids << @team.user_id unless is_teacher
|
|
|
|
|
# 删除的成员
|
|
|
|
|
delete_member_ids = team_member_ids - new_member_ids
|
|
|
|
|
@team.team_members.where(:role => 2, :user_id => delete_member_ids).destroy_all
|
|
|
|
|
@team.team_members.where(role: 2, user_id: delete_member_ids).delete_all
|
|
|
|
|
# 新增加的成员
|
|
|
|
|
(new_member_ids - team_member_ids).each do |user_id|
|
|
|
|
|
@team.team_members << TeamMember.new(:user_id => user_id, :role => 2, :competition_id => @competition.id)
|
|
|
|
|
end
|
|
|
|
|
next if user_id.to_i == @team.user_id
|
|
|
|
|
@team.team_members.create!(user_id: user_id, role: 2, competition_id: @competition.id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# 判断之前是否已存在指导老师,不存在则创建 否则更新
|
|
|
|
|
if params[:teacher] && params[:teacher].strip != ""
|
|
|
|
|
o_teacher = @team.team_members.where(:is_teacher => 1).first
|
|
|
|
|
unless o_teacher.present? && o_teacher.user_id == params[:teacher].to_i
|
|
|
|
|
if o_teacher.present?
|
|
|
|
|
o_teacher.update_attributes(:user_id => params[:teacher])
|
|
|
|
|
else
|
|
|
|
|
teacher = @team.team_members.where(:user_id => params[:teacher]).first
|
|
|
|
|
if teacher.present?
|
|
|
|
|
teacher.update_column("is_teacher", 1)
|
|
|
|
|
else
|
|
|
|
|
@team.team_members << TeamMember.new(:user_id => params[:teacher], :role => 2, :competition_id => @competition.id, :is_teacher => 1)
|
|
|
|
|
end
|
|
|
|
|
teacher_ids = @team.teachers.pluck(:user_id)
|
|
|
|
|
new_teacher_ids = (params[:teacher_ids].presence || []).map(&:to_i)
|
|
|
|
|
new_teacher_ids << @team.user_id if is_teacher
|
|
|
|
|
# 删除的老师
|
|
|
|
|
delete_teacher_ids = teacher_ids - new_teacher_ids
|
|
|
|
|
@team.team_members.where(role: 3, user_id: delete_teacher_ids).delete_all
|
|
|
|
|
# 新增加的老师
|
|
|
|
|
(new_teacher_ids - teacher_ids).each do |user_id|
|
|
|
|
|
next if user_id.to_i == @team.user_id
|
|
|
|
|
@team.team_members.create!(user_id: user_id, role: 3, competition_id: @competition.id, is_teacher: true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
@team.update_attributes(:teacher_id => params[:teacher])
|
|
|
|
|
elsif @team.user.user_extensions.identity != 0
|
|
|
|
|
@team.update_attributes(:teacher_id => nil)
|
|
|
|
|
@team.team_members.where(:is_teacher => 1).destroy_all
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# @status:提示语标志(0:加入成功;1:邀请码错误;2:已经加入了其他队, 3:超过人数限制,4:已有指导老师,5:只有学生和老师身份的用户才能加入战队)
|
|
|
|
|
def join_team
|
|
|
|
|
team = @competition.competition_teams.where(:invite_code => params[:code]).first
|
|
|
|
|
if team.present?
|
|
|
|
|
team = @competition.competition_teams.where(invite_code: params[:code]).first
|
|
|
|
|
if team.blank?
|
|
|
|
|
@status, @message = -1, '战队邀请码错误'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if TeamMember.where(:user_id => User.current.id, :competition_team_id => @competition.competition_teams.map(&:id), :is_teacher => 0).count > 0
|
|
|
|
|
@status = 2
|
|
|
|
|
else
|
|
|
|
|
# 老师身份加入战队判断是否已有指导老师
|
|
|
|
|
if User.current.user_extensions.identity == 0
|
|
|
|
|
if team.teacher_id.present?
|
|
|
|
|
@status = 4
|
|
|
|
|
else
|
|
|
|
|
@status = 0
|
|
|
|
|
team.update_attributes(:teacher_id => User.current.id)
|
|
|
|
|
team.team_members << TeamMember.new(:user_id => User.current.id, :role => 2, :competition_id => @competition.id, :is_teacher => 1)
|
|
|
|
|
@status, @message = -1, '您已加入战队,不能重复加'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
elsif User.current.user_extensions.identity == 1
|
|
|
|
|
if team.team_members.count < @competition.max_num.to_i
|
|
|
|
|
team.team_members << TeamMember.new(:user_id => User.current.id, :role => 2, :competition_id => @competition.id)
|
|
|
|
|
@status = 0
|
|
|
|
|
else
|
|
|
|
|
@status = 3
|
|
|
|
|
|
|
|
|
|
if team.team_members.where(user_id: User.current.id).exists?
|
|
|
|
|
@status, @message = -1, '您已加入该战队'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
@status = 5
|
|
|
|
|
|
|
|
|
|
# 老师身份加入战队
|
|
|
|
|
if User.current.user_extensions.identity == 0
|
|
|
|
|
teacher_staff = @competition.where(category: 'teacher').first
|
|
|
|
|
|
|
|
|
|
if teacher_staff.blank?
|
|
|
|
|
@status, @message = -1, '该竞赛不能配备导师'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if team.teachers.count + 1 > teacher_staff.maximum
|
|
|
|
|
@status, @message = -1, '该战队导师人数已满'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
team.team_members.create!(user_id: User.current.id, role: 3, competition_id: @competition.id, is_teacher: true)
|
|
|
|
|
else
|
|
|
|
|
@status = 1
|
|
|
|
|
max_member_count = @competition.where('category != "teacher"').sum(:maximum)
|
|
|
|
|
if team.members.count + 1 > max_member_count
|
|
|
|
|
@status, @message = -1, '该战队成员人数已满'
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
team.team_members.create!(user_id: User.current.id, role: 2, competition_id: @competition.id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -169,9 +172,6 @@ class CompetitionTeamsController < ApplicationController
|
|
|
|
|
def exit_team
|
|
|
|
|
team_member = @team.team_members.where(:user_id => User.current.id).first
|
|
|
|
|
if team_member.present?
|
|
|
|
|
if team_member.is_teacher
|
|
|
|
|
@team.update_attributes(:teacher_id => nil)
|
|
|
|
|
end
|
|
|
|
|
if team_member.user_id != @team.user_id
|
|
|
|
|
team_member.destroy
|
|
|
|
|
@status = 1
|
|
|
|
@ -214,4 +214,33 @@ class CompetitionTeamsController < ApplicationController
|
|
|
|
|
rescue ActiveRecord::RecordNotFound
|
|
|
|
|
render_404
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def member_and_teacher_count_valid?(is_teacher)
|
|
|
|
|
teacher_staff = @competition.competition_staffs.where(category: 'teacher').first
|
|
|
|
|
teacher_count = params[:teacher_ids].try(:size) || 0
|
|
|
|
|
teacher_count += 1 if is_teacher
|
|
|
|
|
# 检查老师数量
|
|
|
|
|
if teacher_staff.blank? && teacher_count > 0
|
|
|
|
|
@status, @message = -1, '该竞赛不能配备导师'
|
|
|
|
|
return false
|
|
|
|
|
elsif teacher_staff.present? && (teacher_staff.minimum > teacher_count || teacher_staff.maximum < teacher_count)
|
|
|
|
|
@status = -1
|
|
|
|
|
@message = teacher_staff.maximum == teacher_staff.maximum ? "导师数量应为#{teacher_staff.minimum}人" : "导师数量应为#{teacher_staff.minimum}-#{teacher_staff.maximum}人"
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
member_relations = @competition.competition_staffs.where('category != "teacher"')
|
|
|
|
|
min_member_count = member_relations.sum(:minimum)
|
|
|
|
|
max_member_count = member_relations.sum(:maximum)
|
|
|
|
|
member_count = params[:member_ids].try(:size) || 0
|
|
|
|
|
member_count += 1 unless is_teacher
|
|
|
|
|
# 检查成员数据
|
|
|
|
|
if min_member_count > member_count || member_count > max_member_count
|
|
|
|
|
@status = -1
|
|
|
|
|
@message = min_member_count == max_member_count ? "成员数量应为#{max_member_count}人" : "成员数量应为#{min_member_count}-#{max_member_count}人"
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|