104 lines
3.3 KiB
Ruby
104 lines
3.3 KiB
Ruby
# == Schema Information
|
||
#
|
||
# Table name: glcc_medium_term_examine_material
|
||
#
|
||
# id :integer not null, primary key
|
||
# student_reg_id :integer not null
|
||
# task_id :integer not null
|
||
# defence_video_url :string(1000) not null
|
||
# code_or_pr_url :string(1000)
|
||
# PPT_attachment_id :integer not null
|
||
# term :integer
|
||
# created_on :datetime
|
||
# updated_on :datetime
|
||
# is_delete :boolean default("0"), not null
|
||
# round :integer default("1"), not null
|
||
#
|
||
|
||
class GlccMediumTermExamineMaterial < ActiveRecord::Base
|
||
self.table_name = "glcc_medium_term_examine_material"
|
||
belongs_to :glcc_student, :class_name => :GlccRegistrationStudent, :foreign_key => "student_reg_id"
|
||
belongs_to :task, :class_name => :GlccRegistrationTask, :foreign_key => "task_id"
|
||
|
||
def check_pr_url
|
||
state = []
|
||
# code_or_pr_url = "https://www.gitlink.org.cn/Gitlink/forgeplus/pulls/337"
|
||
url_array = code_or_pr_url.split("/")
|
||
gitlink_index = url_array.index("www.gitlink.org.cn") || url_array.index("gitlink.org.cn") || url_array.index("testforgeplus.trustie.net")
|
||
pull_index = url_array.index("pulls")
|
||
|
||
#发送没有在gitlink上提交PR的邮件
|
||
unless gitlink_index.present?
|
||
state << 1
|
||
end
|
||
|
||
# 输入的地址有问题邮件内容
|
||
unless pull_index == 5
|
||
state << 2
|
||
end
|
||
user = Owner.find_by(login: url_array[3])
|
||
project = Project.find_by(identifier: url_array[4], user_id:user.try(:id))
|
||
pr = PullRequest.where(project:project, gitea_number:url_array[6])
|
||
|
||
unless pr.present?
|
||
state << 3
|
||
end
|
||
if white_list #特殊处理 白名单考核不处理
|
||
state = []
|
||
end
|
||
state
|
||
end
|
||
|
||
|
||
def white_list
|
||
# 全局设置白名单 key
|
||
key = "glcc_white_task_#{self.created_on.year}"
|
||
white_task = EduSetting.find_by_name(key)
|
||
if white_task
|
||
task_ids = white_task.value.split(",")
|
||
task_ids.map(&:to_i).include?(self.task_id)
|
||
else
|
||
false
|
||
end
|
||
end
|
||
|
||
def send_mail
|
||
gcs = glcc_student
|
||
mail = gcs.mail
|
||
return if mail.nil? || code_or_pr_url.nil?
|
||
|
||
state = check_pr_url
|
||
return unless state.present?
|
||
title = "#{self.created_on.year}年GitLink确实开源GLCC开源夏令营#{term == 1 ? "中期考核" : "结项考核"}提醒"
|
||
content = gennerate_content(state)
|
||
UserMailer.glcc_pr_check_email(mail,title, gcs.student_name, content).deliver_now
|
||
end
|
||
|
||
def state_to_html
|
||
gcs = glcc_student
|
||
mail = gcs.mail
|
||
return "数据异常,PR链接为空" if mail.nil? || code_or_pr_url.nil?
|
||
state = check_pr_url
|
||
gennerate_content(state)
|
||
end
|
||
|
||
def gennerate_content(state)
|
||
content = ""
|
||
state.map{|e|
|
||
content = content + number_to_content(e)
|
||
}
|
||
content
|
||
end
|
||
|
||
def number_to_content(num)
|
||
case num
|
||
when 1
|
||
"<p> PR链接为非GitLink平台链接 </p>"
|
||
when 2
|
||
"<p> PR链接为GitLink平台链接, 但非PR链接 </p>"
|
||
when 3
|
||
"<p> PR链接中的PR不存在 </p>"
|
||
end
|
||
end
|
||
end
|