# encoding: utf-8
class ManagementsController < ApplicationController
before_filter :require_admin
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 subject_level_system
@levels = SubjectLevelSystem.all
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]
if User.current.admin?
@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
else
render_403
end
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]
myshixun_id = Game.where(:identifier => params[:search]).pluck(:myshixun_id)
@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.firstname = ""
@user.mail = params[:mail].strip == "" ? nil : params[:mail]
@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 => 0)
# 用户操作的的行为需要记录 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, 0)
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].lstrip.rstrip != ""
@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
@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 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_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
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.all
end
@evaluate_recods_count = @evaluate_recods.count
@evaluate_recods_pages = Paginator.new @evaluate_recods_count, limit, page
@evaluate_recods = @evaluate_recods.includes(:shixun, :user).page(page).per(limit)
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
@team_members = @competition.team_members.includes(:user => [:user_extensions => [:school]])
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.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, 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 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 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
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
@department.update_attributes(:identifier => params[: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 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)
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.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)
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
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])
# 删除学校的用户
users = UserExtensions.where("department_id = #{applied_department.department_id}")
users.update_all(:department_id => nil)
applied_department.department.destroy
# 已审批删除
elsif params[:tip] == "applied"
applied_department.destroy
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}")
# 申请了职业认证的用户撤销申请
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? ? "u_name" : params[:keyword] # 根据姓名/课程名搜索
@status = params[:status]
@school_id = params[:school_id]
if params[:school_id] && params[:school_id] != ''
@courses = Course.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]}")
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 "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
else
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 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 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 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.order("#{@order_key} #{@us_order}")
else
@users = User.where("#{condition} like '%#{params[:research_contents]}%'").order("#{@order_key} #{@us_order}")
end
else
if params[:research_condition] == "phone" && params[:research_contents].blank?
@users = User.where(:status => status).order("#{@order_key} #{@us_order}")
else
@users = User.where("status = #{status} and #{condition} like '%#{params[:research_contents]}%'").order("#{@order_key} #{@us_order}")
end
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).order("#{@order_key} #{@us_order}")
end
@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(:apply_actions, 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
time = Time.at(Time.now.to_i - 86400)
cer = UserDayCertification.where("created_at > '#{time}'").pluck(:user_id)
cer_ids = cer.join(",")
@trial_cer_count = cer.blank? ? 0 : User.where("status = 1 and certification != 1 and id in (#{cer_ids})").count
apply = ApplyAction.where(:container_type => "TrialAuthorization").pluck(:user_id)
apply_ids = apply.join(",")
@nonn_cer_count = apply.blank? ? 0 : User.where("status = 1 and certification = 0 and id not in (#{apply_ids}) ").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_i : student_id
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 && [9, 7, 10].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.members.where(:user_id => user.id).first
# 如果已是课堂成员且是学生身份and不在指定的分班则移动到该分班
if member.present? && member.member_roles.pluck(:role_id).include?(10) && member.course_group_id != course_group.try(:id).to_i
member.update_column("course_group_id", course_group.try(:id).to_i)
member_count += 1
elsif !member.present?
member = Member.new(:role_ids => [member_role], :user_id => user.id)
if member_role == 10
StudentsForCourse.create(:student_id => user.id, :course_id => course.id)
end
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 => member_role)
member.course_group_id = course_group.try(:id).to_i
course.members << member
member_count += 1
end
end
end
end
@status = 1
@message = "已导入/更新#{member_count}个成员"
end
rescue
@status = 0
@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 == "xls" || 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]
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 = User.new
user.admin = false
user.activate
user.login = prefix + list[0]
user.lastname = list[1]
user.nickname = list[1]
user.professional_certification = 1
user.certification = 1
user.grade = 0
user.password = "12345678"
if user.save
ue = UserExtensions.new(:user_id => user.id, :gender => 0, :school_id => school_id, :location => school.province, :location_city => school.city, :identity => list[3], :student_id => list[0], :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
all_user_ids = User.where(:status => 1).pluck(:id)
if params[:trial] == "-1"
apply = ApplyAction.where(:container_type => "TrialAuthorization").pluck(:user_id)
apply_id = apply.blank? ? -1 : "(" + apply.join(",") + ")"
apply_user_id = User.where("status = 1 and certification = 0 and id not in #{apply_id} ").pluck(:id)
elsif params[:trial] == "-2"
apply_user_id = all_user_ids
elsif params[:trial] == "0"
apply_user_id = ApplyAction.where(:status => 0).pluck(:user_id)
elsif params[:trial] == "3"
time = Time.at(Time.now.to_i - 86400)
user_cer = UserDayCertification.where("created_at > '#{time}'").pluck(:user_id)
cer_id = user_cer.blank? ? "(-1)" : "(" + user_cer.map{|a| a.user_id}.join(",") + ")"
apply_user_id = User.where("status = 1 and certification != 1 and id in #{cer_id} ").pluck(:id)
else
apply_user_id = User.where(:status => 1, :certification => params[:trial]).pluck(:id)
end
if params[:school] == ""
s_user_id = all_user_ids
else
school_ids = School.where("name like '%#{params[:school]}%'").pluck(:id)
s_user_id = UserExtensions.where(:school_id => school_ids).pluck(:user_id)
end
if params[:department] == ""
d_user_id = all_user_ids
else
dep_ids = Department.where("name like '%#{params[:department]}%'").pluck(:id)
d_user_id = UserExtensions.where(:department_id => dep_ids).pluck(:user_id)
end
ide_user_id = all_user_ids
if params[:identity] == "1" || (params[:identity] == "0" && params[:te_technical_title] == "0") || (params[:identity] == "2" && params[:pro_technical_title] == "0")
ide_user_id = UserExtensions.where("identity = #{params[:identity]}").pluck(:user_id)
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]
ide_user_id = UserExtensions.where("identity = #{params[:identity]} and technical_title = '#{technical_title}'").pluck(:user_id)
end
if params[:student_id] && params[:student_id] != ''
stu_user_id = UserExtensions.where("student_id like '%#{params[:student_id]}%'").pluck(:user_id)
else
stu_user_id = all_user_ids
end
user_id = s_user_id & d_user_id & apply_user_id & stu_user_id & ide_user_id
sql = ""
sql =
if params[:research_condition] == "name"
"concat(lastname, firstname) like '%#{params[:research_contents]}%'"
elsif params[:research_condition] == "email"
"mail like '%#{params[:research_contents]}%'"
elsif params[:research_condition] == "phone"
"phone like '%#{params[:research_contents]}%'"
elsif params[:research_condition] == "nickname"
if params[:research_contents].present?
"nickname like '%#{params[:research_contents]}%'"
end
elsif params[:research_condition] == "login"
params[:research_contents].present? ? "login like '%#{params[:research_contents]}%'" : ""
end
@users = User.where(:id => user_id).where("#{sql}").includes(:apply_actions, user_extensions: [:department, :school]).order("last_login_on desc")
@xls_users = @users #导出excel用户
@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.xls{
# @export_shixun_task = @export_shixun_task.all
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
search = params[:search]
@status = trial_authorization_status(params[:status])
# @status = (params[:status].blank? || params[:status] == "0") ? 0 : [1,2]
if search.blank?
@authorizations = ApplyAction.where(:container_type => "TrialAuthorization", :status => @status).includes(:user)
else
user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{search}%'")
@authorizations = ApplyAction.where(:container_type => "TrialAuthorization", :status => @status, :user_id => user_id).includes(:user)
end
if params[:sname] && params[:sname] != ''
school_id = School.where("name like '%#{params[:sname]}%'")
user_id = UserExtensions.where(:school_id => school_id).map(&:user_id)
@authorizations = @authorizations.where(:user_id => user_id).order("updated_at desc")
end
@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
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)
apply_action.update_attributes(:status => (params[:type] == "1" ? 2 : 1), :reason => params[:reject_reason], :dealer_id => User.current.id, :noticed => false)
User.where(:id => apply_action.user_id).first.update_attributes(:certification => (params[:type] == "1" ? 2 : 1))
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
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)
=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 = "您所在团队提交的课程实训发布申请:#{subject.name},审核未通过。
原因:#{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
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.training_payinfo.try(:pay_type_str)
sheet1[count_row, 8] = t.training_payinfo.try(:pay_status_str)
sheet1[count_row, 9] = format_time t.training_payinfo.try(:pay_time)
sheet1[count_row, 10] = t.training_payinfo.try(:invoice_title).present? ? '需要' : '不需要'
sheet1[count_row, 11] = t.training_payinfo.try(:invoice_title)
sheet1[count_row, 12] = t.training_payinfo.try(:invoice_no)
sheet1[count_row, 13] = t.training_payinfo.try(:invoice_content)
sheet1[count_row, 14] = t.training_payinfo.try(:info)
sheet1[count_row, 15] = t.training_payinfo.try(:out_trade_no)
sheet1[count_row, 16] = 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.find_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
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.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.is_public.to_i == 1 ? '否' : '是'
sheet1[count_row,8] = course.is_end ? "已结束" : "正在进行"
sheet1[count_row,9] = school
sheet1[count_row,10] = teacher_name
sheet1[count_row,11] = format_time(course.updatetime)
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 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.teacher.try(:show_real_name)
sheet1[count_row,4] = member_user.try(:show_real_name)
sheet1[count_row,5] = member_user.try(:student_id)
sheet1[count_row,6] = member_user.try(:authentication_status)
sheet1[count_row,7] = member_user.try(:professional_status)
sheet1[count_row,8] = member_user.try(:school_name)
sheet1[count_row,9] = member_user.user_extensions.school.try(:province)
sheet1[count_row,10] = format_time member.created_at
sheet1[count_row,11] = 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
if s_index == 0 && index == 0
sheet1[count_row,7] = subject.subject_level_system.try(:name) || "--"
sheet1[count_row,8] = format_time subject.updated_at
sheet1[count_row,9] = format_time subject.publish_time
end
count_row += 1
end
else
if s_index == 0
sheet1[count_row,7] = subject.subject_level_system.try(:name) || "--"
sheet1[count_row,8] = format_time subject.updated_at
sheet1[count_row,9] = format_time subject.publish_time
end
count_row += 1
end
end
else
sheet1[count_row,7] = subject.subject_level_system.try(:name) || "--"
sheet1[count_row,8] = format_time subject.updated_at
sheet1[count_row,9] = format_time subject.publish_time
count_row += 1
end
end
book.write xls_report
xls_report.string
end
end