using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Enums; using APT.Infrastructure.Core; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.IServices.FM; using System; using System.Linq; using System.Net; using APT.Infrastructure.Api; namespace APT.BaseData.Services.Services.FM { public class PFSysLogService : CommonService, IPFSysLogService { public PFSysLogService(IRepository repository) : base(repository) { } /// /// 添加登入系统日志 /// /// /// 平台类型 PFPlatTypeEnum public void AddLoginLog(Guid userId, int platformType) { var user = this.GetEntity(userId.ToString()); if (user != null) AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.登入, string.Format("用户【{0}】登入{1}系统", user.NAME, ((PFPlatTypeEnum)platformType).ToString()), string.Format("用户ID:{0}", userId.ToString())); } public void AddLoginLogByApp(Guid userId, int platformType,KeywordFilter filter) { var user = this.GetEntity(x=>x.ID== userId, filter); if (user != null) AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.登入, string.Format("用户【{0}】登入{1}系统", user.NAME, ((PFPlatTypeEnum)platformType).ToString()), string.Format("用户ID:{0}", userId.ToString()),filter); } /// /// 添加登出系统日志 /// /// /// 平台类型 PFPlatTypeEnum public void AddLoginOut(Guid userId, int platformType) { var user = this.GetEntity(userId.ToString()); if (user != null) AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.登出, string.Format("用户【{0}】退出{1}系统", user.NAME, ((PFPlatTypeEnum)platformType).ToString()), string.Format("用户ID:{0}", userId.ToString())); } /// /// 添加新增日志 /// /// /// /// 实体ID列表 多个逗号隔开 /// 实体编号 多个逗号隔开 /// 额外数据 public void AddAddLog(Guid userId, string formCode, string ids, string codes, string extData) { var user = this.GetEntity(userId.ToString()); if (user != null) { T_PF_FORM form = null; if (!string.IsNullOrEmpty(formCode)) form = this.GetEntity(t => t.CODE == formCode, new BaseFilter(user.ORG_ID)); AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.新增, formCode, string.Format("用户【{0}】:新增{1}{2}", user.NAME, (form == null ? string.Empty : ("表单:" + form.NAME)), (string.IsNullOrEmpty(codes) ? string.Empty : (",编号:" + codes))), string.Format("ID:{0}", ids), extData); } } /// /// 添加编辑日志 /// /// /// /// 实体ID列表 多个逗号隔开 /// 实体编号 多个逗号隔开 /// 额外数据 public void AddEditLog(Guid userId, string formCode, string ids, string codes, string extData) { var user = this.GetEntity(userId.ToString()); if (user != null) { T_PF_FORM form = null; if (!string.IsNullOrEmpty(formCode)) form = this.GetEntity(t => t.CODE == formCode, new BaseFilter(user.ORG_ID)); AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.编辑, formCode, string.Format("用户【{0}】:编辑{1}{2}", user.NAME, (form == null ? string.Empty : ("表单:" + form.NAME)), (string.IsNullOrEmpty(codes) ? string.Empty : (",编号:" + codes))), string.Format("ID:{0}", ids), extData); } } /// /// 添加删除日志 /// /// /// /// 实体ID列表 多个逗号隔开 /// 实体名称 /// 额外数据 public void AddDeleteLog(Guid userId, string formCode, string ids, string tableName,string extData) { var user = this.GetEntity(userId.ToString()); if (user != null) { T_PF_FORM form = null; if (!string.IsNullOrEmpty(formCode)) form = this.GetEntity(t => t.CODE == formCode, new BaseFilter(user.ORG_ID)); AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.删除, formCode, string.Format("用户【{0}】删除{1}", user.NAME, (form == null ? string.Empty : ("表单:" + form.NAME))), string.Format("ID:{0},{1}", ids, (string.IsNullOrEmpty(tableName) ? string.Empty : ("表名:" + tableName))), extData); } } /// /// 添加其他日志 /// /// /// /// 标题 /// 数据 /// 额外数据 public void AddOtherLog(Guid userId, string formCode, string title, string data, string extData) { var user = this.GetEntity(userId.ToString()); if (user != null) { AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum.其他, formCode, title, data, extData); } } /// /// 添加系统日志 /// /// 组织 /// 用户 /// 类型 /// 标题 /// 数据 public void AddLog(Guid orgId, Guid userId, PFSysLogTypeEnum type, string title, string data) { this.AddLog(orgId, userId, type, string.Empty, title, data, string.Empty); } public void AddLog(Guid orgId, Guid userId, PFSysLogTypeEnum type, string title, string data, KeywordFilter filter) { this.AddLog(orgId, userId, type, string.Empty, title, data, string.Empty, filter); } /// /// 添加系统日志 /// /// 组织 /// 用户 /// 标题 /// 数据 public void AddLog(Guid orgId, Guid userId, string title, string data) { this.AddLog(orgId, userId, title, data, string.Empty); } /// /// 添加系统日志 /// /// 组织 /// 用户 /// 标题 /// 数据 /// 额外数据 public void AddLog(Guid orgId, Guid userId, string title, string data, string extData) { this.AddLog(orgId, userId, null, title, data, extData); } /// /// 添加系统日志 /// /// 组织 /// 用户 /// 表单 /// 标题 /// 数据 /// 额外数据 public void AddLog(Guid orgId, Guid userId, string formCode, string title, string data, string extData) { this.AddLog(orgId, userId, PFSysLogTypeEnum.其他, formCode, title, data, extData); } /// /// 添加系统日志 /// /// 组织 /// 用户 /// 类型 /// 表单编号 /// 标题 /// 数据 /// 额外数据 public void AddLog(Guid orgId, Guid userId, PFSysLogTypeEnum type, string formCode, string title, string data, string extData) { var sysLog = this.DoAddLog(orgId, userId, type, formCode, title, data, extData); this.AddEntity(sysLog); } public void AddLog(Guid orgId, Guid userId, PFSysLogTypeEnum type, string formCode, string title, string data, string extData, KeywordFilter filter) { var sysLog = this.DoAddLog(orgId, userId, type, formCode, title, data, extData, filter); this.AddEntityByConn(sysLog,filter.SpecifyDbConn); } private T_PF_SYS_LOG DoAddLog(Guid orgId, Guid userId, PFSysLogTypeEnum type, string formCode, string title, string data, string extData) { var httpRequest = HttpContext.Current.Request; string ip = string.Empty; string ipv4 = string.Empty; string hostName = string.Empty; string browser = string.Empty; if (httpRequest.HttpContext.Connection.RemoteIpAddress != null) ip = httpRequest.HttpContext.Request.Headers["X-Forwarded-For"]; if (string.IsNullOrEmpty(ip)) ip = httpRequest.Host.Host; try { foreach (IPAddress ipAddr in Dns.GetHostEntry(ip).AddressList) { if (ipAddr.AddressFamily.ToString() == "InterNetwork") { ipv4 = ipAddr.ToString(); } } } catch { } try { hostName = Dns.GetHostEntry(ip).HostName; } catch { } if (string.IsNullOrEmpty(hostName) && string.Compare(ip, httpRequest.HttpContext.Request.Host.Value, true) != 0) hostName = httpRequest.HttpContext.Request.Host.Value; if (httpRequest.HttpContext.Request.Headers["User-Agent"].Count >= 0) browser = httpRequest.HttpContext.Request.Headers["User-Agent"].FirstOrDefault(); T_PF_SYS_LOG sysLog = new T_PF_SYS_LOG(); sysLog.ID = Guid.NewGuid(); sysLog.ORG_ID = orgId; sysLog.LOG_TYPE = (int)type; sysLog.USER_ID = userId; sysLog.LOG_TIME = DateTime.Now; sysLog.LOG_TITLE = title; sysLog.LOG_DATA = data; sysLog.EXT_DATA = extData; sysLog.HOST_NAME = (string.IsNullOrEmpty(hostName) ? string.Empty : string.Format("主机名:{0},", hostName)) + (string.IsNullOrEmpty(ipv4) ? string.Empty : string.Format("IP:{0}", ipv4)); sysLog.BROWSER_NAME = browser; if (!string.IsNullOrEmpty(formCode)) { var form = this.GetEntity(t => t.CODE == formCode, new BaseFilter(orgId)); if (form != null) sysLog.LOG_FORM_ID = form.ID; } return sysLog; } /// /// APP登录 多库 /// /// /// /// /// /// /// /// /// private T_PF_SYS_LOG DoAddLog(Guid orgId, Guid userId, PFSysLogTypeEnum type, string formCode, string title, string data, string extData, KeywordFilter filter) { var httpRequest = HttpContext.Current.Request; string ip = string.Empty; string ipv4 = string.Empty; string hostName = string.Empty; string browser = string.Empty; if (httpRequest.HttpContext.Connection.RemoteIpAddress != null) ip = httpRequest.HttpContext.Request.Headers["X-Forwarded-For"]; if (string.IsNullOrEmpty(ip)) ip = httpRequest.Host.Host; try { foreach (IPAddress ipAddr in Dns.GetHostEntry(ip).AddressList) { if (ipAddr.AddressFamily.ToString() == "InterNetwork") { ipv4 = ipAddr.ToString(); } } } catch { } try { hostName = Dns.GetHostEntry(ip).HostName; } catch { } if (string.IsNullOrEmpty(hostName) && string.Compare(ip, httpRequest.HttpContext.Request.Host.Value, true) != 0) hostName = httpRequest.HttpContext.Request.Host.Value; if (httpRequest.HttpContext.Request.Headers["User-Agent"].Count >= 0) browser = httpRequest.HttpContext.Request.Headers["User-Agent"].FirstOrDefault(); T_PF_SYS_LOG sysLog = new T_PF_SYS_LOG(); sysLog.ID = Guid.NewGuid(); sysLog.ORG_ID = orgId; sysLog.LOG_TYPE = (int)type; sysLog.USER_ID = userId; sysLog.LOG_TIME = DateTime.Now; sysLog.LOG_TITLE = title; sysLog.LOG_DATA = data; sysLog.EXT_DATA = extData; sysLog.HOST_NAME = (string.IsNullOrEmpty(hostName) ? string.Empty : string.Format("主机名:{0},", hostName)) + (string.IsNullOrEmpty(ipv4) ? string.Empty : string.Format("IP:{0}", ipv4)); sysLog.BROWSER_NAME = browser; if (!string.IsNullOrEmpty(formCode)) { var form = this.GetEntity(t => t.CODE == formCode, filter); if (form != null) sysLog.LOG_FORM_ID = form.ID; } return sysLog; } } }