using Cksoft.Data; using Cksoft.Unity; using DllEapEntity; using DllEapEntity.Dtos; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace DllEapDal { /// /// 机台日志处理 /// public class MachineLogDal { private readonly IDatabase CurrDb = null; public MachineLogDal(IDatabase db) { CurrDb = db; } /// /// EAP接口调用30服务器上的日志查看服务获取日志 /// /// /// /// /// /// /// /// /// public LayuiModel GetRemotePaged(string macCode, DateTime? startTime, DateTime? endTime, ref string errorinfo, out int total, int pageIndex = 1, int pageSize = 10) { total = 0; var sql = $@"select a.ipaddress from mqserver a left join mqserverdetail b on a.id=b.mstid left join eapappserver c on b.APServerID=c.id left join eapappservermac d on c.id=d.EapAppserverID left join machine e on d.macid=e.ID where e.fcode='{macCode}'"; var mqAddress = CurrDb.FindList(sql).FirstOrDefault(); if (string.IsNullOrEmpty(mqAddress)) { errorinfo = "设备不存在或未设置AP服务器"; return null; } var url = $"http://{mqAddress}:7979/api/machinelog/get"; var dic = new Dictionary(); dic.Add("macCode", macCode.ToUpper()); dic.Add("startTime", startTime.Value.ToString("yyyy-MM-dd HH:mm:ss")); dic.Add("endTime", endTime.Value.ToString("yyyy-MM-dd HH:mm:ss")); dic.Add("pageIndex", pageIndex.ToString()); dic.Add("pageSize", pageSize.ToString()); var data = HttpRequestHelper>.Get(url, dic, ref errorinfo); if (data != null && data.count > 0) { foreach (var item in data.data) { item.Content = item.Content.Replace("<", "<").Replace(">", ">").Replace("\n", "
"); } } return data; } public IEnumerable Get(string macCode, DateTime? startTime, DateTime? endTime, ref string errorinfo) { var machine = CurrDb.FindListForCondition($" and a.FCode = '{macCode}'", ref errorinfo).FirstOrDefault(); if (machine == null) { errorinfo = "机台不存在"; return null; } //NetworkCredential credential = new NetworkCredential("baoadmin", "!@#Root202012"); //WebClient webClient = new WebClient(); //webClient.Credentials = credential; // var path = "/eap/services/Log"; var path = AppConfigurtaionServices.Configuration["LogDir"]; var days = Math.Ceiling((Convert.ToDateTime(endTime.Value.ToString("yyyy-MM-dd 23:59:59")) - Convert.ToDateTime(startTime.Value.ToString("yyyy-MM-dd 00:00:00"))).TotalDays); var start = Convert.ToDateTime(startTime.Value.ToString("yyyy-MM-dd")); var logAll = new List(); for (int i = 0; i < days; i++) { var curr = start.AddDays(i); var fullPath = path + $"/log{curr.ToString("yyyyMMdd")}/{macCode}_{machine.ID}.log"; if (!File.Exists(fullPath)) { continue; } var lines = File.ReadAllLines(fullPath); var logs = this.AnalysisBuffer(lines); logAll = logAll.Concat(logs).ToList(); } return logAll; } public IEnumerable GetPaged(string macCode, DateTime? startTime, DateTime? endTime, ref string errorinfo, out int total, int pageIndex = 1, int pageSize = 10) { var logs = Get(macCode, startTime, endTime, ref errorinfo); if (logs == null) { total = 0; return null; } logs = logs.Where(c => c.OccurTime >= startTime && c.OccurTime <= endTime); total = logs.Count(); //return logs.OrderByDescending(c => c.OccurTime).Skip((pageIndex - 1) * pageSize).Take(pageSize); return logs.OrderBy(c => c.OccurTime).Skip((pageIndex - 1) * pageSize).Take(pageSize); } private IEnumerable AnalysisBuffer(string[] lines) { var logs = new List(); if (lines == null || lines.Length <= 0 || lines.All(c => string.IsNullOrEmpty(c))) return null; var index = 0; var part = new List(); var occurTime = DateTime.Now; while (index < lines.Length) { if (!string.IsNullOrEmpty(lines[index])) { if (lines[index].Contains("发生时间")) { occurTime = Convert.ToDateTime(lines[index].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries) [0].Split(new char[] { ':' })[1]); } part.Add(lines[index]); if (index < lines.Length - 1) { if (lines[index + 1].Contains("发生时间")) { logs.Add(new MachineLog { OccurTime = occurTime, Content = string.Join("\n", part) }); part = new List(); occurTime = DateTime.Now; } } } else { if (part.Count > 0) { logs.Add(new MachineLog { OccurTime = occurTime, Content = string.Join("\n", part) }); part = new List(); occurTime = DateTime.Now; } } index++; } return logs; } /// /// 导出数据到Txt文件 /// /// /// /// /// /// public byte[] ExportTxt(string macCode, DateTime? startTime, DateTime? endTime, ref string errorinfo) { var pageIndex = 1; var pageSize = int.MaxValue; int total = 0; var data = this.GetRemotePaged(macCode, startTime, endTime, ref errorinfo, out total, pageIndex, pageSize); if (data == null || data.count <= 0) return null; foreach (var item in data.data) { item.Content = item.Content.Replace("<", "<").Replace(">", ">").Replace("
", "\n"); } var str = string.Join("", data.data.Select(c => c.Content)); return Encoding.UTF8.GetBytes(str); //using (MemoryStream mem = new MemoryStream()) //{ // mem.Position = 0; // using (StreamWriter sw = new StreamWriter(mem)) // { // sw.Write(str); // sw.Flush(); // sw.Close(); // } // return mem.ToArray(); //} } } // 发生时间:2021-08-13 00:00:11.142 机台ID:837 机台编号:AA00013 信息:Send //Send 2021-08-13 00:00:11.160 //原始数据:00 00 00 18 00 00 81 03 00 00 00 00 A3 64 01 03 A9 02 00 13 A9 02 00 8F A9 02 00 27 //指令:S1F3 W 序号:41828 // // // //> /// /// 机台日志 /// public class MachineLog { /// /// 发生时间 /// public DateTime OccurTime { get; set; } /// /// 指令发送时间 /// public DateTime SendTime { get; set; } /// /// 设备ID /// public int MacId { get; set; } /// /// 设备编号 /// public string MacCode { get; set; } /// /// 日志类型(发送或接收) /// public string OperateType { get; set; } /// /// 原始数据 /// public string OriginData { get; set; } /// /// 指令 /// public string Order { get; set; } /// /// 序号 /// public int No { get; set; } /// /// 日志内容 /// public string Content { get; set; } } }