/// <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); }
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)); }
public ModifyDateCommand(XGStation station, int year, int month, int day) { this.Station = station; _year = year; _month = month; _day = day; }
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)); } } }
/// <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); } }
/// <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(); } }
public ReadRecodeCommand(XGStation station, int recodeIndex) { _recordIndex = recodeIndex; _record = null; _recordTotalCount = -1; Station = station; }
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); }
public QueryStationCommand(XGStation station) { if (station == null) { throw new ArgumentNullException("XGStation"); } this.Station = station; }
private void XGQueryCount(string remoteIP, int address) { XGStation xgSt = GetXGStation(remoteIP, address); if (xgSt != null) { ReadTotalCountCommand cmd = new ReadTotalCountCommand(xgSt); this.CreateImmediateTaskAndExecute(cmd); } }
/// <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); } }
/// <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(); } }
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; }
/// <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); }
/// <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)); }
/// <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)); }
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); }
// 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); }
/// <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); }
/// <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); } }
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)); }
/// <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; } } }
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(); } }
/// <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("命令已提交!"); }
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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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; } } }
/// <summary> /// /// </summary> /// <param name="xgst"></param> /// <returns></returns> private CommCmdBase GetReadTimeCmd(XGStation xgst) { Debug.Assert(xgst != null); return(new ReadTimeCommand(xgst)); }