修复:导入禅道脚本无法导入迭代数据

This commit is contained in:
yystopf 2024-09-03 10:13:38 +08:00
parent 12ae3b94d9
commit cd71532dd7
1 changed files with 154 additions and 111 deletions

View File

@ -1,133 +1,176 @@
desc "导入禅道数据" desc "导入禅道数据"
namespace :import_from_chandao do namespace :import_from_chandao do
def get_sprint_data(name, pm_project_id, org)
assigner = org.team_users.joins(:team).where(teams: {authorize: "owner"}).take&.user
url = URI("#{EduSetting.get("pms_server_url")}/api/pms/#{org.login}/pmsProjectSprint/findOrCreate")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Cookie"] = "autologin_trustie=#{Token.get_or_create_permanent_login_token(assigner, 'autologin')}"
request["Content-Type"] = "application/json"
request.body = JSON.dump({
"pmsProjectId": pm_project_id,
"sprintAssigneeId": assigner.id,
"sprintName": name
})
response = http.request(request)
puts response.read_body
return JSON.parse(response.read_body)['data']
rescue
return nil
end
desc "bug数据" desc "bug数据"
# 执行示例 bundle exec rake "import_from_chandao:bugs[企业内部工时管理系统.csv, 3]" # 执行示例 bundle exec rake "import_from_chandao:bugs[企业内部工时管理系统.csv, 3]"
# RAILS_ENV=production bundle exec rake "import_from_chandao:bugs[企业内部工时管理系统.csv, 3]" # RAILS_ENV=production bundle exec rake "import_from_chandao:bugs[企业内部工时管理系统.csv, 3]"
task :bugs, [:name, :pm_project_id] => :environment do |t, args| task :bugs, [:name, :pm_project_id, :org_login] => :environment do |t, args|
def trans_status(str) org = Organization.find_by(login: args.org_login)
h={ if org.present?
"激活" => 1, def trans_status(str)
"已解决" => 3, h={
"已关闭" => 5 "激活" => 1,
} "已解决" => 3,
h[str] "已关闭" => 5
end }
name = args.name h[str]
CSV.foreach("#{Rails.root}/#{args.name}", headers: true) do | row |
randd_field_hash = row.to_hash
issue = Issue.new(issue_classify: "issue")
author = User.like(randd_field_hash['由谁创建']).take || User.where(admin: true).first
issue.author_id = author&.id
assigner = randd_field_hash['指派给'].present? ? User.like(randd_field_hash['指派给']).take : nil
if assigner.present?
issue.assigners << assigner
end end
issue.project_issues_index = randd_field_hash['Bug编号'].to_i name = args.name
issue.status_id = trans_status(randd_field_hash['Bug状态']) || IssueStatus.first.id CSV.foreach("#{Rails.root}/#{args.name}", headers: true) do | row |
issue.tracker_id = Tracker.first.id randd_field_hash = row.to_hash
issue.priority_id = randd_field_hash['优先级'].to_i issue = Issue.new(issue_classify: "issue")
issue.subject = randd_field_hash['Bug标题'] author = User.like(randd_field_hash['由谁创建']).take || User.where(admin: true).first
issue.description = randd_field_hash['重现步骤'] issue.author_id = author&.id
issue.created_on = randd_field_hash['创建日期'].to_time rescue nil assigner = randd_field_hash['指派给'].present? ? User.like(randd_field_hash['指派给']).take : nil
issue.updated_on = randd_field_hash['修改日期'].to_time rescue issue.created_on if assigner.present?
issue.due_date = randd_field_hash['截止日期'].to_time rescue nil issue.assigners << assigner
issue.project_id = 0 end
issue.pm_project_id = args.pm_project_id issue.project_issues_index = randd_field_hash['Bug编号'].to_i
issue.pm_issue_type = 3 issue.status_id = trans_status(randd_field_hash['Bug状态']) || IssueStatus.first.id
issue.save! issue.tracker_id = Tracker.first.id
requirement_issue = Issue.find_by(project_issues_index: randd_field_hash['相关需求'].split('(#')[1].split(')')[0], pm_project_id: args.pm_project_id, pm_issue_type: 1) rescue nil issue.priority_id = randd_field_hash['优先级'].to_i
if requirement_issue.present? issue.subject = randd_field_hash['Bug标题']
requirement_issue.pm_links.find_or_create_by(be_linkable_type: 'Issue', be_linkable_id: issue.id) issue.description = randd_field_hash['重现步骤']
end issue.created_on = randd_field_hash['创建日期'].to_time rescue nil
task_issue = Issue.find_by(project_issues_index: randd_field_hash['相关任务'].split('(')[1].split(')')[0], pm_project_id: args.pm_project_id, pm_issue_type: 2) rescue nil issue.updated_on = randd_field_hash['修改日期'].to_time rescue issue.created_on
if task_issue.present? issue.due_date = randd_field_hash['截止日期'].to_time rescue nil
task_issue.pm_links.find_or_create_by(be_linkable_type: 'Issue', be_linkable_id: issue.id) issue.project_id = 0
issue.pm_project_id = args.pm_project_id
issue.pm_issue_type = 3
sprint_name = randd_field_hash['所属迭代'].split('(#')[0]
sprint = get_sprint_data(sprint_name, args.pm_project_id, org)
issue.pm_sprint_id = sprint['id'] if sprint.present?
issue.save!
requirement_issue = Issue.find_by(project_issues_index: randd_field_hash['相关需求'].split('(#')[1].split(')')[0], pm_project_id: args.pm_project_id, pm_issue_type: 1) rescue nil
if requirement_issue.present?
requirement_issue.pm_links.find_or_create_by(be_linkable_type: 'Issue', be_linkable_id: issue.id)
end
task_issue = Issue.find_by(project_issues_index: randd_field_hash['相关任务'].split('(')[1].split(')')[0], pm_project_id: args.pm_project_id, pm_issue_type: 2) rescue nil
if task_issue.present?
task_issue.pm_links.find_or_create_by(be_linkable_type: 'Issue', be_linkable_id: issue.id)
end
end end
else
puts "组织不存在"
end end
end end
# 执行示例 bundle exec rake "import_from_chandao:tasks[复杂智能软件项目-所有任务.csv, 365]" # 执行示例 bundle exec rake "import_from_chandao:tasks[复杂智能软件项目-所有任务.csv, 365]"
# RAILS_ENV=production bundle exec rake "import_from_chandao:tasks[复杂智能软件项目-所有任务.csv, 365]" # RAILS_ENV=production bundle exec rake "import_from_chandao:tasks[复杂智能软件项目-所有任务.csv, 365]"
task :tasks, [:name, :pm_project_id] => :environment do |t, args| task :tasks, [:name, :pm_project_id, :org_login] => :environment do |t, args|
def trans_status(str) org = Organization.find_by(login: args.org_login)
h={ if org.present?
"未开始" => 1, def trans_status(str)
"进行中" => 2, h={
"已完成" => 3, "未开始" => 1,
"已关闭" => 5 "进行中" => 2,
} "已完成" => 3,
h[str] "已关闭" => 5
end }
h[str]
end
name = args.name name = args.name
pm_project_id = args.pm_project_id pm_project_id = args.pm_project_id
CSV.foreach("#{Rails.root}/#{name}", headers: true) do | row | CSV.foreach("#{Rails.root}/#{name}", headers: true) do | row |
randd_field_hash = row.to_hash randd_field_hash = row.to_hash
issue = Issue.new(issue_classify: "issue") issue = Issue.new(issue_classify: "issue")
author = User.like(randd_field_hash['由谁创建']).take || User.where(admin: true).first author = User.like(randd_field_hash['由谁创建']).take || User.where(admin: true).first
issue.author_id = author&.id issue.author_id = author&.id
assigner = randd_field_hash['指派给'].present? ? User.like(randd_field_hash['指派给']).take : nil assigner = randd_field_hash['指派给'].present? ? User.like(randd_field_hash['指派给']).take : nil
if assigner.present? if assigner.present?
issue.assigners << assigner issue.assigners << assigner
end end
issue.project_issues_index = randd_field_hash['编号'].to_i issue.project_issues_index = randd_field_hash['编号'].to_i
issue.status_id = trans_status(randd_field_hash['任务状态']) || IssueStatus.first.id issue.status_id = trans_status(randd_field_hash['任务状态']) || IssueStatus.first.id
issue.tracker_id = Tracker.first.id issue.tracker_id = Tracker.first.id
issue.priority_id = randd_field_hash['优先级'].to_i issue.priority_id = randd_field_hash['优先级'].to_i
issue.subject = randd_field_hash['任务名称'] issue.subject = randd_field_hash['任务名称']
issue.description = randd_field_hash['任务描述'] issue.description = randd_field_hash['任务描述']
issue.created_on = randd_field_hash['创建日期'].to_time rescue nil issue.created_on = randd_field_hash['创建日期'].to_time rescue nil
issue.updated_on = randd_field_hash['最后修改日期'].to_time rescue issue.created_on issue.updated_on = randd_field_hash['最后修改日期'].to_time rescue issue.created_on
issue.time_scale = randd_field_hash['最初预计'].to_i issue.time_scale = randd_field_hash['最初预计'].to_i
issue.start_date = randd_field_hash['预计开始'].to_time rescue nil issue.start_date = randd_field_hash['预计开始'].to_time rescue nil
issue.due_date = randd_field_hash['截止日期'].to_time rescue nil issue.due_date = randd_field_hash['截止日期'].to_time rescue nil
issue.project_id = 0 issue.project_id = 0
issue.pm_project_id = pm_project_id issue.pm_project_id = pm_project_id
issue.pm_issue_type = 2 issue.pm_issue_type = 2
issue.save! sprint_name = randd_field_hash['所属迭代'].split('(#')[0]
requirement_issue = Issue.find_by(project_issues_index: randd_field_hash['相关需求'].split('(#')[1].split(')')[0], pm_project_id: pm_project_id, pm_issue_type: 1) rescue nil sprint = get_sprint_data(sprint_name, args.pm_project_id, org)
if requirement_issue.present? issue.pm_sprint_id = sprint['id'] if sprint.present?
requirement_issue.pm_links.find_or_create_by(be_linkable_type: 'Issue', be_linkable_id: issue.id) issue.save!
requirement_issue = Issue.find_by(project_issues_index: randd_field_hash['相关需求'].split('(#')[1].split(')')[0], pm_project_id: pm_project_id, pm_issue_type: 1) rescue nil
if requirement_issue.present?
requirement_issue.pm_links.find_or_create_by(be_linkable_type: 'Issue', be_linkable_id: issue.id)
end
end end
else
puts '组织不存在'
end end
end end
# 执行示例 bundle exec rake "import_from_chandao:requirements[企业网站第二期.csv, 3]" # 执行示例 bundle exec rake "import_from_chandao:requirements[企业网站第二期.csv, 3]"
# RAILS_ENV=production bundle exec rake "import_from_chandao:requirements[企业网站第二期.csv, 3]" # RAILS_ENV=production bundle exec rake "import_from_chandao:requirements[企业网站第二期.csv, 3]"
task :requirements, [:name, :pm_project_id] => :environment do |t, args| task :requirements, [:name, :pm_project_id, :org_login] => :environment do |t, args|
def trans_status(str) org = Organization.find_by(login: args.org_login)
h={ if org.present?
"草稿" => 1, def trans_status(str)
"激活" => 1, h={
"已关闭" => 5 "草稿" => 1,
} "激活" => 1,
h[str] "已关闭" => 5
end }
name = args.name h[str]
pm_project_id = args.pm_project_id
CSV.foreach("#{Rails.root}/#{name}", headers: true) do | row |
randd_field_hash = row.to_hash
issue = Issue.new(issue_classify: "issue")
author = User.like(randd_field_hash['由谁创建']).take || User.where(admin: true).first
issue.author_id = author&.id
assigner = randd_field_hash['指派给'].present? ? User.like(randd_field_hash['指派给']).take : nil
if assigner.present?
issue.assigners << assigner
end end
issue.project_issues_index = randd_field_hash['编号'].to_i name = args.name
issue.status_id = trans_status(randd_field_hash['当前状态']) || IssueStatus.first.id pm_project_id = args.pm_project_id
issue.tracker_id = Tracker.first.id CSV.foreach("#{Rails.root}/#{name}", headers: true) do | row |
issue.priority_id = randd_field_hash['优先级'].to_i randd_field_hash = row.to_hash
issue.subject = randd_field_hash['需求名称'] issue = Issue.new(issue_classify: "issue")
issue.description = randd_field_hash['需求描述'] author = User.like(randd_field_hash['由谁创建']).take || User.where(admin: true).first
issue.created_on = randd_field_hash['创建日期'].to_time issue.author_id = author&.id
issue.updated_on = randd_field_hash['最后修改日期'].to_time rescue randd_field_hash['创建日期'].to_time assigner = randd_field_hash['指派给'].present? ? User.like(randd_field_hash['指派给']).take : nil
issue.time_scale = randd_field_hash['预计工时'].to_i if assigner.present?
issue.project_id = 0 issue.assigners << assigner
issue.pm_project_id = pm_project_id end
issue.pm_issue_type = 1 issue.project_issues_index = randd_field_hash['编号'].to_i
issue.save! issue.status_id = trans_status(randd_field_hash['当前状态']) || IssueStatus.first.id
issue.tracker_id = Tracker.first.id
issue.priority_id = randd_field_hash['优先级'].to_i
issue.subject = randd_field_hash['需求名称']
issue.description = randd_field_hash['需求描述']
issue.created_on = randd_field_hash['创建日期'].to_time
issue.updated_on = randd_field_hash['最后修改日期'].to_time rescue randd_field_hash['创建日期'].to_time
issue.time_scale = randd_field_hash['预计工时'].to_i
issue.project_id = 0
issue.pm_project_id = pm_project_id
issue.pm_issue_type = 1
issue.save!
end
else
puts '组织不存在'
end end
end end
end end