|  |  |  | @ -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 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |