private void selectbtn_Click(object sender, EventArgs e) { DateTime dt = startdtpicker.Value; DateTime Startdt = new DateTime(dt.Year, dt.Month, dt.Day); dt = enddtpicker.Value; DateTime Enddt = new DateTime(dt.Year, dt.Month, dt.Day); List <AccessRecord> lists = new List <AccessRecord>(); string strid = "", strname = "", strinname = "", stroutname = ""; strid = tagtb.Text; if (!"".Equals(strid)) { strname = CommonBoxOperation.GetTagName(strid); if (null == strname) {//说明strid可能是名称 Tag tg = CommonBoxOperation.GetTagFromName(strid); if (null != tg) { strid = tg.ID[0].ToString("X2") + tg.ID[1].ToString("X2"); } } } TagAccessRecordOperation.tagAccessOper.GetAccessRecord(strid, Startdt, Enddt, ref lists); recordlistview.Items.Clear(); int index = -1; ListViewItem item = null; foreach (AccessRecord record in lists) { index++; if (record.isMark) { continue; } item = new ListViewItem(); item.Text = record.TagID[0].ToString("X2") + record.TagID[1].ToString("X2"); strname = CommonBoxOperation.GetTagName(item.Text); if (null == strname || "".Equals(strname)) { item.SubItems.Add("****"); } else { item.SubItems.Add(strname); } AccessRecord access = null; if (record.rttype == ReferType.Entrance) {//说明当前是一个入口参考点,我们接下来需要找出口 strinname = CommonBoxOperation.GetRouterName(record.RouterID[0].ToString("X2") + record.RouterID[1].ToString("X2")); access = SelectAccessRecord(lists.GetRange(index + 1, lists.Count - index - 1), record.TagID, ReferType.Export); if (null == access) { continue; } access.isMark = true; if (null == strinname || "".Equals(strinname)) { item.SubItems.Add(record.RouterID[0].ToString("X2") + record.RouterID[1].ToString("X2")); } else { item.SubItems.Add(strinname + "(" + record.RouterID[0].ToString("X2") + record.RouterID[1].ToString("X2") + ")"); } stroutname = CommonBoxOperation.GetRouterName(access.RouterID[0].ToString("X2") + access.RouterID[1].ToString("X2")); if (null == stroutname || "".Equals(stroutname)) { item.SubItems.Add(access.RouterID[0].ToString("X2") + access.RouterID[1].ToString("X2")); } else { item.SubItems.Add(stroutname + "(" + access.RouterID[0].ToString("X2") + access.RouterID[1].ToString("X2") + ")"); } item.SubItems.Add(record.Occtime.ToString()); item.SubItems.Add(access.Occtime.ToString()); if (DateTime.Compare(record.Occtime, access.Occtime) > 0) { item.SubItems.Add("****"); } else { item.SubItems.Add(String.Format("{0:N2} h", (access.Occtime - record.Occtime).TotalHours)); } } else { continue; } recordlistview.Items.Add(item); } label4.Text = "Current record number: " + recordlistview.Items.Count; }
/// <summary> /// Excel导出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void excelbtn_Click(object sender, EventArgs e) { //开始选择出入讯息 DateTime dt = startdtpicker.Value; DateTime Startdt = new DateTime(dt.Year, dt.Month, dt.Day); dt = enddtpicker.Value; DateTime Enddt = new DateTime(dt.Year, dt.Month, dt.Day); List <AccessRecord> lists = new List <AccessRecord>(); string strid = "", strname = "", strinname = "", stroutname = ""; strid = tagtb.Text; if (!"".Equals(strid)) { strname = CommonBoxOperation.GetTagName(strid); if (null == strname) {//说明strid可能是名称 Tag tg = CommonBoxOperation.GetTagFromName(strid); if (null != tg) { strid = tg.ID[0].ToString("X2") + tg.ID[1].ToString("X2"); } } } TagAccessRecordOperation.tagAccessOper.GetAccessRecord(strid, Startdt, Enddt, ref lists); if (lists.Count <= 0) { MessageBox.Show("對不起,記錄不存在!"); return; } SaveFileDialog MyDialog = new SaveFileDialog(); MyDialog.Title = "選擇出入統計文件保存位置"; MyDialog.Filter = "所有文本文件|*.xls"; if (MyDialog.ShowDialog() != DialogResult.OK) { return; } string StrFilePath = MyDialog.FileName; NpoiLib MyNpoiLib = new NpoiLib("Access statistics"); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 0, "Tag ID"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 0, 6000); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 1, "卡片名稱"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 1, 6000); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 2, "入口基站"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 2, 6000); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 3, "出口基站"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 3, 6000); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 4, "進入時間"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 4, 8000); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 5, "外出時間"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 5, 8000); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, 0, 6, "間隔時間"); MyNpoiLib.SetColumnWidth(MyNpoiLib.sheet1, 6, 2000); int index = -1, row = 0; foreach (AccessRecord record in lists) { index++; if (record.isMark) { continue; } strid = record.TagID[0].ToString("X2") + record.TagID[1].ToString("X2"); strname = CommonBoxOperation.GetTagName(strid); AccessRecord access = null; if (record.rttype == ReferType.Entrance) {//说明当前是一个入口参考点,我们接下来需要找出口 strinname = CommonBoxOperation.GetRouterName(record.RouterID[0].ToString("X2") + record.RouterID[1].ToString("X2")); access = SelectAccessRecord(lists.GetRange(index + 1, lists.Count - index - 1), record.TagID, ReferType.Export); if (null == access) { continue; } stroutname = CommonBoxOperation.GetRouterName(access.RouterID[0].ToString("X2") + access.RouterID[1].ToString("X2")); access.isMark = true; } else { continue; } MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 0, strid); if (null == strname || "".Equals(strname)) { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 1, "****"); } else { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 1, strname); } if (null == strinname || "".Equals(strinname)) { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 2, record.RouterID[0].ToString("X2") + record.RouterID[1].ToString("X2")); } else { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 2, strinname + "(" + record.RouterID[0].ToString("X2") + record.RouterID[1].ToString("X2") + ")"); } if (null == stroutname || "".Equals(stroutname)) { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 3, access.RouterID[0].ToString("X2") + access.RouterID[1].ToString("X2")); } else { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 3, stroutname + "(" + access.RouterID[0].ToString("X2") + access.RouterID[1].ToString("X2") + ")"); } MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 4, record.Occtime.ToString()); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 5, access.Occtime.ToString()); if (DateTime.Compare(record.Occtime, access.Occtime) > 0) { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 6, "****"); } else { MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 6, String.Format("{0:N2} h", (access.Occtime - record.Occtime).TotalHours)); } row++; } if (row <= 0) { MessageBox.Show("對不起,當前沒有記錄!"); return; } MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 0, "###當前記錄總數為:"); MyNpoiLib.writeToCell(MyNpoiLib.sheet1, row + 1, 1, row.ToString() + " 條"); MyNpoiLib.WriteToFile(StrFilePath); MessageBox.Show("導出文件成功!"); }
/// <summary> /// 开始按钮,从原始资料中取出时间段的数据包数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StartBtn_Click(object sender, EventArgs e) { if (StrStart.Equals(StartBtn.Text)) { //获取设置的年月日,并判断其是否符合条件 int syear, smonth, sday, eyear, emonth, eday, shour, sminute, ehour, eminute; //tag的ID或名称 string strtaginfor = TrackTagText.Text.ToUpper().Trim(); if ("".Equals(strtaginfor)) { MessageBox.Show("軌跡分析的Tag信息不能為空!"); return; } Tag tag_name = CommonBoxOperation.GetTagFromName(strtaginfor); if (null != tag_name) { strtaginfor = tag_name.ID[0].ToString("X2") + tag_name.ID[1].ToString("X2"); } DateTime StartDT, EndDT; StartDT = StartDTPicker.Value; EndDT = EndDTPicker.Value; syear = StartDT.Year; smonth = StartDT.Month; sday = StartDT.Day; eyear = EndDT.Year; emonth = EndDT.Month; eday = EndDT.Day; try { shour = Convert.ToInt32(sHourCb.Text); sminute = Convert.ToInt32(sMinitueCb.Text); ehour = Convert.ToInt32(eHourCB.Text); eminute = Convert.ToInt32(eMinitueCB.Text); } catch (Exception) { MessageBox.Show("對不起,設置的開始時間或結束時間有誤!"); return; } //获取开始时间和结束时间 StartDT = new DateTime(syear, smonth, sday, shour, sminute, 0); EndDT = new DateTime(eyear, emonth, eday, ehour, eminute, 59); //小于零t1早于t2 if (DateTime.Compare(StartDT, EndDT) > 0) { MessageBox.Show("結束日期時間應該在開始日期時間之後!"); return; } //取出原始记录信息 string strrecorddir = Environment.CurrentDirectory + @"\Record"; if (!Directory.Exists(strrecorddir)) { MessageBox.Show("對不起,沒有任何記錄!"); return; } string[] StrDirs = FileOperation.GetAllDirName(strrecorddir); if (null == StrDirs || StrDirs.Length <= 0) { MessageBox.Show("對不起,沒有任何記錄!"); return; } if (null != DrawIMG.Frm && DrawIMG.Frm.MyUdpClient != null) { MessageBox.Show("對不起,查詢歷史軌跡時需要關閉網絡連接!"); return; } string strdirname = "", strcuryear = "", strcurmonth = "", strcurday = "", strcurhour = ""; int index = -1, curyear = -1, curmonth = -1, curday = -1, curhour = -1; DateTime curdt; PickerTagsList.Clear(); //判断年月日是否符合条件 foreach (string dir in StrDirs) { index = dir.LastIndexOf("\\"); strdirname = dir.Substring(index + 1, 8); strcuryear = strdirname.Substring(0, 4); strcurmonth = strdirname.Substring(4, 2); strcurday = strdirname.Substring(6, 2); try { curyear = Convert.ToInt32(strcuryear); curmonth = Convert.ToInt32(strcurmonth); curday = Convert.ToInt32(strcurday); } catch (Exception) { continue; } //文件创建的时间 curdt = new DateTime(curyear, curmonth, curday); DateTime startdt = new DateTime(StartDT.Year, StartDT.Month, StartDT.Day); DateTime enddt = new DateTime(EndDT.Year, EndDT.Month, EndDT.Day); //判断文件创建时间是否在指定的范围内 if (DateTime.Compare(curdt, startdt) < 0 || DateTime.Compare(curdt, enddt) > 0) { continue; } //获取到当前时间的小时部分 try { string[] StrFiles = Directory.GetFiles(dir); foreach (string str in StrFiles) { strcurhour = str.Substring(str.LastIndexOf("\\") + 1, 2); try { curhour = Convert.ToInt32(strcurhour); } catch (Exception) { continue; } //此时判断小时是否满足要求 curdt = new DateTime(curdt.Year, curdt.Month, curdt.Day, curhour, 0, 0); startdt = new DateTime(startdt.Year, startdt.Month, startdt.Day, shour, 0, 0); enddt = new DateTime(enddt.Year, enddt.Month, enddt.Day, ehour, 0, 0); if (DateTime.Compare(curdt, startdt) < 0 || DateTime.Compare(curdt, enddt) > 0) { continue; } //记录年月日时都满足要求 startdt = new DateTime(startdt.Year, startdt.Month, startdt.Day, startdt.Hour, sminute, 0); enddt = new DateTime(enddt.Year, enddt.Month, enddt.Day, enddt.Hour, eminute, 0); RecordOperation.GetRecord(startdt, enddt, strtaginfor, str, ref PickerTagsList); } } catch (System.IO.IOException) { MessageBox.Show("對不起,文件流已经被占用。請先關閉連接監控..."); } catch (Exception ex) { FileOperation.WriteLog("获取原始记录时出现异常,异常异常原因:" + ex.ToString()); } } List <TagPack> deletagpacks = new List <TagPack>(); TagPack temptpk = null; //清除掉两个序列号相同的Tag数据包 for (int i = 0; i < PickerTagsList.Count; i++) { if (i + 1 < PickerTagsList.Count) { if (PickerTagsList[i].index == PickerTagsList[i + 1].index) { if (PickerTagsList[i].SigStren < PickerTagsList[i + 1].SigStren) {//交换位置 temptpk = CommonBoxOperation.CloneTagPack(PickerTagsList[i]); PickerTagsList[i] = PickerTagsList[i + 1]; PickerTagsList[i + 1] = temptpk; } deletagpacks.Add(PickerTagsList[i]); } } } foreach (TagPack deletp in deletagpacks) { PickerTagsList.Remove(deletp); } //此时所有符合添加的数据包都添加到PickerTags集合中处了 TrackListBX.Items.Clear(); foreach (TagPack tpk in PickerTagsList) { TrackListBX.Items.Add( tpk.ReportTime + " TagID:" + tpk.TD[0].ToString("X2") + tpk.TD[1].ToString("X2") + " RouterID:" + tpk.RD_New[0].ToString("X2") + tpk.RD_New[1].ToString("X2") + " 是否警報:" + (tpk.isAlarm == 0x04 ? "yes" : "no") + " 信號強度:" + tpk.SigStren.ToString() + " 電量:" + tpk.Bat.ToString() + " 休眠時間:" + (tpk.Sleep / 10).ToString() + " 未移動時間:" + tpk.ResTime.ToString() + " 序列號:" + tpk.index.ToString()); } recordnumlabel.Text = "總記錄數為:" + PickerTagsList.Count; if (PickerTagsList.Count <= 0) { MessageBox.Show("該Tag的原始資料不存在!"); return; } //图形模式画图地图 StartDTe = new DateTime(StartDT.Year, StartDT.Month, StartDT.Day, StartDT.Hour, StartDT.Minute, StartDT.Second); EndDTe = new DateTime(EndDT.Year, EndDT.Month, EndDT.Day, EndDT.Hour, EndDT.Minute, EndDT.Second); Start(); } else { Stop(); recordnumlabel.Text = "總記錄數為:0"; return; } }