Add experience sync: VRW_EXPERIENCE, clear first_name on teacher sync

This commit is contained in:
rulingcom 2026-06-24 12:02:16 +08:00
parent 05f060abb4
commit d28599d3d0
2 changed files with 47 additions and 0 deletions

View File

@ -227,6 +227,18 @@ app.get('/api/techtrans/:id', async (req, res) => {
}
});
// 教師經歷
app.get('/api/experiences/:id', async (req, res) => {
try {
const teacherId = req.params.id;
const sql = `SELECT * FROM VRW_EXPERIENCE WHERE T_ID = '${teacherId}'`;
const result = await executeQuery(sql);
res.json(result);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// 健康檢查
app.get('/health', (req, res) => {
res.json({ status: 'ok' });

View File

@ -277,6 +277,18 @@ module NfuSyncPlugin
}
end
# 教師經歷
result["experience"] = query_api('experiences', member.sid).map do |row|
{
"ukey" => row[0],
"exp_unit" => row[2],
"exp_dept" => row[3],
"exp_gnam_name" => row[4],
"exp_stardate" => row[5],
"exp_enddate" => row[6]
}
end
# 教師基本資料
result["teacher"] = query_api('teachers', member.sid).map do |row|
{
@ -645,6 +657,27 @@ module NfuSyncPlugin
end
end
def sync_experiences(query_result, member)
puts "Experiences for user: #{member.email}"
query_result["experience"].to_a.each do |exp|
old_uid = Experience.where(:rss2_id => exp["ukey"]).first&.uid
experience = Experience.where(:rss2_id => exp["ukey"]).first
experience.delete if experience
experience = Experience.new
experience.rss2_id = exp["ukey"]
experience.uid = old_uid
experience.organizationt_title_translations = localize_data(exp["exp_unit"])
experience.department_translations = localize_data(exp["exp_dept"])
experience.job_title_translations = localize_data(exp["exp_gnam_name"])
experience.start_date = DateTime.parse(exp["exp_stardate"]).to_date if exp["exp_stardate"].present?
experience.end_date = DateTime.parse(exp["exp_enddate"]).to_date if exp["exp_enddate"].present?
experience.member_profile_id = member.id
puts "Experience #{experience.id} saved" if experience.save
end
end
def sync_teachers(query_result, member)
puts "Teachers for user: #{member.email}"
return if query_result["teacher"].to_a.empty?
@ -653,6 +686,7 @@ module NfuSyncPlugin
# 更新 MemberProfile 基本欄位
member.last_name_translations = { zh_tw: teacher["chinese_name"], en: teacher["english_name"] }
member.first_name_translations = { zh_tw: "", en: "" }
member.email = teacher["email"]
member.office_tel = teacher["phone"]
@ -793,6 +827,7 @@ namespace :sync_nfu_personal_plugins do
NfuSyncPlugin.sync_activities(query_result, member)
NfuSyncPlugin.sync_technology_transfers(query_result, member)
NfuSyncPlugin.sync_volunteer_services(query_result, member)
NfuSyncPlugin.sync_experiences(query_result, member)
NfuSyncPlugin.sync_teachers(query_result, member)
NfuSyncPlugin.sync_dissertations(query_result, member)
end