mh_jy_safe/APT.BaseData.Services/Services/FM/PFSysLogService.cs
2025-08-25 09:56:57 +08:00

335 lines
15 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
{
}
/// <summary>
/// 添加登入系统日志
/// </summary>
/// <param name="userId"></param>
/// <param name="platformType">平台类型 PFPlatTypeEnum</param>
public void AddLoginLog(Guid userId, int platformType)
{
var user = this.GetEntity<T_FM_USER>(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<T_FM_USER>(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);
}
/// <summary>
/// 添加登出系统日志
/// </summary>
/// <param name="userId"></param>
/// <param name="platformType">平台类型 PFPlatTypeEnum</param>
public void AddLoginOut(Guid userId, int platformType)
{
var user = this.GetEntity<T_FM_USER>(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()));
}
/// <summary>
/// 添加新增日志
/// </summary>
/// <param name="userId"></param>
/// <param name="formCode"></param>
/// <param name="ids">实体ID列表 多个逗号隔开</param>
/// <param name="codes">实体编号 多个逗号隔开</param>
/// <param name="extData">额外数据</param>
public void AddAddLog(Guid userId, string formCode, string ids, string codes, string extData)
{
var user = this.GetEntity<T_FM_USER>(userId.ToString());
if (user != null)
{
T_PF_FORM form = null;
if (!string.IsNullOrEmpty(formCode))
form = this.GetEntity<T_PF_FORM>(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);
}
}
/// <summary>
/// 添加编辑日志
/// </summary>
/// <param name="userId"></param>
/// <param name="formCode"></param>
/// <param name="ids">实体ID列表 多个逗号隔开</param>
/// <param name="codes">实体编号 多个逗号隔开</param>
/// <param name="extData">额外数据</param>
public void AddEditLog(Guid userId, string formCode, string ids, string codes, string extData)
{
var user = this.GetEntity<T_FM_USER>(userId.ToString());
if (user != null)
{
T_PF_FORM form = null;
if (!string.IsNullOrEmpty(formCode))
form = this.GetEntity<T_PF_FORM>(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);
}
}
/// <summary>
/// 添加删除日志
/// </summary>
/// <param name="userId"></param>
/// <param name="formCode"></param>
/// <param name="ids">实体ID列表 多个逗号隔开</param>
/// <param name="tableName">实体名称</param>
/// <param name="extData">额外数据</param>
public void AddDeleteLog(Guid userId, string formCode, string ids, string tableName,string extData)
{
var user = this.GetEntity<T_FM_USER>(userId.ToString());
if (user != null)
{
T_PF_FORM form = null;
if (!string.IsNullOrEmpty(formCode))
form = this.GetEntity<T_PF_FORM>(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);
}
}
/// <summary>
/// 添加其他日志
/// </summary>
/// <param name="userId"></param>
/// <param name="formCode"></param>
/// <param name="title">标题</param>
/// <param name="data">数据</param>
/// <param name="extData">额外数据</param>
public void AddOtherLog(Guid userId, string formCode, string title, string data, string extData)
{
var user = this.GetEntity<T_FM_USER>(userId.ToString());
if (user != null)
{
AddLog(user.ORG_ID.Value, userId, PFSysLogTypeEnum., formCode,
title, data, extData);
}
}
/// <summary>
/// 添加系统日志
/// </summary>
/// <param name="orgId">组织</param>
/// <param name="userId">用户</param>
/// <param name="type">类型</param>
/// <param name="title">标题</param>
/// <param name="data">数据</param>
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);
}
/// <summary>
/// 添加系统日志
/// </summary>
/// <param name="orgId">组织</param>
/// <param name="userId">用户</param>
/// <param name="title">标题</param>
/// <param name="data">数据</param>
public void AddLog(Guid orgId, Guid userId, string title, string data)
{
this.AddLog(orgId, userId, title, data, string.Empty);
}
/// <summary>
/// 添加系统日志
/// </summary>
/// <param name="orgId">组织</param>
/// <param name="userId">用户</param>
/// <param name="title">标题</param>
/// <param name="data">数据</param>
/// <param name="extData">额外数据</param>
public void AddLog(Guid orgId, Guid userId, string title, string data, string extData)
{
this.AddLog(orgId, userId, null, title, data, extData);
}
/// <summary>
/// 添加系统日志
/// </summary>
/// <param name="orgId">组织</param>
/// <param name="userId">用户</param>
/// <param name="formCode">表单</param>
/// <param name="title">标题</param>
/// <param name="data">数据</param>
/// <param name="extData">额外数据</param>
public void AddLog(Guid orgId, Guid userId, string formCode, string title, string data, string extData)
{
this.AddLog(orgId, userId, PFSysLogTypeEnum., formCode, title, data, extData);
}
/// <summary>
/// 添加系统日志
/// </summary>
/// <param name="orgId">组织</param>
/// <param name="userId">用户</param>
/// <param name="type">类型</param>
/// <param name="formCode">表单编号</param>
/// <param name="title">标题</param>
/// <param name="data">数据</param>
/// <param name="extData">额外数据</param>
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_PF_FORM>(t => t.CODE == formCode, new BaseFilter(orgId));
if (form != null)
sysLog.LOG_FORM_ID = form.ID;
}
return sysLog;
}
/// <summary>
/// APP登录 多库
/// </summary>
/// <param name="orgId"></param>
/// <param name="userId"></param>
/// <param name="type"></param>
/// <param name="formCode"></param>
/// <param name="title"></param>
/// <param name="data"></param>
/// <param name="extData"></param>
/// <returns></returns>
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_PF_FORM>(t => t.CODE == formCode, filter);
if (form != null)
sysLog.LOG_FORM_ID = form.ID;
}
return sysLog;
}
}
}