示例#1
0
        private void FindDetectCount2(object obj)
        {
            int fileCount = 0;
            List <TerminalInfo> terminalInfos = new List <TerminalInfo>();
            MacCount            macCount      = (MacCount)obj;
            Stopwatch           watch         = new Stopwatch();

            watch.Start();
            //查找 ZIP文件列表,并解压到临时目录处理
            var         files = Directory.EnumerateFiles(macCount.DataPath, "*", SearchOption.TopDirectoryOnly);
            List <Task> tasks = new List <Task>();

            files.ToList().ForEach(file =>
            {
                Task task = Task.Factory.StartNew((f) =>
                {
                    Disply("开始解压文件" + file + "");
                    using (ZipFile zipFile = new ZipFile(file))
                    {
                        zipFile.ExtractAll(macCount.TempPath + "/" + Path.GetFileNameWithoutExtension(file), true);
                    }

                    //只获取终端特征信息的文件
                    var zipFiles = Directory.EnumerateFiles(macCount.TempPath + "/" + Path.GetFileNameWithoutExtension(file), "*_WifiTerminalInfoLog_*", SearchOption.TopDirectoryOnly);
                    int count    = zipFiles.Count();
                    zipFiles.ToList().ForEach(macFile =>
                    {
                        try
                        {
                            string data  = Methods.ReadGzip(File.ReadAllBytes(macFile));
                            DataTable dt = Methods.String2DataTable(data);

                            //锁住
                            lock (lockObj)
                            {
                                foreach (DataRow row in dt.Rows)
                                {
                                    var mac         = row["terminal_mac"].ToString();
                                    var detect_time = row["detect_time"].ToString().GetInt64();
                                    var site_id     = row["site_id"].ToString();

                                    if (detect_time >= macCount.BeginTime && detect_time <= macCount.EndTime && macCount.SiteIds.Contains(site_id))
                                    {
                                        terminalInfos.Add(new TerminalInfo()
                                        {
                                            SiteId = site_id,
                                            MAC    = mac
                                        });
                                    }
                                }
                                fileCount++;
                            }

                            Disply("文件:" + macFile + "处理成功,即将删除");
                            File.Delete(macFile);
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Log.Error("", ex);
                        }
                    });
                }, file);
                tasks.Add(task);

                if (tasks.Count >= 3)
                {
                    Task.WaitAll(tasks.ToArray());
                    tasks.Clear();
                }
            });

            if (tasks.Count > 0)
            {
                Task.WaitAll(tasks.ToArray());
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("场所采集数据统计:");
            sb.AppendLine("场所编码\t采集数量\t去重数量");

            foreach (var item in macCount.SiteIds.Split(','))
            {
                var caiji   = terminalInfos.Count(f => f.SiteId == item);
                var quchong = terminalInfos.Where(f => f.SiteId == item).Select(f => f.MAC).Distinct().Count();
                //打印出来看看
                Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(terminalInfos.Where(f => f.SiteId == item).ToList()));

                sb.AppendLine(item + "\t" + caiji + "\t" + quchong);
            }

            watch.Stop();
            sb.AppendLine("共处理gz文件" + fileCount + "个,耗时:" + watch.ElapsedMilliseconds + "毫秒");

            String fileName = AppDomain.CurrentDomain.BaseDirectory + "\\"
                              + "采集统计"
                              + Methods.ConvertIntDateTime(macCount.BeginTime).ToString("yyyyMMddHHmmss")
                              + " - "
                              + Methods.ConvertIntDateTime(macCount.EndTime).ToString("yyyyMMddHHmmss")
                              + ".txt";

            File.WriteAllText(fileName, sb.ToString());
            System.Diagnostics.Process.Start(AppDomain.CurrentDomain.BaseDirectory);
            Disply("文件分析完成,数据保存在:" + fileName);
        }
示例#2
0
        private void FindDetectCount(object obj)
        {
            //外层的键表示场所编码,内层的键表示具体的MAC
            Dictionary <string, int> dic = new Dictionary <string, int>();
            MacCount macCount            = (MacCount)obj;
            //查找 ZIP文件列表,并解压到临时目录处理
            var files = Directory.EnumerateFiles(macCount.DataPath, "*", SearchOption.TopDirectoryOnly);

            files.ToList().ForEach(file =>
            {
                Disply("开始解压文件" + file + "");
                using (ZipFile zipFile = new ZipFile(file))
                {
                    zipFile.ExtractAll(macCount.TempPath + "/" + Path.GetFileNameWithoutExtension(file), true);
                }
                Disply("文件" + file + "解压成功,开始数据分析,该操作耗时较长,请耐心等待...");
                //只获取终端特征信息的文件
                var zipFiles = Directory.EnumerateFiles(macCount.TempPath + "/" + Path.GetFileNameWithoutExtension(file), "*_WifiTerminalInfoLog_*", SearchOption.TopDirectoryOnly);
                int i        = 0;
                int count    = zipFiles.Count();
                zipFiles.ToList().ForEach(macFile =>
                {
                    try
                    {
                        i++;
                        Disply("文件" + file + "解压成功,开始数据分析,该操作耗时较长,请耐心等待..." + "当前步骤" + i + "/" + count);
                        string data  = Methods.ReadGzip(File.ReadAllBytes(macFile));
                        DataTable dt = Methods.String2DataTable(data);
                        foreach (DataRow row in dt.Rows)
                        {
                            var mac         = row["terminal_mac"].ToString();
                            var detect_time = Convert.ToInt64(row["detect_time"].ToString());
                            var site_id     = row["site_id"].ToString();

                            if (detect_time >= macCount.BeginTime && detect_time <= macCount.EndTime && macCount.SiteIds.Contains(site_id))
                            {
                                if (dic.ContainsKey(site_id))
                                {
                                    var num      = dic[site_id];
                                    dic[site_id] = num + 1;
                                }
                                else
                                {
                                    dic.Add(site_id, 1);
                                }
                            }
                        }
                    }
                    catch
                    {
                    }
                });
            });

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("场所采集数据统计:");
            sb.AppendLine("场所编码\t采集数量");
            foreach (var key in dic.Keys)
            {
                sb.AppendLine(key + "\t" + dic[key]);
            }

            String fileName = AppDomain.CurrentDomain.BaseDirectory + "\\" + "采集统计" + macCount.BeginTime.ToString() + " - " + macCount.EndTime.ToString() + ".txt";

            File.WriteAllText(fileName, sb.ToString());
            System.Diagnostics.Process.Start(AppDomain.CurrentDomain.BaseDirectory);
            Disply("文件分析完成,数据保存在:" + fileName);
        }