예제 #1
0
        //OnDisconnected
        private void OnDisconnected(SemacV14.Entity.TerminalEntity En)
        {
            EventLog.Write("{0}-{1}", "OnDisconnected", "OnDisconnected");
            try {
                lock (TerminalTable)
                {
                    DBO.CardReader dt = new DBO.CardReader();
                    foreach (DataRow row in TerminalTable.Rows)
                    {
                        if (row["TerminalID"].ToString() == En.TerminalID.ToString())
                        {
                            TerminalTable.Rows.Remove(row);
                            dt.TerminalID = En.TerminalID.ToString();
                            dt.Status     = dt.Status = En.Status.Equals("On Line") ? "1" : "0";
                            BO.updateCardReaderState(dt);
                            break;
                        }
                    }
                }
                Msg = string.Format("OnDisconnected,CardReader:{0},{1}", TerminalTable.Rows.Count.ToString(), En.ToMyString);
                EventLog.Write("{0}-{1}", "OnDisconnected", Msg);
                Console.WriteLine(Msg);

                _timer.Enabled = false;
            }
            catch (Exception ex) { EventLog.WriteError("{0}-{1}", "OnDisconnected", ex.ToString()); }
        }
예제 #2
0
        //OnConnected
        private void OnConnected(SemacV14.Entity.TerminalEntity En)
        {
            EventLog.Write("{0}-{1}", "OnConnected", "Start");
            try
            {
                ChannelID  = En.ChannelID;
                TerminalID = En.TerminalID;
                MacAddress = En.MacAddress;

                lock (this.TerminalTable)
                {
                    DataRow row = this.TerminalTable.NewRow();
                    row["ChannelID"]       = En.ChannelID;             //Connection ID
                    row["Status"]          = En.Status;                //On Line status
                    row["TerminalID"]      = En.TerminalID.ToString(); //TerminalID
                    row["IPAddress"]       = En.IPAddress;             //IP Address
                    row["MacAddress"]      = En.MacAddress;            //MAC Address
                    row["SerialNo"]        = En.SerialNo;              //Serial No.
                    row["ModelName"]       = En.ModelName;             //Model Name
                    row["FirmwareVersion"] = En.FirmwareVersion;       //Firmware Version

                    this.TerminalTable.Rows.Add(row);
                }

                EventLog.Write("{0}-{1}", "OnConnected", "Start-UpdateCardReaderState");
                int            iResult = 0;//0.Insert ,1.Update
                DBO.CardReader dt      = new DBO.CardReader();
                foreach (DataRow dr in dtCardReader.Rows)
                {
                    if (dr["TerminalID"].ToString() == En.TerminalID.ToString())
                    {
                        iResult = 1;
                        break;
                    }
                }
                dt.Status          = En.Status.Equals("On Line")?"1":"0";
                dt.TerminalID      = En.TerminalID.ToString();
                dt.IPAddress       = En.IPAddress;
                dt.MacAddress      = En.MacAddress;
                dt.SerialNo        = En.SerialNo;
                dt.ModelName       = En.ModelName;
                dt.FirmwareVersion = En.FirmwareVersion;
                dt.IsUse           = "Y";
                if (iResult == 0)
                {
                    BO.insertCardReader(dt);
                }
                else
                {
                    BO.updateCardReader(dt);
                }

                Msg = string.Format("OnConnected,CardReader:{0},{1}", TerminalTable.Rows.Count.ToString(), En.ToMyString);
                EventLog.Write("{0}-{1}", "OnConnected", Msg);
                Console.WriteLine(Msg);

                _timer.Enabled = true;
            }
            catch (Exception ex) { EventLog.Write("Error:{0}-{1}", "OnConnected", ex.ToString()); }
        }
예제 #3
0
 private void insertLog(SemacV14.Entity.DoorLogEntity table)
 {
     BO.insertCardLog(table.CardNo
                      , table.TerminalID.ToString()
                      , table.EntryDate.ToString("yyyy/MM/dd HH:mm:ss")
                      , table.EventAlarmCode
                      , table.EventAlarmCodeInt32.ToString()
                      , table.LogIndex.ToString());
 }
예제 #4
0
        public string QueryTheNumberOfAlreadyRegisteredUsers()
        {
            try
            {
                if (!checkCardReader("QueryTheNumberOfAlreadyRegisteredUsers"))
                {
                    return("99,99");
                }

                EventLog.Write("{0}-{1}", "QueryTheNumberOfAlreadyRegisteredUsers", "Start");

                var re = new SemacV14.Request.CommonRequest(TerminalID, Define.CommandType.QueryTheNumberOfAlreadyRegisteredUsers);
                var Ea = new SemacV14.Service.ExecuteArgz(ChannelID, re);

                //Execute
                SemacV14.Service.Actor Wrk = new Actor(Ea);
                Ea = Wrk.SendAndReceive(); //  'Send command,and return result

                // check the result
                if (Ea.IsCompleted == true)
                {
                    EventLog.Write("{0}-{1}", "QueryTheNumberOfAlreadyRegisteredUsers", "Success");

                    //Msg = String.Format("筆數:{0},TerminalID={1}, ChannelID={2}", Ea.EntityList.Count.ToString(), TerminalID, ChannelID);
                    //EventLog.Write("{0}-{1}", "QueryTheNumberOfAlreadyRegisteredUsers", Msg);

                    SemacV14.Entity.QueryTheNumberOfAlreadyRegisteredUsersEntity En = (SemacV14.Entity.QueryTheNumberOfAlreadyRegisteredUsersEntity)Ea.CallbackEntity;

                    BO.UpdateCardReaderUserCount(TerminalID.ToString(), En.RegisteredCount.ToString());

                    return("1," + En.RegisteredCount.ToString());
                }
                else
                {
                    EventLog.Write("{0}-{1}", "QueryTheNumberOfAlreadyRegisteredUsers", "Failure");
                    Msg = String.Format("ErrorMsg:{0},TerminalID={1}, ChannelID={2}", Ea.ErrorMessage, TerminalID, ChannelID);
                    EventLog.Write("{0}-{1}", "QueryTheNumberOfAlreadyRegisteredUsers", Msg);
                    return("0," + Ea.ErrorMessage);
                }
                //SemacV14.Service.Actor act = new Actor(Ea);

                //act.OnEntityDataArrival += HandleEntity;
                //act.Send();

                //return true;
            }
            catch (Exception ex)
            {
                Msg = String.Format("ErrorMsg:{0},TerminalID={1}, ChannelID={2}", ex.Message, TerminalID, ChannelID);
                EventLog.WriteError("{0}-{1}", "QueryTheNumberOfAlreadyRegisteredUsers", Msg);
                return("99,99");
            }
        }
예제 #5
0
        /// <summary>
        /// 取得卡機內 UserID List
        /// </summary>
        /// <returns></returns>
        private int RetrievingUserIDList()
        {
            try
            {
                if (!checkCardReader("RetrievingUserIDList"))
                {
                    return(99);
                }

                var re = new SemacV14.Request.CommonRequest(TerminalID, Define.CommandType.RetrievingUserIDList);
                var Ea = new SemacV14.Service.ExecuteArgz(ChannelID, re);

                //Execute
                SemacV14.Service.Actor Wrk = new Actor(Ea);
                Wrk.TimeoutMinisecond = 10 * 60 * 1000; //those cmd may need more time,but in default , timeout checking was 10 seconds.
                Ea = Wrk.SendAndReceive();              //  'Send command,and return result

                // check the result
                if (Ea.IsCompleted == true)
                {
                    EventLog.Write("{0}-{1}", "RetrievingUserIDList", "Success");
                    SemacV14.Entity.RetrievingUserIDListEntity En = (SemacV14.Entity.RetrievingUserIDListEntity)Ea.CallbackEntity;

                    BO.insertCheckUserLog(TerminalID.ToString(), En.Count.ToString());
                    string SEQ = BO.getCheckUserLogSEQ(TerminalID.ToString());

                    int iCount = 0;
                    foreach (uint Item in En.Items)
                    {
                        iCount++;
                        Console.WriteLine(iCount.ToString() + "-" + String.Format("{0:X}", Convert.ToInt64(Item.ToString())));
                        BO.insertCheckUserList(TerminalID.ToString(), String.Format("{0:X}", Convert.ToInt64(Item.ToString())));
                        BO.insertCheckUserListTemp(SEQ, TerminalID.ToString(), String.Format("{0:X}", Convert.ToInt64(Item.ToString())));
                    }
                    return(1);
                }
                else
                {
                    EventLog.WriteCU("{0}-{1}", "RetrievingUserIDList.Ea.IsCompleted=false", "失敗:" + Ea.ErrorMessage.ToString());
                    //EventLog.Write("{0}-{1}", "RetrievingUserIDList", "Failure");
                    return(0);
                }
            }
            catch (Exception ex)
            {
                Msg = String.Format("ErrorMsg:{0},TerminalID={1}, ChannelID={2}", ex.Message, TerminalID, ChannelID);
                EventLog.WriteCU("{0}-{1}", "RetrievingUserIDList", Msg);
                return(99);
            }
        }
예제 #6
0
        /// <summary>
        /// 差異更新
        /// </summary>
        private void SyncCRUser()
        {
            blIsCheckUserSyncOK = true;
            try
            {
                EventLog.WriteCU("{0}-{1}", "SyncCRUser", "Start");

                DataTable dt = BO.getCheckUserToCR(TerminalID.ToString());
                foreach (DataRow dr in dt.Rows)
                {
                    User user = new User
                    {
                        UserID              = UInt32.Parse(dr["HexCardOrderNo"].ToString(), System.Globalization.NumberStyles.HexNumber),
                        EmployeeID          = UInt32.Parse(dr["HexCardOrderNo"].ToString(), System.Globalization.NumberStyles.HexNumber).ToString(),
                        OverWrite           = true,
                        CardNo              = UInt32.Parse(dr["HexCardOrderNo"].ToString(), System.Globalization.NumberStyles.HexNumber).ToString(),
                        UserName            = dr["Cn"].ToString(),
                        CheckExpire         = true,
                        ExpiredFrom         = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss")),
                        ExpiredTo           = Convert.ToDateTime(DateTime.Now.AddDays(1000).ToString("yyyy/MM/dd HH:mm:ss")),
                        EnabledStatus       = true,//!entry.Black && entry.ExpireOn.Value >= DateTime.Now,
                        UserType            = 0,
                        Group01             = 1,
                        Group02             = 0,
                        Group03             = 0,
                        Group04             = 0,
                        BypassTimeZoneLevel = 1,
                        PersonalPassword    = ""
                    };
                    if (dr["State"].ToString().Equals("D"))
                    {
                        UserDeletionRequest(user.UserID);
                    }
                    else
                    {
                        AddUser(user);
                    }
                }
                EventLog.WriteCU("{0}-{1}", "SyncCRUser", "End-Sync CRUser");
            }
            catch (Exception ex) { EventLog.WriteCU("{0}-{1}", "SyncCRUser", ex.ToString()); }

            blIsCheckUserSyncOK = false;
        }
예제 #7
0
        private void SyncUserNew()
        {
            try {
                //檢查CardReaderSyncTime的時間範圍,是否符合可執行的時段
                if (!getIsSync())
                {
                    return;
                }

                EventLog.Write("{0}-{1}", "SyncUserNew", "Start");

                foreach (DataRow drT in TerminalTable.Rows)
                {
                    ChannelID  = drT["ChannelID"].ToString();
                    TerminalID = Convert.ToInt32(drT["TerminalID"].ToString());
                    MacAddress = drT["MacAddress"].ToString();

                    this.dtCardReader = BO.getCardReader(TerminalID.ToString());
                    DataTable dtSyncCardReaderUserLog = BO.getSyncCardReaderUserLog(TerminalID.ToString(), SyncTimeSEQ.ToString());

                    //判斷今天是否已同步完成
                    if (dtSyncCardReaderUserLog.Rows.Count == 0)
                    {
                        if (dtCardReader.Rows[0]["IsSyncAll"].ToString().Equals("1"))
                        {
                            DeleteAllUser();
                            BO.UpdateCardReaderIsSyncAll(TerminalID.ToString());
                        }

                        int       addCount = 0, delCount = 0, AllCount = 0;
                        DataTable dt = BO.getPersonCardToCardReader(TerminalID.ToString());
                        foreach (DataRow dr in dt.Rows)
                        {
                            User user = new User
                            {
                                UserID              = UInt32.Parse(dr["HexCardOrderNo"].ToString(), System.Globalization.NumberStyles.HexNumber),
                                EmployeeID          = UInt32.Parse(dr["HexCardOrderNo"].ToString(), System.Globalization.NumberStyles.HexNumber).ToString(),
                                OverWrite           = true,
                                CardNo              = UInt32.Parse(dr["HexCardOrderNo"].ToString(), System.Globalization.NumberStyles.HexNumber).ToString(),
                                UserName            = dr["Cn"].ToString(),
                                CheckExpire         = true,
                                ExpiredFrom         = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd HH:mm:ss")),
                                ExpiredTo           = Convert.ToDateTime(DateTime.Now.AddDays(1000).ToString("yyyy/MM/dd HH:mm:ss")),
                                EnabledStatus       = true,//!entry.Black && entry.ExpireOn.Value >= DateTime.Now,
                                UserType            = 0,
                                Group01             = 1,
                                Group02             = 0,
                                Group03             = 0,
                                Group04             = 0,
                                BypassTimeZoneLevel = 1,
                                PersonalPassword    = ""
                            };

                            int RCount = addCount + delCount;
                            if (dr["State"].ToString().Equals("D"))
                            {
                                if (GetOneUser(user.UserID) == 1)
                                {
                                    if (UserDeletionRequest(user.UserID) == 1)
                                    {
                                        delCount++;
                                    }
                                    else if (UserDeletionRequest(user.UserID) == 1)
                                    {
                                        delCount++;
                                    }
                                    else if (UserDeletionRequest(user.UserID) == 1)
                                    {
                                        delCount++;
                                    }
                                    else if (UserDeletionRequest(user.UserID) == 1)
                                    {
                                        delCount++;
                                    }
                                }
                                else
                                {
                                    delCount++;
                                }
                            }
                            else
                            {
                                if (AddUser(user))
                                {
                                    addCount++;
                                }
                                else if (AddUser(user))
                                {
                                    addCount++;
                                }
                                else if (AddUser(user))
                                {
                                    addCount++;
                                }
                                else if (AddUser(user))
                                {
                                    addCount++;
                                }
                            }

                            if (RCount < (delCount + addCount))
                            {
                                BO.sp_TFSyncUserSuccess(dr["SEQ"].ToString());
                            }
                        }

                        Msg = String.Format(@"已同步【白名單】,人員筆數:{0},更新筆數:{1},刪除筆數:{2},失敗筆數:{3},TerminalID={4}, MacAddress={5}"
                                            , dt.Rows.Count.ToString(), addCount.ToString(), delCount.ToString()
                                            , (dt.Rows.Count - addCount - delCount).ToString()
                                            , TerminalID, MacAddress);
                        EventLog.Write("{0}-{1}", "SyncUser", Msg);

                        BO.insertSyncUserLog(TerminalID.ToString(), Msg);

                        if ((addCount + delCount) == dt.Rows.Count)
                        {
                            BO.insertSyncCardReaderUserLog(TerminalID.ToString(), SyncTimeSEQ.ToString());

                            //查詢卡機人員筆數
                            QueryTheNumberOfAlreadyRegisteredUsers();

                            blTodayIsSyncOK = true;
                        }
                    }
                    else
                    {
                        blTodayIsSyncOK = true;
                    }
                }
                EventLog.Write("{0}-{1}", "SyncUserNew", "End-Sync User");
            }
            catch (Exception ex) { EventLog.WriteError("{0}-{1}", "SyncUserNew", ex.ToString()); }
        }
예제 #8
0
 private void getCheckUserSyncTime()
 {
     this.dtCheckUserSyncTime = BO.getCheckUserSyncTime();
 }
예제 #9
0
 private void getCardReaderSyncTime()
 {
     this.dtCardReaderSyncTime = BO.getCardReaderSyncTime();
 }
예제 #10
0
 private void getCardReader()
 {
     this.dtCardReader = BO.getCardReader();
 }
예제 #11
0
        /// <summary>
        /// CheckUser Timer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _timerCheckUser_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //_timerCheckUser.Enabled = false;
            //忙線中
            if (blIsCheckUserSyncOK)
            {
                return;
            }

            blIsCheckUserSyncOK = true;
            //不在時限內,則不執行
            if (!getIsSyncCheckUser())
            {
                EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "不在時間區間內 return");
                Console.WriteLine("不在時間區間內 return");
                blIsCheckUserSyncOK = false;
                return;
            }
            //卡機基本資料-最後同步時間 等於 目前日期,則不執行
            //卡機基本資料-人員名單數量 等於 人員基本資料數量,則不執行
            if (BO.isReturn(TerminalID.ToString()))
            {
                EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "不符合規則 return");
                Console.WriteLine("不符合規則 return");
                blIsCheckUserSyncOK = false;
                return;
            }

            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "=== _timerCheckUser Start ===");
            Console.WriteLine("=== _timerCheckUser Start ===");

            //清除資料CheckUserList
            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "1.清除資料CheckUserList");
            Console.WriteLine("1.清除資料CheckUserList");
            BO.delCheckUserList(TerminalID.ToString());

            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "2.取得卡機人員筆數");
            Console.WriteLine("2.取得卡機人員筆數");
            int iState = 0;

            //取得卡機人員筆數
            iState = RetrievingUserIDList();
            if (iState == 0)
            {
                iState = RetrievingUserIDList();
            }
            if (iState == 0)
            {
                iState = RetrievingUserIDList();
            }
            if (iState != 1)
            {
                EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "取得卡機人員筆數失敗 return");
                Console.WriteLine("取得卡機人員筆數失敗 return");
                blIsCheckUserSyncOK = false;
                return;
            }

            //比對人員名單
            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "3.比對人員名單");
            Console.WriteLine("3.比對人員名單");
            BO.CompareUserList(TerminalID.ToString());

            //同步時間
            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "4.同步時間");
            Console.WriteLine("4.同步時間");
            SetNewTimeAndDate();
            System.Threading.Thread.Sleep(10 * 1000);

            //差異更新
            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "5.差異更新");
            Console.WriteLine("5.差異更新");
            SyncCRUser();
            System.Threading.Thread.Sleep(10 * 1000);

            //查詢卡機人員筆數
            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "6.查詢卡機人員筆數");
            Console.WriteLine("6.查詢卡機人員筆數");
            QueryTheNumberOfAlreadyRegisteredUsers();

            EventLog.WriteCU("{0}-{1}", "_timerCheckUser_Elapsed", "=== _timerCheckUser End ===");
            Console.WriteLine("=== _timerCheckUser End ===");
            //_timerCheckUser.Enabled = true;
            blIsCheckUserSyncOK = false;
        }