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; }
}
}