專案

對內(B2E)跨場館排班系統

逐一聯繫逾 100 名員工的排班,改成一次通知、線上填報

員工自行填可排時段,人資只處理例外;打卡、加班與異常回報接在同一條線上。

成果
一次通知、自主填報,取代逐一聯繫逾 100 名員工;意願蒐集估計省時 70% 以上
角色
從只有空資料的雛型接手:接上真實員工資料、GPS 打卡、LINE 身分對應與推播
時間
2026.02 上線
技術
React · TypeScript · Express · PostgreSQL · Drizzle ORM · LINE LIFF · LINE Messaging API

問題 紙本與 Excel 排班:逐人詢問可排時段,再手填

原本排班靠紙本與 Excel:要逐人詢問可排時段,再手動填表。人資得逐一私訊,才收得齊班表。

角色 從空資料的雛型接手,接到真實資料與打卡

從既有雛型接手,當時系統只有空資料。接上真實員工資料,做 LINE GPS 打卡;以資料庫對應 LINE 身分,並做 LINE 推播。

把打卡結果接到加班、異常回報與未打卡提醒,另新增 8 條對內唯讀匯出 API。上線後負責日常維運。

使用流程 員工從 LINE 填時段,人資集中給班

排班:

  • 員工從 LINE 進入並登入。
  • 線上填報可排時段與意願。
  • 人資集中給班;員工收到班表提醒,主管可查看跨場館班表。

到班打卡:

  • 從 LINE 打卡入口進入:打卡頁或 LINE 位置訊息。
  • 提供所在位置,進行 GPS 打卡。
  • 在排班系統的頁面查看打卡結果。

系統負責收集與彙整,排班決策由人資負責。

LINE 整合 登入、填報、GPS 打卡與推播接進 LINE

員工從 LINE 登入、填報可排時段;到班時用 LINE 打卡頁或位置訊息做 GPS 打卡;班表提醒與未打卡提醒以 LINE 推播送出。

效益 一次通知,取代逐一聯繫逾 100 名員工

以一次通知、員工自主填報,取代逐一聯繫逾 100 名員工。人資不必再逐一私訊收班表,只需處理例外;主管可直接查看跨場館班表。

意願蒐集這一段,依新舊流程比較,估計省時 70% 以上(流程比較的估算,非正式計時)。

技術決策 打卡距離只在伺服器端算一次

員工從不同入口打卡,距離判定放在哪裡?

LIFF 打卡頁與 LINE 位置訊息,都呼叫同一個打卡函式。LINE OA BOT 不算距離,只把位置訊息轉給排班系統。距離只在伺服器端算一次,前端只顯示結果。這個打卡函式有 15 個測試案例。

上線後 修正打卡距離誤判與薪資統計

  • 2026 年 8 月|修正打卡距離誤判。 距離曾算成 433 公尺,與地圖位置不符。逐一核對全場館座標,重寫打卡的距離判定,並補上失敗紀錄,判定失敗不再無聲消失。
  • 同月|修正薪資統計對不上班表。 時數改成可在後台設定,不再寫死。

規模 接手後完成 GPS 打卡、6 種推播與 8 條匯出 API

接手後完成:LINE GPS 打卡、LINE 推播 6 種、對內唯讀匯出 API 8 條;打卡函式有 15 個測試案例。

全系統(含雛型,依 GitHub 主線清點):148 個 API 路由、27 張資料表、24 個後端模組、28 個測試案例。

LINE 推播 6 種:守則待讀、明日班表、未打卡、下週班表、上週遲到報告、可排時段提醒。打卡相關資料表 7 張:打卡、補打卡、加班、異常回報、未打卡通知、時薪設定、外出。

原始碼:DAOS-Sport/Workforce-Scheduling。