From 458e7147c525b90d0360941ecf67827a9f1534e2 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Thu, 15 Oct 2020 18:45:50 +0800 Subject: [PATCH] Add Sync Forum --- app/jobs/sync_create_memo_job.rb | 27 +++++++++++++++ app/jobs/sync_memos_job.rb | 34 +++++++++++++++++++ app/tasks/sync_forums_rake.rb | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 app/jobs/sync_create_memo_job.rb create mode 100644 app/jobs/sync_memos_job.rb create mode 100644 app/tasks/sync_forums_rake.rb diff --git a/app/jobs/sync_create_memo_job.rb b/app/jobs/sync_create_memo_job.rb new file mode 100644 index 00000000..a864dd05 --- /dev/null +++ b/app/jobs/sync_create_memo_job.rb @@ -0,0 +1,27 @@ + +class SyncCreateMemoJob < ApplicationJob + queue_as :default + + def perform(memo_params) + all_memos = Memo.all + memo_params.each do |m| + SyncLog.sync_log("==========mmeo_params============id:#{m}") + begin + if all_memos.exists?(m[:id]) + memo = all_memos.where(id: m[:id]).first + memo.update_attributes!(m.merge(hidden: false)) + else + memo = Memo.new(m.merge({forum_section_id: m[:forum_id], hidden: false})) + if memo.save! + SyncLog.sync_log("==========create_memo_success============id:#{memo.id}") + else + SyncLog.sync_log("==========create_memo_failed============id:#{m[:id]}") + end + end + rescue => e + SyncLog.sync_log("==========sync_memos_1111111_to_forge_failed============errors:#{e}") + end + end + end + +end diff --git a/app/jobs/sync_memos_job.rb b/app/jobs/sync_memos_job.rb new file mode 100644 index 00000000..dc2c0e95 --- /dev/null +++ b/app/jobs/sync_memos_job.rb @@ -0,0 +1,34 @@ +require 'uri' +require 'net/http' + +class SyncMemosJob < ApplicationJob + queue_as :default + + def perform(forum_id, main_url) + SyncLog.sync_log("==========sync_memos_to_forge===forum_id==#{forum_id}=========") + begin + url = "#{main_url}/sync_forges/get_memos" + uri = URI.parse(url) + http = Net::HTTP.new(uri.hostname, uri.port) + http.use_ssl = main_url.include?("https") + # headers = { "Content-Type" => "application/json" } + sync_params = { + forum_id: forum_id + } + response = http.send_request('GET', uri.path, sync_params.to_json, {'Content-Type' => 'application/json'}) + # response = http.get(uri.path,{forum_id: forum_id}.to_json, headers) + + if response.code == '200' + target_jsons = eval(response.body) + SyncLog.sync_log("==========sync_memos_jobs_target========#{target_jsons[:all_memos]}====") + SyncCreateMemoJob.perform_later(target_jsons[:all_memos]) + # create_target(target_jsons[:all_memos]) + else + SyncLog.sync_log("==========sync_memos_to_forge_failed============") + end + rescue => e + SyncLog.sync_log("==========sync_memos_to_forge_failed=____2222===========errors:#{e}") + end + end + +end diff --git a/app/tasks/sync_forums_rake.rb b/app/tasks/sync_forums_rake.rb new file mode 100644 index 00000000..a140607b --- /dev/null +++ b/app/tasks/sync_forums_rake.rb @@ -0,0 +1,57 @@ +require 'uri' +require 'net/http' + +class SyncForumsRake + # 运行示例: bundle exec rails runner "SyncForumsRake.new.call()" + + def call + SyncLog.sync_log("==========begin_to_sync_forums=============") + begin + # url = "https://www.trustie.net/sync_forges/get_forums" #trustie上的相关路由 + main_url = "https://www.trustie.net" + url = "#{main_url}/sync_forges/get_forums" + uri = URI.parse(url) + http = Net::HTTP.new(uri.hostname, uri.port) + http.use_ssl = main_url.include?("https") + headers = { "Content-Type" => "application/json" } + response = http.get(uri.path, headers) + # response = http.send_request('GET', uri.path,{'Content-Type' => 'application/json'}) + + if response.code == '200' + target_jsons = eval(response.body) + create_target(target_jsons[:all_forums], main_url) + else + SyncLog.sync_log("==========sync_forums_to_forge_failed============") + end + rescue => e + SyncLog.sync_log("==========sync_forums_to_forge_failed============errors:#{e}") + end + end + + def create_target(targets, main_url) + + curreunt_sections = ForumSection.all + positions = curreunt_sections.pluck(:position).select { |a| a.is_a? Integer } + positions = positions.max.to_i + targets.each_with_index do |t, index| + section_params = { + id: t[:id], + title: t[:name], + position: positions + index + 1, + description: t[:description], + user_id: t[:creator_id] + } + if curreunt_sections.exists?(t[:id]) + current_section = curreunt_sections.where(id: t[:id]).first + if current_section.update_attributes(section_params) + SyncMemosJob.perform_later(t[:id], main_url) + end + else + section = ForumSection.new(section_params) + if section.save! + SyncMemosJob.perform_later(section.id, main_url) + end + end + end + end +end \ No newline at end of file