こんにちは、アプリケーションエンジニアの難波です。
Braveridgeでは2019年4月に糸島工場IoT推進委員会を立ち上げ、スマートファクトリー化を進めています。
第6弾としてお弁当注文をシステム化しました。
- お弁当屋さんの受注処理はシステム化していません
システム化に向けて
糸島工場では毎朝、その日の従業員のお弁当の注文を担当社員が集約して、お弁当屋さんへ発注しています。
この注文処理や会計処理は全て手作業なので「担当社員の負担が大きい」と相談されたのがシステム化のキッカケでした。
まずは現状をヒアリングして問題点を明らかにしていきます。
注文フロー
- 従業員(社員やパートの方)
出社したら注文用紙にお弁当の種類と普通・大盛りを記入して、現金を封筒に入れる - お弁当担当社員
お弁当屋さんに電話で注文する
問題点
- 注文用紙に記入する時間がバラバラなので、お弁当屋さんへの電話注文を1日に複数回することがある
- お弁当屋さんへの電話が混んでいる時間帯がある
- 現金支払いだと支払い忘れやお釣りの間違いが発生する
解決方法
注文を改善
お弁当屋さんへの電話注文をなんとかしたいところですが、ここに手を加えることはなかなか難しいです。
そこで、従業員からの注文を前日までにしてもらい、お弁当屋さんへの電話を当日の朝一回のみにする事で改善を図ります。
まず従業員の注文のシステム化ですが、システム側で注文を受け付けるにはユーザーを識別する必要があります。
そのため、以前導入した勤怠システムのマイページにお弁当注文機能を追加することにしました。
そして当日の朝、注文をまとめたメールを担当社員に送ります。
支払いを改善
各従業員の支払いをキャッシュレス決済としてPayPayを導入することで、現金を扱わずに済むようにしました。
お弁当屋さんへの支払いは、月末締めの一括支払いが可能なので、お弁当受け取り時に支払いをしていたのを銀行振り込みに切り替えました。
これで、当日に担当社員の方が行っていた処理は、お弁当屋さんへの電話注文だけになります。
※システム化しない事
- 糸島工場からお弁当屋さんへの注文は電話のまま
- お弁当屋さんへの支払いは現金のまま(銀行振込)
システム化
システム概要
発覚した問題点
ここで問題が一つ発覚しました
PayPayのQRコード支払いだと「誰がいつ支払いしたか」がシステム上記録できない、という事がわかりました。
誰が支払ったか確認する為に担当社員が立ち会う事になれば、以前よりも負担が増え本末転倒です。
そこで、PayPay for Developers でオンライン決済を実装する事で、システム側で「誰がいつ支払いしたか」を記録できるようにしました。
これで注文から決済まで従業員のスマホのみで完結できました。
以下にPayPayアプリコールの実装コード(Kotlin)を記載します。
val price = 400 // お弁当の支払い金額
val qrCode = QRCode().apply {
amount = MoneyAmount().amount(price).currency(MoneyAmount.CurrencyEnum.JPY)
merchantPaymentId = "own_order_id" // webhookで通知される決済ID
codeType = "ORDER_QR"
orderDescription = "お弁当代"
redirectUrl = "https://liff.line.me/liff_id"
redirectType = QRCode.RedirectTypeEnum.APP_DEEP_LINK}
val apiClient = Configuration().defaultApiClient.apply {
isProductionMode = true
setApiKey("YOUR_API_KEY")
setApiSecretKey("YOUR_API_SECRET")
assumeMerchant = "YOUR_MERCHANT_KEY"
}
val response = PaymentApi(apiClient).createQRCode(qrCode)
if (response.resultInfo.code != "SUCCESS") {
throw RuntimeException()
}
// response.data.url アプリコール用リダイレクトURL
アプリコールはPayPayアプリを呼び出して決済を行う方法です。
決済が完了すると、予め指定したwebhookURLに決済完了情報が通知されます。
決済完了情報にはこちら側で指定した決済IDが含まれるので、DBで決済IDと従業員IDを紐付けておけば「誰がいつ支払いしたか」判別できます。
今後の課題
PayPayでの支払いは注文時ではなく、お弁当を受け取る日から支払いできるようにしています。
これは、当日お弁当屋さんに注文できなかったり、注文したお弁当が届かないなど、不測の事態に対応する為です。
ですが、この方法だとうっかりミスで支払いを忘れてしまう事が考えられます。
そこで、前日までの未払い情報を担当社員に通知するようにしました。
本当は 「終業時間に未払いの人に対して通知する」のが良いかもしれません。ですが「払い忘れ」はそんなに頻繁には起きないと思うので、ひとまず担当社員への通知のみにしています。
発生頻度のわからない例外処理を丁寧に扱う必要はないと思っているので。。。
運用してみて、実装する必要があるか判断したいと思います。
まとめ
これまでの工場IoT化と比較すると、システム開発以外にもいくつかハードルがありました。
- お弁当屋さんの処理はシステム化できない
- PayPayに社内販売用店舗として審査してもらう為の説明が結構大変だった
PayPay審査 : PayPay導入予定のWebサイトのURLを教えてください
難波 : LINE bot -> LIFF で注文画面が表示されるので、まずLINE公式アカウントと友達になる必要があります
PayPay審査 : 店舗審査の為にLINEの友達は無理
難波 : エッ… - PayPay for Develoeprsの決済手数料3.8%を会社に負担してもらう
社内プレゼン用に資料を作って説明した - お弁当注文する従業員全員にPayPayを使って支払いしてもらう
社内外のいろいろな方と調整を行う必要があり、久しぶりにSEやってる感がありました。
システム化した結果として、お弁当注文の担当社員から「とても楽になった」と感想をもらえたので、こちらもとても嬉しかったです。
ふと思ったんですが、Twilloを使えば、電話注文も自動化できるかも。。。
これも今後の課題です。
PREV
WebアプリケーションのCI/CD