|
|
# encoding: utf-8
|
|
|
class ManagementsController < ApplicationController
|
|
|
before_filter :require_business
|
|
|
before_filter :require_admin, :only => [:shixun_setting_list, :mirror_repository, :mirror_picture_shixuns, :editmd_template,
|
|
|
:editmd_template, :subject_level_system, :subject_setting_list,
|
|
|
:shixun_authorization, :ec_template, :codemirror_template,
|
|
|
:course_guide_template, :shixun_quality_score, :tech_system, :update_notice, :setting_banner,
|
|
|
:create_standard]
|
|
|
layout 'base_management'
|
|
|
include ManagementsHelper
|
|
|
include SortHelper
|
|
|
include UsersHelper
|
|
|
include ApplicationHelper
|
|
|
include AvatarHelper
|
|
|
include ShixunsHelper
|
|
|
helper :files
|
|
|
if RUBY_PLATFORM =~ /linux/
|
|
|
require 'simple_xlsx_reader'
|
|
|
require 'roo-xls'
|
|
|
end
|
|
|
|
|
|
CODES = %W(2 3 4 5 6 7 8 9 A B C D E F G H J K L N M O P Q R S T U V W X Y Z)
|
|
|
|
|
|
# 更新实训课程的等级
|
|
|
def update_level_for_subject
|
|
|
subject = Subject.find params[:subject_id]
|
|
|
subject.update_attribute(:subject_level_system_id, params[:level_id])
|
|
|
render :json => {status: 1}
|
|
|
end
|
|
|
|
|
|
def user_agents
|
|
|
@user_agents = UserAgent.where("user_agents.key is not null and is_delete = 0").order("created_at desc")
|
|
|
@agents_count = @user_agents.count
|
|
|
limit = 20
|
|
|
@agents_pages = Paginator.new @agents_count, limit, params['page'] || 1
|
|
|
@offset ||= @agents_pages.offset
|
|
|
@user_agents = paginateHelper @user_agents, limit
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.xls{
|
|
|
time = Time.now.strftime("%Y%m%d")
|
|
|
filename = "引流情况#{time}.xls"
|
|
|
send_data(user_agents_export(), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
# 实训课程等级体系
|
|
|
def subject_level_system
|
|
|
@levels = SubjectLevelSystem.all
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
time = Time.now.strftime("%Y%m%d")
|
|
|
filename = "实训课程体系#{time}.xls"
|
|
|
send_data(export_subject_level_system(), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 创建课程等级体系
|
|
|
def create_subject_level
|
|
|
raise("名称不能为空") if params[:name].blank?
|
|
|
repeat_name = SubjectLevelSystem.where(name: params[:name]).count
|
|
|
raise("名称不能重复") if repeat_name > 0
|
|
|
level = SubjectLevelSystem.pluck(:level).max.to_i + 1
|
|
|
SubjectLevelSystem.create(name: params[:name], level: level)
|
|
|
redirect_to subject_level_system_managements_path(:format => "js")
|
|
|
end
|
|
|
|
|
|
# 重命名课程等级
|
|
|
def rename_subject_level
|
|
|
raise("名称不能为空!") if params[:name].blank?
|
|
|
repeat_name = SubjectLevelSystem.where("name = ? and id != ?", params[:name], params[:id]).count
|
|
|
raise("名称不能重复") if repeat_name > 0
|
|
|
level = SubjectLevelSystem.find params[:id]
|
|
|
level.update_attribute(:name, params[:name])
|
|
|
redirect_to subject_level_system_managements_path(:format => "js")
|
|
|
end
|
|
|
|
|
|
# 删除课程等级
|
|
|
def delete_subject_level
|
|
|
level = SubjectLevelSystem.find params[:id]
|
|
|
Subject.where(:subject_level_system_id => level).update_all(:subject_level_system_id => nil)
|
|
|
levels = SubjectLevelSystem.where("level > ?", level.level)
|
|
|
levels.each do |l|
|
|
|
l.update_attribute(:level, l.level-1)
|
|
|
end
|
|
|
level.delete
|
|
|
redirect_to subject_level_system_managements_path(:format => "js")
|
|
|
end
|
|
|
|
|
|
# 工程认证视频导入模板
|
|
|
def ec_template
|
|
|
@template = EcTemplate.where(nil)
|
|
|
end
|
|
|
|
|
|
def add_template
|
|
|
logger.info("#############################{params}")
|
|
|
EcTemplate.create(:name => params[:name].strip)
|
|
|
@template = EcTemplate.where(nil)
|
|
|
end
|
|
|
|
|
|
def training_2018
|
|
|
@search = params[:search]
|
|
|
@training_type = params[:training_type]
|
|
|
@pay_type = params[:pay_type]
|
|
|
@page = params[:page] || 1
|
|
|
@status = params[:status]
|
|
|
@trainings = Training.includes(:training_payinfo)
|
|
|
if params[:search] && params[:search].strip != ""
|
|
|
@trainings = @trainings.where("trainings.name like '%#{params[:search]}%'")
|
|
|
end
|
|
|
if params[:training_type] && params[:training_type].to_i != -1
|
|
|
@trainings = @trainings.where("training_type = #{params[:training_type]}")
|
|
|
end
|
|
|
if params[:pay_type] && params[:pay_type].to_i != -1
|
|
|
@trainings = @trainings.where("training_payinfos.pay_type = #{params[:pay_type]}")
|
|
|
end
|
|
|
if params[:status] && params[:status].to_i != -1
|
|
|
@trainings = @trainings.where("training_payinfos.status = #{params[:status]}")
|
|
|
end
|
|
|
@page = params[:page] || 1
|
|
|
@all_trainings = @trainings.reorder("trainings.created_at desc")
|
|
|
@trainings = paginateHelper @trainings.reorder("trainings.created_at desc"), 50
|
|
|
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
time = Time.now.strftime("%Y%m%d")
|
|
|
filename = "#{time}培训会报名列表.xls"
|
|
|
send_data(training_2018_xls(@all_trainings), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_pay_status
|
|
|
if User.current.admin? || User.current.id == 1
|
|
|
@training = Training.where(:id => params[:training]).first
|
|
|
if @training
|
|
|
@training.training_payinfo.update_attributes(:status => TrainingPayinfo::Status_Payed)
|
|
|
if @training.phone.present?
|
|
|
Trustie::Sms.send(mobile: @training.phone.to_s, send_type: "training_pay", user_name: @training.name)
|
|
|
end
|
|
|
end
|
|
|
else
|
|
|
render_403
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def mul_test
|
|
|
@menu_type = 3
|
|
|
@sub_type = 9
|
|
|
@m_tests = MulTest.where(nil)
|
|
|
|
|
|
@m_tests_count = @m_tests.count
|
|
|
@m_tests_pages = Paginator.new @m_tests_count, 20, params['page'] || 1
|
|
|
@offset ||= @m_tests_pages.offset
|
|
|
@m_tests = paginateHelper @m_tests, 20
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def mul_statics
|
|
|
@m_tests = MulTest.all.group_by{|o|[o.num, o.shixun_id]}
|
|
|
# @m_tests_count = @m_tests.count
|
|
|
# @m_tests_pages = Paginator.new @m_tests_count, 20, params['page'] || 1
|
|
|
# @offset ||= @m_tests_pages.offset
|
|
|
# @m_tests = paginateHelper @m_tests, 20
|
|
|
end
|
|
|
|
|
|
def update_shixun_usescope
|
|
|
shixun = Shixun.where(:id => params[:shixun_id]).first
|
|
|
shixun.update_column(:use_scope, params[:use_scope].to_i)
|
|
|
render :json => {status: "success"}
|
|
|
end
|
|
|
|
|
|
#用户修改
|
|
|
def myshixuns
|
|
|
@menu_type = 3
|
|
|
@sub_type = 8
|
|
|
@g = Gitlab.client
|
|
|
if params[:search]
|
|
|
if params[:search].to_i.to_s == params[:search].to_s
|
|
|
myshixun_id = Game.where(:myshixun_id => params[:search].to_i).pluck(:myshixun_id)
|
|
|
game_myshixun_id = Game.where(:id => params[:search].to_i).pluck(:myshixun_id)
|
|
|
myshixun_id = myshixun_id + game_myshixun_id
|
|
|
else
|
|
|
myshixun_id = Game.where(:identifier => params[:search]).pluck(:myshixun_id)
|
|
|
end
|
|
|
@myshixuns = Myshixun.where(:id => myshixun_id).includes(:shixun)
|
|
|
else
|
|
|
@myshixuns = Myshixun.where("0=0").includes(:shixun)
|
|
|
end
|
|
|
@myshixuns_count = @myshixuns.count
|
|
|
limit = 20
|
|
|
@myshixuns_pages = Paginator.new @myshixuns_count, limit, params['page'] || 1
|
|
|
@offset ||= @myshixuns_pages.offset
|
|
|
@myshixuns = paginateHelper @myshixuns, limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def myshixun_info
|
|
|
user_id = User.where(:login => params[:login].strip).pluck(:id).first
|
|
|
shixun_id = Shixun.where(:identifier => params[:shixun_id].strip).pluck(:id).first
|
|
|
myshixun = Myshixun.where(:user_id => user_id, :shixun_id => shixun_id).first
|
|
|
game = myshixun.current_task
|
|
|
@game_url = Setting.protocol + "://" + Setting.host_name + "/tasks/#{game.identifier}"
|
|
|
@git_url = Redmine::Configuration['gitlab_address']+"/"+myshixun.git_url
|
|
|
end
|
|
|
|
|
|
def anomaly_detection
|
|
|
|
|
|
end
|
|
|
|
|
|
def account
|
|
|
@user = User.find(params[:user_id])
|
|
|
begin
|
|
|
if request.post?
|
|
|
@user.nickname = params[:nickname]
|
|
|
@user.lastname = params[:lastname]
|
|
|
@user.business = params[:business].to_i
|
|
|
if params[:admin]
|
|
|
@user.admin = params[:admin].to_i
|
|
|
end
|
|
|
@user.firstname = ""
|
|
|
if params[:mail].present?
|
|
|
@user.mail = params[:mail].strip
|
|
|
end
|
|
|
@user.phone = params[:phone].strip == "" ? nil : params[:phone]
|
|
|
#@user.password = params[:new_password]
|
|
|
# if params[:new_password].strip != "" && params[:new_password_confirmation].strip != ""
|
|
|
# @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
|
|
|
# end
|
|
|
@se = @user.extensions
|
|
|
@se.school_id = params[:occupation]
|
|
|
@se.department_id = params[:department_id]
|
|
|
@se.gender = params[:sex]
|
|
|
@se.location = params[:province] if params[:province]
|
|
|
@se.location_city = params[:city] if params[:city]
|
|
|
@se.identity = params[:identity].to_i if params[:identity]
|
|
|
if @se.identity == 0
|
|
|
@se.technical_title = params[:te_technical_title] if params[:te_technical_title]
|
|
|
@se.student_id = nil
|
|
|
elsif @se.identity == 1
|
|
|
@se.student_id = params[:no] if params[:no]
|
|
|
@se.technical_title = nil
|
|
|
elsif @se.identity == 2
|
|
|
@se.technical_title = params[:pro_technical_title] if params[:pro_technical_title]
|
|
|
@se.student_id = nil
|
|
|
end
|
|
|
@se.brief_introduction = params[:brief_introduction]
|
|
|
@user.save
|
|
|
@se.save
|
|
|
us = UsersService.new
|
|
|
@user = us.change_password params.merge(:current_user_id => @user.id)
|
|
|
# if @user.save && @se.save
|
|
|
# reward_grade(@user, @user.id, 'Account', 500)
|
|
|
# # 头像保存
|
|
|
# FileUtils.mv diskfile1, diskfile, force: true if File.exist? diskfile1
|
|
|
# @user.pref.save
|
|
|
# @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
|
|
|
# set_language_if_valid @user.language
|
|
|
# flash[:notice] = l(:notice_account_updated)
|
|
|
# return
|
|
|
# else
|
|
|
# # @user.login = lg
|
|
|
# end
|
|
|
|
|
|
end
|
|
|
# 不管前面是否有异常,如果文件已存在就删除
|
|
|
ensure
|
|
|
end
|
|
|
# @setting_type = 1
|
|
|
|
|
|
redirect_to update_user_managements_path(:user => @user)
|
|
|
end
|
|
|
|
|
|
# 获取镜像
|
|
|
def pull_mirror
|
|
|
#params[:jsonMirrorDetails] = '{"images":[{"imageID":"2367ee7a7d4c","name":"octave-novnc:v1.0"}, {"imageID":"1b9cfba2c4dd","name":"jfinal-mysql55:v1.0"}]}'
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
params = {}
|
|
|
uri = "#{shixun_tomcat}/bridge/docker/images"
|
|
|
res = uri_exec uri, params
|
|
|
if (res && res['code'] != 0)
|
|
|
raise("Pull mirror the repository exception")
|
|
|
end
|
|
|
mirrors = res["images"]
|
|
|
images = [] # 中间层镜像名称的数组
|
|
|
if mirrors.present?
|
|
|
mirrors.each do |mirror|
|
|
|
mirror = JSON.parse(mirror)
|
|
|
match_rep_mirror_name = MirrorRepository.where(:name => mirror['imageName']).first
|
|
|
match_rep_mirror_id = MirrorRepository.where(:mirrorID => mirror['imageID']).first
|
|
|
images << mirror['imageName']
|
|
|
if match_rep_mirror_name.blank? && match_rep_mirror_id.blank?
|
|
|
# 镜像不存在、创建镜像
|
|
|
new_mirror = MirrorRepository.create!(:mirrorID => mirror['imageID'], :name => mirror['imageName'])
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => new_mirror.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 0, :user_id => -1)
|
|
|
elsif match_rep_mirror_name.present? && match_rep_mirror_id.blank?
|
|
|
# 镜像ID被修改
|
|
|
match_rep_mirror_name.update_attributes(:status => 2)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => match_rep_mirror_name.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 1, :user_id => -1)
|
|
|
elsif match_rep_mirror_name.blank? && match_rep_mirror_id.present?
|
|
|
# 镜像名称被修改
|
|
|
match_rep_mirror_id.update_attribute(:status, 3)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => match_rep_mirror_id.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 2, :user_id => -1)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
# 判断中间层镜像是否被删除
|
|
|
edu_mirrors = MirrorRepository.all
|
|
|
edu_mirrors.each do |mirror|
|
|
|
if(images.index(mirror.try(:name)).nil? && mirror.try(:name).present?)
|
|
|
mirror.update_attribute(:status, 4)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => mirror.id, :mirror_id => mirror.try(:mirrorID), :mirror_name => mirror.name, :status => 3, :user_id => -1)
|
|
|
end
|
|
|
end
|
|
|
# end
|
|
|
redirect_to mirror_repository_managements_path
|
|
|
rescue Exception => e
|
|
|
logger.error("pull_mirror error: #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 验证镜像名是否重复
|
|
|
# 判断依据:主类别和小类别可以同名;主类别和小类别各自之间
|
|
|
def check_mirror_name
|
|
|
random = CODES.sample(8).join
|
|
|
mirror_count = MirrorRepository.where("type_name = ? and id != ? and main_type =?", params[:type_name], params[:mirror_id], params[:main_type].to_i).count
|
|
|
check = (mirror_count > 0 ? true : false)
|
|
|
render :json => {check: check, random: random}
|
|
|
end
|
|
|
|
|
|
# 中间层与edu镜像不一致时,选择镜像一个可用的版本
|
|
|
def choose_mirror
|
|
|
@mirror = MirrorRepository.find(params[:mirror_id])
|
|
|
@new_mirror = MirrorOperationRecord.where(:mirror_repository_id => @mirror.id, :status => 1, :user_id => -1).first
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# flag: 0 更新新ID,1 回退
|
|
|
# old_id: 平台保存的ID
|
|
|
# change_id: 用户修改的新ID
|
|
|
# 选择镜像后,向中间层updateImage flag: 0 更新新ID,1 回退镜像
|
|
|
def choose_update_mirror
|
|
|
old_id = params[:id]
|
|
|
change_id = params[:mirror_id]
|
|
|
flag = (old_id == change_id ? 1 : 0)
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
mirror = MirrorRepository.where(:mirrorID => old_id).first
|
|
|
if mirror.blank?
|
|
|
raise("choose_update_mirror exception")
|
|
|
end
|
|
|
#shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
#params = {imageName: mirror.name, imageID: old_id, flag: flag}
|
|
|
#uri = "#{shixun_tomcat}/bridge/docker/updateImage"
|
|
|
#res = uri_exec uri, params
|
|
|
# if (res && res['code'] != 0)
|
|
|
#raise("choose_update_mirror exception")
|
|
|
#end
|
|
|
if flag == 0
|
|
|
mirror.update_attributes(:mirrorID => change_id, :status => 1)
|
|
|
# 用户操作的的行为需要记录 user_id, 中间层操作的行为user_id = -1
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => mirror.id, :mirror_id => change_id, :mirror_name => mirror.name, :status => 1, :user_id => User.current.id, :old_tag => old_id, :new_tag => change_id)
|
|
|
else
|
|
|
mirror.update_attribute(:status, 1)
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js{ redirect_to mirror_repository_managements_path(:reaction => "choose_update_mirror")}
|
|
|
end
|
|
|
#format.js{ redirect_to mirror_repository_managements_path(:reaction => "choose_update_mirror")}
|
|
|
rescue Exception => e
|
|
|
logger.error("choose_update_mirror error: #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 搜索镜像
|
|
|
def mirror_search
|
|
|
@scope = []
|
|
|
if params[:q] && params[:q].strip != ""
|
|
|
@scope = MirrorRepository.where("name like ?", "%#{params[:q]}%").map(&:name)
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 镜像管理
|
|
|
# REDO: images Get请求不能用Post
|
|
|
def mirror_repository
|
|
|
@menu_type = 3
|
|
|
@sub_type = 5
|
|
|
@reaction = params[:reaction] # 如果是局部刷新调用,不需要拉取镜像
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
# 重新定向或翻页不需要拉取镜像
|
|
|
if @reaction.nil? && @_params['page'].nil?
|
|
|
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
uri = "#{shixun_tomcat}/bridge/docker/images"
|
|
|
res = get_url_exec uri
|
|
|
if (res && res['code'] != 0)
|
|
|
raise("Pull mirror the repository exception")
|
|
|
end
|
|
|
mirrors = res["images"] # 主节点的所有镜像
|
|
|
sync_mirrors = res['imagesNotSync'] # 子节点镜像异常(主节点有,而子节点却没同步/异常)
|
|
|
images = [] # 中间层镜像名称的数组
|
|
|
if sync_mirrors.present?
|
|
|
sync_mirrors.each do |mirror|
|
|
|
mirror = JSON.parse(mirror)
|
|
|
match_rep_mirror_name = MirrorRepository.where(:name => mirror['imageName']).first
|
|
|
# match_rep_mirror_id = MirrorRepository.where(:mirrorID => mirror['imageID']).first
|
|
|
if match_rep_mirror_name.present? && match_rep_mirror_name.status == 1
|
|
|
match_rep_mirror_name.update_attribute(:status, 5)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => match_rep_mirror_name.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 4, :user_id => -1)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if mirrors.present?
|
|
|
mirrors.each do |mirror|
|
|
|
mirror = JSON.parse(mirror)
|
|
|
match_rep_mirror_name = MirrorRepository.where(:name => mirror['imageName']).first
|
|
|
match_rep_mirror_id = MirrorRepository.where(:mirrorID => mirror['imageID']).first
|
|
|
images << mirror['imageName']
|
|
|
if match_rep_mirror_name.blank?
|
|
|
# 镜像不存在、创建镜像
|
|
|
new_mirror = MirrorRepository.create!(:mirrorID => mirror['imageID'], :name => mirror['imageName'])
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => new_mirror.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 0, :user_id => -1)
|
|
|
elsif (match_rep_mirror_name.present? && (mirror['imageID'] != match_rep_mirror_name.mirrorID))
|
|
|
# 镜像ID被修改
|
|
|
match_rep_mirror_name.update_attributes(:status => 2)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => match_rep_mirror_name.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 1, :user_id => -1)
|
|
|
elsif match_rep_mirror_name.blank? && match_rep_mirror_id.present?
|
|
|
# 镜像名称被修改
|
|
|
match_rep_mirror_id.update_attribute(:status, 3)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => match_rep_mirror_id.id, :mirror_id => mirror['imageID'], :mirror_name => mirror['imageName'], :status => 2, :user_id => -1)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
# 判断中间层镜像是否被删除
|
|
|
edu_mirrors = MirrorRepository.all
|
|
|
edu_mirrors.each do |mirror|
|
|
|
if(images.index(mirror.try(:name)).nil? && mirror.try(:name).present?)
|
|
|
mirror.update_attribute(:status, 4)
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => mirror.id, :mirror_id => mirror.try(:mirrorID), :mirror_name => mirror.name, :status => 3, :user_id => -1)
|
|
|
end
|
|
|
end
|
|
|
# end
|
|
|
end
|
|
|
@error_mirrors = MirrorRepository.where(:status => 5)
|
|
|
@menu_type = 3
|
|
|
@sub_type = 4
|
|
|
@mirrors = MirrorRepository.reorder("status desc, main_type desc, type_name asc")
|
|
|
@mirrors_count = @mirrors.count
|
|
|
@limit = 20
|
|
|
@page = (@_params['page'] || 1).to_i
|
|
|
@mirrors_pages = Paginator.new @mirrors_count, @limit, @page
|
|
|
@offset ||= @mirrors_pages.offset
|
|
|
@mirrors = paginateHelper @mirrors, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
logger.error("pull_mirror error: #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 迁移数据与脚本
|
|
|
# eg: shixun_id 字符类型。eg:shixun_id=61,71
|
|
|
# res['script'] tpm的模板
|
|
|
# res['template'] 标准模板
|
|
|
def migrate_data_and_script
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
if params[:shixun_id]
|
|
|
shixuns = Shixun.where(:id => params[:shixun_id].split(","))
|
|
|
else
|
|
|
shixuns = Shixun.where(nil)
|
|
|
end
|
|
|
shixuns.find_each do |shixun|
|
|
|
main_miiror_name, child_miiror_name, secend_miiror_name = "", "", ""
|
|
|
case shixun.language
|
|
|
when 'C', 'C++'
|
|
|
main_miiror_name = 'C/C++'
|
|
|
when 'MySQL/Java'
|
|
|
main_miiror_name = 'Java'
|
|
|
child_miiror_name = 'Mysql'
|
|
|
when 'MySQL/Python3.6'
|
|
|
main_miiror_name = 'Python3.6'
|
|
|
child_miiror_name = 'Mysql'
|
|
|
when 'PHP/Web'
|
|
|
main_miiror_name = 'PHP'
|
|
|
child_miiror_name = 'Mysql'
|
|
|
secend_miiror_name = 'Web'
|
|
|
when 'Golang'
|
|
|
main_miiror_name ='Go'
|
|
|
when 'Html'
|
|
|
main_miiror_name = 'Python3.6'
|
|
|
child_miiror_name = 'Html'
|
|
|
else
|
|
|
main_miiror_name = shixun.language
|
|
|
end
|
|
|
main_miiror = MirrorRepository.where(:type_name => main_miiror_name).first
|
|
|
child_miiror = MirrorRepository.where(:type_name => child_miiror_name).first if child_miiror_name.present?
|
|
|
secend_miiror = MirrorRepository.where(:type_name => secend_miiror_name).first if child_miiror_name.present?
|
|
|
# 删除实训的关联,重新迁移
|
|
|
shixun.shixun_mirror_repositories.delete_all if shixun.mirror_repositories.present?
|
|
|
if main_miiror.present?
|
|
|
ShixunMirrorRepository.create!(:shixun_id => shixun.id, :mirror_repository_id => main_miiror.id)
|
|
|
else
|
|
|
MirrorMigrateError.create(:shixun_id => shixun.id, :game_info => "MainMirror")
|
|
|
logger.error("main_miiror is miss,shixun_id:#{shixun.id}")
|
|
|
end
|
|
|
ShixunMirrorRepository.create!(:shixun_id => shixun.id, :mirror_repository_id => child_miiror.id) if child_miiror.present?
|
|
|
ShixunMirrorRepository.create!(:shixun_id => shixun.id, :mirror_repository_id => secend_miiror.id) if secend_miiror.present?
|
|
|
params = {gameInfo: shixun.gameInfo}
|
|
|
# 根据旧版代码生成新的脚本
|
|
|
uri = "http://106.75.96.108:8890/bridge/dataTransfer/transferTPMScript"
|
|
|
res = uri_exec uri, params
|
|
|
if (res && res['code'] != 0)
|
|
|
logger.error("migrate_data_and_script 8890 exception;tpmID:#{shixun.id}")
|
|
|
MirrorMigrateError.create!(:shixun_id => shixun.id, :game_info => shixun.gameInfo)
|
|
|
end
|
|
|
template_script = tran_base64_decode64(res['template']) # 标准模板,一类语言一种
|
|
|
logger.error("##################################game_info: #{shixun.gameInfo}") if template_script.blank?
|
|
|
shixun.update_column(:evaluate_script, template_script)
|
|
|
main_miiror.update_column(:script_template, template_script) if main_miiror.present?
|
|
|
end
|
|
|
# 监测同步失败的实训
|
|
|
@ids = Shixun.all.map(&:id) - ShixunMirrorRepository.all.map(&:shixun_id)
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
render :json => {:data => "#{e}"}
|
|
|
logger.error("migrate_data_and_script error: #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def modify_script
|
|
|
@mirror = MirrorRepository.find(params[:mirror_id])
|
|
|
if params[:script_template].present?
|
|
|
@mirror.update_attribute(:script_template, params[:script_template])
|
|
|
redirect_to mirror_repository_managements_path
|
|
|
return
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.html{render :layout => "base_edu"}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def mirror_replace
|
|
|
@mirror_id = params[:id]
|
|
|
@mirror_name = params[:name]
|
|
|
end
|
|
|
|
|
|
# 修改此方法慎重:此方法只针对同一镜像出现两条记录,最终需要合并成一条
|
|
|
# 合并原则:把新的记录合并到老的记录中
|
|
|
# original_mirror:表示被更新对象即历史老记录
|
|
|
# current_mirror:表示新增镜像,一般需要被替换掉,替换成功后删除,删除完成后,
|
|
|
# 后台人员需要删除对应的镜像记录
|
|
|
def mirror_replace_update
|
|
|
begin
|
|
|
original_mirror = MirrorRepository.find(params[:original_mirror_id])
|
|
|
current_mirror = MirrorRepository.where(:name => params[:mirror_name]).first
|
|
|
original_mirror.update_attributes!(:name => params[:mirror_name], :mirrorID => current_mirror.mirrorID)
|
|
|
current_mirror.delete!
|
|
|
rescue Exception => e
|
|
|
logger.error(e)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 职业路径列表
|
|
|
def career_list
|
|
|
@menu_type = 13
|
|
|
@careers =
|
|
|
if params[:search]
|
|
|
Career.includes(career_stages: [career_stage_subjects: :subject]).where("careers.name like '%#{params[:search]}%'").order("created_at desc")
|
|
|
else
|
|
|
Career.includes(career_stages: [career_stage_subjects: :subject]).order("created_at desc")
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 发布职业路径
|
|
|
def published_career
|
|
|
career = Career.find(params[:id])
|
|
|
career.update_attribute(:status, true)
|
|
|
@careers = Career.includes(career_stages: [career_stage_subjects: :subject]).order("created_at desc")
|
|
|
end
|
|
|
|
|
|
# 删除职业路径
|
|
|
def delete_career
|
|
|
career = Career.find params[:id]
|
|
|
career.destroy
|
|
|
@careers = Career.includes(career_stages: [career_stage_subjects: :subject]).order("created_at desc")
|
|
|
end
|
|
|
|
|
|
# 工程认证专业信息目录
|
|
|
def major_information
|
|
|
@disciplines = EcDiscipline.includes(ec_discipline_firsts: [:ec_majors]).order("ec_disciplines.code asc")
|
|
|
end
|
|
|
|
|
|
# 认证单位列表
|
|
|
def auth_school
|
|
|
@schools = School.where(:ec_auth => 1).order("updated_at desc")
|
|
|
end
|
|
|
|
|
|
# 工程认证单位列表搜索学校
|
|
|
def search_school
|
|
|
@schools = School.where("ec_auth != 1 and name like '%#{params[:name]}%'").limit(10)
|
|
|
|
|
|
end
|
|
|
|
|
|
# 添加认证学校
|
|
|
def add_school
|
|
|
School.where(:id => params[:school_ids]).update_all(:ec_auth => 1)
|
|
|
render :json => {status: 1}
|
|
|
end
|
|
|
|
|
|
# 搜索用户
|
|
|
def search_manager
|
|
|
user_ids = EcSchoolUser.where(:school_id => params[:school_id]).pluck(:user_id)
|
|
|
user_ids = user_ids.present? ? user_ids.join(",") : -1
|
|
|
@users = User.where("concat(lastname, firstname) like '%#{params[:name]}%' and id not in(#{user_ids})").limit(10)
|
|
|
end
|
|
|
|
|
|
# 添加认证学校管理员
|
|
|
def add_manager
|
|
|
user_ids = params[:user_ids]
|
|
|
school_id = params[:school_id]
|
|
|
user_ids.each do |id|
|
|
|
EcSchoolUser.create(:user_id => id, :school_id => school_id)
|
|
|
end
|
|
|
render :json => {status: 1}
|
|
|
end
|
|
|
|
|
|
# 删除学校管理员
|
|
|
def remove_manager
|
|
|
manager = EcSchoolUser.where(:school_id => params[:school_id], :user_id => params[:user_id]).first
|
|
|
manager.destroy
|
|
|
end
|
|
|
|
|
|
# 删除认证学校
|
|
|
def remove_auth_school
|
|
|
school = School.find params[:school_id]
|
|
|
school.update_column(:ec_auth, 0)
|
|
|
school.ec_school_users.delete_all
|
|
|
|
|
|
end
|
|
|
|
|
|
# 工程认证: 毕业要求通用标准
|
|
|
def graduation_standard
|
|
|
@standards = EcGraduationStandard.all
|
|
|
end
|
|
|
|
|
|
# 创建通用标准
|
|
|
def create_standard
|
|
|
id = params[:id].to_i
|
|
|
content = params[:content]
|
|
|
if id == -1
|
|
|
EcGraduationStandard.create(:content => content)
|
|
|
else
|
|
|
standard = EcGraduationStandard.find params[:id]
|
|
|
standard.update_attribute(:content, content)
|
|
|
end
|
|
|
@standards = EcGraduationStandard.all
|
|
|
end
|
|
|
|
|
|
|
|
|
def add_mirror_type
|
|
|
data = {result: 0}
|
|
|
if params[:name]
|
|
|
if MirrorType.where(:name => params[:name]).count == 0
|
|
|
new_type = MirrorType.new(:user_id => User.current.id, :name => params[:name])
|
|
|
if new_type.save
|
|
|
data[:result] = 1
|
|
|
end
|
|
|
else
|
|
|
data[:result] = 2
|
|
|
end
|
|
|
end
|
|
|
render :json => data
|
|
|
end
|
|
|
|
|
|
def modify_mirror
|
|
|
@mirror = MirrorRepository.find params[:mirror_id]
|
|
|
@mirror_types = MirrorType.where(nil)
|
|
|
end
|
|
|
|
|
|
def search_mirror_type
|
|
|
data = {mirror_types: []}
|
|
|
search = params[:search]
|
|
|
MirrorType.where("name like '%#{search}%'").each do |mirror_type|
|
|
|
option = []
|
|
|
option << mirror_type.name.to_s
|
|
|
option << mirror_type.id
|
|
|
data[:mirror_types] << option
|
|
|
end
|
|
|
render :json => data
|
|
|
end
|
|
|
|
|
|
def create_mirror
|
|
|
MirrorRepository.create(:type_name => params[:type_name], :main_type => params[:mirror_type], :description => params[:description], :status => params[:status].to_i)
|
|
|
respond_to do |format|
|
|
|
format.js{redirect_to mirror_repository_managements_path(:reaction => "create_mirror")}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 更新实训,从未发布到发布需要syncImage同步镜像
|
|
|
def update_mirror
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
@mirror = MirrorRepository.find(@_params[:mirror_id])
|
|
|
if @_params[:status].to_i == 1 && @mirror.status != 1
|
|
|
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
params = {imageName: @mirror.name}
|
|
|
# 主从节点同步镜像
|
|
|
#uri = "#{shixun_tomcat}/bridge/docker/syncImage"
|
|
|
#res = uri_exec uri, params
|
|
|
#if (res && res['code'] != 0)
|
|
|
# raise("Synchronize Mirror exception")
|
|
|
#end
|
|
|
end
|
|
|
if @_params[:type_name] != @mirror.type_name
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => @mirror.id, :status => 5,
|
|
|
:user_id => User.current.id, :old_tag => @mirror.type_name,
|
|
|
:new_tag => @_params[:type_name])
|
|
|
elsif @_params[:status].to_i != @mirror.status
|
|
|
MirrorOperationRecord.create!(:mirror_repository_id => @mirror.id, :status => 6,
|
|
|
:user_id => User.current.id, :old_tag => @mirror.status,
|
|
|
:new_tag => @_params[:status])
|
|
|
end
|
|
|
@mirror.update_attributes(:description => @_params[:description], :status => @_params[:status],
|
|
|
:main_type => @_params[:mirror_type], :type_name => @_params[:type_name],
|
|
|
:resource_limit => @_params[:mirror_resource_limit], :cpu_limit => @_params[:mirror_cpu_limit],
|
|
|
:memory_limit => @_params[:mirror_memory_limit], :time_limit => @_params[:mirror_time_limit])
|
|
|
@index = MirrorRepository.order("created_at desc").map(&:id).index(@mirror.id)
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
logger.error("update_mirror error: #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def delete_mirror
|
|
|
mirror = MirrorRepository.find params[:mirror_id]
|
|
|
mirror.destroy
|
|
|
respond_to do |format|
|
|
|
format.js{redirect_to mirror_repository_managements_path(:reaction => "delete_mirror")}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 用户修改界面
|
|
|
def update_user
|
|
|
@menu_type = 7
|
|
|
@sub_type = 1
|
|
|
# @next_type = 1
|
|
|
if params[:flag]
|
|
|
applied_message = AppliedMessage.where(:id => params[:applied_message_id]).first
|
|
|
applied_message.update_attribute(:viewed, true)
|
|
|
end
|
|
|
@user = User.find(params[:user])
|
|
|
# 创建实训
|
|
|
@create_num = (@user == User.current ? Shixun.where(:user_id => @user).count : Shixun.where(:user_id => @user).visible.count)
|
|
|
# 创建课堂
|
|
|
@create_courses_count = @user.courses.not_deleted_not_end.select{ |course| @user.has_teacher_role(course)}.count
|
|
|
# 我的所有课程数
|
|
|
@all_courses_count = @user.courses.not_deleted_not_end.count
|
|
|
# 参与课堂
|
|
|
@join_courses_count = @all_courses_count - @create_courses_count
|
|
|
# 我合作的实训数
|
|
|
coop_id = Shixun.find_by_sql("select shixun_id from shixun_members where user_id=#{@user.id} and role = 2").map(&:shixun_id) # 合作者的实训id
|
|
|
@cooperative_num = Shixun.where(:id => coop_id).count
|
|
|
# 我挑战的实训数
|
|
|
ch_id = Shixun.find_by_sql("select id from shixuns where id in (select shixun_id from myshixuns where user_id = #{@user.id})")
|
|
|
@challenge_num = Shixun.where(:id => ch_id).count
|
|
|
#参与实训
|
|
|
@join_shixuns = @cooperative_num + @challenge_num
|
|
|
# 我的关注
|
|
|
watch_query = User.watched_by(@user.id)
|
|
|
@user_watchlist_count = watch_query.count()
|
|
|
# 我的粉丝
|
|
|
fan_query = @user.watcher_users
|
|
|
@user_fanlist_count = fan_query.count()
|
|
|
end
|
|
|
|
|
|
# 实训留言
|
|
|
def shixun_feedback
|
|
|
@menu_type = 9
|
|
|
@sub_type = 1
|
|
|
@discusses = Discuss.where(:dis_type => "Shixun").reorder("created_at desc")
|
|
|
@discusses_count = @discusses.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@discusses_pages = Paginator.new @discusses_count, @limit, @page
|
|
|
@offset ||= @discusses_pages.offset
|
|
|
@discusses = paginateHelper @discusses, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 实训反馈
|
|
|
def shixun_feedback_message
|
|
|
@menu_type = 8
|
|
|
@sub_type = 2
|
|
|
@search = params[:search]
|
|
|
@beginTime = params[:beginTime]
|
|
|
@endTime = params[:endTime]
|
|
|
if @search.present?
|
|
|
shixun_ids = Shixun.where("name like ?", "%#{params[:search]}%").pluck(:id)
|
|
|
@discusses = Discuss.where(:dis_type => "Shixun", :dis_id => shixun_ids).reorder("created_at desc")
|
|
|
else
|
|
|
@discusses = Discuss.where(:dis_type => "Shixun").reorder("created_at desc")
|
|
|
end
|
|
|
|
|
|
if params[:beginTime] && params[:beginTime].strip != ""
|
|
|
@discusses = @discusses.where("created_at >= '#{Time.parse(params[:beginTime])}'")
|
|
|
end
|
|
|
if params[:endTime] && params[:endTime].strip != ""
|
|
|
@discusses = @discusses.where("created_at <= '#{Time.parse(params[:endTime])}'")
|
|
|
end
|
|
|
|
|
|
@all_discusses = @discusses
|
|
|
@discusses_count = @discusses.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@discusses_pages = Paginator.new @discusses_count, @limit, @page
|
|
|
@offset ||= @discusses_pages.offset
|
|
|
@discusses = paginateHelper @discusses, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
shixun_ids = @all_discusses.pluck(:dis_id).uniq
|
|
|
filename = "#{Time.now.strftime("%Y%m%d")}-实训反馈.xls"
|
|
|
send_data(shixun_feedback_xls(shixun_ids, @beginTime, @endTime), :type => "text/excel;charset=utf-8; header=present", :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def evaluate_recod_time
|
|
|
eva = EvaluateRecord.find(params[:record_id])
|
|
|
@consume_time = eva.consume_time
|
|
|
@student_work = eva.student_work
|
|
|
@file_update = eva.file_update
|
|
|
@git_pull = eva.git_pull
|
|
|
@create_pod = eva.create_pod
|
|
|
@pod_execute = eva.pod_execute
|
|
|
@test_cases = eva.test_cases
|
|
|
@return_back = eva.return_back
|
|
|
@brige = eva.brige
|
|
|
@front_js = eva.front_js
|
|
|
end
|
|
|
|
|
|
def evaluate_simple
|
|
|
page = params[:page]
|
|
|
@recodes = EvaluateRecord.where("created_at > ?", Time.now - 1.days).reorder("consume_time desc")
|
|
|
@recodes_count = @recodes.size
|
|
|
@record_pages = Paginator.new @recodes_count, 20, page || 1
|
|
|
@offset ||= @record_pages.offset
|
|
|
@recodes = paginateHelper @recodes, 20
|
|
|
end
|
|
|
|
|
|
# 评测时间列表
|
|
|
def evaluate_records
|
|
|
shixun_tomcat = Redmine::Configuration['shixun_tomcat']
|
|
|
uri = "#{shixun_tomcat}/bridge/monitor/getPodsInfo"
|
|
|
res = uri_exec uri, params
|
|
|
if res['code'] == 0
|
|
|
@pod_num = res['sum']
|
|
|
@pod_dis = JSON.parse(res['distr']) if res['distr'].present?
|
|
|
end
|
|
|
|
|
|
page = (params['page'] || 1).to_i
|
|
|
search = params[:search]
|
|
|
keyword = params[:keyword]
|
|
|
limit = 20
|
|
|
|
|
|
if search.present?
|
|
|
if "u_name" == keyword
|
|
|
@evaluate_recods = EvaluateRecord.joins("join users u on evaluate_records.user_id = u.id").where("concat(u.lastname, u.firstname) like '%#{search}%'")
|
|
|
# @evaluate_recods = EvaluateRecord.where(user_id: User.where("concat(lastname, firstname) like '%#{search}%'").pluck(:id))
|
|
|
else
|
|
|
@evaluate_recods = EvaluateRecord.joins("join user_extensions ue on evaluate_records.user_id = ue.user_id").where("ue.school_id in (select id from schools where name like '%#{search}%')")
|
|
|
# @evaluate_recods = EvaluateRecord.where(user_id: UserExtensions.where(school_id: School.where("name like '%#{search}%'").pluck(:id)).pluck(:user_id))
|
|
|
end
|
|
|
else
|
|
|
@evaluate_recods = EvaluateRecord.where(nil)
|
|
|
end
|
|
|
|
|
|
if params[:beginTime].present?
|
|
|
endTime = params[:endTime].present? ? params[:endTime] : Time.now
|
|
|
@evaluate_recods = @evaluate_recods.where("created_at >= ? and created_at <= ?", params[:beginTime], endTime)
|
|
|
end
|
|
|
|
|
|
@evaluate_recods_count = @evaluate_recods.count
|
|
|
@evaluate_recods_pages = Paginator.new @evaluate_recods_count, limit, page
|
|
|
@evaluate_recods = @evaluate_recods.page(page).per(limit)
|
|
|
@evaluate_recods = @evaluate_recods.includes(:shixun, :user)
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 作业回复
|
|
|
def leave_message
|
|
|
@menu_type = 8
|
|
|
@sub_type = 1
|
|
|
@jour = JournalsForMessage.where(:jour_type => 'HomeworkCommon').order("created_on desc")
|
|
|
@jour_count = @jour.count
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@jour_pages = Paginator.new @jour_count, @limit, params['page'] || 1
|
|
|
@offset ||= @jour_pages.offset
|
|
|
@jour = paginateHelper @jour, @limit
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 讨论区
|
|
|
def messages_list
|
|
|
@menu_type = 8
|
|
|
@sub_type = 3
|
|
|
@memo = Memo.where("0=0").order("created_at desc")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@memo_count = @memo.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@memo_pages = Paginator.new @memo_count, @limit, params['page'] || 1
|
|
|
@offset ||= @memo_pages.offset
|
|
|
@memo = paginateHelper @memo, @limit
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def course_messages_list
|
|
|
@menu_type = 8
|
|
|
@sub_type = 4
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
# @message = Message.find_by_sql("SELECT * FROM messages WHERE board_id IN (SELECT id FROM boards WHERE course_id IS NOT NULL) order by created_on #{@sx_order}")
|
|
|
@message = Message.includes(:board).where("boards.course_id is not null").order("created_on #{@sx_order}")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@message_count = @message.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@message_pages = Paginator.new @message_count, @limit, params['page'] || 1
|
|
|
@offset ||= @message_pages.offset
|
|
|
@message = paginateHelper @message, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
# 专业列表
|
|
|
def profession
|
|
|
@major=Major.where("0=0")
|
|
|
# @menu_type = 12
|
|
|
@sub_type = 1
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
major_level_option = params[:major_level] if params[:major_level]
|
|
|
discipline_category_option = params[:discipline_category_id] if params[:discipline_category_id]
|
|
|
first_level_discipline_option = params[:first_level_discipline_id] if params[:first_level_discipline_id]
|
|
|
if major_level_option && major_level_option != '0'
|
|
|
@major = @major.where(:major_level => major_level_option)
|
|
|
end
|
|
|
if discipline_category_option && discipline_category_option != '0'
|
|
|
@major=@major.where(:discipline_category_id => discipline_category_option)
|
|
|
end
|
|
|
if first_level_discipline_option && first_level_discipline_option != '0'
|
|
|
@major=@major.where(:first_level_discipline_id => first_level_discipline_option)
|
|
|
end
|
|
|
|
|
|
if params[:support_shixuns]
|
|
|
@major = @major.where(:support_shixuns => params[:support_shixuns].to_i,:major_level=> 2)
|
|
|
end
|
|
|
|
|
|
@major = @major.order("created_at #{@sx_order}")
|
|
|
@major_count = @major.count
|
|
|
limit = 20
|
|
|
@is_remote = true
|
|
|
@major_pages = Paginator.new @major_count, limit, params['page'] || 1
|
|
|
@offset ||= @major_pages.offset
|
|
|
@major = paginateHelper @major, limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 新增专业页面
|
|
|
def new_major
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 新增专业
|
|
|
def insert_major
|
|
|
major_list = Major.create(:name=>params[:major],:first_level_discipline_id=>params[:first_level_discipline_id],:major_level=>params[:major_level],:discipline_category_id=>params[:discipline_category_id],:major_code=>params[:major_code])
|
|
|
redirect_to profession_managements_path
|
|
|
end
|
|
|
|
|
|
# 支撑实训
|
|
|
def support_shixun
|
|
|
if params[:syllabus_id]
|
|
|
major = Major.find params[:syllabus_id]
|
|
|
major.update_attributes(:support_shixuns => !major.support_shixuns)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 实训适用课程
|
|
|
def applicable_course
|
|
|
# @menu_type = 12
|
|
|
@sub_type = 2
|
|
|
@major = Major.where(:major_level => 2,:support_shixuns => 1)
|
|
|
@courselist = CourseList.where("0=0")
|
|
|
search=params[:search]
|
|
|
unless search.blank?
|
|
|
@courselist = @courselist.where("name like '%#{search}%'")
|
|
|
end
|
|
|
@courselist = @courselist.reorder("created_at desc")
|
|
|
@courselist_count = @courselist.count
|
|
|
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@page = params['page'] ? params['page'].to_i : 1
|
|
|
@courselist_pages = Paginator.new @courselist_count, @limit, @page
|
|
|
@offset ||=@courselist_pages.offset
|
|
|
@courselist = paginateHelper @courselist, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 增加课程
|
|
|
def add_course
|
|
|
courselist= CourseList.create(:name => params[:course])
|
|
|
redirect_to applicable_course_managements_path
|
|
|
end
|
|
|
|
|
|
# 增加课程所属专业
|
|
|
def add_major
|
|
|
data = {result: 0}
|
|
|
id = MajorCourse.where(:course_list_id => params[:course_list_id]).first
|
|
|
if (id.nil?) || (params[:major_id].to_i != '0' && params[:major_id].to_i != id.major_id)
|
|
|
MajorCourse.create(:course_list_id => params[:course_list_id],:major_id=>params[:major_id])
|
|
|
data[:result] = 1
|
|
|
end
|
|
|
render :json => data
|
|
|
end
|
|
|
|
|
|
# 竞赛列表
|
|
|
def competition
|
|
|
@menu_type = 5
|
|
|
@sub_type = 1
|
|
|
@competitions = Competition.order("created_at desc")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 竞赛报名列表
|
|
|
def enroll_list
|
|
|
@order = params[:order].blank? ? "desc" : params[:order]
|
|
|
@competition = Competition.where(:id => params[:competition]).first
|
|
|
|
|
|
@only_teacher = @competition.competition_staffs.count == 1 && @competition.competition_staffs.first.category == 'teacher'
|
|
|
|
|
|
@team_members = @competition.team_members
|
|
|
@team_members = @team_members.where("team_members.is_teacher = 0") unless @only_teacher # 只有老师报名时才显示老师,此时老师作为队员
|
|
|
|
|
|
if params[:school] || params[:location]
|
|
|
school_ids = School.where("schools.name like '%#{params[:school]}%'").pluck(:id)
|
|
|
school_ids = school_ids.size == 0 ? "(-1)" : "(" + school_ids.join(",") + ")"
|
|
|
location = params[:location] && params[:location] != "0" ? params[:location] : ""
|
|
|
@team_members = @team_members.includes(user: { user_extensions: :school }).where("user_extensions.school_id in #{school_ids} and schools.province like '%#{location}%'")
|
|
|
end
|
|
|
@page = params[:page] || 1
|
|
|
@team_members = @team_members.reorder("team_members.created_at #{@order}")
|
|
|
all_members = @team_members
|
|
|
@team_members = paginateHelper(@team_members.preload(competition_team: [:user, teachers: :user], user: { user_extensions: :school }), 50)
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
filename = "#{Time.now.strftime("%Y%m%d")}-#{@competition.name}.xls"
|
|
|
send_data(competition_member_xls(all_members, @competition), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def competition_setting
|
|
|
@menu_type = 5
|
|
|
@sub_type = 1
|
|
|
if Competition.where(:identifier => params[:com_id]).blank?
|
|
|
@competition = Competition.where(:id => params[:com_id]).first
|
|
|
else
|
|
|
@competition = Competition.where(:identifier => params[:com_id]).first
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def create_competition_text
|
|
|
CompetitionTextConfig.create(:name => params[:name], :description => params[:description], :competition_id => params[:competition_id])
|
|
|
render :json => {:status => 1}
|
|
|
end
|
|
|
|
|
|
def update_competition_text
|
|
|
text = CompetitionTextConfig.find(params[:id])
|
|
|
text.update_attributes(name: params[:name], description: params[:description])
|
|
|
render :json => {:status => 1}
|
|
|
end
|
|
|
|
|
|
def delete_competition_text
|
|
|
ctc = CompetitionTextConfig.find params[:id]
|
|
|
ctc.destroy
|
|
|
render :json => {:status => 1}
|
|
|
end
|
|
|
|
|
|
# 导入单位部门
|
|
|
def import_departments
|
|
|
attachments = params[:attachments]
|
|
|
attachments.each do |attachment|
|
|
|
attachment = Attachment.find_by_token_only(attachment[1]['token'])
|
|
|
if attachment.present?
|
|
|
attachment.container_id = 1
|
|
|
attachment.container_type = "ImportDepartment"
|
|
|
attachment.save
|
|
|
end
|
|
|
end
|
|
|
|
|
|
new_atta = Attachment.where(:container_id => 1, :container_type => "ImportDepartment").last
|
|
|
if new_atta.present?
|
|
|
Rails.logger.info("---------------------attachment_id: #{new_atta.id}")
|
|
|
|
|
|
path = new_atta.disk_directory
|
|
|
name = new_atta.disk_filename
|
|
|
if name.split(".").last == "xls"
|
|
|
begin
|
|
|
xls = Roo::Spreadsheet.open("files/#{path}/#{name}",extension: :xls)
|
|
|
worksheet = xls.sheet(0)
|
|
|
n2 = worksheet.last_row #最后一行数
|
|
|
rows = n2 - 1
|
|
|
count = 0
|
|
|
rows.times do |r| #行数
|
|
|
school_id = worksheet.cell(r+2, 1)
|
|
|
if school_id.present?
|
|
|
school = School.where(:id => school_id).first
|
|
|
if school.present?
|
|
|
if school.departments.where(:name => worksheet.cell(r+2, 2)).count == 0
|
|
|
school.departments << Department.new(:name => worksheet.cell(r+2, 2), :is_auth => 1)
|
|
|
count = count + 1
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@status = "已导入#{count}个部门"
|
|
|
rescue
|
|
|
@status = "无法完成导入,原因:文件内容无法读取"
|
|
|
end
|
|
|
else
|
|
|
@status = "无法完成导入,原因:文件类型错误(只支持.xls文件)"
|
|
|
end
|
|
|
new_atta.destroy
|
|
|
else
|
|
|
@status = "无法完成导入,原因:文件不存在"
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 单位部门列表
|
|
|
def departments
|
|
|
@menu_type = 6
|
|
|
@sub_type = 2
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
@department = Department.where(:is_auth => 1).is_active
|
|
|
search = params[:search]
|
|
|
admin = params[:admin].to_i
|
|
|
url = params[:url].to_i
|
|
|
if search.blank?
|
|
|
@department = @department
|
|
|
else
|
|
|
apply = School.where("name like '%#{search}%'").map(&:id)
|
|
|
@department = @department.where(:school_id => apply)
|
|
|
end
|
|
|
if admin == 0
|
|
|
@department = @department
|
|
|
else
|
|
|
department_ids = DepartmentMember.pluck(:department_id).uniq
|
|
|
@department = @department.where(:id => department_ids)
|
|
|
end
|
|
|
|
|
|
if url == 1
|
|
|
@department = @department.where("identifier is not null and identifier != ''")
|
|
|
end
|
|
|
|
|
|
@department = @department.reorder("created_at #{@sx_order}")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@department_count =@department.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@department_pages = Paginator.new @department_count, @limit, params['page'] || 1
|
|
|
@offset ||=@department_pages.offset
|
|
|
@department = paginateHelper @department, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def partners
|
|
|
@menu_type = 6
|
|
|
@sub_type = 3
|
|
|
if params[:search].blank?
|
|
|
@partners = Partner.includes(:school).order("partners.created_at desc")
|
|
|
else
|
|
|
@partners = Partner.includes(:school).where("schools.name like ? ", "%#{params[:search]}%").order("partners.created_at desc")
|
|
|
end
|
|
|
|
|
|
@current_partner = nil
|
|
|
if params[:partner]
|
|
|
@current_partner = @partners.find params[:partner]
|
|
|
else
|
|
|
@current_partner = @partners[0] if @partners.size > 0
|
|
|
end
|
|
|
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def get_partner
|
|
|
@partner = Partner.find partner
|
|
|
|
|
|
end
|
|
|
|
|
|
def delete_partner
|
|
|
partner = Partner.find params[:partner_id]
|
|
|
partner.destroy
|
|
|
@partners = Partner.includes(:school).order("partners.created_at desc")
|
|
|
@current_partner = nil
|
|
|
end
|
|
|
|
|
|
|
|
|
# 添加客户
|
|
|
def customers_list
|
|
|
@search = params[:search]
|
|
|
@province = params[:province]
|
|
|
partner_id = params[:partner_id]
|
|
|
@partner = Partner.find partner_id
|
|
|
@customers = @partner.customers
|
|
|
existed_school_ids = @customers.pluck(:school_id)
|
|
|
existed_school_ids = existed_school_ids.present? ? existed_school_ids.join(",") : -1
|
|
|
@schools = School.where("id not in (#{existed_school_ids})")
|
|
|
|
|
|
if params[:search]
|
|
|
@schools = @schools.where("name like ?", "%#{@search}%")
|
|
|
end
|
|
|
|
|
|
if params[:province] && params[:province] != '0'
|
|
|
@schools = @schools.where("province like ?", "%#{@province}%")
|
|
|
end
|
|
|
@limit = 10
|
|
|
@page = params[:page] || 1
|
|
|
@schools_count = @schools.count
|
|
|
|
|
|
@total_pages = (@schools_count / 10.0).ceil
|
|
|
@schools = paginateHelper @schools, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.json {
|
|
|
render json: @schools
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def add_customers
|
|
|
school_ids = params[:school_ids]
|
|
|
partner_id = params[:partner_id]
|
|
|
if school_ids.length > 0 && partner_id.present?
|
|
|
school_ids.each do |s|
|
|
|
school = School.where("id = ?",s).first
|
|
|
if school.present?
|
|
|
customer = Customer.new(school_id: s)
|
|
|
customer.save!
|
|
|
PartnerCustomer.create!(partner_id: partner_id,customer_id: customer.id )
|
|
|
school.update_attributes(customer_id: customer.id)
|
|
|
end
|
|
|
end
|
|
|
render :json => {status: 1, message: "创建成功!"}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def delete_customers
|
|
|
if params[:customer]
|
|
|
customer = Customer.find(params[:customer])
|
|
|
@current_partner = Partner.find(params[:partner_id])
|
|
|
customer.destroy
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 添加合作伙伴弹框数据
|
|
|
def all_partners
|
|
|
@search = params[:search]
|
|
|
@province = params[:province]
|
|
|
# 已经选过的合作伙伴不能再再列表中显示
|
|
|
used_school_ids = Partner.pluck(:school_id)
|
|
|
used_school_ids = used_school_ids.blank? ? -1 : used_school_ids.join(",")
|
|
|
@schools = School.where("id not in (#{used_school_ids})")
|
|
|
|
|
|
if params[:search]
|
|
|
@schools = @schools.where("name like ?", "%#{@search}%")
|
|
|
end
|
|
|
|
|
|
if params[:province] && params[:province] != '0'
|
|
|
@schools = @schools.where("province like ?", "%#{@province}%")
|
|
|
end
|
|
|
|
|
|
@limit = 10
|
|
|
@page = params[:page] || 1
|
|
|
@schools_count = @schools.count
|
|
|
|
|
|
@total_pages = (@schools_count / 10.0).ceil
|
|
|
@schools = paginateHelper @schools, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.json {
|
|
|
render json: @schools
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def add_partner
|
|
|
school_ids = params[:school_ids]
|
|
|
if school_ids.length > 0
|
|
|
school_ids.each do |s|
|
|
|
old_partner = Partner.where(:school_id => s)
|
|
|
if old_partner.blank?
|
|
|
partner = Partner.new(school_id: s)
|
|
|
partner.save
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
render :json => {status: 1, message: "创建成功!"}
|
|
|
end
|
|
|
|
|
|
# 删除部门管理员
|
|
|
def delete_depart_member
|
|
|
DepartmentMember.where(:department_id => params[:depart], :user_id => params[:user_id]).destroy_all
|
|
|
end
|
|
|
|
|
|
# 添加部门管理员-弹框
|
|
|
def add_depart_member_box
|
|
|
@department = Department.where(:id => params[:depart]).first
|
|
|
#@members = User.where(:id => UserExtensions.where(:school_id => @department.try(:school_id)).map(&:user_id), :certification => 1)
|
|
|
|
|
|
@members =
|
|
|
if params[:search]
|
|
|
User.where("LOWER(concat(lastname, firstname, nickname, mail)) LIKE '%#{params[:search]}%'")
|
|
|
else
|
|
|
User.where(:certification => 1)
|
|
|
end
|
|
|
@members = paginateHelper @members, 8
|
|
|
end
|
|
|
|
|
|
# 添加部门管理员
|
|
|
def add_depart_member
|
|
|
if params[:depart] && params[:depart_member]
|
|
|
@department = Department.where(:id => params[:depart]).first
|
|
|
params[:depart_member].each do |member|
|
|
|
@department.department_members << DepartmentMember.new(:user_id => member)
|
|
|
end
|
|
|
end
|
|
|
redirect_to partners_managments_path
|
|
|
|
|
|
# respond_to do |format|
|
|
|
# format.html {render :layout => "base_edu"}
|
|
|
# format.js
|
|
|
# end
|
|
|
|
|
|
end
|
|
|
|
|
|
# 添加合作伙伴管理员- 弹框
|
|
|
def add_partner_member_box
|
|
|
@partner = Partner.where(:id => params[:partner]).first
|
|
|
@members =
|
|
|
if params[:search]
|
|
|
User.where("LOWER(concat(lastname, firstname, nickname, mail)) LIKE '%#{params[:search]}%' AND partner_id is NULL")
|
|
|
else
|
|
|
User.where(:certification => 1, :partner_id => nil )
|
|
|
end
|
|
|
@total_pages = (@members.count / 10.0).ceil
|
|
|
@members = paginateHelper @members, 10
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.json {
|
|
|
render json: member_json_data(@members)
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 合作伙伴添加管理员
|
|
|
def add_partner_member
|
|
|
if params[:partner] && params[:partner_member]
|
|
|
@partner = Partner.find_by_id params[:partner]
|
|
|
params[:partner_member].each do |member|
|
|
|
user = User.find_by_id member
|
|
|
user.update_attributes(partner_id: @partner.id) if !@partner.nil? && !user.nil?
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 合作伙伴删除管理员
|
|
|
def delete_partner_member
|
|
|
if params[:partner] && params[:partner_member]
|
|
|
@partner = Partner.find_by_id params[:partner]
|
|
|
user = User.find_by_id params[:partner_member]
|
|
|
user.update_attributes(partner_id: nil) if !@partner.nil? && !user.nil?
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
# check 部门 identifier是否重复
|
|
|
def check_depart_identifier
|
|
|
logger.info("###############{params}")
|
|
|
if params[:depart]
|
|
|
result = Department.where("id != #{params[:depart]} and identifier = '#{params[:identifier]}'").count == 0 || params[:identifier] == ""
|
|
|
render :json => {result: result}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 更新部门 identifier
|
|
|
def update_depart_identifier
|
|
|
if params[:depart] && params[:identifier]
|
|
|
@department = Department.where(:id => params[:depart]).first
|
|
|
identifier = params[:identifier].strip.blank? ? nil : params[:identifier].strip
|
|
|
@department.update_attributes(:identifier => identifier) if @department.present?
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 更新部门 host_count
|
|
|
def update_host_count
|
|
|
if params[:depart] && params[:host_count]
|
|
|
@department = Department.where(:id => params[:depart]).first
|
|
|
@department.update_attributes(:host_count => params[:host_count]) if @department.present?
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 新增
|
|
|
def create_departments
|
|
|
dep = Department.order("created_at desc").first
|
|
|
@latest_school = School.find(dep.try(:school_id)).try(:name)
|
|
|
@school_id = dep.try(:school_id)
|
|
|
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def add_department
|
|
|
department = Department.where(:school_id => params[:school], :name => params[:department]).first
|
|
|
if department.nil?
|
|
|
department = Department.create(:school_id => params[:school],:name => params[:department],:is_auth => 1)
|
|
|
ApplyAddDepartment.create(:school_id => params[:school],
|
|
|
:status => 1,
|
|
|
:name => params[:department],
|
|
|
:department_id => department.id,
|
|
|
:user_id => User.current.id)
|
|
|
end
|
|
|
redirect_to departments_managements_path
|
|
|
end
|
|
|
|
|
|
# 更改单位部门列表
|
|
|
def update_department
|
|
|
dep = Department.find params[:department_id]
|
|
|
@edit_id = params[:department_id]
|
|
|
@search = params[:search]
|
|
|
if !params[:search].nil?
|
|
|
search = "%#{params[:search].to_s.strip.downcase}%"
|
|
|
@departments = Department.where("school_id = #{dep.school_id} and is_auth = 1 and id != #{params[:department_id].to_i} and #{Department.table_name}.name like :p", :p => search)
|
|
|
#@schools = School.all
|
|
|
else
|
|
|
@departments = Department.where("school_id = #{dep.school_id} and is_auth = 1 and id != #{params[:department_id].to_i}")
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 修改部门名称
|
|
|
def update_depart_name
|
|
|
@depart = Department.find(params[:depart_id])
|
|
|
@depart.update_attributes(:name => params[:depart_name]) if @depart.school.departments.where(name: params[:depart_name]).count == 0
|
|
|
end
|
|
|
|
|
|
# 检查是否存在同名的部门
|
|
|
def check_depart_name
|
|
|
depart = Department.find(params[:depart_id])
|
|
|
if depart.school.departments.where(name: params[:depart_name]).count == 0
|
|
|
render :json => {status: 0, message: ""}
|
|
|
else
|
|
|
render :json => {status: -1, message: "该名称已存在"}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def edit_departments_school
|
|
|
begin
|
|
|
dep = Department.find(params[:department_id])
|
|
|
alter_dep = Department.find(params[:alter_dep_id])
|
|
|
apply_dep = ApplyAddDepartment.where(:department_id => params[:alter_dep_id])
|
|
|
if dep && alter_dep && dep != alter_dep
|
|
|
# users = UserExtensions.where("department_id = #{dep.id}")
|
|
|
# users.update_all(:department_id => params[:alter_dep_id])
|
|
|
# dep.destroy
|
|
|
# apply_dep.update_all(:status => 2)
|
|
|
# ApplyAddDepartment.where(:department_id =>params[:departments]).update_all(:department_id=>department_id)
|
|
|
# users = UserExtensions.where("department_id = #{alt_dep.department_id}")
|
|
|
# users.update_all(:department_id => department.id)
|
|
|
apply_dep.destroy_all
|
|
|
users = UserExtensions.where(:department_id => params[:alter_dep_id])
|
|
|
users.update_all(:department_id => dep.id)
|
|
|
dep.update_attributes(:identifier => alter_dep.identifier) if dep.identifier.nil? && alter_dep.identifier.present?
|
|
|
alter_dep.destroy
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
puts e
|
|
|
end
|
|
|
redirect_to departments_managements_path
|
|
|
end
|
|
|
|
|
|
# 单位列表
|
|
|
def departments_part
|
|
|
@menu_type = 6
|
|
|
@sub_type = 1
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
search = params[:search]
|
|
|
if search.blank?
|
|
|
@schools = School.where("0=0")
|
|
|
else
|
|
|
@schools = School.where("name like ?", "%#{search}%")
|
|
|
end
|
|
|
if params[:index] == '8'
|
|
|
@schools = @schools.reorder("created_at #{@sx_order}")
|
|
|
@order_type = "created_at"
|
|
|
elsif params[:index] == '9'
|
|
|
@schools = @schools.reorder("updated_at #{@sx_order}")
|
|
|
@order_type = "updated_at"
|
|
|
elsif params[:index] == "6"
|
|
|
@order_type = "usercount"
|
|
|
@schools.each do |school|
|
|
|
school[:usercount] = UserExtensions.where(:school_id => school.id).count
|
|
|
end
|
|
|
@sx_order == "desc" ? @schools = @schools.sort{|x,y| y[:usercount] <=> x[:usercount]} : @schools = @schools.sort{|x,y| x[:usercount] <=> y[:usercount]}
|
|
|
else
|
|
|
@schools = @schools.reorder("created_at #{@sx_order}")
|
|
|
end
|
|
|
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@schools_count = @schools.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@schools_pages = Paginator.new @schools_count, @limit, params['page'] || 1
|
|
|
@offset ||= @schools_pages.offset
|
|
|
@schools= paginateHelper @schools, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
# 新增部门名称
|
|
|
def add_departments_part
|
|
|
|
|
|
end
|
|
|
|
|
|
# 修改单位名称
|
|
|
def upload_logo
|
|
|
@menu_type = 6
|
|
|
@sub_type = 1
|
|
|
@next_type = 1
|
|
|
@school = School.find(params[:school])
|
|
|
|
|
|
end
|
|
|
|
|
|
# 添加学校视频描述
|
|
|
def add_contents_for_school
|
|
|
school = School.find params[:school_id]
|
|
|
school.update_attributes(:video_desc => params[:video_desc], :video_name => params[:video_name])
|
|
|
render :json => {status: 1, message: "创建成功!"}
|
|
|
end
|
|
|
|
|
|
# 添加学校课程信息
|
|
|
def add_course_info_for_school
|
|
|
school = School.find params[:school_id]
|
|
|
school.update_attributes(:course_link => params[:course_link], :course_name => params[:course_name])
|
|
|
render :json => {status: 1, message: "创建成功!"}
|
|
|
end
|
|
|
|
|
|
# 修改单位名称为其他
|
|
|
def school_upload_logo
|
|
|
school = School.where(:id => params[:applied_id]).first
|
|
|
ApplyAddSchools.where(:school_id => params[:applied_id]).destroy_all
|
|
|
before_apply_departments = Department.where(:school_id => params[:applied_id])
|
|
|
before_apply_departments.each do |department|
|
|
|
after_dep = Department.where(:school_id => params[:school_id], :name => department.name).first
|
|
|
if after_dep
|
|
|
UserExtensions.where(:school_id => params[:applied_id], :department_id => department.id).update_all(:department_id => after_dep.id)
|
|
|
department.apply_add_departments.destroy_all
|
|
|
department.destroy
|
|
|
else
|
|
|
department.apply_add_departments.update_all(:school_id => params[:school_id])
|
|
|
department.update_attribute(:school_id, params[:school_id])
|
|
|
end
|
|
|
end
|
|
|
UserExtensions.where(:school_id => params[:applied_id]).update_all(:school_id => params[:school_id])
|
|
|
school.destroy
|
|
|
redirect_to departments_part_managements_path
|
|
|
end
|
|
|
|
|
|
# 修改单位信息
|
|
|
def school_message_update
|
|
|
school_name = params[:schoolname]
|
|
|
school_id = params[:school_id]
|
|
|
School.where(:id => school_id).update_all(:name => school_name,:province => params[:province],:city =>params[:city],:address => params[:address],:shool_code => params[:school_code], :identifier => params[:identifier])
|
|
|
redirect_to departments_part_managements_path
|
|
|
|
|
|
end
|
|
|
|
|
|
# 删除单位
|
|
|
def delete_school
|
|
|
school = School.where(:id => params[:school]).first
|
|
|
UserExtensions.where(:school_id => params[:school]).update_all(school_id: nil, department_id: nil)
|
|
|
User.joins(:user_extension).where(user_extensions: {school_id: params[:school]}).update_all(profile_completed: false)
|
|
|
ApplyAddSchools.where(:school_id => params[:school]).destroy_all
|
|
|
ApplyAddDepartment.where(:school_id => params[:school]).destroy_all
|
|
|
school.destroy
|
|
|
redirect_to departments_part_managements_path
|
|
|
end
|
|
|
|
|
|
def save_school
|
|
|
uploaded_io = params[:logo]
|
|
|
school_pinyin = Pinyin.t(params[:schoolname].strip, splitter: '')
|
|
|
sl = School.create(:name => params[:schoolname],:province => params[:province],:city => params[:city],:address => params[:address],:pinyin =>school_pinyin)
|
|
|
# unless uploaded_io.nil?
|
|
|
# File.open(Rails.root.join('public', 'images', 'school', sl.id.to_s+'.png'), 'wb') do |file|
|
|
|
# file.write(uploaded_io.read)
|
|
|
# end
|
|
|
# sl.logo_link = '/images/school/'+sl.id.to_s+'.png'
|
|
|
# sl.save
|
|
|
# end
|
|
|
|
|
|
@user = User.current
|
|
|
@se = @user.extensions
|
|
|
|
|
|
# if @user.save && @se.save
|
|
|
# diskfile1 = disk_filename('school', sl.id , 'id')
|
|
|
# diskfileID = diskfile1 + 'temp'
|
|
|
# begin
|
|
|
# FileUtils.mv diskfileID, diskfile1, force: true if File.exist? diskfileID
|
|
|
# ensure
|
|
|
# File.delete(diskfileID) if File.exist?(diskfileID)
|
|
|
# end
|
|
|
# end
|
|
|
redirect_to departments_part_managements_path
|
|
|
end
|
|
|
|
|
|
# 部门审核
|
|
|
def depart
|
|
|
@menu_type = 10
|
|
|
@sub_type = 3
|
|
|
search = params[:search]
|
|
|
@apply_status = ApplyAddDepartment.where(:status=>0)
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
if search.blank?
|
|
|
@apply_status = @apply_status.where("0=0")
|
|
|
else
|
|
|
@apply_status= @apply_status.where("name like '%#{search}%'")
|
|
|
end
|
|
|
@apply_status = @apply_status.order("created_at #{@sx_order}")
|
|
|
@apply_status_count = @apply_status.count
|
|
|
limit = 20
|
|
|
@is_remote = true
|
|
|
@apply_status_pages = Paginator.new @apply_status_count, limit, params['page'] || 1
|
|
|
@offset ||=@apply_status_pages.offset
|
|
|
@apply_status = paginateHelper @apply_status, limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 批准
|
|
|
def approve_applied_departments
|
|
|
applied_department = ApplyAddDepartment.find(params[:id])
|
|
|
applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment")
|
|
|
applied_message.update_all(:status => 1)
|
|
|
if applied_department.department
|
|
|
applied_department.department.update_attributes(:is_auth => 1)
|
|
|
end
|
|
|
applied_department.update_attribute(:status, 1) unless applied_department.nil?
|
|
|
# AppliedMessage.create(:user_id => applied_department.user_id, :status => 1, :viewed => 0, :applied_id => applied_department.id, :applied_type => "ApplyAddDepartment", :name => applied_department.name )
|
|
|
UserExtensions.where(:user_id => applied_department.user_id).update_all(:department_id => applied_department.department_id)
|
|
|
Tiding.where(:user_id => 1, :trigger_user_id => applied_department.user_id, :container_id => applied_department.id, :container_type => 'ApplyAddDepartment', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => applied_department.user_id, :trigger_user_id => 0, :container_id => applied_department.id, :container_type =>'ApplyAddDepartment', :belong_container_id => applied_department.department.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 1)
|
|
|
|
|
|
respond_to do |format|
|
|
|
format.html{ redirect_to depart_managements_path }
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 删除
|
|
|
def delete_applied_departments
|
|
|
ActiveRecord::Base.transaction do
|
|
|
applied_department = ApplyAddDepartment.find params[:depart_id]
|
|
|
applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment")
|
|
|
applied_message.update_all(:status => 3)
|
|
|
applied_department.update_attribute(:status, 3)
|
|
|
# 未审批删除
|
|
|
if params[:tip] == "unapplied"
|
|
|
# AppliedMessage.create(:user_id => applied_department.user_id, :status => 3, :viewed => 0, :applied_id => applied_department.id, :applied_type => "ApplyAddDepartment", :name => applied_department.name )
|
|
|
Tiding.where(:user_id => 1, :trigger_user_id => applied_department.user_id, :container_id => applied_department.id, :container_type => 'ApplyAddDepartment', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => applied_department.user_id, :trigger_user_id => 0, :container_id => applied_department.id, :container_type =>'ApplyAddDepartment', :belong_container_id => applied_department.department.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 2, :extra => params[:reason])
|
|
|
# 删除学校的用户
|
|
|
user_exs = UserExtensions.where("department_id = #{applied_department.department_id}")
|
|
|
users = User.where(id: user_exs.pluck(:user_id))
|
|
|
user_exs.update_all(department_id: nil)
|
|
|
users.update_all(profile_completed: false)
|
|
|
applied_department.department.destroy
|
|
|
# 已审批删除
|
|
|
elsif params[:tip] == "applied"
|
|
|
applied_department.destroy
|
|
|
end
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.html{ redirect_to depart_managements_path }
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 部门修改
|
|
|
def all_department
|
|
|
@edit_id = params[:department_id]
|
|
|
@search = params[:search]
|
|
|
dep = ApplyAddDepartment.where(:id => @edit_id).first
|
|
|
if !params[:search].nil?
|
|
|
search = "%#{params[:search].to_s.strip.downcase}%"
|
|
|
@department = dep.school.departments.where("is_auth = 1 and #{Department.table_name}.name like :p", :p => search)
|
|
|
else
|
|
|
@department = dep.school.departments.where(:is_auth => 1)
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
# redirect_to unit_managements_path
|
|
|
end
|
|
|
|
|
|
# 修改
|
|
|
def edit_applied_department
|
|
|
aas =ApplyAddDepartment.find(params[:applied_id])
|
|
|
# aas.update_attribute(:name, params[:name])
|
|
|
#applied_add_school = ApplyAddSchools.where(:name => aas.name)
|
|
|
department =Department.find params[:department_id]
|
|
|
begin
|
|
|
#更新消息表的status
|
|
|
if aas.department_id != department.id.to_i
|
|
|
apply_depart_id = aas.department_id
|
|
|
applied_message = AppliedMessage.where(:applied_id => apply_depart_id, :applied_type => "ApplyAddDepartment")
|
|
|
applied_message.update_all(:status => 4)
|
|
|
aas.update_attribute(:status, 2)
|
|
|
aas.tidings.update_all(:status => 1)
|
|
|
extra = department.name + "(#{department.school.try(:name)})"
|
|
|
Tiding.create(:user_id => aas.user_id, :trigger_user_id => 0, :container_id => aas.id, :container_type =>'ApplyAddDepartment', :belong_container_id => department.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 3, :extra => extra)
|
|
|
# AppliedMessage.create(:user_id => aas.user_id, :status => 2, :viewed => 0, :applied_id => aas.id, :applied_type => "ApplyAddDepartment", :name =>department.name )
|
|
|
users = UserExtensions.where("department_id = #{aas.department_id}")
|
|
|
users.update_all(:department_id => department.id)
|
|
|
aas.department.destroy
|
|
|
ApplyAddDepartment.where(:department_id => aas.department_id).update_all(:department_id => department.id)
|
|
|
Department.where(:department_id => aas.department_id).destroy_all
|
|
|
aas.destroy_all
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
puts e
|
|
|
end
|
|
|
redirect_to depart_managements_path
|
|
|
end
|
|
|
|
|
|
# 单位审批
|
|
|
def unit
|
|
|
@menu_type = 10
|
|
|
@sub_type = 4
|
|
|
search = params[:search]
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
@apply_status = ApplyAddSchools.where(:status=>0)
|
|
|
if search.blank?
|
|
|
@apply_status = @apply_status.where("0=0")
|
|
|
else
|
|
|
@apply_status= @apply_status.where("name like '%#{search}%'")
|
|
|
end
|
|
|
@apply_status = @apply_status.order("created_at #{@sx_order}")
|
|
|
@apply_status_count = @apply_status.count
|
|
|
limit = 20
|
|
|
@is_remote = true
|
|
|
@apply_status_pages = Paginator.new @apply_status_count, limit, params['page'] || 1
|
|
|
@offset ||= @apply_status_pages.offset
|
|
|
@apply_status = paginateHelper @apply_status, limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 单位审批批准
|
|
|
def approve_applied_schools
|
|
|
applied_school = ApplyAddSchools.where(:id =>params[:id]).first
|
|
|
applied_message_id = applied_school.school_id
|
|
|
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
|
|
|
applied_message.update_all(:status => 1)
|
|
|
unless applied_school.nil?
|
|
|
applied_school.update_column('status', 1)
|
|
|
end
|
|
|
school = applied_school.school
|
|
|
school.update_attribute("province", applied_school.province)
|
|
|
AppliedMessage.create(:user_id => applied_school.user_id, :status => 1, :viewed => 0, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
|
|
|
Tiding.where(:user_id => 1, :trigger_user_id => applied_school.user_id, :container_id => applied_school.id, :container_type => 'ApplyAddSchools', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => applied_school.user_id, :trigger_user_id => 0, :container_id => applied_school.id, :container_type =>'ApplyAddSchools', :belong_container_id => applied_school.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 1)
|
|
|
redirect_to unit_managements_path
|
|
|
end
|
|
|
|
|
|
# 删除
|
|
|
def delete_applied_schools
|
|
|
applied_school = ApplyAddSchools.find(params[:school_id])
|
|
|
applied_message_id = applied_school.school_id
|
|
|
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
|
|
|
applied_message.update_all(:status => 3)
|
|
|
applied_school.update_attribute(:status, 3)
|
|
|
# 单位对应的部门审核也应做删除处理
|
|
|
applied_departments = ApplyAddDepartment.where(:school_id => applied_school.school_id)
|
|
|
applied_departments.update_all(:status => 3)
|
|
|
AppliedMessage.where(:applied_id => applied_departments.map(&:id), :applied_type => "ApplyAddDepartment").update_all(:status => 3)
|
|
|
|
|
|
# 删除学校的用户
|
|
|
users = UserExtensions.where("school_id = #{applied_school.school_id}")
|
|
|
User.where(id: users.map(&:user_id)).update_all(profile_completed: false)
|
|
|
|
|
|
# 申请了职业认证的用户撤销申请
|
|
|
apply_user_auth = ApplyUserAuthentication.where(:user_id => users.map(&:user_id), :auth_type => 2, :status => 0)
|
|
|
apply_user_auth.each do |apply|
|
|
|
apply.tidings.destroy_all
|
|
|
apply.update_attribute('status', 3)
|
|
|
diskfile2 = disk_auth_filename('UserAuthentication', apply.user_id, 'PRO')
|
|
|
diskfilePRO = diskfile2 + 'temp'
|
|
|
File.delete(diskfilePRO) if File.exist?(diskfilePRO)
|
|
|
File.delete(diskfile2) if File.exist?(diskfile2)
|
|
|
end
|
|
|
|
|
|
users.update_all(:school_id => nil, :department_id => nil)
|
|
|
|
|
|
# 未审批删除
|
|
|
if params[:tip] == "unapplied"
|
|
|
# AppliedMessage.create(:user_id => applied_school.user_id, :status => 3, :viewed => 0, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
|
|
|
Tiding.where(:user_id => 1, :trigger_user_id => applied_school.user_id, :container_id => applied_school.id, :container_type => 'ApplyAddSchools', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => applied_school.user_id, :trigger_user_id => 0, :container_id => applied_school.id, :container_type =>'ApplyAddSchools', :belong_container_id => applied_school.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 2, :extra => params[:reason])
|
|
|
|
|
|
Tiding.where(:user_id => 1, :container_id => applied_departments.map(&:id), :container_type => 'ApplyAddDepartment', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
|
|
|
if applied_departments.first
|
|
|
Tiding.create(:user_id => applied_departments.first.user_id, :trigger_user_id => 0, :container_id => applied_departments.first.id, :container_type =>'ApplyAddDepartment', :belong_container_id => applied_school.school_id, :belong_container_type=> 'School', :tiding_type => "System", :status => 2)
|
|
|
AppliedMessage.create(:user_id => applied_departments.first.user_id, :status => 3, :viewed => 0, :applied_id => applied_departments.first.id, :applied_type => "ApplyAddDepartment", :name => applied_departments.first.name )
|
|
|
end
|
|
|
applied_school.school.destroy
|
|
|
applied_school.school.departments.destroy_all
|
|
|
redirect_to unit_managements_path
|
|
|
# 已审批删除
|
|
|
elsif params[:tip] == "applied"
|
|
|
applied_departments.destroy_all
|
|
|
applied_school.destroy
|
|
|
redirect_to unit_managements_path
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 单位审批修改
|
|
|
def all_schools
|
|
|
apply_schools = ApplyAddSchools.where("status = 0")
|
|
|
apply_school_ids = apply_schools.empty? ? "(#{params[:school_id].to_i})" : "(" + apply_schools.map{|sc| sc.school_id}.join(',') + ")"
|
|
|
if !params[:search].nil?
|
|
|
search = "%#{params[:search].to_s.strip.downcase}%"
|
|
|
@schools = School.where("id not in #{apply_school_ids} and id != #{params[:school_id].to_i} and #{School.table_name}.name like :p", :p => search)
|
|
|
else
|
|
|
@schools = School.where("id not in #{apply_school_ids} and id != #{params[:school_id].to_i}")
|
|
|
end
|
|
|
@edit_id = params[:school_id]
|
|
|
@search = params[:search]
|
|
|
@upload = params[:upload]
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 修改
|
|
|
def edit_applied_schools
|
|
|
aas = ApplyAddSchools.find(params[:applied_id])
|
|
|
school = School.find params[:school_id]
|
|
|
begin
|
|
|
#更新消息表的status
|
|
|
if aas.school_id != school.id.to_i
|
|
|
applied_message_id = aas.school_id
|
|
|
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
|
|
|
applied_message.update_all(:status => 4)
|
|
|
Tiding.where(:user_id => 1, :trigger_user_id => aas.user_id, :container_id => aas.id, :container_type => 'ApplyAddSchools', :status => 0, :tiding_type => "Apply").update_all(:status => 1)
|
|
|
|
|
|
aas.update_attribute(:status, 2)
|
|
|
# AppliedMessage.create(:user_id => aas.user_id, :status => 2, :viewed => 0, :applied_id => aas.id, :applied_type => "ApplyAddSchools", :name => school.name )
|
|
|
extra = school.try(:name).to_s
|
|
|
Tiding.create(:user_id => aas.user_id, :trigger_user_id => 0, :container_id => aas.id, :container_type =>'ApplyAddSchools', :belong_container_id => school.id, :belong_container_type=> 'School', :tiding_type => "System", :status => 3, :extra => extra)
|
|
|
users = UserExtensions.where("school_id = #{aas.school_id}")
|
|
|
users.update_all(:school_id => school.id)
|
|
|
ApplyAddDepartment.where(:school_id => aas.school_id).update_all(:school_id => school.id)
|
|
|
# 判断重复
|
|
|
before_apply_departments = Department.where(:school_id => aas.school_id)
|
|
|
before_apply_departments.each do |department|
|
|
|
after_dep = Department.where(:school_id => params[:school_id], :name => department.name).first
|
|
|
if after_dep.present?
|
|
|
UserExtensions.where(:school_id => aas.school_id, :department_id => department.id).update_all(:department_id => after_dep.id)
|
|
|
department.destroy
|
|
|
department.apply_add_departments.destroy_all
|
|
|
else
|
|
|
department.apply_add_departments.update_all(:school_id => school.id)
|
|
|
department.update_attribute(:school_id, school.id)
|
|
|
end
|
|
|
end
|
|
|
UserExtensions.where(:school_id => aas.school_id).update_all(:school_id => params[:school_id])
|
|
|
|
|
|
# Department.where(:school_id => aas.school_id).update_all(:school_id => school.id)
|
|
|
aas.school.destroy
|
|
|
aas.update_attribute(:school_id, school.id)
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
puts e
|
|
|
end
|
|
|
redirect_to unit_managements_path
|
|
|
end
|
|
|
|
|
|
# 课程列表
|
|
|
def classroom
|
|
|
@menu_type = 2
|
|
|
@sub_type = 1
|
|
|
@courselist = CourseList.where("0=0")
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
keyword = params[:keyword]
|
|
|
search = params[:search]
|
|
|
|
|
|
if params[:support_shixuns_search_title]
|
|
|
@courselist = @courselist.where(:support_shixuns_search => params[:support_shixuns_search_title].to_i)
|
|
|
end
|
|
|
if search.blank?
|
|
|
@courselist = @courselist
|
|
|
else
|
|
|
if "u_name" == keyword
|
|
|
# user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
|
|
|
@courselist = @courselist.includes(:user).where("concat(users.lastname, users.firstname) like '%#{search}%'")
|
|
|
else
|
|
|
@courselist = @courselist.where("name like '%#{search}%'")
|
|
|
end
|
|
|
end
|
|
|
@courselist = @courselist.order("course_lists.id #{@sx_order}")
|
|
|
@page = (params[:page] || 1).to_i
|
|
|
@courselist_count = @courselist.count
|
|
|
@limit = 20
|
|
|
@courselist_pages = Paginator.new @courselist_count, @limit, @page
|
|
|
@offset ||= @courselist_pages.offset
|
|
|
@courselist = paginateHelper @courselist,@limit
|
|
|
|
|
|
# @courselist = @courselist.order("courselist.created_at #{@sx_order}")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def rename_class
|
|
|
@page = params[:page]
|
|
|
@courselist = CourseList.where(:id => params[:course_list]).first
|
|
|
if request.get?
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
else
|
|
|
if @courselist
|
|
|
o_courselist = CourseList.where(:name => params[:name]).first
|
|
|
if o_courselist
|
|
|
@courselist.courses.each do |course|
|
|
|
course.update_attributes(:name => course.name.sub(@courselist.name, params[:name]), :course_list_id => o_courselist.id)
|
|
|
end
|
|
|
@courselist.shixun_major_courses.update_all(:course_list_id => o_courselist.id, :major_id => @courselist.major_courses.first.try(:major_id))
|
|
|
@courselist.destroy
|
|
|
else
|
|
|
@courselist.courses.each do |course|
|
|
|
course.update_attribute(:name, course.name.sub(@courselist.name, params[:name]))
|
|
|
end
|
|
|
@courselist.update_attributes(:name => params[:name])
|
|
|
end
|
|
|
end
|
|
|
redirect_to classroom_managements_path(:page => params[:page])
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def migrate_class
|
|
|
@page = params[:page]
|
|
|
@courselist = CourseList.where(:id => params[:course_list]).first
|
|
|
if request.get?
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
else
|
|
|
if @courselist
|
|
|
o_courselist = CourseList.where(:name => params[:name]).first
|
|
|
if o_courselist
|
|
|
@courselist.courses.each do |course|
|
|
|
course.update_column(:course_list_id, o_courselist.id)
|
|
|
end
|
|
|
@courselist.shixun_major_courses.update_all(:course_list_id => o_courselist.id, :major_id => @courselist.major_courses.first.try(:major_id))
|
|
|
@courselist.destroy
|
|
|
else
|
|
|
@courselist.update_column(:name, params[:name])
|
|
|
end
|
|
|
end
|
|
|
redirect_to classroom_managements_path(:page => params[:page])
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 支撑实训检索
|
|
|
def support_shixuns_search
|
|
|
if params[:shixun_id]
|
|
|
courselist = CourseList.find params[:shixun_id]
|
|
|
courselist.update_attributes(:support_shixuns_search => !courselist.support_shixuns_search)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 课堂列表
|
|
|
def classroom_classment
|
|
|
@menu_type = 2
|
|
|
@sub_type = 2
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
@courses = Course.where(:is_delete => 0)
|
|
|
@timing=Course.where(:is_end=>false).count
|
|
|
@end=Course.where(:is_end=>true).count
|
|
|
# unless params[:school_id] || params[:search] || params[:keyword] || params[:status]
|
|
|
# user_exs = UserExtensions.where(:school_id=> @courses.map(&:school_id))
|
|
|
# @schools = School.where(:id =>user_exs.map(&:school_id))
|
|
|
# end
|
|
|
@search = params[:search] # 搜索字
|
|
|
@keyword = params[:keyword].blank? ? "c_name" : params[:keyword] # 根据姓名/课程名搜索
|
|
|
@status = params[:status]
|
|
|
@school_id = params[:school_id]
|
|
|
|
|
|
if params[:school_id] && params[:school_id] != ''
|
|
|
@courses = @courses.where(school_id: params[:school_id])
|
|
|
end
|
|
|
|
|
|
if params[:homepage_show]
|
|
|
@courses = @courses.where(:homepage_show => params[:homepage_show].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:course_list] && params[:course_list] != ''
|
|
|
course_name = "%#{params[:course_list].strip}%"
|
|
|
course_lists = CourseList.where("name like '#{course_name}'").map(&:id)
|
|
|
@courses = @courses.where(:course_list_id => course_lists)
|
|
|
end
|
|
|
|
|
|
if params[:status] && params[:status]!=''
|
|
|
@courses = @courses.where(:is_end => @status.to_i)
|
|
|
end
|
|
|
if "c_name" == @keyword
|
|
|
@courses = @courses.where("name like ?", "%#{@search}%")
|
|
|
elsif "u_name" == @keyword
|
|
|
if @search.blank?
|
|
|
@courses = @courses
|
|
|
else
|
|
|
# user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
|
|
|
@courses = @courses.joins("join users u on courses.tea_id = u.id").where("concat(u.lastname, u.firstname) like '%#{@search}%'")
|
|
|
end
|
|
|
elsif "dep_name" == @keyword
|
|
|
school = School.where("name like '%#{@search}%'").map(&:id)
|
|
|
@courses = @courses.where(:school_id => school)
|
|
|
# @courses= @courses.where("name like '%#{@search}%'")
|
|
|
end
|
|
|
@courses = @courses.select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS updatetime").order("updatetime desc")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@export_courses = @courses
|
|
|
@courses_count = @courses.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@courses_pages = Paginator.new @courses_count, @limit, params['page'] || 1
|
|
|
@offset ||= @courses_pages.offset
|
|
|
@courses = paginateHelper @courses, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
@export_courses = @export_courses.all
|
|
|
filename = "#{l(:label_course_list_xls)}.xls"
|
|
|
send_data(course_list_xls(@export_courses), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def hidden_course
|
|
|
@course = Course.where(:id => params[:course_id]).first
|
|
|
@course.update_attributes(:is_hidden => !@course.is_hidden) if @course.present?
|
|
|
end
|
|
|
|
|
|
def shixun_task
|
|
|
@menu_type = 2
|
|
|
@sub_type = 3
|
|
|
|
|
|
homework_commons = HomeworkCommon.where(:homework_type => 4)
|
|
|
@shixun_task = Course.where(:id => homework_commons.map(&:course_id))
|
|
|
@keyword = params[:keyword]
|
|
|
@search = params[:search]
|
|
|
@school_id = params[:school_id]
|
|
|
if params[:school_id] && params[:school_id] != ''
|
|
|
@shixun_task = @shixun_task.joins("join users u on courses.tea_id = u.id").joins("join user_extensions ue on u.id = ue.user_id").where("ue.school_id = #{params[:school_id]}")
|
|
|
# @shixun_task = @shixun_task.includes(:user => {:user_extensions => []}).where("user_extensions.school_id = #{params[:school_id]}")
|
|
|
end
|
|
|
|
|
|
unless @search.blank?
|
|
|
if "u_name" == @keyword
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
|
|
|
@shixun_task = @shixun_task.joins("join users u on courses.tea_id = u.id").where("concat(u.lastname, u.firstname) like '%#{@search}%'")
|
|
|
else
|
|
|
@shixun_task = @shixun_task.where("courses.name like '%#{@search}%'")
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# @shixun_task = @shixun_task.select("courses.*, (select h.publish_time from homework_commons h where h.course_id = courses.id group by courses.id) AS publish_time").reorder("publish_time desc")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@shixun_task_count = @shixun_task.size
|
|
|
@export_shixun_task = @shixun_task
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@shixun_task_pages = Paginator.new @shixun_task_count, @limit, params['page'] || 1
|
|
|
@offset ||= @shixun_task_pages.offset
|
|
|
@shixun_task = paginateHelper @shixun_task, @limit
|
|
|
@shixun_task = @shixun_task.includes(:homework_commons => {:student_works => [], :homework_detail_manual => [], :shixuns => []}, :teacher => {:user_extensions => []})
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
# @export_shixun_task = @export_shixun_task.all
|
|
|
filename = "#{l(:label_shixun_task_xls)}.xls"
|
|
|
send_data(shixun_task_xls(@export_shixun_task), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def project_list
|
|
|
@menu_type = 2
|
|
|
@sub_type = 4
|
|
|
@pr_order = params[:pr_order].blank? ? "desc" : params[:pr_order]
|
|
|
@search = params[:search].to_s
|
|
|
@projects = Project.where("name like '%#{@search}%'").order("created_on #{@pr_order}")
|
|
|
@limit = 20
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@projects = paginateHelper @projects, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 班级首页显示
|
|
|
def course_homepage_show
|
|
|
if params[:course_id]
|
|
|
course = Course.find params[:course_id]
|
|
|
course.update_attributes(:homepage_show => !course.homepage_show)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
# 讨论区邮件通知
|
|
|
def course_board_email_notify
|
|
|
if params[:course_id]
|
|
|
course = Course.find params[:course_id]
|
|
|
course.update_attributes(:email_notify => !course.email_notify)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
# 课程实训
|
|
|
def class_shixuns
|
|
|
@menu_type = 4
|
|
|
@sub_type = 1
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
@edit_class_sx_num=Subject.where(:status => 0).count
|
|
|
@audit_class_sx_num=Subject.where(:status => 1).count
|
|
|
@publish_class_sx_num=Subject.where(:status => 2).count
|
|
|
@repertories = Repertoire.where(nil).order("CONVERT( name USING gbk ) COLLATE gbk_chinese_ci ASC")
|
|
|
search = params[:search] # 搜索字
|
|
|
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/课程名搜索
|
|
|
status = params[:status].to_i
|
|
|
if params[:school_id] && params[:school_id] != '0'
|
|
|
@c_shixuns = Subject.includes(:user => {:user_extensions => []}).where("user_extensions.school_id = #{params[:school_id]}")
|
|
|
else
|
|
|
@c_shixuns = Subject.where("0=0")
|
|
|
end
|
|
|
if params[:status] && params[:status]!=''
|
|
|
@c_shixuns= @c_shixuns.where(:status =>status)
|
|
|
end
|
|
|
if search.blank?
|
|
|
@c_shixuns = @c_shixuns
|
|
|
else
|
|
|
if "u_name" == keyword
|
|
|
# user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
|
|
|
@c_shixuns = @c_shixuns.includes(:user).where("concat(users.lastname, users.firstname) like '%#{search}%'")
|
|
|
else
|
|
|
@c_shixuns= @c_shixuns.where("name like '%#{search}%'")
|
|
|
end
|
|
|
end
|
|
|
unless params[:school_id] || params[:search] || params[:keyword] || params[:status]
|
|
|
user_exs = UserExtensions.where(:user_id => @c_shixuns.map(&:user_id))
|
|
|
@schools = School.where(:id => user_exs.map(&:school_id))
|
|
|
end
|
|
|
@c_shixuns = @c_shixuns.order("subjects.created_at #{@sx_order}")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@c_shixuns_count = @c_shixuns.count
|
|
|
@limit = 20
|
|
|
@c_shixuns_pages = Paginator.new @c_shixuns_count, @limit, @page
|
|
|
@c_shixuns = paginateHelper @c_shixuns, @limit
|
|
|
@offset ||= @c_shixuns_pages.offset
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def subject_setting_list
|
|
|
@menu_type = 4
|
|
|
@sub_type = 2
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
@edit_class_sx_num=Subject.where(:status => 0).count
|
|
|
@audit_class_sx_num=Subject.where(:status => 1).count
|
|
|
@publish_class_sx_num=Subject.where(:status => 2).count
|
|
|
@repertories = Repertoire.where(nil).order("CONVERT( name USING gbk ) COLLATE gbk_chinese_ci ASC")
|
|
|
@levels = SubjectLevelSystem.all
|
|
|
search = params[:search] # 搜索字
|
|
|
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/课程名搜索
|
|
|
status = params[:status].to_i
|
|
|
if params[:school_id] && params[:school_id] != '0'
|
|
|
@c_shixuns = Subject.includes(:user => {:user_extensions => []}).where("user_extensions.school_id = #{params[:school_id]}")
|
|
|
else
|
|
|
@c_shixuns = Subject.where("0=0")
|
|
|
end
|
|
|
if params[:status] && params[:status]!=''
|
|
|
@c_shixuns= @c_shixuns.where(:status =>status)
|
|
|
end
|
|
|
if search.blank?
|
|
|
@c_shixuns = @c_shixuns
|
|
|
else
|
|
|
if "u_name" == keyword
|
|
|
# user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
|
|
|
@c_shixuns = @c_shixuns.includes(:user).where("concat(users.lastname, users.firstname) like '%#{search}%'")
|
|
|
else
|
|
|
@c_shixuns = @c_shixuns.where("name like '%#{search}%'")
|
|
|
end
|
|
|
end
|
|
|
unless params[:school_id] || params[:search] || params[:keyword] || params[:status]
|
|
|
user_exs = UserExtensions.where(:user_id => @c_shixuns.map(&:user_id))
|
|
|
@schools = School.where(:id => user_exs.map(&:school_id))
|
|
|
end
|
|
|
if params[:search_homepage_show]
|
|
|
@c_shixuns = @c_shixuns.where(:homepage_show => params[:search_homepage_show].to_i)
|
|
|
end
|
|
|
@c_shixuns = @c_shixuns.order("subjects.created_at #{@sx_order}")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@c_shixuns_count = @c_shixuns.count
|
|
|
@limit = 20
|
|
|
@c_shixuns_pages = Paginator.new @c_shixuns_count, @limit, params['page'] || 1
|
|
|
@c_shixuns = paginateHelper @c_shixuns, @limit
|
|
|
@offset ||= @c_shixuns_pages.offset
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_repertoire_of_subject
|
|
|
subject = Subject.find(params[:subject_id])
|
|
|
subject.update_attribute(:repertoire_id, params[:rep_id])
|
|
|
|
|
|
render :json =>{ :data => "success"}
|
|
|
end
|
|
|
|
|
|
def update_subject_hidden
|
|
|
@subject = Subject.find(params[:subject_id])
|
|
|
@subject.update_column(:hidden, !@subject.hidden)
|
|
|
end
|
|
|
|
|
|
def update_subject_member_count
|
|
|
if params[:subject] && params[:member_count]
|
|
|
@subject = Subject.where(:id => params[:subject]).first
|
|
|
@subject.update_attributes(:student_count => params[:member_count], :participant_count => params[:member_count].to_i * 0.35) if @subject.present?
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 已发布课程实训
|
|
|
def class_publish_shixuns
|
|
|
@menu_type = 4
|
|
|
@sub_type = 3
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
search = params[:search] # 搜索字
|
|
|
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/课程名搜索
|
|
|
if params[:school_id] && params[:school_id] != '0'
|
|
|
@c_shixuns = Subject.includes(:user => {:user_extensions => []}).where("subjects.status = 2 and user_extensions.school_id = #{params[:school_id]}")
|
|
|
else
|
|
|
@c_shixuns = Subject.where(:status => 2)
|
|
|
end
|
|
|
if params[:beginTime] && params[:beginTime].strip != ""
|
|
|
@c_shixuns = @c_shixuns.where("publish_time >= '#{Time.parse(params[:beginTime])}'")
|
|
|
end
|
|
|
if params[:endTime] && params[:endTime].strip != ""
|
|
|
@c_shixuns = @c_shixuns.where("publish_time <= '#{Time.parse(params[:endTime])}'")
|
|
|
end
|
|
|
if search.blank?
|
|
|
elsif "u_name" == keyword
|
|
|
# 如果用户搜索为空,不用遍历user表,直接查找所有实训, 有搜索时才查找user
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
|
|
|
@c_shixuns = @c_shixuns.includes(:user).where("concat(users.lastname, users.firstname) like '%#{search}%'")
|
|
|
else
|
|
|
@c_shixuns= @c_shixuns.where("name like '%#{search}%'")
|
|
|
end
|
|
|
unless params[:school_id] || params[:search] || params[:keyword]
|
|
|
user_exs = UserExtensions.where(:user_id => @c_shixuns.map(&:user_id))
|
|
|
@schools = School.where(:id => user_exs.map(&:school_id))
|
|
|
end
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@c_shixuns = @c_shixuns.order("subjects.publish_time #{@sx_order}")
|
|
|
@c_shixuns_count = @c_shixuns.count
|
|
|
all_subjects = @c_shixuns.includes(stages: [:stage_shixuns])
|
|
|
Rails.logger.warn("##########all_subjects:#{all_subjects.count}")
|
|
|
@limit = 20
|
|
|
@c_shixuns_pages = Paginator.new @c_shixuns_count, @limit, params['page'] || 1
|
|
|
@offset ||= @c_shixuns_pages.offset
|
|
|
@c_shixuns = paginateHelper @c_shixuns, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls {
|
|
|
filename = "已发布实训课程-#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}.xls"
|
|
|
send_data(published_subject_xls(all_subjects), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 实践课程的金课设置
|
|
|
def excellent_subject_setting
|
|
|
if params[:subject_id]
|
|
|
subject = Subject.find params[:subject_id]
|
|
|
subject.update_attributes(:excellent => !subject.excellent)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 已发布实训路径首页显示
|
|
|
def subject_homepage_show
|
|
|
if params[:subject_id]
|
|
|
subject = Subject.find params[:subject_id]
|
|
|
subject.update_attributes(:homepage_show => !subject.homepage_show)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 导出excel
|
|
|
def export_excel
|
|
|
@course = params[:course]
|
|
|
respond_to do |format|
|
|
|
format.xls {
|
|
|
@course = @course.reorder("#{Tracker.table_name}.position, #{Course.table_name}.id").all
|
|
|
filename = "#{l(:label_course_list_xls)}.xls"
|
|
|
send_data(course_list_xls(@course), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 0 全部;1 活动的; 2 已注册; 3 锁定
|
|
|
def users
|
|
|
@menu_type = 7
|
|
|
@sub_type = 1
|
|
|
status = params[:user_status].nil? ? 0 : params[:user_status].to_i
|
|
|
@us_order = params[:us_order].blank? ? "desc" : params[:us_order] # 排序
|
|
|
@order_key = params[:order_key].blank? ? "last_login_on" : params[:order_key] # 排序关键字
|
|
|
condition = (params[:research_condition].nil? || params[:research_condition] == "name") ? "concat(lastname, firstname)" : params[:research_condition]
|
|
|
if 0 == status
|
|
|
if params[:research_condition] == "phone" && params[:research_contents].blank?
|
|
|
@users = User.where(nil)
|
|
|
else
|
|
|
@users = User.where("#{condition} like '%#{params[:research_contents]}%'")
|
|
|
end
|
|
|
else
|
|
|
if params[:research_condition] == "phone" && params[:research_contents].blank?
|
|
|
@users = User.where(:status => status)
|
|
|
else
|
|
|
@users = User.where("status = #{status} and #{condition} like '%#{params[:research_contents]}%'")
|
|
|
end
|
|
|
end
|
|
|
|
|
|
if params[:identity] && params[:identity].to_i != -1
|
|
|
@users = @users.includes(:user_extensions).where("user_extensions.identity = ?", params[:identity].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:auto_school] && params[:auto_school].to_i != 0
|
|
|
@users = @users.includes(:user_extensions => [:school]).where("schools.auto_users_trial = ?", params[:auto_school].to_i == 1 ? 1 : 0)
|
|
|
end
|
|
|
|
|
|
if params[:school] && params[:school] != ''
|
|
|
school_name = params[:school]
|
|
|
school = School.where("name like '%#{school_name}%'")
|
|
|
school_id = school.map(&:id)
|
|
|
user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
@users = @users.where(:id => user_id)
|
|
|
end
|
|
|
|
|
|
@users = @users.order("#{@order_key} #{@us_order}")
|
|
|
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@users_count = @users.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@users_pages = Paginator.new @users_count, @limit, params['page'] || 1
|
|
|
@offset ||= @users_pages.offset
|
|
|
@users = paginateHelper @users, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def shixuns
|
|
|
@menu_type = 3
|
|
|
@sub_type = 1
|
|
|
@sx_status = (params[:status].blank? || params[:status].class == Array) ? [0, 1, 2, 3] : params[:status].to_i # 搜索实训的状态
|
|
|
@keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
|
|
|
@search = params[:search] # 搜索的字
|
|
|
@tech = params[:tech]
|
|
|
@shixun_tag_id = params[:shixun_tag]
|
|
|
@tech_system = MirrorRepository.where(nil).map(&:type_name).reject(&:blank?).sort()
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] # 排序
|
|
|
|
|
|
if "u_name" == @keyword
|
|
|
# 如果用户搜索为空,不用遍历user表,直接查找所有实训, 有搜索时才查找user
|
|
|
if @search.blank?
|
|
|
@shixuns = Shixun.where(:status => @sx_status).order("created_at #{@sx_order}")
|
|
|
else
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
|
|
|
@shixuns = Shixun.where(:user_id => user_id, :status => @sx_status).order("created_at #{@sx_order}")
|
|
|
end
|
|
|
else
|
|
|
if params[:keyword] == "sx_name"
|
|
|
@shixuns = Shixun.where("name like '%#{@search}%'").where(:status => @sx_status).order("created_at #{@sx_order}")
|
|
|
else
|
|
|
school_id = School.where("name like '%#{@search}%'").map(&:id)
|
|
|
user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
@shixuns = Shixun.where(:user_id => user_id).where(:status => @sx_status).order("created_at #{@sx_order}")
|
|
|
end
|
|
|
end
|
|
|
#@shixuns = @shixuns.includes(:mirror_repositories).where("mirror_repositories.name like '%#{@tech}%'") if @tech.present?
|
|
|
if @tech.present?
|
|
|
shixuns_id = MirrorRepository.where(:type_name => @tech).first.try(:shixuns)
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
|
|
|
# shixun_tag_id: -1时 搜索没有技术标签的实训
|
|
|
if @shixun_tag_id.present?
|
|
|
if @shixun_tag_id.to_i == -1
|
|
|
shixuns_id = ShixunTagRepertoire.where(nil).map(&:shixun_id)
|
|
|
if shixuns_id.present?
|
|
|
shixuns_id = @shixuns.map(&:id) - shixuns_id
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
else
|
|
|
shixuns_id = ShixunTagRepertoire.where(:tag_repertoire_id => @shixun_tag_id).map(&:shixun_id)
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
@shixun_xls = @shixuns
|
|
|
@edit_sx_num = Shixun.where(:status => 0).count
|
|
|
@audit_sx_num = Shixun.where(:status => 1).count
|
|
|
@publish_sx_num =Shixun.where(:status => 2).count
|
|
|
@close_sx_num = Shixun.where(:status => 3).count
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@shixuns_count = @shixuns.count
|
|
|
@limit = 20
|
|
|
@shixuns_pages = Paginator.new @shixuns_count, @limit, params['page'] || 1
|
|
|
@offset ||= @shixuns_pages.offset
|
|
|
@shixuns = paginateHelper @shixuns, @limit
|
|
|
@shixun_tags = TagRepertoire.where(nil).order("name asc")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
# @export_shixun_task = @export_shixun_task.all
|
|
|
filename = "实训详情_#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}.xls"
|
|
|
send_data(shixun_list_xls(@shixun_xls), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def shixun_setting_list
|
|
|
@menu_type = 3
|
|
|
@sub_type = 2
|
|
|
@sx_status = (params[:status].blank? || params[:status].class == Array) ? [0, 1, 2, 3] : params[:status].to_i # 搜索实训的状态
|
|
|
@keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
|
|
|
@search = params[:search] # 搜索的字
|
|
|
@tech = params[:tech]
|
|
|
@shixun_tag_id = params[:shixun_tag]
|
|
|
@tech_system = MirrorRepository.where(nil).map(&:type_name).reject(&:blank?).sort()
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] # 排序
|
|
|
close = params[:close] # 关闭实训,参数是实训的Id
|
|
|
unless close.blank?
|
|
|
Shixun.find(close).update_attributes(:status => 3, :closer_id => User.current.id, :end_time => Time.now)
|
|
|
end
|
|
|
if "u_name" == @keyword
|
|
|
# 如果用户搜索为空,不用遍历user表,直接查找所有实训, 有搜索时才查找user
|
|
|
if @search.blank?
|
|
|
@shixuns = Shixun.where(:status => @sx_status).order("created_at #{@sx_order}")
|
|
|
else
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
|
|
|
@shixuns = Shixun.where(:user_id => user_id, :status => @sx_status).order("created_at #{@sx_order}")
|
|
|
end
|
|
|
else
|
|
|
if params[:keyword] == "sx_name"
|
|
|
@shixuns = Shixun.where("name like '%#{@search}%'").where(:status => @sx_status).order("created_at #{@sx_order}")
|
|
|
else
|
|
|
school_id = School.where("name like '%#{@search}%'").map(&:id)
|
|
|
user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
@shixuns = Shixun.where(:user_id => user_id).where(:status => @sx_status).order("created_at #{@sx_order}")
|
|
|
end
|
|
|
end
|
|
|
#@shixuns = @shixuns.includes(:mirror_repositories).where("mirror_repositories.name like '%#{@tech}%'") if @tech.present?
|
|
|
if @tech.present?
|
|
|
shixuns_id = MirrorRepository.where(:type_name => @tech).first.try(:shixuns)
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
|
|
|
# shixun_tag_id: -1时 搜索没有技术标签的实训
|
|
|
if @shixun_tag_id.present?
|
|
|
if @shixun_tag_id.to_i == -1
|
|
|
shixuns_id = ShixunTagRepertoire.where(nil).map(&:shixun_id)
|
|
|
if shixuns_id.present?
|
|
|
shixuns_id = @shixuns.map(&:id) - shixuns_id
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
else
|
|
|
shixuns_id = ShixunTagRepertoire.where(:tag_repertoire_id => @shixun_tag_id).map(&:shixun_id)
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
if params[:can_copy]
|
|
|
@shixuns = @shixuns.where(:can_copy => params[:can_copy].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:webssh]
|
|
|
@shixuns = @shixuns.where(:webssh => params[:webssh].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:hidden]
|
|
|
@shixuns = @shixuns.where(:hidden => params[:hidden].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:homepage_show]
|
|
|
@shixuns = @shixuns.where(:homepage_show => params[:homepage_show].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:task_pass]
|
|
|
@shixuns = @shixuns.where(:task_pass => params[:task_pass].to_i)
|
|
|
end
|
|
|
|
|
|
if params[:code_hidden]
|
|
|
@shixuns = @shixuns.where(:code_hidden => params[:code_hidden].to_i)
|
|
|
end
|
|
|
|
|
|
@shixun_xls = @shixuns
|
|
|
@edit_sx_num = Shixun.where(:status => 0).count
|
|
|
@audit_sx_num = Shixun.where(:status => 1).count
|
|
|
@publish_sx_num =Shixun.where(:status => 2).count
|
|
|
@close_sx_num = Shixun.where(:status => 3).count
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@shixuns_count = @shixuns.count
|
|
|
@limit = 20
|
|
|
@shixuns_pages = Paginator.new @shixuns_count, @limit, params['page'] || 1
|
|
|
@offset ||= @shixuns_pages.offset
|
|
|
@shixuns = paginateHelper @shixuns, @limit
|
|
|
@shixun_tags = TagRepertoire.where(nil).order("name asc")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
# @export_shixun_task = @export_shixun_task.all
|
|
|
filename = "实训详情_#{Time.now}.xls"
|
|
|
send_data(shixun_list_xls(@shixun_xls), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_shixun_task_pass
|
|
|
shixun = Shixun.find(params[:shixun_id])
|
|
|
shixun.update_column(:task_pass, !shixun.task_pass)
|
|
|
end
|
|
|
|
|
|
def update_shixun_code_hidden
|
|
|
shixun = Shixun.find(params[:shixun_id])
|
|
|
shixun.update_column(:code_hidden, !shixun.code_hidden)
|
|
|
end
|
|
|
|
|
|
def update_shixun_excute_time
|
|
|
shixun = Shixun.find(params[:shixun_id])
|
|
|
shixun.update_column(:excute_time, params[:excute_time].strip == "" ? nil : params[:excute_time].strip)
|
|
|
end
|
|
|
|
|
|
def shixun_update_image_text
|
|
|
image_text = params[:values].strip
|
|
|
shixun = Shixun.find params[:id]
|
|
|
shixun.update_column(:image_text, image_text)
|
|
|
render :json => {success: "true"}
|
|
|
end
|
|
|
|
|
|
def build_shixun_and_repertore_relationship
|
|
|
logger.info("#################{params}")
|
|
|
tag_id = params[:tag_id].to_i
|
|
|
shixun_id = params[:shixun_id]
|
|
|
status = params[:status].to_i
|
|
|
shixun_tags_count = ShixunTagRepertoire.where(:shixun_id => shixun_id).count
|
|
|
logger.info("#################{shixun_tags_count}")
|
|
|
if shixun_tags_count > 3
|
|
|
render :json => {data: "error"}
|
|
|
else
|
|
|
shixun_tags = ShixunTagRepertoire.where(:shixun_id => shixun_id, :tag_repertoire_id => tag_id).first
|
|
|
if status == 0
|
|
|
shixun_tags.destroy if shixun_tags.present?
|
|
|
else
|
|
|
if shixun_tags.present?
|
|
|
shixun_tags.update_attribute(:tag_repertoire_id, tag_id)
|
|
|
else
|
|
|
ShixunTagRepertoire.create!(:tag_repertoire_id => tag_id, :shixun_id => shixun_id)
|
|
|
end
|
|
|
end
|
|
|
render :json => {data: "success"}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_shixun_hidden
|
|
|
@shixun = Shixun.find(params[:shixun_id])
|
|
|
@shixun.update_column(:hidden, !@shixun.hidden)
|
|
|
end
|
|
|
|
|
|
# 已发布的实训
|
|
|
def publish_shixuns
|
|
|
logger.info("####################{params}")
|
|
|
@menu_type = 3
|
|
|
@sub_type = 3
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] # 排序
|
|
|
index = params[:index] # 排序
|
|
|
@search = params[:search] # 搜索字
|
|
|
@keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
|
|
|
@tech = params[:tech]
|
|
|
@beginTime = params[:beginTime]
|
|
|
@endTime = params[:endTime]
|
|
|
@tech_system = MirrorRepository.where(nil).map(&:type_name).reject(&:blank?).sort()
|
|
|
|
|
|
if "u_name" == @keyword
|
|
|
# 如果用户搜索为空,不用遍历user表,直接查找所有实训, 有搜索时才查找user
|
|
|
if @search.blank?
|
|
|
@shixuns = Shixun.where(:status => 2)
|
|
|
@shixuns = sort_shixun index, @shixuns, @sx_order
|
|
|
else
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{@search}%'")
|
|
|
@shixuns = Shixun.where(:user_id => user_id, :status => 2)
|
|
|
@shixuns = sort_shixun index, @shixuns, @sx_order
|
|
|
end
|
|
|
else
|
|
|
@shixuns = Shixun.where("name like '%#{@search}%'").where(:status => 2)
|
|
|
@shixuns = sort_shixun index, @shixuns, @sx_order
|
|
|
end
|
|
|
if params[:homepage_show]
|
|
|
@shixuns = @shixuns.where(:homepage_show => params[:homepage_show].to_i)
|
|
|
@shixuns = sort_shixun index, @shixuns, @sx_order
|
|
|
end
|
|
|
if params[:tech] && params[:tech] !=''
|
|
|
@shixuns = @shixuns.where("language like '#{@tech}'")
|
|
|
@shixuns = sort_shixun index, @shixuns, @sx_order
|
|
|
end
|
|
|
|
|
|
if @tech.present?
|
|
|
shixuns_id = MirrorRepository.where(:type_name => @tech).first.try(:shixuns)
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
|
|
|
if params[:beginTime].present?
|
|
|
logger.info("#############------------------")
|
|
|
endTime = params[:endTime].present? ? params[:endTime] : Time.now
|
|
|
@shixuns = @shixuns.where("publish_time >= ? and publish_time <= ?", params[:beginTime], endTime)
|
|
|
end
|
|
|
|
|
|
if index == '6'
|
|
|
@op_order = @sx_order
|
|
|
@sx_order = ""
|
|
|
else
|
|
|
@sx_order = @sx_order
|
|
|
@op_order = ""
|
|
|
end
|
|
|
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@shixuns_count = @shixuns.count
|
|
|
@shixun_xls = @shixuns
|
|
|
@limit = 20
|
|
|
@shixuns_pages = Paginator.new @shixuns_count, @limit, params['page'] || 1
|
|
|
@offset ||= @shixuns_pages.offset
|
|
|
@shixuns = paginateHelper @shixuns, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
format.xls{
|
|
|
filename = "已发布的实训_#{format_time Time.now}.xls"
|
|
|
send_data(publish_shixun_list(@shixun_xls), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
# 实训首页显示
|
|
|
def shixun_homepage_show
|
|
|
if params[:shixun_id]
|
|
|
shixun = Shixun.find params[:shixun_id]
|
|
|
shixun.update_attributes(:homepage_show => !shixun.homepage_show)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 允许复制
|
|
|
def shixun_can_copy
|
|
|
if params[:shixun_id]
|
|
|
shixun = Shixun.find params[:shixun_id]
|
|
|
shixun.update_attributes(:can_copy => !shixun.can_copy)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 已关闭的实训
|
|
|
def close_shixuns
|
|
|
@menu_type = 3
|
|
|
@sub_type = 4
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] # 排序
|
|
|
search = params[:search] # 搜索字
|
|
|
keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/实训名搜索
|
|
|
reopen = params[:reopen] # 从新开启实训,参数是实训的Id
|
|
|
tech = params[:tech]
|
|
|
@tech_system = MirrorRepository.where(nil).map(&:type_name).reject(&:blank?).sort()
|
|
|
unless reopen.blank?
|
|
|
Shixun.find(reopen).update_attribute(:status, 2)
|
|
|
end
|
|
|
if "u_name" == keyword
|
|
|
# 如果用户搜索为空,不用遍历user表,直接查找所有实训, 有搜索时才查找user
|
|
|
if search.blank?
|
|
|
@shixuns = Shixun.where(:status => 3).order("updated_at #{@sx_order}")
|
|
|
else
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
|
|
|
@shixuns = Shixun.where(:user_id => user_id, :status => 3).order("updated_at #{@sx_order}")
|
|
|
end
|
|
|
else
|
|
|
@shixuns = Shixun.where("name like '%#{search}%'").where(:status => 3).order("updated_at #{@sx_order}")
|
|
|
end
|
|
|
if params[:tech].present?
|
|
|
shixuns_id = MirrorRepository.where(:type_name => tech).first.try(:shixuns)
|
|
|
@shixuns = @shixuns.where(:id => shixuns_id)
|
|
|
end
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@shixuns_count = @shixuns.count
|
|
|
@limit = 20
|
|
|
@shixuns_pages = Paginator.new @shixuns_count, @limit, params['page'] || 1
|
|
|
@offset ||= @shixuns_pages.offset
|
|
|
@shixuns = paginateHelper @shixuns, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 镜像类别图片
|
|
|
def mirror_picture_shixuns
|
|
|
@main_mirror = MirrorRepository.where(nil)
|
|
|
@repertoire = Repertoire.where(nil)
|
|
|
@menu_type = 3
|
|
|
@sub_type = 7
|
|
|
search = params[:search]
|
|
|
if params[:search] && params[:search] != ''
|
|
|
@main_mirror = @main_mirror.where("type_name like '%#{search}%'")
|
|
|
end
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@main_mirror_count = @main_mirror.count
|
|
|
@limit = 20
|
|
|
@main_mirror_pages = Paginator.new @main_mirror_count, @limit, params['page'] || 1
|
|
|
@offset ||= @main_mirror_pages.offset
|
|
|
@main_mirror = paginateHelper @main_mirror, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_mirror_picture
|
|
|
if params[:res] == "1"
|
|
|
mirror = MirrorRepository.where(:id => params[:mirror_id]).first
|
|
|
MirrorRepository.where(:id => params[:mirror_id]).update_all(:repertoire_id => params[:use_scope], :sub_repertoire_id => nil)
|
|
|
else
|
|
|
MirrorRepository.where(:id => params[:mirror_id]).update_all(:sub_repertoire_id => params[:use_scope])
|
|
|
end
|
|
|
redirect_to mirror_picture_shixuns_managements_path(:page => params[:page])
|
|
|
end
|
|
|
|
|
|
# 实训成员列表
|
|
|
def shixun_member
|
|
|
@menu_type = 3
|
|
|
@sub_type = 6
|
|
|
@shixun_member = Myshixun.where("0=0").order("created_at desc")
|
|
|
keyword = params[:keyword]
|
|
|
search = params[:search]
|
|
|
member = params[:member]
|
|
|
if search.blank?
|
|
|
@shixun_member = @shixun_member
|
|
|
else
|
|
|
if "u_name" == keyword
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{search}%'")
|
|
|
@shixun_member = @shixun_member.where(:user_id => user_id)
|
|
|
elsif keyword == "u_id"
|
|
|
user_id = User.where("login like '%#{search}%'")
|
|
|
@shixun_member = @shixun_member.where(:user_id => user_id)
|
|
|
elsif keyword == "sx_name"
|
|
|
@shixun_member = @shixun_member.joins(:shixun).where("shixuns.name like '%#{search}%'")
|
|
|
else
|
|
|
school_id = School.where("name like '%#{search}%'").blank? ? "(-1)" : "(" + School.where("name like '%#{search}%'").map(&:id).join(",") + ")"
|
|
|
user_id = UserExtensions.where("school_id in #{school_id}").blank? ? "(-1)" : "(" + UserExtensions.where("school_id in #{school_id}").map(&:user_id).join(",") + ")"
|
|
|
@shixun_member = @shixun_member.where("user_id in #{user_id}")
|
|
|
|
|
|
end
|
|
|
end
|
|
|
|
|
|
if member && member != ''
|
|
|
user_id = User.where("concat(lastname, firstname) like '%#{member}%'").blank? ? "(-1)" : "(" + User.where("concat(lastname, firstname) like '%#{member}%'").map(&:id).join(",") + ")"
|
|
|
@shixun_member = @shixun_member.joins(:shixun).where("shixuns.user_id in #{user_id}")
|
|
|
end
|
|
|
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@shixun_member_count = @shixun_member.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@shixun_member_pages = Paginator.new @shixun_member_count, @limit, params['page'] || 1
|
|
|
@offset ||= @shixun_member_pages.offset
|
|
|
@shixun_member = paginateHelper @shixun_member, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def users_trial
|
|
|
@menu_type = 7
|
|
|
@sub_type = 2
|
|
|
@sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order]
|
|
|
sql =
|
|
|
if params[:t].to_i == 1 && params[:e].to_i == 1
|
|
|
"status = 1 and homepage_teacher = 1 and homepage_engineer = 1"
|
|
|
elsif params[:t].to_i == 1
|
|
|
"status = 1 and homepage_teacher = 1"
|
|
|
elsif params[:e].to_i == 1
|
|
|
"status = 1 and homepage_engineer = 1"
|
|
|
else
|
|
|
"status = 1"
|
|
|
end
|
|
|
@users = User.where("#{sql}").includes(:real_name_authentication_apply, :professional_authentication_apply,
|
|
|
user_extensions: [:department, :school]).order("last_login_on #{@sx_order}")
|
|
|
@has_cer_count = User.where(:status => 1, :certification => 1).count
|
|
|
@reject_cer_count = User.where(:status => 1, :certification => 2).count
|
|
|
@deal_cer_count = ApplyAction.where(:status => 0).select("distinct user_id").count
|
|
|
|
|
|
subquery = UserDayCertification.where("created_at > ?", Time.now.ago(1.days)).select(:user_id).to_sql
|
|
|
@trial_cer_count = User.where("status = 1 and certification != 1 and id in (#{subquery})").count
|
|
|
|
|
|
apply_subquery = ApplyAction.where(container_type: "TrialAuthorization").select(:user_id).to_sql
|
|
|
@nonn_cer_count = User.where("status = 1 and certification = 0 and id not in (#{apply_subquery}) ").count
|
|
|
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@users_count = @users.count
|
|
|
@limit = 20
|
|
|
@users_pages = Paginator.new @users_count, @limit, params['page'] || 1
|
|
|
@offset ||= @users_pages.offset
|
|
|
@users = paginateHelper @users, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
def user_homepage_show
|
|
|
user = User.find params[:user_id]
|
|
|
if params[:homepage] == "homepage_teacher"
|
|
|
user.update_attributes(:homepage_teacher => !user.homepage_teacher)
|
|
|
else
|
|
|
user.update_attributes(:homepage_engineer => !user.homepage_engineer)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def shixun_sigle_training
|
|
|
begin
|
|
|
shixun = Shixun.find(params[:shixun_id])
|
|
|
shixun.update_column(:sigle_training, !shixun.sigle_training)
|
|
|
render :json => {:status => 1}
|
|
|
rescue Exception => e
|
|
|
logger.error(e.message)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def import_course_members
|
|
|
attachments = params[:attachments]
|
|
|
@status = 0
|
|
|
member_count = 0
|
|
|
attachments.each do |attachment|
|
|
|
attachment = Attachment.find_by_token_only(attachment[1]['token'])
|
|
|
attachment.container_id = User.current.id
|
|
|
attachment.container_type = "ImportCourseMember"
|
|
|
attachment.save
|
|
|
path = attachment.disk_directory
|
|
|
name = attachment.disk_filename
|
|
|
if name.split(".").last == "xls"
|
|
|
begin
|
|
|
xls = Roo::Spreadsheet.open("files/#{path}/#{name}",extension: :xls)
|
|
|
worksheet = xls.sheet(0)
|
|
|
rows = worksheet.last_row #最后一行数
|
|
|
if rows < 2
|
|
|
@status = 0
|
|
|
@message = "请按照模板格式导入"
|
|
|
else
|
|
|
for row in 2 .. rows
|
|
|
student_id = worksheet.cell(row, 1)
|
|
|
student_id = student_id.is_a?(Float) ? student_id.to_s.strip.to_i : student_id.to_s.strip
|
|
|
member_role = worksheet.cell(row, 4).to_i
|
|
|
course_id = worksheet.cell(row, 3)
|
|
|
group_name = worksheet.cell(row, 5)
|
|
|
school_id = worksheet.cell(row, 6).is_a?(Float) ? worksheet.cell(row, 6).to_i : worksheet.cell(row, 6)
|
|
|
if student_id && member_role && [2, 3, 4].include?(member_role) && course_id && school_id
|
|
|
user = User.find_by_sql("SELECT u.* FROM `users` u, `user_extensions` ue where u.id = ue.user_id and
|
|
|
ue.student_id = '#{student_id}' and ue.school_id= #{school_id}").first
|
|
|
course = Course.where(:id => course_id).first
|
|
|
# 判断用户和课堂是否都存在,存在则判断该用户是否已是课堂成员,不是则加入课堂
|
|
|
if user.present? && course.present?
|
|
|
course_group = CourseGroup.where(:course_id => course.id, :name => group_name).first ||
|
|
|
CourseGroup.create(:name => group_name, :course_id => course.id) if group_name
|
|
|
|
|
|
member = course.course_members.where(:user_id => user.id, :role => member_role).first
|
|
|
# 如果已是课堂成员且是学生身份and不在指定的分班则移动到该分班
|
|
|
if member.present? && member.role == 4 && member.course_group_id != course_group.try(:id).to_i
|
|
|
member.update_attributes(course_group_id: course_group.try(:id).to_i)
|
|
|
member_count += 1
|
|
|
elsif !member.present?
|
|
|
member = CourseMember.new(:role => member_role, :user_id => user.id)
|
|
|
# if member_role == 10
|
|
|
# StudentsForCourse.create(:student_id => user.id, :course_id => course.id)
|
|
|
# end
|
|
|
extra = member_role == 2 ? 9 : (member_role == 3 ? 7 : 10)
|
|
|
Tiding.create(:user_id => user.id, :trigger_user_id => course.tea_id, :container_id => course.id, :container_type => 'TeacherJoinCourse',
|
|
|
:belong_container_id => course.id, :belong_container_type => "Course", :tiding_type => "System", :extra => extra)
|
|
|
member.course_group_id = course_group.try(:id).to_i
|
|
|
course.course_members << member
|
|
|
|
|
|
member_count += 1
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@status = 1
|
|
|
@message = "已导入/更新#{member_count}个成员"
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
@status = 0
|
|
|
@message = e.message
|
|
|
end
|
|
|
else
|
|
|
@status = 0
|
|
|
@message = "只支持xls文件的导入"
|
|
|
end
|
|
|
attachment.destroy
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def import_student_accounts
|
|
|
attachments = params[:attachments]
|
|
|
@status = 0
|
|
|
attachments.each do |attachment|
|
|
|
attachment = Attachment.find_by_token_only(attachment[1]['token'])
|
|
|
attachment.container_id = User.current.id
|
|
|
attachment.container_type = "ImportStudentAccount"
|
|
|
attachment.save
|
|
|
path = attachment.disk_directory
|
|
|
name = attachment.disk_filename
|
|
|
if name.split(".").last == "xlsx"
|
|
|
# lists = readXlsData("files/baolong.xlsx")
|
|
|
lists = readXlsData("files/#{path}/#{name}")
|
|
|
school_id = nil
|
|
|
prefix = ""
|
|
|
lists.each_with_index do |list, index|
|
|
|
if list[0]
|
|
|
# logger.info("#{list[0]}---#{list[1]}---#{list[2]}")
|
|
|
if index == 0
|
|
|
school_id = list[0]
|
|
|
elsif index == 1
|
|
|
prefix = list[0].to_s.strip
|
|
|
elsif index != 2 && list[3] && [0, 1, 2].include?(list[3].to_i)
|
|
|
if list[3].to_i == 1
|
|
|
user = User.find_by_sql("SELECT u.* FROM `users` u, `user_extensions` ue where u.id = ue.user_id and ue.identity = 1 and ue.student_id = '#{list[0]}' and ue.school_id= #{school_id.to_i}").first
|
|
|
else
|
|
|
user = User.find_by_sql("SELECT u.* FROM `users` u, `user_extensions` ue where u.id = ue.user_id and ue.identity = '#{list[3]}' and ue.technical_title = '#{list[4]}' and CONCAT(u.lastname,u.firstname) ='#{list[1]}' and ue.school_id= #{school_id.to_i}").first
|
|
|
end
|
|
|
school = School.where(:id => school_id).first
|
|
|
# 用户不存在则创建账号
|
|
|
if !user.present? && school.present?
|
|
|
department = school.departments.where(:name => list[2]).first
|
|
|
user_params = {status: 1, login: prefix + list[0].to_s.strip, lastname: list[1].to_s.strip,
|
|
|
nickname: list[1].to_s.strip, professional_certification: 1, certification: 1, grade: 0,
|
|
|
password: "12345678", phone: list[5].blank? ? nil : list[5], mail: "#{prefix+list[0].to_s.strip}@qq.com", profile_completed: 1}
|
|
|
user = User.create(user_params)
|
|
|
user = User.find(prefix + list[0].to_s.strip)
|
|
|
if user
|
|
|
ue = UserExtensions.new(:user_id => user.id, :gender => 0, :school_id => school_id, :location => school.province, :location_city => school.city, :identity => list[3].to_i, :student_id => list[0].to_s.strip, :department_id => department.try(:id))
|
|
|
if list[3] && list[3].to_i == 0
|
|
|
ue.technical_title = ["教授", "副教授", "讲师", "助教"].include?(list[4]) ? list[4] : "讲师"
|
|
|
elsif list[3] && list[3].to_i == 2
|
|
|
ue.technical_title = ["企业管理者", "部门管理者", "高级工程师", "工程师", "助理工程师"].include?(list[4]) ? list[4] : "助理工程师"
|
|
|
end
|
|
|
ue.save
|
|
|
end
|
|
|
elsif user.present?
|
|
|
user.update_column("certification", 1)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@status = 1
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 自动授权列表
|
|
|
def auto_users_trial
|
|
|
@menu_type = 7
|
|
|
@sub_type = 3
|
|
|
# @apply_action = School.where(:auto_users_trial => 1).order('authorization_time desc')
|
|
|
@apply_action = School.find_by_sql("select s.*, count(ue.user_id) as user_count From schools s left join user_extensions ue on s.id = ue.school_id
|
|
|
where s.auto_users_trial =1 group by s.id order by user_count desc;")
|
|
|
|
|
|
@auto_school_ids = @apply_action.empty? ? "(-1)" : "(" + @apply_action.map(&:id).join(",") + ")"
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@apply_action_count = @apply_action.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@apply_action_pages = Paginator.new @apply_action_count, @limit, params['page'] || 1
|
|
|
@offset ||= @apply_action_pages.offset
|
|
|
@apply_action = paginateHelper @apply_action, @limit
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def search_authorization_school
|
|
|
school_name = params[:contents]
|
|
|
@sx_order = params[:order]
|
|
|
@apply_action = School.authorization.where("name like '%#{school_name}%'").order("authorization_time #{@sx_order}")
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@apply_action_count = @apply_action.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@apply_action_pages = Paginator.new @apply_action_count, @limit, params['page'] || 1
|
|
|
@offset ||= @apply_action_pages.offset
|
|
|
@apply_action = paginateHelper @apply_action, @limit
|
|
|
|
|
|
end
|
|
|
|
|
|
# 过关任务模板
|
|
|
def editmd_template
|
|
|
@menu_type = 3
|
|
|
@samples_type = params[:samples_type]
|
|
|
@samples_type == "taskPass" ? @sub_type = 1 : ( @samples_type == "introduction" ? @sub_type = 2 : @sub_type = 3 )
|
|
|
@sample = PlatformSample.where(:samples_type => @samples_type).first
|
|
|
unless params[:template].nil?
|
|
|
if @sample.nil?
|
|
|
@sample = PlatformSample.create(:samples_type => @samples_type, :contents => params[:template])
|
|
|
else
|
|
|
@sample.update_attribute(:contents, params[:template])
|
|
|
end
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 新课导语模板
|
|
|
def course_guide_template
|
|
|
@menu_type = 12
|
|
|
@sub_type = 5
|
|
|
@samples_type = params[:samples_type]
|
|
|
@sample = PlatformSample.where(:samples_type => @samples_type).first
|
|
|
if request.post?
|
|
|
unless params[:platform_sample][:contents].nil?
|
|
|
if @sample.nil?
|
|
|
PlatformSample.create(:samples_type => @samples_type, :contents => params[:platform_sample][:contents])
|
|
|
else
|
|
|
@sample.update_attribute(:contents, params[:platform_sample][:contents])
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@sample = @sample || PlatformSample.new
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 实训评分
|
|
|
def shixun_quality_score
|
|
|
@menu_type = 12
|
|
|
@sub_type = 6
|
|
|
@shixun_scores = ScoreSet.where(nil).order("created_at asc")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def new_score_sets
|
|
|
name = params[:type_name]
|
|
|
level = params[:level]
|
|
|
lower = params[:lower]
|
|
|
upper = params[:upper]
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
score_set = ScoreSet.create!(:name => name)
|
|
|
level.each_with_index do |l, index|
|
|
|
ScoreIndicatorQuality.create!(:name => l, :upper_limit => upper[index], :lower_limit => lower[index], :score_set_id => score_set.id, :position => index+1) if l.present?
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
logger.error("new_score_sets failed #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
redirect_to shixun_quality_score_managements_path
|
|
|
end
|
|
|
|
|
|
def new_score_indicator
|
|
|
@shixun_scores = ScoreSet.find(params[:score_set_id])
|
|
|
@score_qualities = @shixun_scores.score_indicator_qualities
|
|
|
|
|
|
end
|
|
|
|
|
|
def edit_score_indicator
|
|
|
@indicator = ScoreIndicator.find(params[:score_indicator_id])
|
|
|
@shixun_scores = @indicator.score_set
|
|
|
@score_qualities = @shixun_scores.score_indicator_qualities
|
|
|
|
|
|
end
|
|
|
|
|
|
def create_score_indicator
|
|
|
score_set_id = params[:score_set_id]
|
|
|
name = params[:name]
|
|
|
description = params[:description]
|
|
|
desc_name = params[:description_name]
|
|
|
scale = params[:scale]
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
indicator = ScoreIndicator.create!(:name => name, :score_set_id => score_set_id, :scale => scale, :description => description)
|
|
|
desc_name.each_with_index do |name, index|
|
|
|
ScoreQualityDescription.create!(:name => name, :score_indicator_id => indicator.id, :position => index+1)
|
|
|
end
|
|
|
rescue Exception => e
|
|
|
logger.error("create_score_indicator failed #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
redirect_to shixun_quality_score_managements_path
|
|
|
end
|
|
|
|
|
|
def update_score_indicator
|
|
|
score_indicator_id = params[:score_indicator_id]
|
|
|
name = params[:name]
|
|
|
description = params[:description]
|
|
|
scale = params[:scale]
|
|
|
description_name = params[:description_name]
|
|
|
@indicator = ScoreIndicator.find(score_indicator_id)
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
if name != @indicator.name || description != @indicator.description || scale != @indicator.scale
|
|
|
@indicator.update_attributes(:name => name, :description => description, :scale => scale) if name.present?
|
|
|
end
|
|
|
|
|
|
description_name.each_with_index do |name, index|
|
|
|
des = @indicator.score_quality_descriptions.where(:position => index+1).first
|
|
|
if name != des.try(:name)
|
|
|
if des.present?
|
|
|
des.update_attribute(:name, name)
|
|
|
else
|
|
|
ScoreQualityDescription.create!(:name => name, :score_indicator_id => @indicator.id, :position => index+1)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
redirect_to shixun_quality_score_managements_path
|
|
|
rescue Exception => e
|
|
|
logger.error("update_score_indicator failed #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def edit_score_set
|
|
|
@shixun_score = ScoreSet.find(params[:score_set_id])
|
|
|
@qualities = @shixun_score.score_indicator_qualities
|
|
|
end
|
|
|
|
|
|
def update_score_sets
|
|
|
score_set_name = params[:type_name]
|
|
|
qualities_id = params[:quality]
|
|
|
level = params[:level]
|
|
|
create_level = params[:create_level]
|
|
|
lower = params[:lower]
|
|
|
create_lower = params[:create_lower]
|
|
|
upper = params[:upper]
|
|
|
create_upper = params[:create_upper]
|
|
|
shixun_score = ScoreSet.find(params[:score_set_id])
|
|
|
quality_id = shixun_score.score_indicator_qualities.map(&:id)
|
|
|
delete_quality_id = quality_id - qualities_id.map(&:to_i)
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
# 更新Score_set
|
|
|
if shixun_score.name != score_set_name && score_set_name.present?
|
|
|
shixun_score.update_attribute(:name, score_set_name)
|
|
|
end
|
|
|
|
|
|
# 更新score_indicator_quality
|
|
|
qualities_id.each_with_index do |id, index|
|
|
|
quality = ScoreIndicatorQuality.find(id)
|
|
|
quality.update_attributes(:name => level[index],
|
|
|
:lower_limit => lower[index],
|
|
|
:upper_limit => upper[index],
|
|
|
:position => index + 1) if level[index].present?
|
|
|
end
|
|
|
|
|
|
# 删除score_indicator_quality
|
|
|
delete_qualities = ScoreIndicatorQuality.where(:id => delete_quality_id)
|
|
|
delete_qualities.destroy_all if delete_qualities.present?
|
|
|
|
|
|
# 创建新增score_indicator_quality
|
|
|
index_count = qualities_id.size
|
|
|
create_level.try(:each_with_index) do |name, index|
|
|
|
ScoreIndicatorQuality.create!(:name => name,
|
|
|
:lower_limit => create_lower[index],
|
|
|
:upper_limit => create_upper[index],
|
|
|
:position => index_count + index + 1, :score_set_id => shixun_score.id) if create_lower[index].present?
|
|
|
end
|
|
|
|
|
|
# 删除超出position的score_indicator_descrition
|
|
|
max_position = shixun_score.score_indicator_qualities.maximum(:position)
|
|
|
shixun_score.score_indicators.each do |indicator|
|
|
|
description = ScoreQualityDescription.where("score_indicator_id = ? and position > ?", indicator.id, max_position)
|
|
|
description.destroy_all if description.present?
|
|
|
end
|
|
|
|
|
|
redirect_to shixun_quality_score_managements_path
|
|
|
rescue Exception => e
|
|
|
logger.error("update_score_sets failed #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def delete_score_set
|
|
|
score_set = ScoreSet.find(params[:score_set_id])
|
|
|
score_set.destroy
|
|
|
redirect_to shixun_quality_score_managements_path
|
|
|
end
|
|
|
|
|
|
def delete_score_indicator
|
|
|
indicator = ScoreIndicator.find(params[:score_indicator_id])
|
|
|
indicator.destroy
|
|
|
redirect_to shixun_quality_score_managements_path
|
|
|
end
|
|
|
|
|
|
# 添加
|
|
|
def create_auto_users_trial
|
|
|
school = School.find params[:school]
|
|
|
school.update_attributes(:auto_users_trial => 1, :authorization_time => Time.now)
|
|
|
user_exs = UserExtensions.where(:school_id => params[:school])
|
|
|
day_cer = UserDayCertification.where(:user_id => user_exs.map(&:user_id))
|
|
|
users = User.where(:id => day_cer.map(&:user_id))
|
|
|
users.update_all("certification = 1")
|
|
|
ApplyAction.where(:user_id => users.map(&:id), :container_type => "TrialAuthorization", :status => 0).update_all(:status => 1)
|
|
|
redirect_to auto_users_trial_managements_path
|
|
|
end
|
|
|
|
|
|
# 删除
|
|
|
def update_auto_users_trial
|
|
|
School.where(:id => params[:school]).update_all(:auto_users_trial => 0)
|
|
|
redirect_to auto_users_trial_managements_path
|
|
|
end
|
|
|
|
|
|
def search_user
|
|
|
if params[:member_ids] && params[:trial_whether] == "trial_agree"
|
|
|
aUser = User.where(:id => params[:member_ids]).includes(:user_extensions)
|
|
|
aUser.update_all(:certification => 1)
|
|
|
# 授权的教师加入示例课堂
|
|
|
aUser.each do |user|
|
|
|
join_ex_course(user) if user.user_extensions.identity == 0
|
|
|
end
|
|
|
apply_user = ApplyAction.where(:user_id => params[:member_ids], :container_type => "TrialAuthorization")
|
|
|
apply_user.update_all(:status => 1) unless apply_user.blank?
|
|
|
elsif params[:member_ids] && params[:trial_whether] == "trial_cancel"
|
|
|
User.where(:id => params[:member_ids]).update_all(:certification => 0)
|
|
|
apply_user = ApplyAction.where(:user_id => params[:member_ids], :container_type => "TrialAuthorization")
|
|
|
apply_user.update_all(:status => 2) unless apply_user.blank?
|
|
|
end
|
|
|
|
|
|
if params[:member_ids] && params[:occupation] == "occupation_agree"
|
|
|
User.where(:id => params[:member_ids]).update_all(:professional_certification => true)
|
|
|
apply_user = ApplyUserAuthentication.where(:user_id => params[:member_ids], :auth_type => 2)
|
|
|
unless apply_user.blank?
|
|
|
apply_user.update_all(:status => 1)
|
|
|
end
|
|
|
elsif params[:member_ids] && params[:realname] == "realname_agree"
|
|
|
User.where(:id => params[:member_ids]).update_all(:authentication => true)
|
|
|
apply_user = ApplyUserAuthentication.where(:user_id => params[:member_ids], :auth_type => 1)
|
|
|
unless apply_user.blank?
|
|
|
apply_user.update_all(:status => 1)
|
|
|
end
|
|
|
elsif params[:member_ids] && params[:occupation] == "occupation_cancel"
|
|
|
users = User.where(:id => params[:member_ids])
|
|
|
users.update_all(:professional_certification => false)
|
|
|
# 取消了职业认证给用户发消息
|
|
|
users.each do |user|
|
|
|
Tiding.create(:user_id => user.id, :trigger_user_id => 0, :container_id => user.id, :container_type =>'CancelUserProCertification', :belong_container_id => user.id, :belong_container_type =>'User', :tiding_type => "System")
|
|
|
end
|
|
|
apply_user = ApplyUserAuthentication.where(:user_id => params[:member_ids], :auth_type => 2)
|
|
|
unless apply_user.blank?
|
|
|
apply_user.update_all(:status => 2)
|
|
|
end
|
|
|
elsif params[:member_ids] && params[:realname] == "realname_cancel"
|
|
|
users = User.where(:id => params[:member_ids])
|
|
|
users.update_all(:authentication => false)
|
|
|
# 取消了实名认证给用户发消息
|
|
|
users.each do |user|
|
|
|
Tiding.create(:user_id => user.id, :trigger_user_id => 0, :container_id => user.id, :container_type =>'CancelUserAuthentication', :belong_container_id => user.id, :belong_container_type =>'User', :tiding_type => "System")
|
|
|
end
|
|
|
apply_user = ApplyUserAuthentication.where(:user_id => params[:member_ids], :auth_type => 1)
|
|
|
unless apply_user.blank?
|
|
|
apply_user.update_all(:status => 2)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
users = User.where(nil)
|
|
|
if params[:trial] == "-1"
|
|
|
users = users.where(status: 1, certification: 0)
|
|
|
.joins('LEFT JOIN apply_actions ON apply_actions.user_id = users.id AND apply_actions.container_type = "TrialAuthorization"')
|
|
|
.where('apply_actions.user_id IS NULL')
|
|
|
elsif params[:trial] == "-2"
|
|
|
users = users.where(status: 1)
|
|
|
elsif params[:trial] == "0"
|
|
|
users = users.joins('LEFT JOIN apply_actions ON apply_actions.user_id = users.id').where(apply_actions: { status: 0 })
|
|
|
elsif params[:trial] == "3"
|
|
|
users = users.joins('LEFT JOIN user_day_certifications udc ON udc.user_id = users.id')
|
|
|
.where('users.certification != 1').where('udc.created_at > ?', Time.now.ago(1.days))
|
|
|
else
|
|
|
users = users.where(status: 1, certification: params[:trial])
|
|
|
end
|
|
|
|
|
|
users = users.joins('LEFT JOIN user_extensions ON user_extensions.user_id = users.id')
|
|
|
.joins('LEFT JOIN departments ON departments.id = user_extensions.department_id')
|
|
|
.joins('LEFT JOIN schools ON schools.id = user_extensions.school_id')
|
|
|
|
|
|
if params[:school].present?
|
|
|
users = users.where("schools.name LIKE ?", "%#{params[:school]}%")
|
|
|
end
|
|
|
|
|
|
if params[:department].present?
|
|
|
users = users.where("departments.name LIKE ?", "%#{params[:department]}%")
|
|
|
end
|
|
|
|
|
|
if params[:identity] == "1" || (params[:identity] == "0" && params[:te_technical_title] == "0") || (params[:identity] == "2" && params[:pro_technical_title] == "0")
|
|
|
users = users.where(user_extensions: { identity: params[:identity] })
|
|
|
elsif (params[:identity] == "0" && params[:te_technical_title] != "0") || (params[:identity] == "2" && params[:pro_technical_title] != "0")
|
|
|
technical_title = params[:identity] == "0" ? params[:te_technical_title] : params[:pro_technical_title]
|
|
|
users = users.where(user_extensions: { identity: params[:identity], technical_title: technical_title })
|
|
|
end
|
|
|
|
|
|
if params[:student_id].present?
|
|
|
users = users.where('user_extensions.student_id like ?', "%#{params[:student_id]}%")
|
|
|
end
|
|
|
|
|
|
if params[:research_contents].present?
|
|
|
keyword = "%#{params[:research_contents]}%"
|
|
|
if params[:research_condition] == "name"
|
|
|
users = users.where('concat(lastname, firstname) like ?', keyword)
|
|
|
elsif params[:research_condition] == "email"
|
|
|
users = users.where("mail like ?", keyword)
|
|
|
elsif params[:research_condition] == "phone"
|
|
|
users = users.where("phone like ?", keyword)
|
|
|
elsif params[:research_condition] == "nickname"
|
|
|
users = users.where("nickname like ?", keyword)
|
|
|
elsif params[:research_condition] == "login"
|
|
|
users = users.where("login like ?", keyword)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
if params[:province].present?
|
|
|
users = users.where(schools: { province: params[:province] })
|
|
|
end
|
|
|
|
|
|
users = users.select('distinct users.*')
|
|
|
|
|
|
@page = (params['page'] || 1).to_i
|
|
|
@users_count = users.count
|
|
|
@limit = 20
|
|
|
@is_remote = true
|
|
|
@users_pages = Paginator.new @users_count, @limit, params['page'] || 1
|
|
|
@offset ||= @users_pages.offset
|
|
|
@users = paginateHelper users.order("last_login_on desc").preload(:real_name_authentication_apply, :professional_authentication_apply,
|
|
|
user_extensions: [:department, :school]), @limit
|
|
|
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.xls{
|
|
|
# @export_shixun_task = @export_shixun_task.all
|
|
|
@xls_users = users.limit(3000) #导出excel用户
|
|
|
@xls_users = @xls_users.includes(:real_name_authentication_apply, :professional_authentication_apply,
|
|
|
user_extensions: [:department, :school])
|
|
|
|
|
|
filename = "用户列表.xls"
|
|
|
send_data(user_list_xls(@xls_users), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
|
|
|
}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_webssh
|
|
|
webssh = params[:status] == "true" ? true : false
|
|
|
@shixuns = Shixun.find(params[:shixun_id])
|
|
|
@shixuns.update_column(:webssh, webssh)
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def affirm_cancel_auth
|
|
|
user_id = params[:users]
|
|
|
end
|
|
|
|
|
|
# 升级通知
|
|
|
def update_notice
|
|
|
@menu_type = 12
|
|
|
@sub_type = 8
|
|
|
@notice = SystemUpdateNotice.last
|
|
|
end
|
|
|
|
|
|
def edit_update_notice
|
|
|
notice = SystemUpdateNotice.last
|
|
|
if notice.present? && notice.end_time > Time.now
|
|
|
notice.update_attributes(:end_time => params[:end_time], :start_time => params[:start_time], :subject => params[:subject], :notes => params[:notes])
|
|
|
UserSystemNotice.where(:notice_type => notice.notice_type).destroy_all
|
|
|
else
|
|
|
notice_type = UserSystemNotice.find_by_sql("select max(notice_type) as max_notice_type from user_system_notices").first.try(:max_notice_type).to_i + 1
|
|
|
SystemUpdateNotice.create(:end_time => params[:end_time], :start_time => params[:start_time], :subject => params[:subject], :notes => params[:notes], :notice_type => notice_type)
|
|
|
end
|
|
|
redirect_to update_notice_managements_path
|
|
|
end
|
|
|
|
|
|
def trial_authorization
|
|
|
@menu_type =10
|
|
|
@sub_type = 2
|
|
|
name_search = params[:search]
|
|
|
@status = trial_authorization_status(params[:status])
|
|
|
# @status = (params[:status].blank? || params[:status] == "0") ? 0 : [1,2]
|
|
|
user_id = []
|
|
|
search = false
|
|
|
@authorizations = ApplyAction.where(:container_type => "TrialAuthorization", :status => @status)
|
|
|
|
|
|
unless name_search.blank?
|
|
|
new_user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{name_search}%'").map(&:id)
|
|
|
user_id = user_id.size == 0 ? new_user_id : user_id & new_user_id
|
|
|
search = true
|
|
|
end
|
|
|
|
|
|
if params[:sname] && params[:sname].strip != ''
|
|
|
school_id = School.where("name like '%#{params[:sname]}%'")
|
|
|
new_user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
user_id = user_id.size == 0 ? new_user_id : user_id & new_user_id
|
|
|
search = true
|
|
|
end
|
|
|
|
|
|
if params[:identity] && params[:identity].to_i != -1
|
|
|
new_user_id = UserExtensions.where(:identity => params[:identity].to_i).map(&:user_id)
|
|
|
user_id = user_id.size == 0 ? new_user_id : user_id & new_user_id
|
|
|
search = true
|
|
|
end
|
|
|
|
|
|
if params[:auto_school] && params[:auto_school].to_i != 0
|
|
|
school_id = School.where(auto_users_trial: params[:auto_school].to_i == 1 ? 1 : 0)
|
|
|
new_user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
user_id = user_id.size == 0 ? new_user_id : user_id & new_user_id
|
|
|
search = true
|
|
|
end
|
|
|
|
|
|
@authorizations = user_id.size == 0 && !search ? @authorizations.order("updated_at desc") : @authorizations.where(:user_id => user_id.uniq).order("updated_at desc")
|
|
|
|
|
|
@autu_count = @authorizations.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@autu_pages = Paginator.new @autu_count, @limit, params['page'] || 1
|
|
|
@offset ||= @autu_pages.offset
|
|
|
@authorizations = paginateHelper @authorizations, @limit
|
|
|
|
|
|
@authorizations = @authorizations.includes(:user)
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
# 批量授权
|
|
|
def batch_authorization
|
|
|
|
|
|
end
|
|
|
|
|
|
# params[:type] 1:拒绝 0:同意
|
|
|
# authentication 会有一个初始值,不同的值代表不同的权限
|
|
|
# REDO: 后面权限改了后,一并要改
|
|
|
def trial_authorization_operation
|
|
|
logger.warn("####trial_authorization_operation: #{format_time(Time.now)}")
|
|
|
apply_action = ApplyAction.find(params[:apply_id])
|
|
|
type = params[:type]
|
|
|
search = params[:search]
|
|
|
if type == "0"
|
|
|
authentication_user = AuthenticationsUsers.where(user_id: apply_action.user_id).first
|
|
|
if authentication_user.blank?
|
|
|
AuthenticationsUsers.create(:user_id => apply_action.user_id, :authentication_id => 1)
|
|
|
end
|
|
|
begin
|
|
|
logger.warn("trial_authorization_operation begin send: #{format_time(format_time(Time.now))}")
|
|
|
# verification_code = code.sample(6).join
|
|
|
if apply_action.user.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: apply_action.user.phone.to_s, code: '1', send_type:'trial_authorization', user_name:apply_action.user.show_name, result:'已通过')
|
|
|
end
|
|
|
logger.warn("trial_authorization_operation complete send: #{format_time(Time.now)}")
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
# 授权的教师加入示例课堂
|
|
|
join_ex_course(apply_action.user) if apply_action.user.user_extensions.identity == 0
|
|
|
logger.warn("####trial_authorization_operation teacher joined: #{format_time(Time.now)}")
|
|
|
else
|
|
|
begin
|
|
|
# verification_code = code.sample(6).join
|
|
|
if apply_action.user.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: apply_action.user.phone.to_s, code: '1', send_type:'trial_authorization', user_name:apply_action.user.show_name, result:'未通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
end
|
|
|
Tiding.where(:user_id => 1, :trigger_user_id => apply_action.user_id, :container_id => apply_action.id, :container_type => 'ApplyAction', :tiding_type => "Apply", :status => 0).update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_action.user_id, :trigger_user_id => 0, :container_id => apply_action.id, :container_type => 'ApplyAction',
|
|
|
:parent_container_id => apply_action.container_id, :parent_container_type => apply_action.container_type, :belong_container_id => apply_action.container_id, :belong_container_type => "User", :tiding_type => "System", :status => type == "0" ? 1 : 2)
|
|
|
|
|
|
reject_reason = Array(params[:reasons]).join(';')
|
|
|
apply_action.update_attributes(status: (params[:type] == "1" ? 2 : 1), reason: reject_reason, reject_description: params[:reject_description], dealer_id: User.current.id, noticed: false)
|
|
|
|
|
|
User.where(:id => apply_action.user_id).first.update_attributes(:certification => (params[:type] == "1" ? 2 : 1))
|
|
|
|
|
|
if params[:reject_type] != "revocation"
|
|
|
user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{search}%'")
|
|
|
@authorizations = ApplyAction.where(:container_type => "TrialAuthorization", :status => 0, :user_id => user_id).includes(:user)
|
|
|
@autu_count = @authorizations.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@autu_pages = Paginator.new @autu_count, @limit, params['page'] || 1
|
|
|
@offset ||= @autu_pages.offset
|
|
|
@authorizations = paginateHelper @authorizations, @limit
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def index
|
|
|
|
|
|
end
|
|
|
|
|
|
# copy from admin
|
|
|
def identity_authentication
|
|
|
@menu_type = 10
|
|
|
@sub_type = 1
|
|
|
@type = trial_authorization_status(params[:type])
|
|
|
type = params[:type] || 0 # 存在type 就用type 没有就为 0
|
|
|
user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{params[:name]}%'")
|
|
|
@unapproved_user = ApplyUserAuthentication.where(:status => @type, :user_id => user_id, :auth_type => 1).order("updated_at desc")
|
|
|
if params[:sname] && params[:sname] != ''
|
|
|
school_id = School.where("name like '%#{params[:sname]}%'")
|
|
|
user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
@unapproved_user = @unapproved_user.where(:user_id => user_id).order("updated_at desc")
|
|
|
end
|
|
|
|
|
|
@unapproved_user_count = @unapproved_user.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@unapproved_user_pages = Paginator.new @unapproved_user_count, @limit, params['page'] || 1
|
|
|
@offset ||= @unapproved_user_pages.offset
|
|
|
@unapproved_user = paginateHelper @unapproved_user, @limit
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def professional_authentication
|
|
|
@menu_type = 10
|
|
|
@sub_type = 7
|
|
|
@type = trial_authorization_status(params[:type])
|
|
|
type = params[:type] || 0 # 存在type 就用type 没有就为 0
|
|
|
user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{params[:name]}%'")
|
|
|
# @unapproved_user = ApplyUserAuthentication.where(:status => @type, :user_id => user_id, :auth_type => 2).find_by_sql("SELECT s.*, TIMESTAMPDIFF(SECOND, s.updated_at, now()) diff FROM `apply_user_authentications` s order by diff asc")
|
|
|
@unapproved_user = ApplyUserAuthentication.where(:status => @type, :user_id => user_id, :auth_type => 2)
|
|
|
if params[:sname] && params[:sname] != ''
|
|
|
school_id = School.where("name like '%#{params[:sname]}%'")
|
|
|
user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
|
|
|
@unapproved_user = @unapproved_user.where(:user_id => user_id)
|
|
|
end
|
|
|
|
|
|
if params[:identity] && params[:identity] != "" && params[:identity] != "-1"
|
|
|
user_id = UserExtensions.where(:identity => params[:identity]).map(&:user_id)
|
|
|
@unapproved_user = @unapproved_user.where(:user_id => user_id)
|
|
|
end
|
|
|
@unapproved_user = @unapproved_user.order("updated_at desc")
|
|
|
@unapproved_user_count = @unapproved_user.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@unapproved_user_pages = Paginator.new @unapproved_user_count, @limit, params['page'] || 1
|
|
|
@offset ||= @unapproved_user_pages.offset
|
|
|
@unapproved_user = paginateHelper @unapproved_user, @limit
|
|
|
respond_to do |format|
|
|
|
format.html
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 拒绝身份认证
|
|
|
# copy from admin
|
|
|
def reject_authentication
|
|
|
apply_user = ApplyUserAuthentication.where(:id => params[:apply_id], :auth_type => 1).first
|
|
|
reason = apply_user.update_attributes(:status => 2, :remarks => params[:reject_reason])
|
|
|
=begin
|
|
|
begin
|
|
|
if apply_user.user.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: apply_user.user.phone.to_s, code: '1', send_type:'authentication',user_name:apply_user.user.show_name, result:'未通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
diskfile1 = disk_filename("UserAuthentication", apply_user.user_id) +"ID"
|
|
|
apply_user.update_attributes(:is_delete => true)
|
|
|
File.delete(diskfile1)
|
|
|
|
|
|
apply_user.tidings.where(:tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_user.user_id ,:trigger_user_id => 0, :container_id => apply_user.id, :container_type => "ApplyUserAuthentication", :belong_container_id => apply_user.user_id, :belong_container_type =>'User', :status => 2, :tiding_type => "System")
|
|
|
render :json => {success: reason}
|
|
|
end
|
|
|
|
|
|
# 同意身份认证
|
|
|
# copy from admin
|
|
|
def agree_authentication
|
|
|
apply_user = ApplyUserAuthentication.where(:id => params[:apply_id], :auth_type => 1).first
|
|
|
user = User.find(apply_user.user_id)
|
|
|
apply_user.update_attribute(:status, 1)
|
|
|
user.update_attribute(:authentication, true)
|
|
|
grade_record = Grade.where(:container_id => user.id, :container_type => "Authentication").first
|
|
|
unless grade_record
|
|
|
user.update_attribute(:grade, user.grade + 500)
|
|
|
Grade.create(:user_id => user.id, :container_id => user.id, :container_type => "Authentication", :score => 500)
|
|
|
end
|
|
|
|
|
|
diskfile1 = disk_filename("UserAuthentication", apply_user.user_id) +"ID"
|
|
|
apply_user.update_attributes(:is_delete => true)
|
|
|
File.delete(diskfile1) if File.exist?(diskfile1)
|
|
|
|
|
|
=begin
|
|
|
begin
|
|
|
if apply_user.user.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: apply_user.user.phone.to_s, code: '1', send_type:'authentication',user_name:apply_user.user.show_name, result:'已通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
|
|
|
apply_user.tidings.where(:tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_user.user_id ,:trigger_user_id => 0, :container_id => apply_user.id, :container_type => "ApplyUserAuthentication", :belong_container_id => apply_user.user_id, :belong_container_type =>'User', :status => 1, :tiding_type => "System")
|
|
|
|
|
|
@unapproved_user = ApplyUserAuthentication.where(:status => 0, :auth_type => 1).order("updated_at desc")
|
|
|
@unapproved_user_count = @unapproved_user.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@unapproved_user_pages = Paginator.new @unapproved_user_count, @limit, params['page'] || 1
|
|
|
@offset ||= @unapproved_user_pages.offset
|
|
|
@unapproved_user = paginateHelper @unapproved_user, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 拒绝职业认证
|
|
|
def reject_authentication_pro
|
|
|
apply_user = ApplyUserAuthentication.where(:id => params[:apply_id], :auth_type => 2).first
|
|
|
if apply_user.present? && apply_user.status == 0
|
|
|
reason = apply_user.update_attributes(:status => 2, :remarks => params[:reject_reason])
|
|
|
diskfile1 = disk_filename("UserAuthentication", apply_user.user_id) +"PRO"
|
|
|
apply_user.update_attributes(:is_delete => true)
|
|
|
File.delete(diskfile1)
|
|
|
=begin
|
|
|
begin
|
|
|
if apply_user.user.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: apply_user.user.phone.to_s, code: '1', send_type:'authentication_pro',user_name:apply_user.user.show_name, result:'未通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
apply_user.tidings.where(:tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_user.user_id ,:trigger_user_id => 0, :container_id => apply_user.id, :container_type => "ApplyUserAuthentication", :belong_container_id => apply_user.user_id, :belong_container_type =>'User', :status => 2, :tiding_type => "System")
|
|
|
|
|
|
render :json => {success: reason}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 同意职业认证
|
|
|
def agree_authentication_pro
|
|
|
apply_user = ApplyUserAuthentication.where(:id => params[:apply_id], :auth_type => 2).first
|
|
|
user = User.find(apply_user.user_id)
|
|
|
apply_user.update_attribute(:status, 1)
|
|
|
user.update_attribute(:professional_certification, true)
|
|
|
grade_record = Grade.where(:container_id => user.id, :container_type => "Professional").first
|
|
|
unless grade_record
|
|
|
user.update_attribute(:grade, user.grade + 500)
|
|
|
Grade.create(:user_id => user.id, :container_id => user.id, :container_type => "Professional", :score => 500)
|
|
|
end
|
|
|
|
|
|
diskfile1 = disk_filename("UserAuthentication", apply_user.user_id) +"PRO"
|
|
|
apply_user.update_attributes(:is_delete => true)
|
|
|
File.delete(diskfile1)
|
|
|
|
|
|
=begin
|
|
|
begin
|
|
|
if apply_user.user.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: apply_user.user.phone.to_s, code: '1', send_type:'authentication_pro',user_name:apply_user.user.show_name, result:'已通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
apply_user.tidings.where(:tiding_type => "Apply").update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_user.user_id ,:trigger_user_id => 0, :container_id => apply_user.id, :container_type => "ApplyUserAuthentication", :belong_container_id => apply_user.user_id, :belong_container_type =>'User', :status => 1, :tiding_type => "System")
|
|
|
|
|
|
@unapproved_user = ApplyUserAuthentication.where(:status => 0, :auth_type => 2).order("updated_at desc")
|
|
|
@unapproved_user_count = @unapproved_user.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@unapproved_user_pages = Paginator.new @unapproved_user_count, @limit, params['page'] || 1
|
|
|
@offset ||= @unapproved_user_pages.offset
|
|
|
@unapproved_user = paginateHelper @unapproved_user, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def subject_authorization
|
|
|
@menu_type = 10
|
|
|
@sub_type = 6
|
|
|
@type = trial_authorization_status params[:type]
|
|
|
@authorizations = ApplyAction.where(:container_type => "ApplySubject", :status => @type).order("created_at desc")
|
|
|
# @subject=Subject.all
|
|
|
|
|
|
@authorizations_count = @authorizations.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@authorizations_pages = Paginator.new @authorizations_count, @limit, params['page'] || 1
|
|
|
@offset ||= @authorizations_pages.offset
|
|
|
@authorizations = paginateHelper @authorizations, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def shixun_authorization
|
|
|
@menu_type = 10
|
|
|
@sub_type = 5
|
|
|
@type = trial_authorization_status params[:type]
|
|
|
# sql = select * from apply_actions where dealer_id is null
|
|
|
@authorizations = ApplyAction.where(:container_type => "ApplyShixun", :status => @type).order("created_at desc")
|
|
|
search = params[:search]
|
|
|
unless search.blank?
|
|
|
@authorizations = @authorizations.where(:container_id => Shixun.where(:id => @authorizations.map(&:container_id)).where("name like '%#{search}%'").map(&:id)).order("created_at desc")
|
|
|
end
|
|
|
|
|
|
@authorizations_count = @authorizations.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@authorizations_pages = Paginator.new @authorizations_count, @limit, params['page'] || 1
|
|
|
@offset ||= @authorizations_pages.offset
|
|
|
@authorizations = paginateHelper @authorizations, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 课程实训发布审批
|
|
|
def deal_subject_authorization
|
|
|
apply_action = ApplyAction.find(params[:apply_id])
|
|
|
type = params[:type].to_i
|
|
|
subject = Subject.find apply_action.container_id
|
|
|
if type == 0 #拒绝
|
|
|
subject.update_column('status', 0)
|
|
|
apply_action.update_attributes(:status => 2, :reason => params[:reject_reason], :dealer_id => User.current.id)
|
|
|
# notes = "您所在团队提交的课程实训发布申请:<a href='#{subject_path(subject)}'>#{subject.name}</a>,审核未通过。<br/>原因:#{params[:reject_reason]}"
|
|
|
# JournalsForMessage.create(:jour_id => subject.user_id, :jour_type => 'Principal', :user_id => User.current.id, :notes => notes, :private => 1, :reply_id => 0)
|
|
|
=begin
|
|
|
begin
|
|
|
# verification_code = code.sample(6).join
|
|
|
if subject.owner.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: subject.owner.phone.to_s, code: '1', send_type:'subject_authorization', name:subject.name, user_name:subject.owner.show_name, result:'未通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
|
|
|
else #同意
|
|
|
subject.update_attributes(:status =>2, :publish_time => Time.now)
|
|
|
apply_action.update_attributes(:status => 1, :dealer_id => User.current.id)
|
|
|
=begin
|
|
|
begin
|
|
|
unless subject.owner.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: subject.owner.phone.to_s, code: '1', send_type:'subject_authorization', name:subject.name, user_name:subject.owner.show_name, result:'已通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
end
|
|
|
Tiding.where(:user_id => 1 ,:trigger_user_id => apply_action.user_id, :container_id => apply_action.id, :container_type => 'ApplyAction', :tiding_type => "Apply", :status => 0).update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_action.user_id, :trigger_user_id => 0, :container_id => apply_action.id, :container_type => 'ApplyAction',
|
|
|
:parent_container_id => apply_action.container_id, :parent_container_type => apply_action.container_type, :belong_container_id => apply_action.container_id, :belong_container_type => "Subject", :tiding_type => "System", :status => type == 0 ? 2 : 1)
|
|
|
|
|
|
@authorizations = ApplyAction.where(:container_type => "ApplySubject", :status => 0)
|
|
|
@authorizations_count = @authorizations.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@authorizations_pages = Paginator.new @authorizations_count, @limit, params['page'] || 1
|
|
|
@offset ||= @authorizations_pages.offset
|
|
|
@authorizations = paginateHelper @authorizations, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 项目实训发布审批
|
|
|
def deal_shixun_authorization
|
|
|
apply_action = ApplyAction.find(params[:apply_id])
|
|
|
type = params[:type].to_i
|
|
|
shixun = Shixun.find apply_action.container_id
|
|
|
shixun_creator = shixun.owner
|
|
|
if type == 0 #拒绝
|
|
|
shixun.update_column('status', 0)
|
|
|
apply_action.update_attributes(:status => 2, :reason => params[:reject_reason], :dealer_id => User.current.id)
|
|
|
=begin
|
|
|
begin
|
|
|
if shixun_creator.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: shixun_creator.phone.to_s, code: '1', send_type:'shixun_authorization', name:shixun.name, user_name:shixun_creator.show_name, result:'未通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
|
|
|
else #同意
|
|
|
# 给实训制作者奖励“金币/经验” (奖励数额:实训关卡的金币的总数)
|
|
|
score = shixun.all_score
|
|
|
grade = Grade.where(:user_id => shixun.user_id, :container_id => shixun.id, :container_type => "shixunPublish").first
|
|
|
if grade.blank? # 防止多条创建
|
|
|
Grade.create(:user_id => shixun.user_id, :container_id => shixun.id, :container_type => "shixunPublish", :score => score)
|
|
|
Experience.create(:user_id => shixun.user_id, :container_id => shixun.id, :container_type => "shixunPublish", :score => score)
|
|
|
shixun_creator.update_attributes(:grade => shixun_creator.grade + score, :experience => shixun_creator.experience + score)
|
|
|
end
|
|
|
|
|
|
shixun.update_column('status', 2)
|
|
|
apply_action.update_attributes(:status => 1, :dealer_id => User.current.id)
|
|
|
shixun = Shixun.where(:id => apply_action.container_id).first
|
|
|
shixun.update_attribute(:publish_time, Time.now)
|
|
|
# 实训通关则给实训制作者相应的金币奖励
|
|
|
|
|
|
shixun_modify_status_without_publish shixun, 1
|
|
|
=begin
|
|
|
begin
|
|
|
if shixun_creator.phone.present?
|
|
|
status = Trustie::Sms.send(mobile: shixun.owner.phone.to_s, code: '1', send_type:'shixun_authorization', name:shixun.name, user_name:shixun.owner.show_name, result:'已通过')
|
|
|
end
|
|
|
rescue => e
|
|
|
Rails.logger.error "发送验证码出错: #{e}"
|
|
|
end
|
|
|
=end
|
|
|
end
|
|
|
Tiding.where(:user_id => 1 ,:trigger_user_id => apply_action.user_id, :container_id => apply_action.id, :container_type => 'ApplyAction', :tiding_type => "Apply", :status => 0).update_all(:status => 1)
|
|
|
Tiding.create(:user_id => apply_action.user_id, :trigger_user_id => 0, :container_id => apply_action.id, :container_type => 'ApplyAction',
|
|
|
:parent_container_id => apply_action.container_id, :parent_container_type => apply_action.container_type, :belong_container_id => apply_action.container_id, :belong_container_type => "Shixun", :tiding_type => "System", :status => type == 0 ? 2 : 1)
|
|
|
|
|
|
|
|
|
@authorizations = ApplyAction.where(:container_type => "ApplyShixun", :status => 0)
|
|
|
@authorizations_count = @authorizations.count
|
|
|
@limit = 15
|
|
|
@is_remote = true
|
|
|
@authorizations_pages = Paginator.new @authorizations_count, @limit, params['page'] || 1
|
|
|
@offset ||= @authorizations_pages.offset
|
|
|
@authorizations = paginateHelper @authorizations, @limit
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def tech_system
|
|
|
@menu_type = 12
|
|
|
@sub_type = 5
|
|
|
@tech_system = Repertoire.where(nil).order("updated_at asc")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 创建体系
|
|
|
def create_system
|
|
|
rep_name = params[:repertoire]
|
|
|
sub_rep_name = params[:sub_repertoire]
|
|
|
tags_name = params[:tag_repertoire]
|
|
|
ActiveRecord::Base.transaction do
|
|
|
begin
|
|
|
rep = Repertoire.create!(:name => rep_name)
|
|
|
sub_rep = SubRepertoire.create!(:name => sub_rep_name, :repertoire_id => rep.id)
|
|
|
tags_name.each do |tag|
|
|
|
TagRepertoire.create!(:name => tag, :sub_repertoire_id => sub_rep.id)
|
|
|
end
|
|
|
redirect_to tech_system_managements_path
|
|
|
rescue Exception => e
|
|
|
logger.error("create_system error: #{e}")
|
|
|
raise ActiveRecord::Rollback
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
# 更新tag_repertores的名称
|
|
|
def update_tag_name
|
|
|
tag = TagRepertoire.find(params[:id])
|
|
|
if params[:name].blank?
|
|
|
tag.destroy
|
|
|
else
|
|
|
if tag.name == params[:name].strip
|
|
|
tag.update_column(:updated_at, Time.now)
|
|
|
else
|
|
|
tag.update_attribute(:name, params[:name])
|
|
|
end
|
|
|
end
|
|
|
render :json => {success: "true"}
|
|
|
end
|
|
|
|
|
|
# 更新sub_repertores的名称
|
|
|
def update_sub_name
|
|
|
sub = SubRepertoire.find(params[:id])
|
|
|
if params[:name].blank?
|
|
|
sub.destroy
|
|
|
else
|
|
|
if sub.name == params[:name].strip
|
|
|
sub.update_column(:updated_at, Time.now)
|
|
|
else
|
|
|
sub.update_attribute(:name, params[:name])
|
|
|
end
|
|
|
end
|
|
|
render :json => {success: "true"}
|
|
|
end
|
|
|
|
|
|
def update_rep_name
|
|
|
rep = Repertoire.find(params[:id])
|
|
|
if params[:name].blank?
|
|
|
rep.destroy
|
|
|
else
|
|
|
if rep.name == params[:name].strip
|
|
|
rep.update_column(:updated_at, Time.now)
|
|
|
else
|
|
|
rep.update_attribute(:name, params[:name])
|
|
|
end
|
|
|
end
|
|
|
render :json => {success: "true"}
|
|
|
end
|
|
|
|
|
|
# type: 1表示新建sub_repertoire, 2表示新建tag_repertoire
|
|
|
def create_sub_or_tag_repertoire
|
|
|
type = params[:type].to_i
|
|
|
if type == 1
|
|
|
SubRepertoire.create(:name => params[:name], :repertoire_id => params[:id])
|
|
|
elsif type == 2
|
|
|
TagRepertoire.create(:name =>params[:name], :sub_repertoire_id => params[:id])
|
|
|
end
|
|
|
respond_to do |format|
|
|
|
format.js{redirect_to tech_system_managements_path}
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def delete_sub_tech_system
|
|
|
sub_tech = SubRepertoire.where(:id => params[:sub_res]).first
|
|
|
tech = Repertoire.where(:id => params[:sub_res]).first
|
|
|
if sub_tech.present?
|
|
|
sub_tech.destroy
|
|
|
else
|
|
|
tech.destroy
|
|
|
end
|
|
|
redirect_to tech_system_managements_path
|
|
|
end
|
|
|
|
|
|
def create_tech_system
|
|
|
if params[:index] == "1"
|
|
|
Repertoire.create(:name => params[:res_tech])
|
|
|
else
|
|
|
SubRepertoire.create(:name => params[:sub_tech], :repertoire_id => params[:tech])
|
|
|
end
|
|
|
redirect_to tech_system_managements_path
|
|
|
end
|
|
|
|
|
|
def rename_tech_system
|
|
|
@sub_res = SubRepertoire.where(:id => params[:sub_res]).present? ? SubRepertoire.where(:id => params[:sub_res]).first : "0"
|
|
|
@res = Repertoire.where(:id => params[:res]).first
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def update_tech_system
|
|
|
if params[:sub_tech] == "0"
|
|
|
Repertoire.where(:id => params[:res]).update_all(:name => params[:update_res])
|
|
|
else
|
|
|
Repertoire.where(:id => params[:res]).update_all(:name => params[:update_res])
|
|
|
SubRepertoire.where(:id => params[:sub_res]).update_all(:name => params[:update_sub_res])
|
|
|
end
|
|
|
redirect_to tech_system_managements_path
|
|
|
end
|
|
|
|
|
|
def setting_banner
|
|
|
@images = PortalImage.order("position asc")
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
format.html
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def create_portal_image
|
|
|
PortalImage.create(:name => params[:name], :position => params[:position], :link => params[:link])
|
|
|
redirect_to setting_banner_managements_path
|
|
|
end
|
|
|
|
|
|
def create_school_image
|
|
|
@school = School.find params[:school_id]
|
|
|
SchoolImage.create(:name => params[:name], :position => params[:position], :link => params[:link], :school_id => params[:school_id])
|
|
|
end
|
|
|
|
|
|
def update_school_image
|
|
|
image = SchoolImage.find params[:id]
|
|
|
image.update_attributes(:name => params[:name], :position => params[:position], :link => params[:link])
|
|
|
@school = image.school
|
|
|
end
|
|
|
|
|
|
def up_or_down_image
|
|
|
image = PortalImage.find params[:id]
|
|
|
image.update_attribute(:status, params[:status])
|
|
|
redirect_to setting_banner_managements_path
|
|
|
end
|
|
|
|
|
|
def up_or_down_school_image
|
|
|
image = SchoolImage.find params[:id]
|
|
|
image.update_attribute(:status, params[:status])
|
|
|
@school = image.school
|
|
|
end
|
|
|
|
|
|
|
|
|
def update_portal_image
|
|
|
image = PortalImage.find params[:id]
|
|
|
image.update_attributes(:name => params[:name], :position => params[:position], :link => params[:link])
|
|
|
redirect_to setting_banner_managements_path
|
|
|
end
|
|
|
|
|
|
def delete_portal_image
|
|
|
image = PortalImage.find params[:id]
|
|
|
image.destroy
|
|
|
redirect_to setting_banner_managements_path
|
|
|
end
|
|
|
|
|
|
def delete_school_image
|
|
|
image = SchoolImage.find params[:id]
|
|
|
@school = image.school
|
|
|
image.destroy
|
|
|
end
|
|
|
|
|
|
# 课程删除
|
|
|
before_filter :find_courselist, :only => [:destroy]
|
|
|
|
|
|
# 课程列表的删除
|
|
|
def destroy
|
|
|
if @courselist
|
|
|
CourseList.where(:id => @courselist.id).destroy_all
|
|
|
respond_to do |format|
|
|
|
format.js
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
private
|
|
|
# Find courselist of id params[:id]
|
|
|
def find_courselist
|
|
|
@courselist = CourseList.find_by_id(params[:id])
|
|
|
render_404 if @courselist.nil?
|
|
|
rescue ActiveRecord::RecordNotFound
|
|
|
render_404
|
|
|
end
|
|
|
|
|
|
def shixun_list_xls shixuns
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "sheet"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
sheet1.row(0).concat(["实训ID","实训名称","技术平台", "Fork源", "实践任务","选择题任务","挑战人数", "通关人数", "状态","创建者", "单位", "职业", "关卡序号","关卡名称","技能标签"])
|
|
|
count_row = 1
|
|
|
shixuns.find_each do |shixun|
|
|
|
sheet1[count_row, 0] = shixun.identifier
|
|
|
sheet1[count_row, 1] = shixun.name
|
|
|
sheet1[count_row, 2] = shixun.shixun_main_name
|
|
|
sheet1[count_row, 3] = shixun.fork_identifier
|
|
|
sheet1[count_row, 4] = shixun.challenges.practice_type.count
|
|
|
sheet1[count_row, 5] = shixun.challenges.choose_type.count
|
|
|
sheet1[count_row, 6] = shixun.myshixuns.count
|
|
|
sheet1[count_row, 7] = shixun.myshixuns.finished.count
|
|
|
sheet1[count_row, 8] = shixun.shixun_status
|
|
|
sheet1[count_row, 9] = shixun.owner.show_real_name
|
|
|
sheet1[count_row, 10] = shixun.owner.school_name
|
|
|
sheet1[count_row, 11] = shixun.owner.identity
|
|
|
shixun.challenges.each do |challenge|
|
|
|
sheet1[count_row, 12] = "第#{challenge.position}关"
|
|
|
sheet1[count_row, 13] = challenge.subject
|
|
|
sheet1[count_row, 14] = challenge.tags_show
|
|
|
count_row += 1
|
|
|
end
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def publish_shixun_list shixuns
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "sheet"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
sheet1.row(0).concat(["序号","创建者","发布时间", "ID", "实训名称","技术平台","fork源", "实践任务", "实训链接"])
|
|
|
count_row = 1
|
|
|
shixuns.find_each do |shixun|
|
|
|
sheet1[count_row, 0] = count_row
|
|
|
sheet1[count_row, 1] = shixun.owner.try(:show_real_name)
|
|
|
sheet1[count_row, 2] = format_time shixun.publish_time
|
|
|
sheet1[count_row, 3] = shixun.identifier
|
|
|
sheet1[count_row, 4] = shixun.name
|
|
|
sheet1[count_row, 5] = show_shixun_mirror(shixun)
|
|
|
sheet1[count_row, 6] = shixun.fork_identifier
|
|
|
sheet1[count_row, 7] = shixun.challenges.count
|
|
|
sheet1[count_row, 8] = Setting.server_url + shixun_path(shixun).sub("/", "")
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def training_2018_xls trainings
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "sheet"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
sheet1.row(0).concat(["姓名", "手机号","邮箱","单位名称", "职位","专业", "学号", '授课/研究领域', "支付方式","支付状态","支付时间", "发票类型", "发票抬头","税务登记号", "发票内容", "备注", "微信支付单号", "报名时间"])
|
|
|
count_row = 1
|
|
|
trainings.find_each do |t|
|
|
|
sheet1[count_row, 0] = t.name
|
|
|
sheet1[count_row, 1] = t.phone
|
|
|
sheet1[count_row, 2] = t.email
|
|
|
sheet1[count_row, 3] = t.school
|
|
|
sheet1[count_row, 4] = t.position
|
|
|
sheet1[count_row, 5] = t.major
|
|
|
sheet1[count_row, 6] = t.student_id
|
|
|
sheet1[count_row, 7] = t.research_field
|
|
|
sheet1[count_row, 8] = t.training_payinfo.try(:pay_type_str)
|
|
|
sheet1[count_row, 9] = t.training_payinfo.try(:pay_status_str)
|
|
|
sheet1[count_row, 10] = format_time t.training_payinfo.try(:pay_time)
|
|
|
sheet1[count_row, 11] = t.training_payinfo.try(:invoice_title).present? ? '需要' : '不需要'
|
|
|
sheet1[count_row, 12] = t.training_payinfo.try(:invoice_title)
|
|
|
sheet1[count_row, 13] = t.training_payinfo.try(:invoice_no)
|
|
|
sheet1[count_row, 14] = t.training_payinfo.try(:invoice_content)
|
|
|
sheet1[count_row, 15] = t.training_payinfo.try(:info)
|
|
|
sheet1[count_row, 16] = t.training_payinfo.try(:out_trade_no)
|
|
|
sheet1[count_row, 17] = format_time t.created_at
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def user_list_xls users
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "users"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
sheet1.row(0).concat(["用户姓名","性别","职业","职称","地区"," 单位","子单位","注册时间","最后登录时间","授权", "邮箱"])
|
|
|
count_row = 1
|
|
|
users.each do |user|
|
|
|
sheet1[count_row,0] = user.try(:show_real_name)
|
|
|
sheet1[count_row,1] = user.sex
|
|
|
sheet1[count_row,2] = user.user_extensions.try(:show_identity)
|
|
|
sheet1[count_row,3] = user.job_title
|
|
|
sheet1[count_row,4] = user.region_name
|
|
|
sheet1[count_row,5] = user.user_extensions.try(:school).try(:name)
|
|
|
sheet1[count_row,6] = user.user_extensions.try(:department).try(:name)
|
|
|
sheet1[count_row,7] = format_time user.created_on
|
|
|
sheet1[count_row,8] = format_time user.last_login_on
|
|
|
sheet1[count_row,9] = user.trial_authorization
|
|
|
sheet1[count_row,10] = user.mail
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def course_list_xls courses
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "course"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
sheet1.row(0).concat(["ID","课堂名称","成员","资源","普通作业"," 实训作业","试卷","评测次数", "私有","状态","创建者单位","创建者","动态时间","创建时间"])
|
|
|
count_row = 1
|
|
|
courses.each do |course|
|
|
|
school = course.teacher.try(:user_extensions).try(:school).try(:name).blank? ? "--" : course.teacher.school_name
|
|
|
teacher_name = course.teacher ? course.teacher.show_real_name : ""
|
|
|
sheet1[count_row,0] = course.id
|
|
|
sheet1[count_row,1] = course.name
|
|
|
sheet1[count_row,2] = course.course_members_count
|
|
|
sheet1[count_row,3] = course.attachments.count
|
|
|
sheet1[count_row,4] = course.homework_commons.where(:homework_type => 1).count
|
|
|
sheet1[count_row,5] = course.homework_commons.where(:homework_type => 4).count
|
|
|
sheet1[count_row,6] = course.exercises.count
|
|
|
sheet1[count_row,7] = course.evaluate_count
|
|
|
sheet1[count_row,8] = course.is_public.to_i == 1 ? '否' : '是'
|
|
|
sheet1[count_row,9] = course.is_end ? "已结束" : "正在进行"
|
|
|
sheet1[count_row,10] = school
|
|
|
sheet1[count_row,11] = teacher_name
|
|
|
sheet1[count_row,12] = format_time(course.updatetime)
|
|
|
sheet1[count_row,13] = format_time(course.created_at)
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def shixun_task_xls shixun_task
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "course"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
sheet1.row(0).concat(["ID","课堂名称","创建者","学生","实训作业","序号", "ID", "关卡数","作业名称","发布时间","截至时间","已提交作品","有效作品","通关","状态"])
|
|
|
count_row = 1
|
|
|
shixun_task.each_with_index do |shixun_task,index|
|
|
|
teacher_name = shixun_task.teacher ? shixun_task.teacher.show_real_name : ""
|
|
|
sheet1[count_row,0] = shixun_task.id
|
|
|
sheet1[count_row,1] = shixun_task.name
|
|
|
sheet1[count_row,2] = teacher_name
|
|
|
sheet1[count_row,3] = shixun_task.student.count
|
|
|
sheet1[count_row,4] = get_shixun_task(shixun_task.id).count
|
|
|
get_shixun_task(shixun_task.id).each_with_index do |gst, j|
|
|
|
sheet1[count_row,5] = get_hw_index(gst, @is_teacher, 4) + 1
|
|
|
sheet1[count_row,6] = gst.shixun.try(:identifier).nil? ? "--" : gst.shixun.try(:identifier)
|
|
|
sheet1[count_row,7] = gst.shixun.challenges.count
|
|
|
sheet1[count_row,8] = gst.name
|
|
|
sheet1[count_row,9] = format_time(gst.publish_time)
|
|
|
sheet1[count_row,10] = format_time(gst.end_time)
|
|
|
sheet1[count_row,11] = had_commit_studentwork_count(gst)
|
|
|
sheet1[count_row,12] = effective_shixun_work_count gst
|
|
|
sheet1[count_row,13] = tongguan_shixun_work_count gst
|
|
|
sheet1[count_row,14] = if HomeworkDetailManual.where(:homework_common_id => gst.id).first.comment_status == 0
|
|
|
"未发布"
|
|
|
elsif HomeworkDetailManual.where(:homework_common_id => gst.id).first.comment_status == 1
|
|
|
"提交中"
|
|
|
elsif HomeworkDetailManual.where(:homework_common_id => gst.id).first.comment_status == 3
|
|
|
"匿评中"
|
|
|
elsif HomeworkDetailManual.where(:homework_common_id => gst.id).first.comment_status == 4
|
|
|
"申诉中"
|
|
|
elsif HomeworkDetailManual.where(:homework_common_id => gst.id).first.comment_status == 5
|
|
|
"评阅中"
|
|
|
else HomeworkDetailManual.where(:homework_common_id => gst.id).first.comment_status == 6
|
|
|
"已结束"
|
|
|
end
|
|
|
count_row += 1
|
|
|
end
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def readXlsData(xlsx)
|
|
|
doc = SimpleXlsxReader.open(xlsx)
|
|
|
sheet = doc.sheets.first
|
|
|
return sheet.rows
|
|
|
end
|
|
|
|
|
|
def user_agents_export
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "引流名单"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
count_row = 1
|
|
|
sheet1.row(0).concat(["序号", "LoginId", "姓名", "学校名称", "手机号", "邮箱", "参赛人数", "参赛队伍", "访问量"])
|
|
|
user_agents = UserAgent.where("user_agents.key is not null and is_delete = 0").pluck(:key).uniq
|
|
|
user_agents.each_with_index do |agent, index|
|
|
|
user = User.find_by_login(agent)
|
|
|
next if user.blank?
|
|
|
# 代理用户
|
|
|
agents = UserAgent.where(key: agent)
|
|
|
agents_count = agents.count
|
|
|
competion_users = agents.where(action_status: 2).pluck(:ip)
|
|
|
rank_user_id = UserActions.where(ip: competion_users).pluck(:user_id).uniq
|
|
|
team_ids = TeamMember.where(user_id: rank_user_id).pluck(:competition_team_id).uniq
|
|
|
sheet1[count_row, 0] = index + 1
|
|
|
sheet1[count_row, 1] = agent
|
|
|
sheet1[count_row, 2] = user.show_real_name
|
|
|
sheet1[count_row, 3] = user.school_name
|
|
|
sheet1[count_row, 4] = user.phone
|
|
|
sheet1[count_row, 5] = user.mail
|
|
|
sheet1[count_row, 6] = competion_users.count
|
|
|
sheet1[count_row, 7] = team_ids.count
|
|
|
sheet1[count_row, 8] = agents_count
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def export_subject_level_system
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "实训课程等级体系"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
count_row = 1
|
|
|
sheet1.row(0).concat(["序号", "等级", "实训课程名称", "实训课程url", "实训名称"])
|
|
|
levels = SubjectLevelSystem.includes(subjects: [stage_shixuns: :shixun]).where(nil)
|
|
|
levels.each_with_index do |level, i|
|
|
|
sheet1[count_row, 0] = i + 1
|
|
|
sheet1[count_row, 1] = level.name
|
|
|
level.subjects.each do |subject|
|
|
|
sheet1[count_row, 2] = subject.name
|
|
|
sheet1[count_row, 3] = "#{Setting.protocol}://#{Setting.host_name}#{subject_path(subject)}"
|
|
|
count_row += 1
|
|
|
subject.shixuns.each do |shixun|
|
|
|
sheet1[count_row, 4] = shixun.name
|
|
|
count_row += 1
|
|
|
end
|
|
|
end
|
|
|
count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def shixun_feedback_xls shixun_ids, beginTime, endTime
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "实训反馈"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
count_row = 1
|
|
|
shixuns = Shixun.where(:id => shixun_ids).includes(discusses: [:user])
|
|
|
sheet1.row(0).concat(["序号", "实训ID", "实训名称", "实训作者", "作者单位", "评论数", "评论内容", "关卡", "评论者", "评论者职业",
|
|
|
"评论者单位", "评论时间", "社区导师是否已回复", "我的账号回复内容", "回复时间"])
|
|
|
shixuns.each_with_index do |shixun, i|
|
|
|
discusses = shixun.discusses.where("user_id != ?", 1)
|
|
|
if beginTime.present?
|
|
|
discusses = discusses.where("created_at >= '#{beginTime}'")
|
|
|
end
|
|
|
if endTime.present?
|
|
|
discusses = discusses.where("created_at <= '#{endTime}'")
|
|
|
end
|
|
|
sheet1[count_row, 0] = i + 1
|
|
|
sheet1[count_row, 1] = shixun.identifier
|
|
|
sheet1[count_row, 2] = shixun.name
|
|
|
sheet1[count_row, 3] = shixun.owner.show_real_name
|
|
|
sheet1[count_row, 4] = shixun.owner.school_name
|
|
|
sheet1[count_row, 5] = discusses.count
|
|
|
discusses.each_with_index do |discuss, j|
|
|
|
user = discuss.user
|
|
|
content = discuss.content.gsub(/<img.*\/>/, "【图片评论】").gsub(/!\[\].+\)/, "【图片评论】")
|
|
|
myself_discuss = discuss.children.where(user_id: User.current.id).last
|
|
|
sheet1[count_row, 6] = strip_html content
|
|
|
sheet1[count_row, 7] = "第#{discuss.position}关"
|
|
|
sheet1[count_row, 8] = user.show_real_name
|
|
|
sheet1[count_row, 9] = user.identity
|
|
|
sheet1[count_row, 10] = user.school_name
|
|
|
sheet1[count_row, 11] = format_time discuss.created_at
|
|
|
sheet1[count_row, 12] = discuss.children.pluck(:user_id).include?(1) ? "是" : "否"
|
|
|
sheet1[count_row, 13] = myself_discuss.try(:content)
|
|
|
sheet1[count_row, 14] = myself_discuss ? (format_time myself_discuss.created_at) : ""
|
|
|
count_row += 1
|
|
|
end
|
|
|
#count_row += 1
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def competition_member_xls members, competition
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "报名列表"
|
|
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
|
|
sheet1.row(0).default_format = blue
|
|
|
count_row = 1
|
|
|
records = competition.competition_teams
|
|
|
if competition.identifier == "gcc-annotation-2018"
|
|
|
records.each do |team|
|
|
|
team[:s_score] = team.competition_scores.where(:competition_id => competition.id).first.try(:score).to_f.try(:round, 3)
|
|
|
end
|
|
|
records = records.sort do |a, b|
|
|
|
[b[:s_score]] <=> [a[:s_score]]
|
|
|
end
|
|
|
elsif competition.identifier == "gcc-dev-2018"
|
|
|
pre_stage = competition.competition_stages.where(:name => "预赛").first
|
|
|
final_stage = competition.competition_stages.where(:name => "决赛").first
|
|
|
records.each do |team|
|
|
|
# 决赛记录
|
|
|
f_score = team.competition_scores.where(:competition_stage_id => final_stage.try(:id)).first
|
|
|
# 预赛记录
|
|
|
p_score = team.competition_scores.where(:competition_stage_id => pre_stage.try(:id)).first
|
|
|
team[:s_score] = (f_score.try(:score).to_f * 0.85 + p_score.try(:score).to_f * 0.15).try(:round, 2)
|
|
|
team[:s_spend_time] = f_score.try(:cost_time).to_i + p_score.try(:cost_time).to_i
|
|
|
end
|
|
|
records = records.sort do |a, b|
|
|
|
[b[:s_score], a[:s_spend_time]] <=> [a[:s_score], b[:s_spend_time]]
|
|
|
end
|
|
|
elsif competition.identifier == 'hn'
|
|
|
pre_stage = competition.competition_stages.where(:name => "预赛").first
|
|
|
final_stage = competition.competition_stages.where(:name => "决赛").first
|
|
|
records.each do |team|
|
|
|
f_score = team.competition_scores.where(:competition_stage_id => final_stage.try(:id)).first
|
|
|
p_score = team.competition_scores.where(:competition_stage_id => pre_stage.try(:id)).first
|
|
|
team[:s_score] = (f_score.try(:score).to_f * 0.8 + p_score.try(:score).to_f * 0.2).try(:round, 2)
|
|
|
team[:s_spend_time] = f_score.try(:cost_time).to_i + p_score.try(:cost_time).to_i
|
|
|
end
|
|
|
records = records.sort do |a, b|
|
|
|
[b[:s_score], a[:s_spend_time]] <=> [a[:s_score], b[:s_spend_time]]
|
|
|
end
|
|
|
end
|
|
|
if competition.max_num > 1
|
|
|
sheet1.row(0).concat(["序号", "战队ID", "战队名称", "战队创建者", "指导老师", "队员姓名", "手机号", "邮箱", "学号", "实名认证", "职业认证", "学校名称", "地区", "报名时间", "排名"])
|
|
|
members.each_with_index do |member, index|
|
|
|
member_user = member.user
|
|
|
sheet1[count_row,0] = index + 1
|
|
|
sheet1[count_row,1] = member.competition_team.try(:id)
|
|
|
sheet1[count_row,2] = member.competition_team.try(:name)
|
|
|
sheet1[count_row,3] = member.competition_team.user.try(:show_real_name)
|
|
|
sheet1[count_row,4] = member.competition_team.teacher.try(:show_real_name)
|
|
|
sheet1[count_row,5] = member_user.try(:show_real_name)
|
|
|
sheet1[count_row,6] = member_user.try(:phone)
|
|
|
sheet1[count_row,7] = member_user.try(:mail)
|
|
|
sheet1[count_row,8] = member_user.try(:student_id)
|
|
|
sheet1[count_row,9] = member_user.try(:authentication_status)
|
|
|
sheet1[count_row,10] = member_user.try(:professional_status)
|
|
|
sheet1[count_row,11] = member_user.try(:school_name)
|
|
|
sheet1[count_row,12] = member_user.user_extensions.school.try(:province)
|
|
|
sheet1[count_row,13] = format_time member.created_at
|
|
|
sheet1[count_row,14] = records.present? ? (records.map(&:id).index(member.competition_team_id).to_i + 1) : "--"
|
|
|
count_row += 1
|
|
|
end
|
|
|
else
|
|
|
sheet1.row(0).concat(["序号","姓名","学号","实名认证", "职业认证", "学校名称","地区", "报名时间", "排名"])
|
|
|
members.each_with_index do |member, index|
|
|
|
member_user = member.user
|
|
|
sheet1[count_row,0] = index + 1
|
|
|
sheet1[count_row,1] = member_user.try(:show_real_name)
|
|
|
sheet1[count_row,2] = member_user.try(:student_id)
|
|
|
sheet1[count_row,3] = member_user.try(:authentication_status)
|
|
|
sheet1[count_row,4] = member_user.try(:professional_status)
|
|
|
sheet1[count_row,5] = member_user.try(:school_name)
|
|
|
sheet1[count_row,6] = member_user.user_extensions.school.try(:province)
|
|
|
sheet1[count_row,7] = format_time member.created_at
|
|
|
sheet1[count_row,8] = records.present? ? (records.map(&:id).index(member.competition_team_id).to_i + 1) : "--"
|
|
|
count_row += 1
|
|
|
end
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def published_subject_xls subjects
|
|
|
xls_report = StringIO.new
|
|
|
book = Spreadsheet::Workbook.new
|
|
|
sheet1 = book.create_worksheet :name => "已发布实训课程"
|
|
|
count_row = 2
|
|
|
sheet1.row(1).concat(["", "地址", "实训课程名称","章节名称", "实训组成", "关卡数", "状态", "实训发布时间", "课程等级", "更新时间", "发布时间", ])
|
|
|
Rails.logger.warn("##########subjects:#{subjects.count}")
|
|
|
subjects.each do |subject|
|
|
|
sheet1[count_row,1] = "paths/"+subject.id.to_s
|
|
|
sheet1[count_row,2] = subject.name
|
|
|
if subject.stages.count > 0
|
|
|
subject.stages.each_with_index do |stage, s_index|
|
|
|
sheet1[count_row,3] = stage.name
|
|
|
if stage.shixuns.count > 0
|
|
|
stage.shixuns.each_with_index do |shixun, index|
|
|
|
sheet1[count_row,4] = "#{s_index + 1}-#{index + 1} #{shixun.name}"
|
|
|
sheet1[count_row,5] = shixun.challenges.count
|
|
|
sheet1[count_row,6] = shixun.shixun_status
|
|
|
sheet1[count_row,7] = shixun.publish_time
|
|
|
if s_index == 0 && index == 0
|
|
|
sheet1[count_row,8] = subject.subject_level_system.try(:name) || "--"
|
|
|
sheet1[count_row,9] = format_time subject.updated_at
|
|
|
sheet1[count_row,10] = format_time subject.publish_time
|
|
|
end
|
|
|
count_row += 1
|
|
|
end
|
|
|
else
|
|
|
if s_index == 0
|
|
|
sheet1[count_row,8] = subject.subject_level_system.try(:name) || "--"
|
|
|
sheet1[count_row,9] = format_time subject.updated_at
|
|
|
sheet1[count_row,10] = format_time subject.publish_time
|
|
|
end
|
|
|
count_row += 1
|
|
|
end
|
|
|
end
|
|
|
else
|
|
|
sheet1[count_row,8] = subject.subject_level_system.try(:name) || "--"
|
|
|
sheet1[count_row,9] = format_time subject.updated_at
|
|
|
sheet1[count_row,10] = format_time subject.publish_time
|
|
|
count_row += 1
|
|
|
end
|
|
|
end
|
|
|
book.write xls_report
|
|
|
xls_report.string
|
|
|
end
|
|
|
|
|
|
def member_json_data mmebers
|
|
|
mmebers.map do |member|
|
|
|
real_name = member.show_real_name
|
|
|
identity = member.identity
|
|
|
school_name = member.school_name
|
|
|
user_phone = member.phone || ""
|
|
|
member.attributes.dup.except("login", "hashed_password", "salt", "status", "mail", "experience", "grade",
|
|
|
"authentication", "professional_certification").merge({real_name: real_name,
|
|
|
identity: identity,
|
|
|
school_name: school_name,
|
|
|
user_phone: user_phone})
|
|
|
end
|
|
|
end
|
|
|
|
|
|
end
|