台灣最大程式設計社群網站
線上人數
536
 
會員總數:245782
討論主題:189419
歡迎您免費加入會員
討論區列表 >> C# >> 出勤未打卡簡訊通知程式該如何撰寫?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
出勤未打卡簡訊通知程式該如何撰寫?
價值 : 30 QP  點閱數:676 回應數:10
樓主

阿山
初學者
316 28
990 136
發送站內信

各位前輩好

我們資料庫是使用AS400/DB2,每天固定時間都會抓取刷卡數據Log.TXT檔,然後轉進出勤系統資料表。目前為了解決有些員工在上下班忘記刷卡,卻因為不知道沒刷卡,又沒填寫補刷卡單據,導致薪資結算異常等問題,要來開發程式,在早上08:40,及下午17:40,及下午10:00針對沒有刷卡數據的員工發送簡訊通知。

原本我的想法是,既然刷卡數據都會轉進AS400,我就直接從AS400撈出資料,在去調整跟卡機抓資料及轉檔程式進AS400的時間,但是主管卻說要抓取TXT檔比較即時。現在問題來了,兩個不同資料來源要怎麼比對? 我原本想說抓取AS400的卡號資料檔,再去TXT檔中的卡號比對,就可以帶出沒有刷卡的卡號,但後來發現無法比對,所以上來求助各位前輩。

那請問這樣有辦法抓出沒有刷卡的人員嗎?還是如我文章所述,直接從AS400抓取資料即可?謝謝!

搜尋相關Tags的文章: [ 出勤未打卡 ] , [ 簡訊通知 ] ,
本篇文章發表於2018-09-05 14:31
1樓
回應

春天
檢舉此回應
都有辦法整理數據(TXT)後INSERT到DB裡了,怎麼可能沒辦法從原數據(TXT)找出未刷卡人員
本篇文章回覆於2018-09-05 14:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

阿山
檢舉此回應
回春天大,目前狀況是這樣,Server上有個刷卡機管理程式,會從卡機抓取資料然後存成TXT檔,然後會有一個轉檔程式將TXT的資料INSERT進AS400,送進去的是刷卡數據暫存檔,會固定時間將裡面的資料轉進刷卡數據正式檔,暫存檔的資料就會刪除,所以沒有辦法比對。然而,如我文章所說有一個"卡號資料檔",裡面存放"卡號,無效日期,員工代號,類別,卡鐘編號,備註",但要怎麼跟TXT檔比對呢?如果同樣都是存在AS400,就可以用TABLE JOIN去查詢資料,但是目前的情況來說,我就不知道怎麼做了。
本篇文章回覆於2018-09-05 15:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

阿山
檢舉此回應
我初步的程式碼如下:
[code]
private void Form1_Load(object sender, EventArgs e)
{
StreamReader str = new StreamReader(@"C:\CardLog\20180904.txt");
String line;
while ((line = str.ReadLine()) != null)
{
string[] chars = line.ToString().Split(',');
string AttnDay = chars[0]; //刷卡日期
string AttnTime = chars[1]; //刷卡時間
string CardID = chars[2]; //刷卡卡號
int bingo = string.Compare(AttnTime, "084059");

if(bingo == -1)
{
using (OleDbConnection as400_cn = new OleDbConnection())
{
as400_cn.ConnectionString = CS_YJ400;
as400_cn.Open();

DataTable dt = new DataTable();

String strOLE = " SELECT CDCARD,CDEMPN " +
" FROM PHLIB.PHFCRD " +
" WHERE "; //但現在問題是我需要抓出沒有存在TXT檔中的資料,但我不知道該怎麼抓

OleDbCommand as400_cmd = new OleDbCommand(strOLE, as400_cn);
OleDbDataReader dr = as400_cmd.ExecuteReader();
dt.Load(dr);

}
}
}
str.Close();
}
[/code]
本篇文章回覆於2018-09-05 15:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

春天
檢舉此回應
1.Select 卡號資料檔 將 卡號整理一下去掉 多餘的比如休假人員後 存成Dictionary<卡號, 刷卡時間>
2.讀取TXT檔 依卡號填入刷卡時間
3.foreach跑一次dictionary 看看哪個沒有刷卡時間就知道誰沒刷卡
這樣可行嗎?
本篇文章回覆於2018-09-05 15:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

春天
檢舉此回應

本篇文章回覆於2018-09-05 15:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

春天
檢舉此回應
另外建議不要用迴圈去操作DB
本篇文章回覆於2018-09-05 15:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

阿山
檢舉此回應
回春天大,我修改了程式碼,及有些問題如註解,如下:


還請春天指點迷津吧~ 感激不盡!!
本篇文章回覆於2018-09-06 17:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

阿山
檢舉此回應
關於第6樓我大慨知道您的意思了,感謝教學!
本篇文章回覆於2018-09-06 17:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

春天
檢舉此回應

本篇文章回覆於2018-09-06 17:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

阿山
檢舉此回應
感謝春天大,我可以抓出未刷卡的卡號了。

不過想跟你請教與討論,目前抓出來的卡號,的確是未刷卡的卡號,但也包括一些失效卡號及不需刷卡的人員。
起初我的想法是直接從刷卡正式數據去抓取,在去修改卡機程式抓取TXT,及轉進資料庫的時間即可。
這樣也才可以加入休假人員、出差時間等判斷。

這樣會不會是比較好的做法呢?

謝謝!
本篇文章回覆於2018-09-07 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.