From d28599d3d05651e3f93e3fa3968f70f6358e2082 Mon Sep 17 00:00:00 2001 From: rulingcom Date: Wed, 24 Jun 2026 12:02:16 +0800 Subject: [PATCH] Add experience sync: VRW_EXPERIENCE, clear first_name on teacher sync --- lib/sync_nfu_personal_data/api/server.js | 12 +++++++ lib/tasks/sync_nfu_personal_data_tasks.rake | 35 +++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/lib/sync_nfu_personal_data/api/server.js b/lib/sync_nfu_personal_data/api/server.js index e7dd7bd..5d66e7f 100644 --- a/lib/sync_nfu_personal_data/api/server.js +++ b/lib/sync_nfu_personal_data/api/server.js @@ -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' }); diff --git a/lib/tasks/sync_nfu_personal_data_tasks.rake b/lib/tasks/sync_nfu_personal_data_tasks.rake index 51eac90..ed0b1a1 100644 --- a/lib/tasks/sync_nfu_personal_data_tasks.rake +++ b/lib/tasks/sync_nfu_personal_data_tasks.rake @@ -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