zoukankan      html  css  js  c++  java
  • 一种历史详细记录表,完整实现:CommonOperateLog 详细记录某用户、某时间、对某表、某主键、某字段的修改(新旧值

    一种历史详细记录表,完整实现:CommonOperateLog 详细记录某用户、某时间、对某表、某主键、某字段的修改(新旧值)。 

    特别适用于订单历史记录、重要财务记录、审批流记录

    表设计:

      1 namespace Business.OperateLog
      2 {
      3     /// <summary>
      4     /// 公共系统操作日志记录类
      5     /// 详细记录某用户、某时间、对某表、某主键、某字段的修改(新旧值)
      6     /// </summary>
      7     public class CommonOperateLog
      8     {
      9         /// <summary>
     10         /// 操作表表名
     11         /// </summary>
     12         public string TableName { get; private set; }
     13 
     14         /// <summary>
     15         /// 操作表主键
     16         /// </summary>
     17         public long TableKeyId { get; private set; }
     18 
     19         /// <summary>
     20         /// 操作类型
     21         /// </summary>
     22         public OperateType Type { get; private set; }
     23 
     24         /// <summary>
     25         /// 备注
     26         /// </summary>
     27         public string Remark { get;private set; }
     28 
     29         /// <summary>
     30         /// 操作者id
     31         /// </summary>
     32         public long UserId { get; private set; }
     33 
     34         /// <summary>
     35         /// 操作者姓名
     36         /// </summary>
     37         public string UserName { get; private set; }
     38 
     39         /// <summary>
     40         /// 字段新旧值修改详细日志
     41         /// </summary>
     42         public List<FieldUpdateLogContent> FieldUpdateLogContents { get; private set; }
     43 
     44 
     45         /// <summary>
     46         /// 构造
     47         /// </summary>
     48         public CommonOperateLog(string tableName, long tableKeyId, OperateType type, string remark = "", long userId = 0, string userName = "")
     49         {
     50             TableName = tableName;
     51             TableKeyId = tableKeyId;
     52             Type = type;
     53             Remark = remark ?? string.Empty;
     54             UserId = userId;
     55             UserName = userName ?? string.Empty;
     56             FieldUpdateLogContents = new List<FieldUpdateLogContent>();
     57         }
     58 
     59         /// <summary>
     60         /// 添加字段新旧值修改详细日志
     61         /// </summary>
     62         public List<FieldUpdateLogContent> AddLog(FieldUpdateLogContent log)
     63         {
     64             FieldUpdateLogContents.Add(log);
     65             return FieldUpdateLogContents;
     66         }
     67 
     68         /// <summary>
     69         /// 保存修改历史
     70         /// </summary>
     71         public void SaveOperationLog()
     72         {
     73             ThreadPool.QueueUserWorkItem(t =>   //使用线程异步保存,加速执行速度
     74             {
     75                 //插入操作日志表
     76                 var model = new OperationLogModel
     77                 {
     78                     TableName = TableName,
     79                     TableKeyId = TableKeyId,
     80                     Type = Type.GetHashCode(),
     81                     Content = JsonConvert.SerializeObject(FieldUpdateLogContents).AbbreviateString(1990),
     82                     Creator = CommonHelper.GetUserOperator(UserId.ToString(),UserName),
     83                     CreateTime = DateTime.Now,
     84                     IsDel = BooleanEnum.No.GetHashCode(),
     85                     Remark = Remark,
     86                 };
     87                 if (!CommonDAL.Add(model))
     88                     LogFactory.GetLogger("SkyLog").Error(new Exception("保存详细修改历史失败"), "保存详细修改历史失败", "SaveOperationLog", TableName,
     89                         null, "", "", TableKeyId.ToString());
     90             });
     91         }
     92     }
     93 
     94 
     95     /// <summary>
     96     /// 字段新旧值修改详细日志
     97     /// </summary>
     98     public class FieldUpdateLogContent
     99     {
    100         /// <summary>
    101         /// 字段英文名,一般就是表的列名
    102         /// </summary>
    103         public string EnName { get; private set; }
    104 
    105         /// <summary>
    106         /// 字段中文名,一般就是表的中文描述名
    107         /// </summary>
    108         public string CNName { get; private set; }
    109 
    110         /// <summary>
    111         /// 旧值
    112         /// </summary>
    113         public string OldValue { get; private set; }
    114 
    115         /// <summary>
    116         /// 新值
    117         /// </summary>
    118         public string NewValue { get; private set; }
    119 
    120 
    121         /// <summary>
    122         /// 构造
    123         /// </summary>
    124         public FieldUpdateLogContent(string enName,string cnName,string oldValue,string newValue)
    125         {
    126             EnName = enName;
    127             CNName = cnName;
    128             OldValue = oldValue;
    129             NewValue = newValue;
    130         }
    131     }
    132 
    133 
    134     /// <summary>
    135     /// 操作类型
    136     /// </summary>
    137     public enum OperateType
    138     {
    139         [Description("新增")]
    140         Add = 0,
    141 
    142         [Description("更新")]
    143         Update = 1,
    144 
    145         [Description("逻辑删除")]
    146         Remove = 2,
    147     }
    148 }
    View Code

    表设计字段:

    var model = new OperationLogModel
    {
    TableName = TableName,
    TableKeyId = TableKeyId,
    Type = Type.GetHashCode(),
    Content = JsonConvert.SerializeObject(FieldUpdateLogContents).AbbreviateString(1990),
    Creator = CommonHelper.GetUserOperator(UserId.ToString(),UserName),
    CreateTime = DateTime.Now,
    IsDel = BooleanEnum.No.GetHashCode(),
    Remark = Remark,
    };

    调用:

    1  public ContentResult OperateLog()
    2         {
    3             var operateLog = new CommonOperateLog("TableName", 1, OperateType.Add, "remark", CurrentUser.UserId, CurrentUser.UserName);
    4             operateLog.AddLog(new FieldUpdateLogContent("Name", "学生姓名", "钮林华", "钮林华22"));
    5             operateLog.AddLog(new FieldUpdateLogContent("CityId", "城市id", "101", "102"));
    6             operateLog.SaveOperationLog();
    7             return new ContentResult { Content = operateLog.ToJson() };
    8         }
    View Code
  • 相关阅读:
    MySQL系列(二)
    MySQL系列(一)
    RabbitMQ的安装部署
    RabbitMQ原理介绍
    消息中间件metaq
    消息中间件之zookper安装部署
    ZooKeeper基本原理
    消息中间件剖析
    了解Node.js
    windows下使用Git
  • 原文地址:https://www.cnblogs.com/nlh774/p/6986148.html
Copyright © 2011-2022 走看看