掲題の通り。
昼休みにちょっと書いてみた。
環境
Azure VMインスタンスの PostgreSQL を使用。
$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)$ psql -V
psql (PostgreSQL) 9.2.23
コード
本当は Python で書きたかったが、現行モジュール構成では環境を弄らなければならなかった。
本番システムなのでそれは断念し、シェルスクリプト(bash)と標準コマンドのみで作成。
bash
#!/bin/bashYESTERDAY=`date--date'1 day ago'"+%Y%m%d"`MAIL_TEXT=/tmp/mail.txt
# SQL文を /tmp に作成cat<<EOL> /tmp/dakoku.sql
SELECT d.syaincd as 従業員番号, e.syainmei as 従業員名, d.torokudt as 打刻日時,
CASE dakokusyubetucd
WHEN '1' THEN '出勤'
WHEN '2' THEN '退勤'
ELSE '不明'
END as 種別
FROM dakoku_table d
LEFT JOIN employee_table e ON d.syaincd = e.syaincd
WHERE dakokuymd = '$YESTERDAY'
ORDER by d.torokudt, d.syaincd;
EOL
# メールヘッダ等を /tmp に作成cat<<EOL> $MAIL_TEXT
To: foo@example.co.jp
Cc: bar@example.co.jp
Subject: DAILY TIME RECORD ($YESTERDAY)
本メールはシステムから自動送信しています。
勤怠打刻ログをお知らせします。
EOL
# SQLの実行結果をメール本文に追加
su - postgres -c'psql KINTAI_DB < /tmp/dakoku.sql'>>$MAIL_TEXT# メールを送信
/sbin/sendmail -t< $MAIL_TEXT
送信されるメール
本メールはシステムから自動送信しています。
勤怠打刻ログをお知らせします。
従業員番号 | 従業員名 | 打刻日時 | 種別
------------+--------------+-------------------------+------
539258 | 山田 太郎 | 2020-07-17 07:47:05.314 | 出勤
265167 | 鈴木 花子 | 2020-07-17 07:52:18.736 | 出勤
329665 | 田中 一郎 | 2020-07-17 08:03:57.356 | 出勤
root のcrontab
に登録し、午前0時05分に自動実行。前日の勤怠打刻漏れを人事総務部がチェックできるようにした。
しょうもないコードだけど、誰かの参考になれば!