##概要
今働いている会社では勤怠管理システムに自社開発製のrailsアプリケーションを使っています。
出入り口にfelicaにて打刻可能なPC端末を置いているので社員はそれにカードを出退勤の時間にピッとやります。
そこで取得した出退勤データを定期的に勤怠管理システムへ投げてるわけですが、打刻可能なPC端末が壊れました( ´ ▽ ` )
一応ブラウザからなら勤怠管理システムから打刻できますが、さすがにめんどくさいし、不満がめちゃ出たので何かしら対策が必要ということで、別の方法を提案。
###ローカルネットワークのMacアドレス検知する。
社内にある何かしらの端末で下記で作成したシェルをバッチで実行し、同一ローカルネットワークのmacアドレスと最初の接続時刻と最終接続時刻をCSVに書き込んでいきます。
- attendance_list$DATE.csv ・・・ 出力結果を保存するCSV
- member_list.csv ・・・ メンバーID,name,マックアドレスが入ったCSV
id,name,mac_address
0,Aさん,00:cc:47:aa:7f:ff
1,Bさん,2c:bb:a1:cc:41:aa
2,Cさん,38:bb:2c:cc:3c:aa
3,Dさん,00:bb:fe:cc:20:aa
4,Eさん,08:e6:89:cc:de:aa
ここではmember_listに記載してあるMacアドレスだけを読み取ってますが、member_list作らずとりあえず全て読み取って、サーバ側で名寄せした方がいいと思います。
日の区切りに関しては会社ごとに違うと思いますので、考慮してCSVファイルを分けて作ると良いと思います。
#!/bin/sh
echo "START check_mac_address connecting wi-fi"
cd /app/dir
TIME=`date "+%H%M"`
DATE=`date "+%Y%m%d"`
EXPORT_CSV="./attendance_list$DATE.csv"
MEMBER_LIST_CSV='./member_list.csv'
ADDRESS_SCANS=`echo 'PASSWORD' | sudo -S /usr/local/bin/arp-scan -l --interface en0`
if [ -f ./$EXPORT_CSV ] ;then
echo 'There is a test file.'
else
touch $EXPORT_CSV
fi
RECORD_SCANS=`cat $EXPORT_CSV`
while read row; do
USER_ID=`echo ${row} | cut -d , -f 1`
USER_NAME=`echo ${row} | cut -d , -f 2`
MAC_ADDRESS=`echo ${row} | cut -d , -f 3`
if echo $ADDRESS_SCANS | grep $MAC_ADDRESS >/dev/null ; then
if ! echo $RECORD_SCANS | grep $MAC_ADDRESS >/dev/null ; then ##初めて認識した時刻
echo "出勤:$MAC_ADDRESS:$TIME:$USER_ID:$USER_NAME" >> $EXPORT_CSV
echo "退勤:$MAC_ADDRESS:$TIME:$USER_ID:$USER_NAME" >> $EXPORT_CSV
elif echo $RECORD_SCANS | grep "退勤:$MAC_ADDRESS" >/dev/null ; then ##二回目以降の時刻:随時上書きしていく
sed -i -e "s/.*退勤:$MAC_ADDRESS.*/退勤:$MAC_ADDRESS:$TIME:$USER_ID:$USER_NAME/" $EXPORT_CSV
fi
fi
done < $MEMBER_LIST_CSV
echo "END check_mac_address connecting wi-fi"
###Macアドレスと社員を紐づける。
・勤怠サーバのメンバーテーブルにmacアドレスのカラムを追加して、管理者のみその項目を編集可能にする。
・上記のattendance_list.csvを勤怠サーバが取得して、社員とmacアドレスの紐付けを行い、勤怠時間を取得します。
###打刻された時刻を通知する。
・勤怠システムにアクセスすれば誰でも閲覧できるが、打刻時刻を通知して欲しいという要望があるならばchat系のAPIを使って通知したり、メールを送信してもよいでしょう。今回は要望なかったのでやりませんでした。
###直行や直帰や休憩の取り扱い
直行直帰の手動申請機能が勤怠サーバある場合、多くは問題ないでしょう。
手動申請によって上書きできない仕様なのであれば注意が必要ですね。
休憩に関しては最終時刻を取得してるので関係なし。
##まとめ
これのメリットは
打刻の手間がなくなり、いつまでも無駄話して会社にいるような居残りが減ること。
結構簡単でしたので、皆さんも上長へ提案してみてくださいね。