請假系統程式說明文件 === ## 文件大綱 [ToC] ## 系統使用案例圖 ![](https://i.imgur.com/5OTCFCp.png) ## 系統介面/主要功能介紹 ### 管理者 --- ![](https://i.imgur.com/2Qh8Abm.png) **一、管理員工名單** > 可以查看、修改所有員工資料,並新增一名員工紀錄。 **二、請假單維護** **1. 新增請假單** >可以新增任何員工的請假單。 **2. 刪除請假單** >可以刪除任何員工的請假單。 **三、特休維護** **1. 修改特休天數** >可以修改所有員工的特休天數。 **四、補休/加班費維護** **1. 新增補休/加班費申請單** >可以將任何員工的加班時數換成補休時數或加班費。 **2. 刪除補休/加班費申請單** >可以刪除任何員工的補休/加班費申請單。 **3. 修改補休天數** >可以修改所有員工的補休天數。 **五、加班單維護** **1. 新增加班單** >可以新增任何員工的加班單。 **2. 刪除加班單** >可以修改任何員工的加班單。 ### 使用者 --- ![](https://i.imgur.com/DTA87ll.png) #### [PM] **一、查詢請假、特休、補休明細** **1. 查詢請假單明細** >可以查看個人當月份的請假單。 **2. 查詢特休天數** >可以查看個人的特休天數狀況。 **3. 查詢補休天數** >可以查看個人的補休天數狀況。 **二、請假申請** **1. 請假申請** >可以新增個人的請假單。 **2. 刪除請假申請** >可以刪除個人的請假單。 **三、補休或加班費申請** >可以將個人的加班時數換成補休時數或加班費。 **四、加班申請** >可以新增任何員工的加班單。 #### [一般員工] **一、查詢請假、特休、補休明細** **1. 查詢請假單明細** >可以查看個人當月份的請假單。 **2. 查詢特休天數** >可以查看個人的特休天數狀況。 **3. 查詢補休天數** >可以查看個人的補休天數狀況。 **二、請假申請** **1. 請假申請** >可以新增個人的請假單。 **2. 刪除請假申請** >可以刪除個人的請假單。 **三、補休或加班費申請** >可以將個人的加班時數換成補休時數或加班費。 ## 資料庫架構 檔案連結: https://docs.google.com/spreadsheets/d/17G21VIgFAJJNkyV2RS5VftyY4GHfmSWq/edit#gid=269463279 **leave_sheet 請假單** | leave_record_number | application_time | leave_applicant | start_date | start_hour | start_minute | end_date | end_hour | end_minute | leave_type | reason | department | PM_and_deputy | duration | confirm | | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | | 請假單編號 | 時間戳記 | 請假申請人 | 請假開始日期 | 時 | 分 | 請假結束日期 | 時 | 分 | 假別 | 請假事由 | 部門 | PM及代理人 | 請假時數 | 主管簽核 | **overtime_sheet 加班單** | overtime_record_number | application_time | overtime_staff | department | project | PM | description | start_date | start_hour | start_minute | end_date | end_hour | end_minute | approved_overtime_hours | approved_compensatory_leave_hours | approved_overtime_pay |applied | | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | | 加班單編號 | 時間戳記 | 加班人員 | 部門 | 專案名稱 | (主管)、PM | 工作說明 | 加班開始日期 | 時 | 分 | 加班結束日期 | 時 | 分 | 核定加班時數 | 核定補休時數 | 核定加班費 | 已申請補休或加班費 | ## 系統程式碼說明 程式檔案路徑:`/usr/local/apache-tomcat-6.0.45/webapps/APCWKTPostgreSQL/LVS/LVS_jsp` ### 管理者 --- **一、管理員工名單** (檔名: `a_employee_list.jsp`) 從資料庫的`employee_sheet`表選取所有員工資料,顯示到頁面中。 按下送出後,取得選取到的員工為哪一項,並判斷各欄位值是否為空。 若選新增一名員工,則將欄位填入值加到`employee_sheet`表。 再計算該名員工的特休天數,將資料加到`a_day`表。 若選某名員工項,則修改`employee_sheet`、`a_day`表中該名員工的資料。 **二、請假單維護** **1. 新增請假單** (檔名: `a_add_leave_record.jsp.jsp`) 取得管理者輸入之請假單內容。 選取`work_day`、`national_holiday`檢查請假日期時間是否為上班時間。 並選取`employee_sheet`檢查PM及代理人之email是否填寫正確。 新增一筆請假單明細至`leave_sheet`。 在`leave_summary`中加上請假天數。 若請補休假,更新`c_hour`。若請特休假,更新`a_day`。 並寄信件通知申請人、主管、HR、PM及代理人,要求主管審核。 **2. 刪除請假單** (檔名: `a_delete_leave_record.jsp`) 選取所有請假紀錄,並顯示到頁面中。 ```= "SELECT * FROM leave_sheet" ``` 按下按鈕後,取得選擇的請假單明細為哪一項。 ```= var leave_radio = $('input[name=leave_radio]:checked').val(); ``` 刪除選到的那筆請假記錄。 ```= "delete from leave_sheet where leave_record_number='"+delete_leave_record_number+"'" ``` 辨識請假類型,修改請假天數。 ```= if(leave_type.equals("特休")){ modify="annual_leave"; }else if(leave_type.equals("補休"))... ``` ```= "update leave_summary set "+modify+"="+modify+"-"+duration_day+" where name='"+leave_applicant+"'" ``` 如果是刪除申請特休假,更新`a_day`表: ```= "update a_day set used_annual_leave_days = used_annual_leave_days - "+duration_day+" where name='"+leave_applicant+"'" ``` 如果是刪除申請補休假,更新`c_hour`表: ```= //選取c_hour資料 "SELECT * FROM c_hour WHERE name='"+leave_applicant+"' ORDER BY compensatory_leave_expiry_date DESC" //更新尚未使用補休時數 "update c_hour set unused_compensatory_leave_hours ="+c_hour_array[j][2] +",used_compensatory_leave_hours = 0 where apply_number='"+c_hour_array[j][0]+"'" "update c_hour set unused_compensatory_leave_hours ="+temp +", used_compensatory_leave_hours = used_compensatory_leave_hours - "+duration_hour +"where apply_number='"+c_hour_array[j][0]+"'" ``` 並寄信件通知申請人、主管、HR、PM及代理人。 **三、特休維護** **1. 修改特休天數** (檔名: `a_modify_annual_leave.jsp`) 選取特休天數資料,顯示到頁面中。 ```= SELECT * FROM a_day ``` 按下按鈕後,取得選擇的員工明細為哪一項。 ```= var annual_radio = $('input[name=annual_record]:checked').val(); ``` 修改被選取員工的特休天數。 ```= "update a_day set annual_leave_days='" + annual_leave_days + "',used_annual_leave_days='" + used_annual_leave_days + "',unused_annual_leave_days='" + unused_annual_leave_days + "' where name='" + modify_name + "'" ``` **四、補休/加班費維護** **1. 新增補休/加班費申請單** (檔名: `a_add_apply.jsp`) 選取所有加班紀錄。 ```= "SELECT * FROM overtime_sheet" ``` 按下按鈕後,取得選擇的加班紀錄。 ```= var o_radio = $('input[name=overtime_record]:checked').val(); ``` 若實際結束時間欄位不為空,則重新計算加班時數。 ```= function getDays(date1 , date2, hour1, hour2, minute1, minute2){...} ``` 查詢加班時數對應的補休時數和加班費。 ```= "SELECT * FROM c_o_reference WHERE overtime_hours="+int_approved_overtime_hours ``` 判斷加班日期為平日還假日,獲取對應的加班費/補休時數。 ```= if(day1 == 6 || day1 == 0){...} ``` 新增補休/加班費申請單到`c_o_sheet`。 並寄信件通知申請人、主管、HR、PM及代理人,要求主管審核。 **2. 刪除補休/加班費申請單** (檔名: `a_delete_apply.jsp`) 選取`c_o_sheet`中所有補休/加班費申請單明細。 取得管理者選擇要刪除的一筆補休/加班費申請單明細。 刪除`c_o_sheet`中的一筆補休/加班費申請單明細。 修改`overtime_sheet`中`applied`欄位為no,代表此筆加班未申請補休/加班費。 並寄信件通知申請人、主管、HR、PM。 **3. 修改補休天數** (檔名: `a_modify_compensatory_leave.jsp`) 選取`c_hour`中所有補休時數明細。 取得管理者選擇並填入的補休時數。 修改`c_hour`中此筆補休時數明細。 **五、加班單維護** **1. 新增加班單** (檔名: `a_add_overtime_record.jsp`) 取得管理者輸入之加班單內容。 選取`work_day`、`national_holiday`檢查請假日期時間是否為上班時間。 並選取`employee_sheet`檢查PM及代理人之email是否填寫正確。 新增一筆加班單明細至`overtime_sheet`。 並寄信件通知申請人、主管、HR、PM。 **2. 刪除加班單** (檔名: `a_delete_overtime_record.jsp`) 選取`overtime_sheet`中所有加班單明細。 取得管理者選擇要刪除的一筆加班單明細。 刪除`overtime_sheet`中的一筆加班單明細。 並寄信件通知申請人、主管、HR、PM。 ### 使用者 --- #### [PM] 辨認身分:取得登入者帳號名字。 **一、查詢請假、特休、補休明細** **1. 查詢請假單明細** (檔名: `p_leave_record.jsp`) 查詢`leave_sheet`中使用者的請假單明細。 篩選顯示出當月的請假記錄。 **2. 查詢特休天數** (檔名: `p_annual_leave.jsp`) 查詢`a_day`中使用者的特休天數資料,顯示詳細資訊。 **3. 查詢補休天數** (檔名: `p_compensatory_leave.jsp`) 查詢`c_hour`中使用者的補休天數資料,顯示詳細資訊。 **二、請假申請** **1. 請假申請** (檔名: `p_add_leave_record.jsp`) 取得使用者輸入之請假單內容。 選取`work_day`、`national_holiday`檢查請假日期時間是否為上班時間。 並選取`employee_sheet`檢查PM及代理人之email是否填寫正確。 新增一筆請假單明細至`leave_sheet`。 在`leave_summary`中加上請假天數。 若請補休假,更新`c_hour`。若請特休假,更新`a_day`。 並寄信件通知申請人、主管、HR、PM及代理人,要求主管審核。 **2. 刪除請假申請** (檔名: `p_delete_leave_record.jsp`) 選取使用者的請假紀錄,並顯示到頁面中。 ```= "SELECT * FROM leave_sheet" ``` 按下按鈕後,取得選擇的請假單明細為哪一項。 ```= var leave_radio = $('input[name=leave_radio]:checked').val(); ``` 刪除選到的那筆請假記錄。 ```= "delete from leave_sheet where leave_record_number='"+delete_leave_record_number+"'" ``` 辨識請假類型,修改請假天數。 ```= if(leave_type.equals("特休")){ modify="annual_leave"; }else if(leave_type.equals("補休"))... ``` ```= "update leave_summary set "+modify+"="+modify+"-"+duration_day+" where name='"+leave_applicant+"'" ``` 如果是刪除申請特休假,更新`a_day`表: ```= "update a_day set used_annual_leave_days = used_annual_leave_days - "+duration_day+" where name='"+leave_applicant+"'" ``` 如果是刪除申請補休假,更新`c_hour`表: ```= //選取c_hour資料 "SELECT * FROM c_hour WHERE name='"+leave_applicant+"' ORDER BY compensatory_leave_expiry_date DESC" //更新尚未使用補休時數 "update c_hour set unused_compensatory_leave_hours ="+c_hour_array[j][2] +",used_compensatory_leave_hours = 0 where apply_number='"+c_hour_array[j][0]+"'" "update c_hour set unused_compensatory_leave_hours ="+temp +", used_compensatory_leave_hours = used_compensatory_leave_hours - "+duration_hour +"where apply_number='"+c_hour_array[j][0]+"'" ``` 並寄信件通知申請人、主管、HR、PM及代理人,要求主管審核。 **三、補休或加班費申請** (檔名: `p_add_apply.jsp`) 選取所有加班紀錄。 ```= "SELECT * FROM overtime_sheet" ``` 按下按鈕後,取得選擇的加班紀錄。 ```= var o_radio = $('input[name=overtime_record]:checked').val(); ``` 若實際結束時間欄位不為空,則重新計算加班時數。 ```= function getDays(date1 , date2, hour1, hour2, minute1, minute2){...} ``` 查詢加班時數對應的補休時數和加班費。 ```= "SELECT * FROM c_o_reference WHERE overtime_hours="+int_approved_overtime_hours ``` 判斷加班日期為平日還假日,獲取對應的加班費/補休時數。 ```= if(day1 == 6 || day1 == 0){...} ``` 新增補休/加班費申請單到`c_o_sheet`。 並寄信件通知申請人、主管、HR、PM及代理人,要求主管審核。 **四、加班申請** (檔名: `p_add_overtime_record.jsp`) 取得使用者輸入之加班單內容。 選取`work_day`、`national_holiday`檢查請假日期時間是否為上班時間。 並選取`employee_sheet`檢查PM及代理人之email是否填寫正確。 新增一筆加班單明細至`overtime_sheet`。 並寄信件通知申請人、主管、HR、PM。 #### [一般員工] **一、查詢請假、特休、補休明細** **1. 查詢請假單明細** (檔名: `u_leave_record.jsp`) 同PM`p_leave_record.jsp` **2. 查詢特休天數** (檔名: `u_annual_leave.jsp`) 同PM`p_annual_leave.jsp` **3. 查詢補休天數** (檔名: `u_compensatory_leave.jsp`) 同PM`p_compensatory_leave.jsp` **二、請假申請** **1. 請假申請** (檔名: `u_add_leave_record.jsp`) 同PM`p_add_leave_record.jsp` **2. 刪除請假申請** (檔名: `u_delete_leave_record.jsp`) 同PM`p_delete_leave_record.jsp` **三、補休或加班費申請** (檔名: `u_add_apply.jsp`) 同PM`p_add_apply.jsp` ## 定時自動執行程式(批次) linux系統的設定檔 檔案路徑:`/usr/bin/crontab` 修改檔案後重啟指令:`systemctl restart crond` 查看檔案內容指令:`cat /etc/crontab` 檢查是否有正確執行:`tail -f /var/log/cron` http://linux.vbird.org/linux_basic/0430cron.php#cron --- 程式檔案路徑:`/usr/java/jdk1.8.0_65/bin` **1. 年資滿一年自動修改** (檔名:`timeupdateaday.sh`,執行時間:每天) 查詢`a_day`,並判斷`initial_date`距離現在時間是否滿一年。 若滿一年,則查詢`a_s_reference`對應的特休天數。 再更新`a_day`上的資料。 **2. 補休到期後自動刪除** (檔名:`timedeletechour.sh`,執行時間:每天) 查詢`c_hour`,判斷補休到期日是否在今日之前。 若到期,則刪除該筆資料。 ### 產生excel檔案 外部jar檔案: `poi-4.1.0.jar` `poi-ooxml-4.1.0.jar` `poi-ooxml-schemas-4.1.0.jar` `postgresql-42.2.6.jar` **3. 產生請假申請單excel檔案,寄給cindy/chris** (檔名:`timelsexcel.sh`,執行時間:每月30號) 查詢`leave_summary`,轉換成excel檔案。 再將`leave_summary.xls`寄給cindy。 **4. 產生補休與加班費申請記錄excel檔案,寄給cindy/chris** (檔名:`timecoexcel.sh`,執行時間:每月30號/每週一) 查詢`c_o_sheet`,轉換成excel檔案。 再將`C_O_sheet.xls`寄給cindy。 ### 寄信通知 **5. 寄信通知個人補休、特休天數** (檔名:`timeac.sh`,執行時間:每月1號、10號) 查詢`c_hour`、`a_day`。 寄信給所有員工詳細資料。 **6. 寄信通知個人未申請之加班** (檔名:`timeos.sh`,執行時間:每週一) 查詢`overtime_sheet`,且`appplied`欄位為no的資料。 寄信給所有員工詳細資料。 ## 補充 :::info 有任何問題請聯絡Sunny或Grace! ::: ###### tags: `請假系統` `程式說明文件`