# bundle exec rake sync:public_message args=149,2903
namespace :sync do
task :public_message = > :environment do
subject_id = ENV [ 'args' ] . split ( " , " ) [ 0 ] # 对应课程的id
shixun_id = ENV [ 'args' ] . split ( " , " ) [ 1 ] # 对应课程的id
board_id = ENV [ 'args' ] . split ( " , " ) [ 2 ]
message_id = ENV [ 'args' ] . split ( " , " ) [ 3 ]
status = ENV [ 'args' ] . split ( " , " ) [ 4 ] # 表示相应的期数
if status . to_i == 1
start_time = '2018-12-16'
end_time = '2019-04-01'
elsif status . to_i == 2
start_time = '2019-04-07'
end_time = '2019-07-28'
else
# 这种情况是取所有的
start_time = '2015-01-01'
end_time = '2022-07-28'
end
shixun_ids = Shixun . find_by_sql ( " select shixun_id from stage_shixuns where stage_id in (select id from stages where
subject_id = #{subject_id}) ").map(&:shixun_id)
discusses = Discuss . where ( dis_id : shixun_ids ) . where ( " created_at >? and created_at <? " , start_time , end_time )
if discusses . present?
discusses . find_each do | discuss |
puts discuss . user_id
puts board_id
puts message_id
new_message = Message . create! ( board_id : board_id . to_i , author_id : discuss . user_id , parent_id : message_id , root_id : message_id )
MessageDetail . create! ( message_id : new_message . id , content : discuss . try ( :content ) )
end
end
end
task :sigle_message = > :environment do
subject_id = ENV [ 'args' ] . split ( " , " ) [ 0 ] # 对应课程的id
shixun_id = ENV [ 'args' ] . split ( " , " ) [ 1 ] # 对应课程的id
board_id = ENV [ 'args' ] . split ( " , " ) [ 2 ]
message_id = ENV [ 'args' ] . split ( " , " ) [ 3 ]
status = ENV [ 'args' ] . split ( " , " ) [ 4 ] # 表示相应的期数
if status . to_i == 1
start_time = '2018-12-16'
end_time = '2019-04-01'
elsif status . to_i == 2
start_time = '2019-04-07'
end_time = '2019-07-28'
else
# 这种情况是取所有的
start_time = '2015-01-01'
end_time = '2022-07-28'
end
if subject_id . to_i == - 1
discusses = Discuss . where ( " parent_id is null and dis_id=? " , shixun_id )
else
shixun_ids = Shixun . find_by_sql ( " select shixun_id from stage_shixuns where stage_id in (select id from stages where
subject_id = #{subject_id}) ").map(&:shixun_id)
discusses = Discuss . where ( " parent_id is null " ) . where ( dis_id : shixun_ids )
end
discusses . each do | discuss |
rand_created_on = random_time start_time , end_time
puts discuss . id
# 找到所有的子回复
replies = Discuss . where ( parent_id : discuss . id )
# 如果有子回复,除了创建父回复外,还需要同步子回复
new_message = Message . create! ( board_id : board_id . to_i , author_id : discuss . user_id , parent_id : message_id , root_id : message_id )
new_message . update_columns ( created_on : rand_created_on , updated_on : rand_created_on )
message_detail = MessageDetail . create! ( message_id : new_message . id , content : discuss . try ( :content ) )
message_detail . update_columns ( created_at : rand_created_on , updated_at : rand_created_on )
if replies . present?
replies . each do | reply |
puts ( " reply id si #{ reply . id } " )
reply_time = random_time ( start_time , end_time )
while reply_time > rand_created_on
reply_time = random_time ( start_time , end_time )
end
reply_message = Message . create! ( board_id : board_id . to_i , author_id : reply . user_id , parent_id : new_message . id , root_id : message_id )
reply_message . update_columns ( created_on : reply_time , updated_on : reply_time )
reply_message_detail = MessageDetail . create! ( message_id : reply_message . id , content : reply . try ( :content ) )
reply_message_detail . update_columns ( created_at : rand_created_on , updated_at : rand_created_on )
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 smaller_time ( parent_time , start_time , end_time )
large_time = random_time ( start_time , end_time )
while large_time > parent_time
large_time = random_time ( start_time , end_time )
end
large_time
end
end
task :board_count = > :environment do
Course . find_each do | course |
puts course . id
begin
messages_count = Message . find_by_sql ( " select count(*) as count from messages where board_id in (select id from boards where course_id= #{ course . id } ) " ) . first . try ( :count )
Board . update_column ( messages_count : messages_count )
rescue
end
end
end
end