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