#coding=utf-8
# 执行示例 RAILS_ENV=production bundle exec rake public_classes:student args=3,3056,'2019-03-01','2019-03-31',10,1
# args 第一个参数是subject_id, 第二个参数是课程course_id
# 第一期时间: 2018-12-16 至2019-03-31
# 第二期时间: 2019-04-07 至2019-07-28
#
# 这次学习很有收获,感谢老师提供这么好的资源和细心的服务🎉🎉🎉
#
desc " 同步精品课数据 "
namespace :public_classes do
if ENV [ 'args' ]
subject_id = ENV [ 'args' ] . split ( " , " ) [ 0 ] # 对应课程的id
course_id = ENV [ 'args' ] . split ( " , " ) [ 1 ] # 对应课堂的id
start_time = ENV [ 'args' ] . split ( " , " ) [ 2 ] # 表示课程模块
end_time = ENV [ 'args' ] . split ( " , " ) [ 3 ] # 表示课程模块
limit = ENV [ 'args' ] . split ( " , " ) [ 4 ] # 限制导入的数量
type = ENV [ 'args' ] . split ( " , " ) [ 5 ] # 表示课程模块
end
task :student = > :environment do
puts " subject_id is #{ subject_id } "
puts " course_id is #{ course_id } "
puts " start time is #{ start_time } "
puts " end time is #{ end_time } "
puts " limt is #{ limit } "
user_ids = Myshixun . find_by_sql ( " select distinct(user_id) from myshixuns where created_at between ' #{ start_time } ' and ' #{ end_time } ' and shixun_id in (select shixun_id from stage_shixuns
where stage_id in ( select id from stages where subject_id = #{subject_id})) limit #{limit}").map(&:user_id)
puts " user_ids count is #{ user_ids . count } "
if user_ids . present?
user_ids . each do | user_id |
puts user_id
begin
CourseMember . create! ( course_id : course_id , user_id : user_id , role : 4 )
rescue Exception = > e
Rails . logger ( e . message )
end
end
end
end
task :test_user = > :environment do
users = User . where ( is_test : true ) . limit ( limit )
users . find_each do | user |
puts user . id
CourseMember . create! ( course_id : course_id , user_id : user . id , role : 4 )
end
end
# 更新某个课程的某类时间
# 执行示例 RAILS_ENV=production bundle exec rake public_course:time args=-1,2932,1,1
task :time = > :environment do
# course_id = ENV['args'].split(",")[0] # 对应课堂的id
# type = ENV['args'].split(",")[1]
course = Course . find ( course_id )
case type . to_i
when 1
# 讨论区
messages = Message . where ( board_id : course . boards )
messages . each do | message |
created_on = random_time start_time , end_time
puts created_on
message . update_columns ( created_on : created_on , updated_on : created_on )
MessageDetail . where ( message_id : message . id ) . each do | detail |
rand_created_on = random_time start_time , end_time
detail . update_columns ( created_at : rand_created_on , updated_at : rand_created_on )
end
end
when 2
# 作业
course . homework_commons . each do | homework |
created_at = random_time ( start_time , end_time )
publish_time = random_larger_time created_at , start_time , end_time
end_time = random_larger_time publish_time , start_time , end_time
updated_at = end_time
homework . update_columns ( publish_time : publish_time , end_time : end_time , created_at : created_at , updated_at : updated_at )
homework . homework_detail_manual . update_columns ( comment_status : 6 , created_at : created_at , updated_at : updated_at )
homework . student_works . where ( " work_status !=0 and update_time > ' #{ end_time } ' " ) . update_all ( update_time : end_time )
end
when 3
# 试卷
course . exercises . each do | exercise |
created_at = random_time start_time , end_time
publish_time = random_larger_time created_at , start_time , end_time
end_time = random_larger_time publish_time , start_time , end_time
updated_at = end_time
exercise . update_columns ( publish_time : publish_time , end_time : end_time , created_at : created_at , updated_at : updated_at , exercise_status : 3 )
end
when 4
# 资源
course . attachments . each do | atta |
created_on = random_time start_time , end_time
atta . update_columns ( is_publish : 1 , created_on : created_on , publish_time : created_on )
end
end
end
task :create_homework_work = > :environment do
course = Course . find ( course_id )
course . practice_homeworks . each do | homework |
if homework . student_works . count == 0
str = " "
CourseMember . students ( course ) . each do | student |
str += " , " if str != " "
str += " ( #{ homework . id } , #{ student . user_id } , ' #{ Time . now . strftime ( '%Y-%m-%d %H:%M:%S' ) } ', ' #{ Time . now . strftime ( '%Y-%m-%d %H:%M:%S' ) } ') "
end
if str != " "
sql = " insert into student_works (homework_common_id, user_id, created_at, updated_at) values " + str
ActiveRecord :: Base . connection . execute sql
end
end
end
end
def min_swith ( time )
puts time
return time < 9 ? " 0 #{ time } " : time
end
def random_time ( start_time , end_time )
hour = ( 6 .. 23 ) . to_a . sample ( 1 ) . first
min = rand ( 60 )
sec = rand ( 60 )
start_time = Date . parse ( start_time )
end_time = Date . parse ( end_time )
date = ( start_time .. end_time ) . to_a . sample ( 1 ) . first
time = " #{ date } #{ min_swith ( hour ) } : #{ min_swith ( min ) } : #{ min_swith ( sec ) } "
puts time
time
end
def random_larger_time ( time , start_time , end_time )
large_time = random_time ( start_time , end_time )
while large_time < = time
large_time = random_time ( start_time , end_time )
end
large_time
end
end