2008年8月19日

懶人自動化系列1 - 如何計算某件事情的處理時間

因為工作上的需求,需要有效管理,而有效管理就是需要一些量化的數據來佐證,明明沒什麼好分析的,但還是硬要分析個東西出來,而且還要比較來,比較去看個趨勢之類,為了要有更多的時間,所以只能想辦法來讓電腦來代勞了

故需求是 "計算一個月內每件派案的處理時間(註1)"

而那些數據並不是乖乖的存成文字檔或放在DB等你去撈,而是在一個ASP網頁的查詢系統上
,你只能連到那個網頁去查詢你自己曾經處理過的過程,所以這個部分我是用 curl 的方式模擬POST,把全部的先抓回來,再去parser檔案撈出想要的資訊,再存檔,此部份有時間再來詳述

先開始吧

執行環境:CentOS v5.0
程式語言:Perl

前置作業
需先確認 cpan 可用

1. 切換為 root, 在命令列打 cpan
2. 輸入 install Date::Manip, 接下來就是一段漫長的安裝過程
3. 寫程式

首先需初始化你的假期與上班時間
use Date::Manip;

Date_Init('PersonalCnf=holiday.cfg',
'WorkWeekBeg=1',
'WorkWeekEnd=5',
'WorkDayBeg=08:30',
'WorkDayEnd=18:00');

而 holiday.cfg 為自己建的一個假日檔,你可以放今年的國定假日在裡面,內容如下

*Holiday
1/1 = New Year's Day
10/10 = Nation's Birth Day
#fourth Thu in Nov = Thanksgiving

其餘參數說明
WorkWeekBeg=1' # 每週上班的第一天是星期一
'WorkWeekEnd=5' # 每週上班的最後天是星期五
'WorkDayBeg=08:30' # 每天上班的時間是 8:30
'WorkDayEnd=18:00' # 每天下班的時間是 18:00

重點 => 開始計算經過時間,程式如下

$d1 = "2008/06/03 11:00";
$d2 = "2008/06/05 12:30";
$d = DateCalc($d1,$d2,\$err,2);

#計算總共經過多久時間(不含下班時間), 重點在於那個紅字的 2 表示切換為 Business Mode, 只計算上班時間,所以在 2008/06/03 的18:00~2008/06/04的08:30之前的時間是不會被計算的~
以上為範例,我自己的作法是用 open FILE, "< $ARGV[0]"; 讀入整理好一個月的檔案資料,再進程式來算,以往可能需花1個小時人工計算的工作,現在約10秒內就可解決了!

註1 : 派案時間為客服人員接到客戶的來電問題,經過分類之後轉派給後端人員的程序,從開始到處理完畢的時間為派案處理時間

沒有留言: