Esempio n. 1
0
        /// <summary>
        /// 处理巡更控制器的自动上报数据
        /// </summary>
        /// <param name="remoteIP"></param>
        /// <param name="address"></param>
        /// <param name="innerDatas"></param>
        /// <returns></returns>
        public XGData ProcessXGARD(string remoteIP, int address, byte[] innerDatas)
        {
            Record r = Record.Analyze(innerDatas);

            //return new XGData( r.CardSN, address, r.DateTime, true );
            if (r != null)
            {
                XGData xgData = new XGData(r.CardSN, address, r.DateTime, true);

                // TODO: save xg ard and Match XgTask with the xgdata
                //
                // insert ard xg data to db
                //
                XGDB.InsertXGData(remoteIP, xgData);

                // insert a new task to taskScheduler, the task remove the last ard xgdata
                //
                XGStation xgst = Singles.S.GetXGStation(remoteIP, address);
                if (xgst == null)
                {
                    xgst = new XGStation("xgst" + DateTime.Now, remoteIP, address);
                }

                CommCmdBase cmd  = new AutoReportCommand(xgst);
                Task        task = new Task(cmd, new ImmediateTaskStrategy());
                Singles.S.TaskScheduler.Tasks.Add(task);

                return(xgData);
            }

            return(null);
        }
Esempio n. 2
0
        public void AfterSend(object sender, EventArgs e)
        {
            // get station
            //
            XGStation station = GetXGStation(sender);
            //station.Logs.
            // get send datetime
            //
            Task   t          = GetTask(sender);
            string lastSendDt = t.LastSendDateTime.ToString();

            // get send byte[] datas
            //
            string lastSendDatas = BytesToString(t.LastSendDatas);

            // command type
            //
            string cmdType = t.CommCmd.GetType().Name;

            // make log string
            //
            string s = "Send: " + lastSendDt + " " + lastSendDatas;

            s = cmdType + Environment.NewLine + s;
            // add log to station.logs
            //
            station.Logs.Add(new OperationLog(s));
        }
Esempio n. 3
0
 public ModifyDateCommand(XGStation station, int year, int month, int day)
 {
     this.Station = station;
     _year        = year;
     _month       = month;
     _day         = day;
 }
Esempio n. 4
0
        private void CollXGData()
        {
            string stName = GetSelectStationName();

            if (stName == null || stName.Length == 0)
            {
                return;
            }

            XGStation xgst = Singles.S.XGStsCollection.GetXGStation(stName);

            if (xgst.ServerIP != XGConfig.Default.ServerIP)
            {
                MsgBox.Show(string.Format("站点 {0} 不连接到本台服务器,不能执行操作", xgst.StationName));
                return;
            }

            if (xgst != null)
            {
                string ip = xgst.DestinationIP;
                if (IsConnected(ip))
                {
                    ReadTotalCountCommand cmd = new ReadTotalCountCommand(xgst);
                    Task t = new Task(cmd, new ImmediateTaskStrategy());
                    Singles.S.TaskScheduler.Tasks.Add(t);
                }
                else
                {
                    MsgBox.Show(string.Format("站点 {0} 尚未与中心建立连接", xgst.StationName));
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="owningTask"></param>
        /// <remarks>
        /// 可能包含读取并清除本地数据的后续指示(在Task.Tag中)
        /// </remarks>
        private void ProcessReadTotalCountCmd(ReadTotalCountCommand cmd, Task owningTask)
        {
            int recordCount = cmd.TotalCount;

            if (recordCount <= 0)
            {
                return;
            }

            XGStation st = (XGStation)cmd.Station;

            //Immediate task strategy 被加到tasks的最前端,所以要先加入,一般在读取完所有的记录后清空。
            //
            RemoveAllCommand clearCmd  = new RemoveAllCommand(st);
            Task             clearTask = new Task(clearCmd, new ImmediateTaskStrategy());

            Singles.S.TaskScheduler.Tasks.Add(clearTask);

            for (int i = 0; i < recordCount; i++)
            {
                ReadRecordCommand rdcmd = new ReadRecordCommand(st, i + 1);
                Task t = new Task(rdcmd, new ImmediateTaskStrategy());
                Singles.S.TaskScheduler.Tasks.Add(t);
            }
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ccmd"></param>
        /// <param name="ccpd"></param>
        private void Exe(CommCmdMakerDelegate ccmd, CommCmdProcessDelegate ccpd)
        {
            System.Diagnostics.Debug.Assert(ccmd != null &&
                                            ccpd != null);

            if (IsSelectedXgStation())
            {
                XGStation xgst = GetSelectedXg();
                if (IsGprsConnected(xgst))
                {
                    CommCmdBase  cmd      = ccmd(xgst);
                    TaskStrategy strategy = new ImmediateTaskStrategy();

                    Task t = new Task(cmd, strategy);
                    frmControlProcess f = new frmControlProcess(t);
                    Singles.S.TaskScheduler.Tasks.AddFirstExectueTask(t);
                    f.ShowDialog();

                    if (t.LastCommResultState == CommResultState.Correct)
                    {
                        ccpd(cmd);
                    }
                }
                else
                {
                    ShowNotConnect();
                }
            }
            else
            {
                ShowNoStationSelected();
            }
        }
Esempio n. 7
0
 public ReadRecodeCommand(XGStation station, int recodeIndex)
 {
     _recordIndex      = recodeIndex;
     _record           = null;
     _recordTotalCount = -1;
     Station           = station;
 }
Esempio n. 8
0
        static public void UpdateXGStation(int id, XGStation st)
        {
            ArgumentChecker.CheckNotNull(st);
            string s = string.Format("update tbl_xgstation set name = '{0}', address = {1} where xgstation_id = {2}",
                                     st.StationName, st.Address, id);

            DbClient.ExecuteNonQuery(s);
        }
Esempio n. 9
0
 public QueryStationCommand(XGStation station)
 {
     if (station == null)
     {
         throw new ArgumentNullException("XGStation");
     }
     this.Station = station;
 }
Esempio n. 10
0
        private void XGQueryCount(string remoteIP, int address)
        {
            XGStation xgSt = GetXGStation(remoteIP, address);

            if (xgSt != null)
            {
                ReadTotalCountCommand cmd = new ReadTotalCountCommand(xgSt);
                this.CreateImmediateTaskAndExecute(cmd);
            }
        }
Esempio n. 11
0
        /// <summary>
        ///
        /// </summary>
        private void UnregisterXgChangedEvent()
        {
            XGStationsCollection xgs = Singles.S.XGStsCollection;

            for (int i = 0; i < xgs.Count; i++)
            {
                XGStation xg = xgs[i];
                xg.XgCtrlDateChanged -= new EventHandler(xg_XgCtrlDateChanged);
                xg.XgCtrlTimeChanged -= new EventHandler(xg_XgCtrlTimeChanged);
            }
        }
Esempio n. 12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void xg_XgCtrlDateChanged(object sender, EventArgs e)
        {
            XGStation    xg  = sender as XGStation;
            ListViewItem lvi = FindListViewItem(xg);

            if (lvi != null)
            {
                // TODO: 2007-11-8 Modify xgCtrlDate format
                lvi.SubItems[1].Text = xg.XgCtrlDate.ToString();
            }
        }
Esempio n. 13
0
 public ModifyTimeCommand(XGStation station, int hour, int minute, int second)
 {
     if (station == null)
     {
         throw new ArgumentNullException("XGStation");
     }
     this.Station = station;
     Hour         = hour;
     Minute       = minute;
     Second       = second;
 }
Esempio n. 14
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="xg"></param>
 /// <returns></returns>
 private ListViewItem FindListViewItem(XGStation xg)
 {
     foreach (ListViewItem lvi in this.lvXg.Items)
     {
         if (lvi.Text == xg.StationName)
         {
             return(lvi);
         }
     }
     return(null);
 }
Esempio n. 15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="xgst"></param>
        /// <returns></returns>
        private CommCmdBase GetSetTimeCmd(XGStation xgst)
        {
            Debug.Assert(xgst != null);
            DateTime now = DateTime.Now;

            int h = now.Hour,
                m = now.Minute,
                s = now.Second;

            return(new ModifyTimeCommand(xgst, h, m, s));
        }
Esempio n. 16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="xgst"></param>
        /// <returns></returns>
        private CommCmdBase GetSetDateCmd(XGStation xgst)
        {
            Debug.Assert(xgst != null);
            DateTime now = DateTime.Now;

            int y = now.Year,
                m = now.Month,
                d = now.Day;

            // 2007-11-7 Modify
            // return new ModifyTimeCommand( xgst, y, m, d );
            return(new ModifyDateCommand(xgst, y, m, d));
        }
Esempio n. 17
0
        public XGTask(XGStation xgStation, Card card, XGTime time)
        {
            ArgumentChecker.CheckNotNull(xgStation);
            ArgumentChecker.CheckNotNull(card);
            ArgumentChecker.CheckNotNull(time);

            _xgStation    = xgStation;
            _xgTime       = time;
            _card         = card;
            _isComplete   = false;
            _isActive     = false;
            this._Active += new EventHandler(XGTask_Active);
            _Inactive    += new EventHandler(XGTask_Inactive);
        }
Esempio n. 18
0
//        static public void SaveXgTaskResult ( XGTask task )
//        {
//            ArgumentChecker.CheckNotNull( task );
//
//            string cardSN = task.Card.SerialNumber;
//            string person = task.Card.Person;
//
//            string expectionTimeRange = GetXGTimeRange(task.XGTime);
//            int ctrlerId = GetId ( task.XGStation );
//
//
//            bool isComplete = task.IsComplete;
//            DateTime dt = DateTime.Now;
//
//            // save xg task result to db
//            //
//            string sql = string.Empty;
//            if ( isComplete )
//            {
//                DateTime occurDt = task.XgTaskResult.XGStationDateTime ;
//                sql = string.Format(
//                    @"insert into tbl_xgtask_result ( xgstation_id, card_sn, person, occur_time,
//                expection_time, complete, dt) values ({0}, '{1}', '{2}', '{3}', '{4}', {5}, '{6}')",
//                    ctrlerId, cardSN, person, occurDt.ToString(), expectionTimeRange, 1, dt );
//            }
//            else
//            {
//                sql = string.Format(
//                    @"insert into tbl_xgtask_result ( xgstation_id, card_sn, person,
//                expection_time, complete, dt) values ({0}, '{1}', '{2}', '{3}', {4}, '{5}')",
//                    ctrlerId, cardSN, person, expectionTimeRange, 0, dt );
//            }
//
//            s_dbClient.ExecuteNonQuery( sql );
//        }

//        static private string GetXGTimeRange( XGTime time )
//        {
//            string str = string.Format( "{0} - {1}",
//                time.Begin.TimeOfDay.ToString(),
//                time.End.TimeOfDay.ToString() );
//            return str;
//        }
        #endregion
        static private int GetId(XGStation xgStation)
        {
            // Get xg controller id
            //
            //System.Diagnostics.Debug.Assert(false, "TODO: Get xg controller id");
            int id;

            if (Singles.S.XGStationIds.GetId(xgStation, out id))
            {
                return(id);
            }

            return(-1);
        }
Esempio n. 19
0
 /// <summary>
 /// 通过IP和站点地址获取巡更控制器对象
 /// </summary>
 /// <param name="remoteIP"></param>
 /// <param name="address"></param>
 /// <returns></returns>
 public XGStation GetXGStation(string remoteIP, int address)
 {
     foreach (object obj in _xgStationIds)
     {
         ObjectIdAssociateCollection.ObjectIdAssociate obj_Id = (ObjectIdAssociateCollection.ObjectIdAssociate)obj;
         XGStation xgst = (XGStation)obj_Id.Object;
         if (xgst.DestinationIP == remoteIP &&
             xgst.Address == address)
         {
             return(xgst);
         }
     }
     return(null);
 }
Esempio n. 20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="remoteIP"></param>
        /// <param name="address"></param>
        private void XGClear(string remoteIP, int address)
        {
            XGStation xgst = GetXGStation(remoteIP, address);

            if (xgst != null)
            {
                RemoveAllCommand cmd = new RemoveAllCommand(xgst);
//                Task t = new Task( cmd, new ImmediateTaskStrategy () );
//                Singles.S.TaskScheduler.Tasks.Add ( t );
//                frmControlProcess f = new frmControlProcess( t );
//                f.ShowDialog();
                this.CreateImmediateTaskAndExecute(cmd);
            }
        }
Esempio n. 21
0
        public void AfterReceived(object sender, EventArgs e)
        {
            XGStation station          = GetXGStation(sender);
            Task      t                = GetTask(sender);
            string    lastReceivedDT   = t.LastReceivedDateTime.ToString();
            string    lastReceivedData = BytesToString(t.LastReceived);
            string    cmdType          = t.CommCmd.GetType().Name;

            string s = "Rece: " + lastReceivedDT + " " + lastReceivedData;

            s = cmdType + Environment.NewLine + s;

            station.Logs.Add(new OperationLog(s));
        }
Esempio n. 22
0
        /// <summary>
        ///
        /// </summary>
        private void FillXgListView()
        {
            XGStationsCollection xgStations = Singles.S.XGStsCollection;

            for (int i = 0; i < xgStations.Count; i++)
            {
                XGStation xgst = xgStations[i];
                if (xgst.ServerIP == XGConfig.Default.ServerIP)
                {
                    // for test
                    //
//                    xgst.XgCtrlDate = DateTime.Now;
//                    xgst.XgCtrlTime = DateTime.Now.TimeOfDay;
//                    xgst.DtCollXgCtrlTime = DateTime.Now;
                    ListViewItem lvi = lvXg.Items.Add(xgst.StationName);
                    if (xgst.XgCtrlDate != DateTime.MinValue)
                    {
                        lvi.SubItems.Add(xgst.XgCtrlDate.Date.ToShortDateString());
                    }
                    else
                    {
                        lvi.SubItems.Add(string.Empty);
                    }

                    if (xgst.XgCtrlTime != TimeSpan.MinValue)
                    {
                        lvi.SubItems.Add(
                            //xgst.XgCtrlTime.ToString()
                            GetTimeSpanString(xgst.XgCtrlTime));
                    }
                    else
                    {
                        lvi.SubItems.Add(string.Empty);
                    }

                    if (xgst.DtCollXgCtrlTime != DateTime.MinValue)
                    {
                        lvi.SubItems.Add(xgst.DtCollXgCtrlTime.ToString());
                    }
                    else
                    {
                        lvi.SubItems.Add(string.Empty);
                    }

                    lvi.Tag = xgst;
                }
            }
        }
Esempio n. 23
0
        private void btnAdd_Click(object sender, System.EventArgs e)
        {
            frmGprsStationItem f = new frmGprsStationItem();

            if (f.ShowDialog(this) == DialogResult.OK)
            {
                string stName  = f.StationName;
                int    gr_addr = f.GrAddress;
                int    xg_addr = f.XgAddress;
//                int cp = f.CommPort;
                int    cp        = 0;
                string remark    = f.Remark;
                int    client    = XGConfig.Default.ClientAorB;
                string ipAddr    = f.IpAddress;
                string team      = f.Team;
                string addDrug   = f.AddDrug;
                float  heatArea  = f.Area;
                string serverIP  = f.ServerIpAddress;
                int    teamOrder = GetTeamOrder(f.Team);


                string insertGprsStationSql = string.Format(
                    @"insert into tbl_gprs_station (name, commport, 
                    client, remark, ip, team, addDrug, heatArea, serverIp, teamorder ) 
                    values( '{0}', {1}, {2}, '{3}', '{4}', '{5}', '{6}', {7}, '{8}', {9})",
                    stName, cp, client, remark, ipAddr, team, addDrug, heatArea, serverIP, teamOrder);

                XGDB.DbClient.ExecuteNonQuery(insertGprsStationSql);
                int gprsStationId = XGDB.QueryLastId("tbl_gprs_station", "gprs_station_id");

                XGStation st = new XGStation(stName, ipAddr, xg_addr);
                st.Tag = gprsStationId;
                XGDB.InsertXGStation(st);

                //int xgStationId = XGDB.QueryLastId("tbl_xgstation","xgstation_id");

                GRStation grSt = new GRStation(stName, gr_addr, ipAddr);
                grSt.Tag = gprsStationId;
                XGDB.InsertGRStation(grSt);
                //int grStationId = XGDB.QueryLastId("tbl_grstation", "grstation_id" );



                LoadXGStationFromDB();
                //XGDB.Resolve();
            }
        }
Esempio n. 24
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ccmd"></param>
        /// <param name="ccmp"></param>
        private void ExeAll(CommCmdMakerDelegate ccmd)          //, CommCmdProcessDelegate ccmp )
        {
            XGStationsCollection xgstColl = Singles.S.XGStsCollection;

            for (int i = 0; i < xgstColl.Count; i++)
            {
                XGStation xgst = xgstColl[i];
                if (xgst.ServerIP == XGConfig.Default.ServerIP)
                {
                    // CommCmdBase cmd = new ReadDateCommand( xgst );
                    CommCmdBase cmd = ccmd(xgst);
                    Task        t   = new Task(cmd, new ImmediateTaskStrategy());
                    t.AfterProcessReceived += new EventHandler(t_AfterProcessReceived);
                    Singles.S.TaskScheduler.Tasks.Add(t);
                }
            }
            MsgBox.Show("命令已提交!");
        }
Esempio n. 25
0
        static public void InsertXGStation(XGStation st)
        {
            ArgumentChecker.CheckNotNull(st);

            string s;

            if (st.Tag != null)
            {
                int gprsStationId = Convert.ToInt32(st.Tag);
                s = string.Format("insert into tbl_xgstation( name, address, gprs_station_id ) values( '{0}', {1}, {2} )",
                                  st.StationName, st.Address, gprsStationId);
            }
            else
            {
                s = string.Format("insert into tbl_xgstation( name, address ) values( '{0}', {1} )",
                                  st.StationName, st.Address);
            }
            DbClient.ExecuteNonQuery(s);
        }
Esempio n. 26
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="remoteIP"></param>
        /// <param name="address"></param>
        private void XGSetTime(string remoteIP, int address)
        {
            XGStation xgSt = GetXGStation(remoteIP, address);

            if (xgSt != null)
            {
                DateTime now = DateTime.Now;
                int      h   = now.Hour;
                int      m   = now.Minute;
                int      s   = now.Second;

                ModifyTimeCommand cmd = new ModifyTimeCommand(xgSt, h, m, s);
//                Task t = new Task( cmd, new ImmediateTaskStrategy () );
//                Singles.S.TaskScheduler.Tasks.Add( t );
//                frmControlProcess f = new frmControlProcess( t );
//                f.ShowDialog();
                this.CreateImmediateTaskAndExecute(cmd);
            }
        }
Esempio n. 27
0
        /// <summary>
        /// 判断该巡更站点是否已连接
        /// </summary>
        /// <param name="xgName"></param>
        /// <returns></returns>
        private bool IsGprsConnected(XGStation xgst)
        {
            CommPortProxysCollection cpps = Singles.S.TaskScheduler.CppsCollection;

            for (int i = 0; i < cpps.Count; i++)
            {
                CommPortProxy cpp = cpps[i];
                if (cpp.RemoteIP == xgst.DestinationIP)
                {
                    if (cpp.IsConnected)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            return(false);
        }
Esempio n. 28
0
        /// <summary>
        /// 解析巡更控制器站点
        /// </summary>
        /// <returns></returns>
        static public ObjectIdAssociateCollection ResolveXGStation()
        {
            ObjectIdAssociateCollection stationIdAssoc = new ObjectIdAssociateCollection("tbl_xgstation");

//            string s = "select xgstation_id, name, address from tbl_xgstation";
            string    s   = "select xgstation_id, name, xg_address, ip from v_gprs_gr_xg";
            DataSet   ds  = DbClient.Execute(s);
            DataTable tbl = ds.Tables[0];

            foreach (DataRow r in tbl.Rows)
            {
                int    id      = int.Parse(r[0].ToString());
                string name    = r[1].ToString();
                int    address = int.Parse(r[2].ToString());
                string ipAddr  = r[3].ToString().Trim();

                XGStation st = new XGStation(name, ipAddr, address);
                stationIdAssoc.Add(st, id);
            }

            return(stationIdAssoc);
        }
Esempio n. 29
0
        /// <summary>
        /// Read all xgstation Time or Date process
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void t_AfterProcessReceived(object sender, EventArgs e)
        {
            Task t = sender as Task;

            if (t.LastCommResultState == CommResultState.Correct)
            {
                XGStation xgst = t.CommCmd.Station as XGStation;
                if (t.CommCmd is ReadTimeCommand)
                {
                    ReadTimeCommand rtCmd  = t.CommCmd as ReadTimeCommand;
                    TimeSpan        xgTime = new TimeSpan(
                        0,
                        rtCmd.Hour,
                        rtCmd.Minute,
                        rtCmd.Second
                        );
                    // TODO: 2007-11-8 应先设置xgst.DtCollXgCtrlTime, 否则更新
                    //      xgCtrlTime时候,刷新listview控件是使用的是上次的采集时间
                    //
                    //xgst.XgCtrlTime = xgTime;
                    //xgst.DtCollXgCtrlTime = DateTime.Now;
                    xgst.DtCollXgCtrlTime = DateTime.Now;
                    xgst.XgCtrlTime       = xgTime;
                }
                else if (t.CommCmd is ReadDateCommand)
                {
                    ReadDateCommand rdCmd  = t.CommCmd as ReadDateCommand;
                    DateTime        xgDate = new DateTime(
                        // 2007-11-8 Modify rdCmd.Year,
                        //
                        2000 + rdCmd.Year,
                        rdCmd.Month,
                        rdCmd.Day
                        );
                    xgst.XgCtrlDate = xgDate;
                }
            }
        }
Esempio n. 30
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="xgst"></param>
 /// <returns></returns>
 private CommCmdBase GetReadTimeCmd(XGStation xgst)
 {
     Debug.Assert(xgst != null);
     return(new ReadTimeCommand(xgst));
 }