# 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 . where ( " 0=0 " )
end
@evaluate_recods_count = @evaluate_recods . count
@evaluate_recods_pages = Paginator . new @evaluate_recods_count , limit , page
@evaluate_recods = @evaluate_recods . page ( page ) . per ( limit )
@evaluate_recods = @evaluate_recods . includes ( :shixun , :user )
respond_to do | format |
format . js
format . html
end
end
# 作业回复
def leave_message
@menu_type = 8
@sub_type = 1
@jour = JournalsForMessage . where ( :jour_type = > 'HomeworkCommon' ) . order ( " created_on desc " )
@jour_count = @jour . count
@page = ( params [ 'page' ] || 1 ) . to_i
@limit = 20
@is_remote = true
@jour_pages = Paginator . new @jour_count , @limit , params [ 'page' ] || 1
@offset || = @jour_pages . offset
@jour = paginateHelper @jour , @limit
respond_to do | format |
format . html
format . js
end
end
# 讨论区
def messages_list
@menu_type = 8
@sub_type = 3
@memo = Memo . where ( " 0=0 " ) . order ( " created_at desc " )
@page = ( params [ 'page' ] || 1 ) . to_i
@memo_count = @memo . count
@limit = 20
@is_remote = true
@memo_pages = Paginator . new @memo_count , @limit , params [ 'page' ] || 1
@offset || = @memo_pages . offset
@memo = paginateHelper @memo , @limit
respond_to do | format |
format . html
format . js
end
end
def course_messages_list
@menu_type = 8
@sub_type = 4
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ]
# @message = Message.find_by_sql("SELECT * FROM messages WHERE board_id IN (SELECT id FROM boards WHERE course_id IS NOT NULL) order by created_on #{@sx_order}")
@message = Message . includes ( :board ) . where ( " boards.course_id is not null " ) . order ( " created_on #{ @sx_order } " )
@page = ( params [ 'page' ] || 1 ) . to_i
@message_count = @message . count
@limit = 20
@is_remote = true
@message_pages = Paginator . new @message_count , @limit , params [ 'page' ] || 1
@offset || = @message_pages . offset
@message = paginateHelper @message , @limit
respond_to do | format |
format . js
format . html
end
end
# 专业列表
def profession
@major = Major . where ( " 0=0 " )
# @menu_type = 12
@sub_type = 1
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ]
major_level_option = params [ :major_level ] if params [ :major_level ]
discipline_category_option = params [ :discipline_category_id ] if params [ :discipline_category_id ]
first_level_discipline_option = params [ :first_level_discipline_id ] if params [ :first_level_discipline_id ]
if major_level_option && major_level_option != '0'
@major = @major . where ( :major_level = > major_level_option )
end
if discipline_category_option && discipline_category_option != '0'
@major = @major . where ( :discipline_category_id = > discipline_category_option )
end
if first_level_discipline_option && first_level_discipline_option != '0'
@major = @major . where ( :first_level_discipline_id = > first_level_discipline_option )
end
if params [ :support_shixuns ]
@major = @major . where ( :support_shixuns = > params [ :support_shixuns ] . to_i , :major_level = > 2 )
end
@major = @major . order ( " created_at #{ @sx_order } " )
@major_count = @major . count
limit = 20
@is_remote = true
@major_pages = Paginator . new @major_count , limit , params [ 'page' ] || 1
@offset || = @major_pages . offset
@major = paginateHelper @major , limit
respond_to do | format |
format . js
format . html
end
end
# 新增专业页面
def new_major
respond_to do | format |
format . js
end
end
# 新增专业
def insert_major
major_list = Major . create ( :name = > params [ :major ] , :first_level_discipline_id = > params [ :first_level_discipline_id ] , :major_level = > params [ :major_level ] , :discipline_category_id = > params [ :discipline_category_id ] , :major_code = > params [ :major_code ] )
redirect_to profession_managements_path
end
# 支撑实训
def support_shixun
if params [ :syllabus_id ]
major = Major . find params [ :syllabus_id ]
major . update_attributes ( :support_shixuns = > ! major . support_shixuns )
end
end
# 实训适用课程
def applicable_course
# @menu_type = 12
@sub_type = 2
@major = Major . where ( :major_level = > 2 , :support_shixuns = > 1 )
@courselist = CourseList . where ( " 0=0 " )
search = params [ :search ]
unless search . blank?
@courselist = @courselist . where ( " name like '% #{ search } %' " )
end
@courselist = @courselist . reorder ( " created_at desc " )
@courselist_count = @courselist . count
@limit = 15
@is_remote = true
@page = params [ 'page' ] ? params [ 'page' ] . to_i : 1
@courselist_pages = Paginator . new @courselist_count , @limit , @page
@offset || = @courselist_pages . offset
@courselist = paginateHelper @courselist , @limit
respond_to do | format |
format . js
format . html
end
end
# 增加课程
def add_course
courselist = CourseList . create ( :name = > params [ :course ] )
redirect_to applicable_course_managements_path
end
# 增加课程所属专业
def add_major
data = { result : 0 }
id = MajorCourse . where ( :course_list_id = > params [ :course_list_id ] ) . first
if ( id . nil? ) || ( params [ :major_id ] . to_i != '0' && params [ :major_id ] . to_i != id . major_id )
MajorCourse . create ( :course_list_id = > params [ :course_list_id ] , :major_id = > params [ :major_id ] )
data [ :result ] = 1
end
render :json = > data
end
# 竞赛列表
def competition
@menu_type = 5
@sub_type = 1
@competitions = Competition . order ( " created_at desc " )
respond_to do | format |
format . js
format . html
end
end
# 竞赛报名列表
def enroll_list
@order = params [ :order ] . blank? ? " desc " : params [ :order ]
@competition = Competition . where ( :id = > params [ :competition ] ) . first
@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 = @courses . joins ( " join user_extensions ue on courses.tea_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
elsif " dep_name " == @keyword
school = School . where ( " name like '% #{ @search } %' " ) . map ( & :id )
@courses = @courses . where ( :school_id = > school )
# @courses= @courses.where("name like '%#{@search}%'")
end
@courses = @courses . select ( " courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS updatetime " ) . order ( " updatetime desc " )
@page = ( params [ 'page' ] || 1 ) . to_i
@export_courses = @courses
@courses_count = @courses . count
@limit = 20
@is_remote = true
@courses_pages = Paginator . new @courses_count , @limit , params [ 'page' ] || 1
@offset || = @courses_pages . offset
@courses = paginateHelper @courses , @limit
respond_to do | format |
format . js
format . html
format . xls {
@export_courses = @export_courses . all
filename = " #{ l ( :label_course_list_xls ) } .xls "
send_data ( course_list_xls ( @export_courses ) , :type = > 'application/octet-stream' , :filename = > filename_for_content_disposition ( filename ) )
}
end
end
def hidden_course
@course = Course . where ( :id = > params [ :course_id ] ) . first
@course . update_attributes ( :is_hidden = > ! @course . is_hidden ) if @course . present?
end
def shixun_task
@menu_type = 2
@sub_type = 3
homework_commons = HomeworkCommon . where ( :homework_type = > 4 )
@shixun_task = Course . where ( :id = > homework_commons . map ( & :course_id ) )
@keyword = params [ :keyword ]
@search = params [ :search ]
@school_id = params [ :school_id ]
if params [ :school_id ] && params [ :school_id ] != ''
@shixun_task = @shixun_task . joins ( " join users u on courses.tea_id = u.id " ) . joins ( " join user_extensions ue on u.id = ue.user_id " ) . where ( " ue.school_id = #{ params [ :school_id ] } " )
# @shixun_task = @shixun_task.includes(:user => {:user_extensions => []}).where("user_extensions.school_id = #{params[:school_id]}")
end
unless @search . blank?
if " u_name " == @keyword
user_id = User . where ( " concat(lastname, firstname) like '% #{ @search } %' " )
@shixun_task = @shixun_task . joins ( " join users u on courses.tea_id = u.id " ) . where ( " concat(u.lastname, u.firstname) like '% #{ @search } %' " )
else
@shixun_task = @shixun_task . where ( " courses.name like '% #{ @search } %' " )
end
end
# @shixun_task = @shixun_task.select("courses.*, (select h.publish_time from homework_commons h where h.course_id = courses.id group by courses.id) AS publish_time").reorder("publish_time desc")
@page = ( params [ 'page' ] || 1 ) . to_i
@shixun_task_count = @shixun_task . size
@export_shixun_task = @shixun_task
@limit = 20
@is_remote = true
@shixun_task_pages = Paginator . new @shixun_task_count , @limit , params [ 'page' ] || 1
@offset || = @shixun_task_pages . offset
@shixun_task = paginateHelper @shixun_task , @limit
@shixun_task = @shixun_task . includes ( :homework_commons = > { :student_works = > [ ] , :homework_detail_manual = > [ ] , :shixuns = > [ ] } , :teacher = > { :user_extensions = > [ ] } )
respond_to do | format |
format . js
format . html
format . xls {
# @export_shixun_task = @export_shixun_task.all
filename = " #{ l ( :label_shixun_task_xls ) } .xls "
send_data ( shixun_task_xls ( @export_shixun_task ) , :type = > 'application/octet-stream' , :filename = > filename_for_content_disposition ( filename ) )
}
end
end
def project_list
@menu_type = 2
@sub_type = 4
@pr_order = params [ :pr_order ] . blank? ? " desc " : params [ :pr_order ]
@search = params [ :search ] . to_s
@projects = Project . where ( " name like '% #{ @search } %' " ) . order ( " created_on #{ @pr_order } " )
@limit = 20
@page = ( params [ 'page' ] || 1 ) . to_i
@projects = paginateHelper @projects , @limit
respond_to do | format |
format . js
format . html
end
end
# 班级首页显示
def course_homepage_show
if params [ :course_id ]
course = Course . find params [ :course_id ]
course . update_attributes ( :homepage_show = > ! course . homepage_show )
end
end
# 课程实训
def 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 . where ( nil )
else
@users = User . where ( " #{ condition } like '% #{ params [ :research_contents ] } %' " )
end
else
if params [ :research_condition ] == " phone " && params [ :research_contents ] . blank?
@users = User . where ( :status = > status )
else
@users = User . where ( " status = #{ status } and #{ condition } like '% #{ params [ :research_contents ] } %' " )
end
end
if params [ :identity ] && params [ :identity ] . to_i != - 1
@users = @users . includes ( :user_extensions ) . where ( " user_extensions.identity = ? " , params [ :identity ] . to_i )
end
if params [ :auto_school ] && params [ :auto_school ] . to_i != 0
@users = @users . includes ( :user_extensions = > [ :school ] ) . where ( " schools.auto_users_trial = ? " , params [ :auto_school ] . to_i == 1 ? 1 : 0 )
end
if params [ :school ] && params [ :school ] != ''
school_name = params [ :school ]
school = School . where ( " name like '% #{ school_name } %' " )
school_id = school . map ( & :id )
user_id = UserExtensions . where ( :school_id = > school_id ) . map ( & :user_id )
@users = @users . where ( :id = > user_id )
end
@users = @users . order ( " #{ @order_key } #{ @us_order } " )
@page = ( params [ 'page' ] || 1 ) . to_i
@users_count = @users . count
@limit = 20
@is_remote = true
@users_pages = Paginator . new @users_count , @limit , params [ 'page' ] || 1
@offset || = @users_pages . offset
@users = paginateHelper @users , @limit
respond_to do | format |
format . js
format . html
end
end
def shixuns
@menu_type = 3
@sub_type = 1
@sx_status = ( params [ :status ] . blank? || params [ :status ] . class == Array ) ? [ 0 , 1 , 2 , 3 ] : params [ :status ] . to_i # 搜索实训的状态
@keyword = params [ :keyword ] . blank? ? " u_name " : params [ :keyword ] # 根据姓名/实训名搜索
@search = params [ :search ] # 搜索的字
@tech = params [ :tech ]
@shixun_tag_id = params [ :shixun_tag ]
@tech_system = MirrorRepository . where ( nil ) . map ( & :type_name ) . reject ( & :blank? ) . sort ( )
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ] # 排序
if " u_name " == @keyword
# 如果用户搜索为空, 不用遍历user表, 直接查找所有实训, 有搜索时才查找user
if @search . blank?
@shixuns = Shixun . where ( :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
else
user_id = User . where ( " concat(lastname, firstname) like '% #{ @search } %' " )
@shixuns = Shixun . where ( :user_id = > user_id , :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
end
else
if params [ :keyword ] == " sx_name "
@shixuns = Shixun . where ( " name like '% #{ @search } %' " ) . where ( :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
else
school_id = School . where ( " name like '% #{ @search } %' " ) . map ( & :id )
user_id = UserExtensions . where ( :school_id = > school_id ) . map ( & :user_id )
@shixuns = Shixun . where ( :user_id = > user_id ) . where ( :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
end
end
#@shixuns = @shixuns.includes(:mirror_repositories).where("mirror_repositories.name like '%#{@tech}%'") if @tech.present?
if @tech . present?
shixuns_id = MirrorRepository . where ( :type_name = > @tech ) . first . try ( :shixuns )
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
# shixun_tag_id: -1时 搜索没有技术标签的实训
if @shixun_tag_id . present?
if @shixun_tag_id . to_i == - 1
shixuns_id = ShixunTagRepertoire . where ( nil ) . map ( & :shixun_id )
if shixuns_id . present?
shixuns_id = @shixuns . map ( & :id ) - shixuns_id
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
else
shixuns_id = ShixunTagRepertoire . where ( :tag_repertoire_id = > @shixun_tag_id ) . map ( & :shixun_id )
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
end
@shixun_xls = @shixuns
@edit_sx_num = Shixun . where ( :status = > 0 ) . count
@audit_sx_num = Shixun . where ( :status = > 1 ) . count
@publish_sx_num = Shixun . where ( :status = > 2 ) . count
@close_sx_num = Shixun . where ( :status = > 3 ) . count
@page = ( params [ 'page' ] || 1 ) . to_i
@shixuns_count = @shixuns . count
@limit = 20
@shixuns_pages = Paginator . new @shixuns_count , @limit , params [ 'page' ] || 1
@offset || = @shixuns_pages . offset
@shixuns = paginateHelper @shixuns , @limit
@shixun_tags = TagRepertoire . where ( nil ) . order ( " name asc " )
respond_to do | format |
format . js
format . html
format . xls {
# @export_shixun_task = @export_shixun_task.all
filename = " 实训详情_ #{ Time . now . strftime ( '%Y-%m-%d %H:%M:%S' ) } .xls "
send_data ( shixun_list_xls ( @shixun_xls ) , :type = > 'application/octet-stream' , :filename = > filename_for_content_disposition ( filename ) )
}
end
end
def shixun_setting_list
@menu_type = 3
@sub_type = 2
@sx_status = ( params [ :status ] . blank? || params [ :status ] . class == Array ) ? [ 0 , 1 , 2 , 3 ] : params [ :status ] . to_i # 搜索实训的状态
@keyword = params [ :keyword ] . blank? ? " u_name " : params [ :keyword ] # 根据姓名/实训名搜索
@search = params [ :search ] # 搜索的字
@tech = params [ :tech ]
@shixun_tag_id = params [ :shixun_tag ]
@tech_system = MirrorRepository . where ( nil ) . map ( & :type_name ) . reject ( & :blank? ) . sort ( )
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ] # 排序
close = params [ :close ] # 关闭实训,参数是实训的Id
unless close . blank?
Shixun . find ( close ) . update_attributes ( :status = > 3 , :closer_id = > User . current . id , :end_time = > Time . now )
end
if " u_name " == @keyword
# 如果用户搜索为空, 不用遍历user表, 直接查找所有实训, 有搜索时才查找user
if @search . blank?
@shixuns = Shixun . where ( :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
else
user_id = User . where ( " concat(lastname, firstname) like '% #{ @search } %' " )
@shixuns = Shixun . where ( :user_id = > user_id , :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
end
else
if params [ :keyword ] == " sx_name "
@shixuns = Shixun . where ( " name like '% #{ @search } %' " ) . where ( :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
else
school_id = School . where ( " name like '% #{ @search } %' " ) . map ( & :id )
user_id = UserExtensions . where ( :school_id = > school_id ) . map ( & :user_id )
@shixuns = Shixun . where ( :user_id = > user_id ) . where ( :status = > @sx_status ) . order ( " created_at #{ @sx_order } " )
end
end
#@shixuns = @shixuns.includes(:mirror_repositories).where("mirror_repositories.name like '%#{@tech}%'") if @tech.present?
if @tech . present?
shixuns_id = MirrorRepository . where ( :type_name = > @tech ) . first . try ( :shixuns )
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
# shixun_tag_id: -1时 搜索没有技术标签的实训
if @shixun_tag_id . present?
if @shixun_tag_id . to_i == - 1
shixuns_id = ShixunTagRepertoire . where ( nil ) . map ( & :shixun_id )
if shixuns_id . present?
shixuns_id = @shixuns . map ( & :id ) - shixuns_id
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
else
shixuns_id = ShixunTagRepertoire . where ( :tag_repertoire_id = > @shixun_tag_id ) . map ( & :shixun_id )
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
end
if params [ :can_copy ]
@shixuns = @shixuns . where ( :can_copy = > params [ :can_copy ] . to_i )
end
if params [ :webssh ]
@shixuns = @shixuns . where ( :webssh = > params [ :webssh ] . to_i )
end
if params [ :hidden ]
@shixuns = @shixuns . where ( :hidden = > params [ :hidden ] . to_i )
end
if params [ :homepage_show ]
@shixuns = @shixuns . where ( :homepage_show = > params [ :homepage_show ] . to_i )
end
if params [ :task_pass ]
@shixuns = @shixuns . where ( :task_pass = > params [ :task_pass ] . to_i )
end
if params [ :code_hidden ]
@shixuns = @shixuns . where ( :code_hidden = > params [ :code_hidden ] . to_i )
end
@shixun_xls = @shixuns
@edit_sx_num = Shixun . where ( :status = > 0 ) . count
@audit_sx_num = Shixun . where ( :status = > 1 ) . count
@publish_sx_num = Shixun . where ( :status = > 2 ) . count
@close_sx_num = Shixun . where ( :status = > 3 ) . count
@page = ( params [ 'page' ] || 1 ) . to_i
@shixuns_count = @shixuns . count
@limit = 20
@shixuns_pages = Paginator . new @shixuns_count , @limit , params [ 'page' ] || 1
@offset || = @shixuns_pages . offset
@shixuns = paginateHelper @shixuns , @limit
@shixun_tags = TagRepertoire . where ( nil ) . order ( " name asc " )
respond_to do | format |
format . js
format . html
format . xls {
# @export_shixun_task = @export_shixun_task.all
filename = " 实训详情_ #{ Time . now } .xls "
send_data ( shixun_list_xls ( @shixun_xls ) , :type = > 'application/octet-stream' , :filename = > filename_for_content_disposition ( filename ) )
}
end
end
def update_shixun_task_pass
shixun = Shixun . find ( params [ :shixun_id ] )
shixun . update_column ( :task_pass , ! shixun . task_pass )
end
def update_shixun_code_hidden
shixun = Shixun . find ( params [ :shixun_id ] )
shixun . update_column ( :code_hidden , ! shixun . code_hidden )
end
def update_shixun_excute_time
shixun = Shixun . find ( params [ :shixun_id ] )
shixun . update_column ( :excute_time , params [ :excute_time ] . strip == " " ? nil : params [ :excute_time ] . strip )
end
def shixun_update_image_text
image_text = params [ :values ] . strip
shixun = Shixun . find params [ :id ]
shixun . update_column ( :image_text , image_text )
render :json = > { success : " true " }
end
def build_shixun_and_repertore_relationship
logger . info ( " # # # # # # # # # # # # # # # # #{ params } " )
tag_id = params [ :tag_id ] . to_i
shixun_id = params [ :shixun_id ]
status = params [ :status ] . to_i
shixun_tags_count = ShixunTagRepertoire . where ( :shixun_id = > shixun_id ) . count
logger . info ( " # # # # # # # # # # # # # # # # #{ shixun_tags_count } " )
if shixun_tags_count > 3
render :json = > { data : " error " }
else
shixun_tags = ShixunTagRepertoire . where ( :shixun_id = > shixun_id , :tag_repertoire_id = > tag_id ) . first
if status == 0
shixun_tags . destroy if shixun_tags . present?
else
if shixun_tags . present?
shixun_tags . update_attribute ( :tag_repertoire_id , tag_id )
else
ShixunTagRepertoire . create! ( :tag_repertoire_id = > tag_id , :shixun_id = > shixun_id )
end
end
render :json = > { data : " success " }
end
end
def update_shixun_hidden
@shixun = Shixun . find ( params [ :shixun_id ] )
@shixun . update_column ( :hidden , ! @shixun . hidden )
end
# 已发布的实训
def publish_shixuns
logger . info ( " # # # # # # # # # # # # # # # # # # # #{ params } " )
@menu_type = 3
@sub_type = 3
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ] # 排序
index = params [ :index ] # 排序
@search = params [ :search ] # 搜索字
@keyword = params [ :keyword ] . blank? ? " u_name " : params [ :keyword ] # 根据姓名/实训名搜索
@tech = params [ :tech ]
@beginTime = params [ :beginTime ]
@endTime = params [ :endTime ]
@tech_system = MirrorRepository . where ( nil ) . map ( & :type_name ) . reject ( & :blank? ) . sort ( )
if " u_name " == @keyword
# 如果用户搜索为空, 不用遍历user表, 直接查找所有实训, 有搜索时才查找user
if @search . blank?
@shixuns = Shixun . where ( :status = > 2 )
@shixuns = sort_shixun index , @shixuns , @sx_order
else
user_id = User . where ( " concat(lastname, firstname) like '% #{ @search } %' " )
@shixuns = Shixun . where ( :user_id = > user_id , :status = > 2 )
@shixuns = sort_shixun index , @shixuns , @sx_order
end
else
@shixuns = Shixun . where ( " name like '% #{ @search } %' " ) . where ( :status = > 2 )
@shixuns = sort_shixun index , @shixuns , @sx_order
end
if params [ :homepage_show ]
@shixuns = @shixuns . where ( :homepage_show = > params [ :homepage_show ] . to_i )
@shixuns = sort_shixun index , @shixuns , @sx_order
end
if params [ :tech ] && params [ :tech ] != ''
@shixuns = @shixuns . where ( " language like ' #{ @tech } ' " )
@shixuns = sort_shixun index , @shixuns , @sx_order
end
if @tech . present?
shixuns_id = MirrorRepository . where ( :type_name = > @tech ) . first . try ( :shixuns )
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
if params [ :beginTime ] . present?
logger . info ( " # # # # # # # # # # # # # ------------------ " )
endTime = params [ :endTime ] . present? ? params [ :endTime ] : Time . now
@shixuns = @shixuns . where ( " publish_time >= ? and publish_time <= ? " , params [ :beginTime ] , endTime )
end
if index == '6'
@op_order = @sx_order
@sx_order = " "
else
@sx_order = @sx_order
@op_order = " "
end
@page = ( params [ 'page' ] || 1 ) . to_i
@shixuns_count = @shixuns . count
@shixun_xls = @shixuns
@limit = 20
@shixuns_pages = Paginator . new @shixuns_count , @limit , params [ 'page' ] || 1
@offset || = @shixuns_pages . offset
@shixuns = paginateHelper @shixuns , @limit
respond_to do | format |
format . js
format . html
format . xls {
filename = " 已发布的实训_ #{ format_time Time . now } .xls "
send_data ( publish_shixun_list ( @shixun_xls ) , :type = > 'application/octet-stream' , :filename = > filename_for_content_disposition ( filename ) )
}
end
end
# 实训首页显示
def shixun_homepage_show
if params [ :shixun_id ]
shixun = Shixun . find params [ :shixun_id ]
shixun . update_attributes ( :homepage_show = > ! shixun . homepage_show )
end
end
# 允许复制
def shixun_can_copy
if params [ :shixun_id ]
shixun = Shixun . find params [ :shixun_id ]
shixun . update_attributes ( :can_copy = > ! shixun . can_copy )
end
end
# 已关闭的实训
def close_shixuns
@menu_type = 3
@sub_type = 4
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ] # 排序
search = params [ :search ] # 搜索字
keyword = params [ :keyword ] . blank? ? " u_name " : params [ :keyword ] # 根据姓名/实训名搜索
reopen = params [ :reopen ] # 从新开启实训,参数是实训的Id
tech = params [ :tech ]
@tech_system = MirrorRepository . where ( nil ) . map ( & :type_name ) . reject ( & :blank? ) . sort ( )
unless reopen . blank?
Shixun . find ( reopen ) . update_attribute ( :status , 2 )
end
if " u_name " == keyword
# 如果用户搜索为空, 不用遍历user表, 直接查找所有实训, 有搜索时才查找user
if search . blank?
@shixuns = Shixun . where ( :status = > 3 ) . order ( " updated_at #{ @sx_order } " )
else
user_id = User . where ( " concat(lastname, firstname) like '% #{ search } %' " )
@shixuns = Shixun . where ( :user_id = > user_id , :status = > 3 ) . order ( " updated_at #{ @sx_order } " )
end
else
@shixuns = Shixun . where ( " name like '% #{ search } %' " ) . where ( :status = > 3 ) . order ( " updated_at #{ @sx_order } " )
end
if params [ :tech ] . present?
shixuns_id = MirrorRepository . where ( :type_name = > tech ) . first . try ( :shixuns )
@shixuns = @shixuns . where ( :id = > shixuns_id )
end
@page = ( params [ 'page' ] || 1 ) . to_i
@shixuns_count = @shixuns . count
@limit = 20
@shixuns_pages = Paginator . new @shixuns_count , @limit , params [ 'page' ] || 1
@offset || = @shixuns_pages . offset
@shixuns = paginateHelper @shixuns , @limit
respond_to do | format |
format . js
format . html
end
end
# 镜像类别图片
def mirror_picture_shixuns
@main_mirror = MirrorRepository . where ( nil )
@repertoire = Repertoire . where ( nil )
@menu_type = 3
@sub_type = 7
search = params [ :search ]
if params [ :search ] && params [ :search ] != ''
@main_mirror = @main_mirror . where ( " type_name like '% #{ search } %' " )
end
@page = ( params [ 'page' ] || 1 ) . to_i
@main_mirror_count = @main_mirror . count
@limit = 20
@main_mirror_pages = Paginator . new @main_mirror_count , @limit , params [ 'page' ] || 1
@offset || = @main_mirror_pages . offset
@main_mirror = paginateHelper @main_mirror , @limit
respond_to do | format |
format . js
format . html
end
end
def update_mirror_picture
if params [ :res ] == " 1 "
mirror = MirrorRepository . where ( :id = > params [ :mirror_id ] ) . first
MirrorRepository . where ( :id = > params [ :mirror_id ] ) . update_all ( :repertoire_id = > params [ :use_scope ] , :sub_repertoire_id = > nil )
else
MirrorRepository . where ( :id = > params [ :mirror_id ] ) . update_all ( :sub_repertoire_id = > params [ :use_scope ] )
end
redirect_to mirror_picture_shixuns_managements_path ( :page = > params [ :page ] )
end
# 实训成员列表
def shixun_member
@menu_type = 3
@sub_type = 6
@shixun_member = Myshixun . where ( " 0=0 " ) . order ( " created_at desc " )
keyword = params [ :keyword ]
search = params [ :search ]
member = params [ :member ]
if search . blank?
@shixun_member = @shixun_member
else
if " u_name " == keyword
user_id = User . where ( " concat(lastname, firstname) like '% #{ search } %' " )
@shixun_member = @shixun_member . where ( :user_id = > user_id )
elsif keyword == " u_id "
user_id = User . where ( " login like '% #{ search } %' " )
@shixun_member = @shixun_member . where ( :user_id = > user_id )
elsif keyword == " sx_name "
@shixun_member = @shixun_member . joins ( :shixun ) . where ( " shixuns.name like '% #{ search } %' " )
else
school_id = School . where ( " name like '% #{ search } %' " ) . blank? ? " (-1) " : " ( " + School . where ( " name like '% #{ search } %' " ) . map ( & :id ) . join ( " , " ) + " ) "
user_id = UserExtensions . where ( " school_id in #{ school_id } " ) . blank? ? " (-1) " : " ( " + UserExtensions . where ( " school_id in #{ school_id } " ) . map ( & :user_id ) . join ( " , " ) + " ) "
@shixun_member = @shixun_member . where ( " user_id in #{ user_id } " )
end
end
if member && member != ''
user_id = User . where ( " concat(lastname, firstname) like '% #{ member } %' " ) . blank? ? " (-1) " : " ( " + User . where ( " concat(lastname, firstname) like '% #{ member } %' " ) . map ( & :id ) . join ( " , " ) + " ) "
@shixun_member = @shixun_member . joins ( :shixun ) . where ( " shixuns.user_id in #{ user_id } " )
end
@page = ( params [ 'page' ] || 1 ) . to_i
@shixun_member_count = @shixun_member . count
@limit = 20
@is_remote = true
@shixun_member_pages = Paginator . new @shixun_member_count , @limit , params [ 'page' ] || 1
@offset || = @shixun_member_pages . offset
@shixun_member = paginateHelper @shixun_member , @limit
respond_to do | format |
format . js
format . html
end
end
def users_trial
@menu_type = 7
@sub_type = 2
@sx_order = params [ :sx_order ] . blank? ? " desc " : params [ :sx_order ]
sql =
if params [ :t ] . to_i == 1 && params [ :e ] . to_i == 1
" status = 1 and homepage_teacher = 1 and homepage_engineer = 1 "
elsif params [ :t ] . to_i == 1
" status = 1 and homepage_teacher = 1 "
elsif params [ :e ] . to_i == 1
" status = 1 and homepage_engineer = 1 "
else
" status = 1 "
end
@users = User . where ( " #{ sql } " ) . includes ( :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]
user_id = [ ]
search = false
@authorizations = ApplyAction . where ( :container_type = > " TrialAuthorization " , :status = > @status )
unless search . blank?
user_id = User . find_by_sql ( " select id from users where concat(lastname,firstname) like '% #{ search } %' " ) . map ( & :id )
end
if params [ :sname ] && params [ :sname ] . strip != ''
school_id = School . where ( " name like '% #{ params [ :sname ] } %' " )
new_user_id = UserExtensions . where ( :school_id = > school_id ) . map ( & :user_id )
user_id = user_id . size == 0 ? new_user_id : user_id & new_user_id
search = true
end
if params [ :identity ] && params [ :identity ] . to_i != - 1
new_user_id = UserExtensions . where ( :identity = > params [ :identity ] . to_i ) . map ( & :user_id )
user_id = user_id . size == 0 ? new_user_id : user_id & new_user_id
search = true
end
if params [ :auto_school ] && params [ :auto_school ] . to_i != 0
school_id = School . where ( auto_users_trial : params [ :auto_school ] . to_i == 1 ? 1 : 0 )
new_user_id = UserExtensions . where ( :school_id = > school_id ) . map ( & :user_id )
user_id = user_id . size == 0 ? new_user_id : user_id & new_user_id
search = true
end
@authorizations = user_id . size == 0 && ! search ? @authorizations . order ( " updated_at desc " ) : @authorizations . where ( :user_id = > user_id . uniq ) . order ( " updated_at desc " )
@autu_count = @authorizations . count
@limit = 15
@is_remote = true
@autu_pages = Paginator . new @autu_count , @limit , params [ 'page' ] || 1
@offset || = @autu_pages . offset
@authorizations = paginateHelper @authorizations , @limit
@authorizations = @authorizations . includes ( :user )
respond_to do | format |
format . js
format . html
end
end
# 批量授权
def batch_authorization
end
# params[:type] 1: 拒绝 0: 同意
# authentication 会有一个初始值,不同的值代表不同的权限
# REDO: 后面权限改了后,一并要改
def trial_authorization_operation
logger . warn ( " # # # # trial_authorization_operation: #{ format_time ( Time . now ) } " )
apply_action = ApplyAction . find ( params [ :apply_id ] )
type = params [ :type ]
search = params [ :search ]
if type == " 0 "
authentication_user = AuthenticationsUsers . where ( :user_id = > apply_action . user_id ) . first
if authentication_user . blank?
AuthenticationsUsers . create ( :user_id = > apply_action . user_id , :authentication_id = > 1 )
end
begin
logger . warn ( " trial_authorization_operation begin send: #{ format_time ( format_time ( Time . now ) ) } " )
# verification_code = code.sample(6).join
if apply_action . user . phone . present?
status = Trustie :: Sms . send ( mobile : apply_action . user . phone . to_s , code : '1' , send_type : 'trial_authorization' , user_name : apply_action . user . show_name , result : '已通过' )
end
logger . warn ( " trial_authorization_operation complete send: #{ format_time ( Time . now ) } " )
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
# 授权的教师加入示例课堂
join_ex_course ( apply_action . user ) if apply_action . user . user_extensions . identity == 0
logger . warn ( " # # # # trial_authorization_operation teacher joined: #{ format_time ( Time . now ) } " )
else
begin
# verification_code = code.sample(6).join
if apply_action . user . phone . present?
status = Trustie :: Sms . send ( mobile : apply_action . user . phone . to_s , code : '1' , send_type : 'trial_authorization' , user_name : apply_action . user . show_name , result : '未通过' )
end
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
end
Tiding . where ( :user_id = > 1 , :trigger_user_id = > apply_action . user_id , :container_id = > apply_action . id , :container_type = > 'ApplyAction' , :tiding_type = > " Apply " , :status = > 0 ) . update_all ( :status = > 1 )
Tiding . create ( :user_id = > apply_action . user_id , :trigger_user_id = > 0 , :container_id = > apply_action . id , :container_type = > 'ApplyAction' ,
:parent_container_id = > apply_action . container_id , :parent_container_type = > apply_action . container_type , :belong_container_id = > apply_action . container_id , :belong_container_type = > " User " , :tiding_type = > " System " , :status = > type == " 0 " ? 1 : 2 )
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 = "您所在团队提交的课程实训发布申请:<a href='#{subject_path(subject)}'>#{subject.name}</a>,审核未通过。<br/>原因:#{params[:reject_reason]}"
# JournalsForMessage.create(:jour_id => subject.user_id, :jour_type => 'Principal', :user_id => User.current.id, :notes => notes, :private => 1, :reply_id => 0)
= begin
begin
# verification_code = code.sample(6).join
if subject . owner . phone . present?
status = Trustie :: Sms . send ( mobile : subject . owner . phone . to_s , code : '1' , send_type : 'subject_authorization' , name :subject . name , user_name : subject . owner . show_name , result : '未通过' )
end
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
= end
else #同意
subject . update_attributes ( :status = > 2 , :publish_time = > Time . now )
apply_action . update_attributes ( :status = > 1 , :dealer_id = > User . current . id )
= begin
begin
unless subject . owner . phone . present?
status = Trustie :: Sms . send ( mobile : subject . owner . phone . to_s , code : '1' , send_type : 'subject_authorization' , name :subject . name , user_name : subject . owner . show_name , result : '已通过' )
end
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
= end
end
Tiding . where ( :user_id = > 1 , :trigger_user_id = > apply_action . user_id , :container_id = > apply_action . id , :container_type = > 'ApplyAction' , :tiding_type = > " Apply " , :status = > 0 ) . update_all ( :status = > 1 )
Tiding . create ( :user_id = > apply_action . user_id , :trigger_user_id = > 0 , :container_id = > apply_action . id , :container_type = > 'ApplyAction' ,
:parent_container_id = > apply_action . container_id , :parent_container_type = > apply_action . container_type , :belong_container_id = > apply_action . container_id , :belong_container_type = > " Subject " , :tiding_type = > " System " , :status = > type == 0 ? 2 : 1 )
@authorizations = ApplyAction . where ( :container_type = > " ApplySubject " , :status = > 0 )
@authorizations_count = @authorizations . count
@limit = 15
@is_remote = true
@authorizations_pages = Paginator . new @authorizations_count , @limit , params [ 'page' ] || 1
@offset || = @authorizations_pages . offset
@authorizations = paginateHelper @authorizations , @limit
respond_to do | format |
format . js
end
end
# 项目实训发布审批
def deal_shixun_authorization
apply_action = ApplyAction . find ( params [ :apply_id ] )
type = params [ :type ] . to_i
shixun = Shixun . find apply_action . container_id
shixun_creator = shixun . owner
if type == 0 #拒绝
shixun . update_column ( 'status' , 0 )
apply_action . update_attributes ( :status = > 2 , :reason = > params [ :reject_reason ] , :dealer_id = > User . current . id )
= begin
begin
if shixun_creator . phone . present?
status = Trustie :: Sms . send ( mobile : shixun_creator . phone . to_s , code : '1' , send_type : 'shixun_authorization' , name :shixun . name , user_name : shixun_creator . show_name , result : '未通过' )
end
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
= end
else #同意
# 给实训制作者奖励“金币/经验” (奖励数额:实训关卡的金币的总数)
score = shixun . all_score
grade = Grade . where ( :user_id = > shixun . user_id , :container_id = > shixun . id , :container_type = > " shixunPublish " ) . first
if grade . blank? # 防止多条创建
Grade . create ( :user_id = > shixun . user_id , :container_id = > shixun . id , :container_type = > " shixunPublish " , :score = > score )
Experience . create ( :user_id = > shixun . user_id , :container_id = > shixun . id , :container_type = > " shixunPublish " , :score = > score )
shixun_creator . update_attributes ( :grade = > shixun_creator . grade + score , :experience = > shixun_creator . experience + score )
end
shixun . update_column ( 'status' , 2 )
apply_action . update_attributes ( :status = > 1 , :dealer_id = > User . current . id )
shixun = Shixun . where ( :id = > apply_action . container_id ) . first
shixun . update_attribute ( :publish_time , Time . now )
# 实训通关则给实训制作者相应的金币奖励
shixun_modify_status_without_publish shixun , 1
= begin
begin
if shixun_creator . phone . present?
status = Trustie :: Sms . send ( mobile : shixun . owner . phone . to_s , code : '1' , send_type : 'shixun_authorization' , name :shixun . name , user_name : shixun . owner . show_name , result : '已通过' )
end
rescue = > e
Rails . logger . error " 发送验证码出错: #{ e } "
end
= end
end
Tiding . where ( :user_id = > 1 , :trigger_user_id = > apply_action . user_id , :container_id = > apply_action . id , :container_type = > 'ApplyAction' , :tiding_type = > " Apply " , :status = > 0 ) . update_all ( :status = > 1 )
Tiding . create ( :user_id = > apply_action . user_id , :trigger_user_id = > 0 , :container_id = > apply_action . id , :container_type = > 'ApplyAction' ,
:parent_container_id = > apply_action . container_id , :parent_container_type = > apply_action . container_type , :belong_container_id = > apply_action . container_id , :belong_container_type = > " Shixun " , :tiding_type = > " System " , :status = > type == 0 ? 2 : 1 )
@authorizations = ApplyAction . where ( :container_type = > " ApplyShixun " , :status = > 0 )
@authorizations_count = @authorizations . count
@limit = 15
@is_remote = true
@authorizations_pages = Paginator . new @authorizations_count , @limit , params [ 'page' ] || 1
@offset || = @authorizations_pages . offset
@authorizations = paginateHelper @authorizations , @limit
respond_to do | format |
format . js
end
end
def tech_system
@menu_type = 12
@sub_type = 5
@tech_system = Repertoire . where ( nil ) . order ( " updated_at asc " )
respond_to do | format |
format . js
format . html
end
end
# 创建体系
def create_system
rep_name = params [ :repertoire ]
sub_rep_name = params [ :sub_repertoire ]
tags_name = params [ :tag_repertoire ]
ActiveRecord :: Base . transaction do
begin
rep = Repertoire . create! ( :name = > rep_name )
sub_rep = SubRepertoire . create! ( :name = > sub_rep_name , :repertoire_id = > rep . id )
tags_name . each do | tag |
TagRepertoire . create! ( :name = > tag , :sub_repertoire_id = > sub_rep . id )
end
redirect_to tech_system_managements_path
rescue Exception = > e
logger . error ( " create_system error: #{ e } " )
raise ActiveRecord :: Rollback
end
end
end
# 更新tag_repertores的名称
def update_tag_name
tag = TagRepertoire . find ( params [ :id ] )
if params [ :name ] . blank?
tag . destroy
else
if tag . name == params [ :name ] . strip
tag . update_column ( :updated_at , Time . now )
else
tag . update_attribute ( :name , params [ :name ] )
end
end
render :json = > { success : " true " }
end
# 更新sub_repertores的名称
def update_sub_name
sub = SubRepertoire . find ( params [ :id ] )
if params [ :name ] . blank?
sub . destroy
else
if sub . name == params [ :name ] . strip
sub . update_column ( :updated_at , Time . now )
else
sub . update_attribute ( :name , params [ :name ] )
end
end
render :json = > { success : " true " }
end
def update_rep_name
rep = Repertoire . find ( params [ :id ] )
if params [ :name ] . blank?
rep . destroy
else
if rep . name == params [ :name ] . strip
rep . update_column ( :updated_at , Time . now )
else
rep . update_attribute ( :name , params [ :name ] )
end
end
render :json = > { success : " true " }
end
# type: 1表示新建sub_repertoire, 2表示新建tag_repertoire
def create_sub_or_tag_repertoire
type = params [ :type ] . to_i
if type == 1
SubRepertoire . create ( :name = > params [ :name ] , :repertoire_id = > params [ :id ] )
elsif type == 2
TagRepertoire . create ( :name = > params [ :name ] , :sub_repertoire_id = > params [ :id ] )
end
respond_to do | format |
format . js { redirect_to tech_system_managements_path }
end
end
def delete_sub_tech_system
sub_tech = SubRepertoire . where ( :id = > params [ :sub_res ] ) . first
tech = Repertoire . where ( :id = > params [ :sub_res ] ) . first
if sub_tech . present?
sub_tech . destroy
else
tech . destroy
end
redirect_to tech_system_managements_path
end
def create_tech_system
if params [ :index ] == " 1 "
Repertoire . create ( :name = > params [ :res_tech ] )
else
SubRepertoire . create ( :name = > params [ :sub_tech ] , :repertoire_id = > params [ :tech ] )
end
redirect_to tech_system_managements_path
end
def rename_tech_system
@sub_res = SubRepertoire . where ( :id = > params [ :sub_res ] ) . present? ? SubRepertoire . where ( :id = > params [ :sub_res ] ) . first : " 0 "
@res = Repertoire . where ( :id = > params [ :res ] ) . first
respond_to do | format |
format . js
end
end
def update_tech_system
if params [ :sub_tech ] == " 0 "
Repertoire . where ( :id = > params [ :res ] ) . update_all ( :name = > params [ :update_res ] )
else
Repertoire . where ( :id = > params [ :res ] ) . update_all ( :name = > params [ :update_res ] )
SubRepertoire . where ( :id = > params [ :sub_res ] ) . update_all ( :name = > params [ :update_sub_res ] )
end
redirect_to tech_system_managements_path
end
def setting_banner
@images = PortalImage . order ( " position asc " )
respond_to do | format |
format . js
format . html
end
end
def create_portal_image
PortalImage . create ( :name = > params [ :name ] , :position = > params [ :position ] , :link = > params [ :link ] )
redirect_to setting_banner_managements_path
end
def create_school_image
@school = School . find params [ :school_id ]
SchoolImage . create ( :name = > params [ :name ] , :position = > params [ :position ] , :link = > params [ :link ] , :school_id = > params [ :school_id ] )
end
def update_school_image
image = SchoolImage . find params [ :id ]
image . update_attributes ( :name = > params [ :name ] , :position = > params [ :position ] , :link = > params [ :link ] )
@school = image . school
end
def up_or_down_image
image = PortalImage . find params [ :id ]
image . update_attribute ( :status , params [ :status ] )
redirect_to setting_banner_managements_path
end
def up_or_down_school_image
image = SchoolImage . find params [ :id ]
image . update_attribute ( :status , params [ :status ] )
@school = image . school
end
def update_portal_image
image = PortalImage . find params [ :id ]
image . update_attributes ( :name = > params [ :name ] , :position = > params [ :position ] , :link = > params [ :link ] )
redirect_to setting_banner_managements_path
end
def delete_portal_image
image = PortalImage . find params [ :id ]
image . destroy
redirect_to setting_banner_managements_path
end
def delete_school_image
image = SchoolImage . find params [ :id ]
@school = image . school
image . destroy
end
# 课程删除
before_filter :find_courselist , :only = > [ :destroy ]
# 课程列表的删除
def destroy
if @courselist
CourseList . where ( :id = > @courselist . id ) . destroy_all
respond_to do | format |
format . js
end
end
end
private
# Find courselist of id params[:id]
def find_courselist
@courselist = CourseList . find_by_id ( params [ :id ] )
render_404 if @courselist . nil?
rescue ActiveRecord :: RecordNotFound
render_404
end
def shixun_list_xls shixuns
xls_report = StringIO . new
book = Spreadsheet :: Workbook . new
sheet1 = book . create_worksheet :name = > " sheet "
blue = Spreadsheet :: Format . new :color = > :blue , :weight = > :bold , :size = > 10
sheet1 . row ( 0 ) . default_format = blue
sheet1 . row ( 0 ) . concat ( [ " 实训ID " , " 实训名称 " , " 技术平台 " , " Fork源 " , " 实践任务 " , " 选择题任务 " , " 挑战人数 " , " 通关人数 " , " 状态 " , " 创建者 " , " 单位 " , " 职业 " , " 关卡序号 " , " 关卡名称 " , " 技能标签 " ] )
count_row = 1
shixuns . find_each do | shixun |
sheet1 [ count_row , 0 ] = shixun . identifier
sheet1 [ count_row , 1 ] = shixun . name
sheet1 [ count_row , 2 ] = shixun . shixun_main_name
sheet1 [ count_row , 3 ] = shixun . fork_identifier
sheet1 [ count_row , 4 ] = shixun . challenges . practice_type . count
sheet1 [ count_row , 5 ] = shixun . challenges . choose_type . count
sheet1 [ count_row , 6 ] = shixun . myshixuns . count
sheet1 [ count_row , 7 ] = shixun . myshixuns . finished . count
sheet1 [ count_row , 8 ] = shixun . shixun_status
sheet1 [ count_row , 9 ] = shixun . owner . show_real_name
sheet1 [ count_row , 10 ] = shixun . owner . school_name
sheet1 [ count_row , 11 ] = shixun . owner . identity
shixun . challenges . each do | challenge |
sheet1 [ count_row , 12 ] = " 第 #{ challenge . position } 关 "
sheet1 [ count_row , 13 ] = challenge . subject
sheet1 [ count_row , 14 ] = challenge . tags_show
count_row += 1
end
count_row += 1
end
book . write xls_report
xls_report . string
end
def publish_shixun_list shixuns
xls_report = StringIO . new
book = Spreadsheet :: Workbook . new
sheet1 = book . create_worksheet :name = > " sheet "
blue = Spreadsheet :: Format . new :color = > :blue , :weight = > :bold , :size = > 10
sheet1 . row ( 0 ) . default_format = blue
sheet1 . row ( 0 ) . concat ( [ " 序号 " , " 创建者 " , " 发布时间 " , " ID " , " 实训名称 " , " 技术平台 " , " fork源 " , " 实践任务 " ] )
count_row = 1
shixuns . find_each do | shixun |
sheet1 [ count_row , 0 ] = count_row
sheet1 [ count_row , 1 ] = shixun . owner . try ( :show_real_name )
sheet1 [ count_row , 2 ] = format_time shixun . publish_time
sheet1 [ count_row , 3 ] = shixun . identifier
sheet1 [ count_row , 4 ] = shixun . name
sheet1 [ count_row , 5 ] = show_shixun_mirror ( shixun )
sheet1 [ count_row , 6 ] = shixun . fork_identifier
sheet1 [ count_row , 7 ] = shixun . challenges . count
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