Пример #1
0
        /// <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;
            }
        }