普遍小企業傳統打卡系統需要在公司裡面放置打卡機器,而且需要使用相對應的紙本卡片,才能夠完成打卡,也可能面臨突如其來的故障,致使人資管理上不容易。透過本專案的簡易打卡請假系統,人資除了方便管理差勤外,打卡資料都會直接被儲存在MariaDB資料庫內,可以保證資料的完整性和安全性。
環境需求
1.Ubuntu Server 22.04.4
2.Dialog 1.3-20210324
功能
1.員工透過簡易系統打卡上下班、請假(事病假及補休)為主
2.相關數據導入MariaDB(若無資料表則自動建立),透過資料表可以查看
環境設定安裝
- Dialog 安裝
- 下載/安裝Dialog
sudo apt install dialog
- 下載/安裝Dialog
- MariaDB 安裝/創建使用者帳號
- 1.下載/安裝MariaDB
sudo apt install mariadb-server - 2.進入MariaDB,建立一個管理權限的使用者帳號,給shellscript使用
- GRANT ALL
- ON .
- TO ‘admin’@’localhost’
- IDENTIFIED BY ‘123456’
- WITH GRANT OPTION;
- 1.下載/安裝MariaDB
- LOGSTASH 離線安裝
- 1.下載/安裝LOGSTASH
sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-8.5.3-amd64.deb
*如沒有安裝則使用:sudo dpkg -i logstash-8.5.3-amd64.deb - 2.重啟
sudo systemctl restart elasticsearch
- 1.下載/安裝LOGSTASH
建立SH檔
- 建立一個名為HR的sh檔:
- vi HR.sh
- 內容(僅供參考):
#!/bin/bash
#引入Dialog庫
source /usr/share/dialog/functions
#設置連接mysql參數
DB_USER="環境變數"
DB_PASSWORD="環境變數"
DB_HOST="localhost"
DB_NAME="HR"
#如果資料表不存在則建立
function create_tables_if_not_exists() {
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;"
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "CREATE TABLE IF NOT EXISTS work (id INT AUTO_INCREMENT PRIMARY KEY, employee_id INT, employee_name VARCHAR(10), punch_time DATETIME, punch_out DATETIME);"
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "CREATE TABLE IF NOT EXISTS work3 (id INT AUTO_INCREMENT PRIMARY KEY, employee_id INT, employee_name VARCHAR(10), leave_type VARCHAR(20), leave_hours INT, leave_time DATETIME);"
}
#員工打上班卡
function work_punch_clock() {
datetime=$(date +"%Y-%m-%d %H:%M:%S")
dialog --title "上班打卡" --inputbox "請輸入員工姓名:" 8 40 2>/tmp/employee_name
employee_name=$(cat /tmp/employee_name)
dialog --title "上班打卡" --inputbox "請輸入員工編號:" 8 40 2>/tmp/employee_id
employee_id=$(cat /tmp/employee_id)
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "INSERT INTO work (employee_id, employee_name, punch_time) VALUES ('$employee_id', '$employee_name', '$datetime');"
dialog --title "打卡成功" --msgbox "員工 $employee_name ($employee_id) 已成功上班打卡,打卡時間為:$datetime" 10 60
}
#員工打下班卡
function off_punch_clock() {
datetime=$(date +"%Y-%m-%d %H:%M:%S")
dialog --title "下班打卡" --inputbox "請輸入員工姓名:" 8 40 2>/tmp/employee_name
employee_name=$(cat /tmp/employee_name)
dialog --title "下班打卡" --inputbox "請輸入員工編號:" 8 40 2>/tmp/employee_id
employee_id=$(cat /tmp/employee_id)
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "INSERT INTO work (employee_id, employee_name, punch_out) VALUES ('$employee_id', '$employee_name', '$datetime');"
dialog --title "打卡成功" --msgbox "員工 $employee_name ($employee_id) 已成功下班打卡,打卡時間為:$datetime" 10 60
}
#員工請假
function leave_request() {
datetime=$(date +"%Y-%m-%d %H:%M:%S")
dialog --title "請假" --inputbox "請輸入員工姓名:" 8 40 2>/tmp/employee_name
employee_name=$(cat /tmp/employee_name)
dialog --title "請假" --inputbox "請輸入員工編號:" 8 40 2>/tmp/employee_id
employee_id=$(cat /tmp/employee_id)
dialog --title "請假類型" --menu "請選擇請假假別:" 15 40 3 \
1 "事假" \
2 "病假" \
3 "補休" 2> /tmp/leave_type
leave_type=$(cat /tmp/leave_type)
case $leave_type in
1)
#事假
leave_type="事假"
;;
2)
#病假
leave_type="病假"
;;
3)
#補休
leave_type="補休"
;;
esac
#顯示選項選擇請假時數
dialog --title "請假時數" --menu "請選擇請假時數(可輸入數字鍵):" 15 40 8 \
1 "1 小時" \
2 "2 小時" \
3 "3 小時" \
4 "4 小時" \
5 "5 小時" \
6 "6 小時" \
7 "7 小時" \
8 "8 小時" 2> /tmp/leave_hours
leave_hours=$(cat /tmp/leave_hours)
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST $DB_NAME -e "INSERT INTO work3 (employee_id, employee_name, leave_type, leave_hours, leave_time) VALUES ('$employee_id', '$employee_name', '$leave_type', '$leave_hours', '$datetime');"
dialog --title "請假成功" --msgbox "員工 $employee_name ($employee_id) 已成功完成請假,假別類型為:$leave_type,請假時數為:$leave_hours 小時,申請時間為:$datetime" 10 80
}
#主選單
while true; do
create_tables_if_not_exists
dialog --title "員工差勤管理系統" --menu "請選擇下列選項:" 15 40 4 \
1 "上班打卡" \
2 "下班打卡" \
3 "請假" \
4 "退出" 2> /tmp/choice
choice=$(cat /tmp/choice)
case $choice in
1)
#上班打卡
work_punch_clock
;;
2)
#下班打卡
off_punch_clock
;;
3)
#請假
leave_request
;;
4)
#退出
clear
exit 0
;;
esac
done
Dialog畫面呈現(上班打卡):




Dialog畫面呈現(下班打卡):




Dialog畫面呈現(請假-以事假為例):






MariaDB資料寫入畫面(顯示全部員工上下班打卡及請假情況):


MariaDB資料寫入畫面(顯示特定員工打卡及請假情況):

