用户的迁移

This commit is contained in:
sylor_huang@126.com 2020-03-11 20:00:48 +08:00
parent 3978b14e2a
commit 19d070dd0c
2 changed files with 199 additions and 0 deletions

View File

@ -0,0 +1,160 @@
#project的includes应该是包括(:versions, :project_score, :repository,:commits, issues: [:journals,:commit_issues]),但是repository表commits表commit_issues表没有trustie上有。
#
# 运行示例: bundle exec rails runner "SyncUserForgeTask.new.call()"
class SyncUserForgeTask
def call
Rails.logger.info("##########_______sync_start________###########")
all_users = User.where("login is not null and id = ?",25728)
# 这里再把所有用户循环
all_users.find_each do |u|
# u = User.find(36390) 测试的
user_params = u.as_json
user_extension_params = u.try(:user_extensions).as_json || []
target_params = []
if u.projects.present?
projects = u.projects.includes(:versions,:project_score, issues: [:journals],owner: [:user_extensions], members: [roles: [:member_roles]])
projects.find_each do |p|
member_params = get_members(p.members,p)
project_params = p.as_json
issue_params = get_issues(p, u.id)
versions_params = get_versions(p)
project_score_params = get_scores(p)
pull_request_params = get_prs(p.id)
repo_params = get_repository(p) #repository的内容
commit_params = get_commits(p.id)
relate_project_params = {
project_params: project_params,
member_params: member_params,
issue_params: issue_params,
versions_params: versions_params,
project_score_params: project_score_params,
pull_request_params: pull_request_params,
repo_params: repo_params,
commit_params: commit_params
}
target_params.push(relate_project_params)
end
end
roles = Role.all.as_json
sync_params = {
target_params: target_params,
platform: "trustie",
roles: roles,
user_params: {user_params: user_params, user_extension_params: user_extension_params}
}
SyncUserForgeJob.new.perform(sync_params.to_json)
# Delayed::Job.enqueue(SyncUserForgeJob.new(sync_params.to_json))
end
end
#工单的内容
def get_issues(project, user_id)
issues_params = []
issues = project.issues.where(author_id: user_id)
if issues.present?
issues.find_each do |i|
issue_json = i.as_json
jours_params = get_issue_journal(i, user_id)
commit_params = get_issue_commit(i)
issues_params.push(
{issue_params: issue_json,
jours_params: jours_params,
commit_params: commit_params
}
)
end
end
issues_params
end
#里程碑的内容
def get_versions(project)
versions_params = []
versions = project.versions
versions.find_each do |i|
versions_params.push(i.as_json)
end
versions_params
end
#project_score的内容
def get_scores(project)
project.try(:project_score).as_json || []
end
def get_prs(project_id)
pr_params = []
prs = PullRequest.where(project_id: project_id)
prs.find_each do |i|
pr_params.push(i.as_json)
end
pr_params
end
def get_commits(project_id)
pr_params = []
prs = Commit.where(project_id: project_id)
prs.find_each do |i|
pr_params.push(i.as_json)
end
pr_params
end
#repository的内容
def get_repository(project)
repo_params = []
repo = project.repository
repo_params.push(repo.as_json) if repo.present?
repo_params
end
def get_issue_journal(issue, user_id)
jour_params = []
jours = issue.journals.where(user_id: user_id)
if jours.present?
jours.find_each do |j|
jour_params.push(j.as_json)
end
end
jour_params
end
def get_issue_commit(issue)
commit_params = []
commits = CommitIssues.where(issue_id: issue.id)
if commits.present?
commits.find_each do |j|
commit_params.push(j.as_json)
end
end
commit_params
end
def get_members(members,project)
member_params = []
if members.present?
members.find_each do |m|
member_user = m.user.as_json
member_extension = m.user.try(:user_extensions).as_json || []
member_role = m.member_roles.as_json
member_issues = get_issues(project, m.user_id)
get_member = {
member: m.as_json,
member_user: member_user,
member_extension: member_extension,
member_roles: member_role,
member_issues: member_issues
}
member_params.push(get_member)
end
end
member_params
end
end

View File

@ -0,0 +1,39 @@
class SyncUserForgeJob
require 'uri'
require 'net/http'
# def initialize(params)
# @params = params
# end
def perform(params)
Rails.logger.info("#######____sync_user_to_forge_start__########")
begin
api_host = "#{Redmine::Configuration['sync_forge_url']}"
url = "http://127.0.0.1:3000/api/sync_forge"
Rails.logger.info("#######_________response__sync__url_____#########{url}")
sync_json = {
"sync_params": params
}
Rails.logger.info("#######_________response__sync_json_____#########{sync_json}")
uri = URI.parse(url)
if api_host
http = Net::HTTP.new(uri.hostname, uri.port)
if api_host.include?("https://")
http.use_ssl = true
end
response = http.send_request('POST', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'})
Rails.logger.info("#######_________response__sync__end_____#########{response.body}")
end
rescue => e
Rails.logger.info("#######____sync_user_to_forge_failed__########{e}")
end
end
end