#coding=utf-8 # 执行示例 bundle exec rake public_course:student args=3,3097 # args 第一个参数是subject_id,第二个参数是课程course_id # 第一期时间:2017-07-23 至2017-10-24 # 第二期时间:2017-10-27 至2018-01-28 # 第三期时间:2018-03-07 至2018-06-08 # 第四期时间:2018-09-08 至2018-12-08 # 第五期时间:2019-03-02 至2019-06-02 # 第六期时间:2019-06-25 至2019-09-25# # 这次学习很有收获,感谢老师提供这么好的资源和细心的服务🎉🎉🎉 # desc "同步精品课数据" namespace :public_course_zhp do if ENV['args'] subject_id = ENV['args'].split(",")[0] # 对应课程的id course_id = ENV['args'].split(",")[1] # 对应课堂的id status = ENV['args'].split(",")[2] # 表示相应的期数 type = ENV['args'].split(",")[3] # 表示课程模块 end if status.to_i == 1 start_time = '2017-07-23' end_time = '2017-10-24' elsif status.to_i == 2 start_time = '2017-10-27' end_time = '2018-01-28' elsif status.to_i == 3 start_time = '2018-03-07' end_time = '2018-06-08' elsif status.to_i == 4 start_time = '2018-09-08' end_time = '2018-12-08' elsif status.to_i == 5 start_time = '2019-03-02' end_time = '2019-06-02' else # 这种情况是取所有的 start_time = '2019-06-25' end_time = '2019-09-25' end task :student => :environment do puts "subject_id is #{subject_id}" puts "course_id is #{course_id}" user_ids = Myshixun.find_by_sql("select distinct(user_id) from myshixuns where shixun_id in (select shixun_id from stage_shixuns where stage_id in (select id from stages where subject_id=#{subject_id}))").map(&:user_id) puts user_ids 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) 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