對內(B2E)跨場館排班系統
逐一聯繫逾 100 名員工的排班,改成一次通知、線上填報
員工自行填可排時段,人資只處理例外;打卡、加班與異常回報接在同一條線上。
原始碼 DAOS-Sport/Workforce-Scheduling
- 成果
- 一次通知、自主填報,取代逐一聯繫逾 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 張:打卡、補打卡、加班、異常回報、未打卡通知、時薪設定、外出。