1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#region
 
using System;
using System.Data;
using CSFrameworkV5.Common;
using CSFrameworkV5.Core;
using CSFrameworkV5.Core.CodeGenerator;
using CSFrameworkV5.Interfaces;
using CSFrameworkV5.Models;
 
///*************************************************************************/
///*
///* 文件名    :SystemLog.cs                                
///* 程序说明  : 系统日志业务逻辑
///* 原创作者  :www.csframework.com 
///* 
///* Copyright 2006-2021 C/S框架网 www.csframework.com
///*
///**************************************************************************/
 
#endregion
 
namespace CSFrameworkV5.DataAccess
{
    /// <summary>
    ///     修改历史记录的数据层
    /// </summary>
    [DefaultORM_UpdateMode(typeof(sys_LogFields), true)]
    public class dalEditLogHistory : dalBaseDataDict, IBridge_EditLogHistory
    {
        /// <summary>
        ///     构造器
        /// </summary>
        /// <param name="loginer">当前登录用户</param>
        public dalEditLogHistory(Loginer loginer) : base(loginer)
        {
            _KeyName = sys_LogFields.__KeyName; //主键字段
            _TableName = sys_LogFields.__TableName; //表名
            _ModelType = typeof(sys_LogFields); //指定ORM模型
            _UpdateSummaryKeyMode = UpdateKeyMode.None;
        }
 
        /// <summary>
        ///     获取跟踪的字段
        /// </summary>
        /// <param name="tableName">表名</param>
        public DataTable GetLogFieldDef(string tableName)
        {
            var sql =
                $"SELECT * FROM sys_LogFields WHERE TableName={_Database.ParamSymboName}TableName AND FlagLog={_Database.ParamSymboName}FlagLog;";
            var cmd = _Database.CreateCommand(sql);
            cmd.AddParam("TableName", tableName);
            cmd.AddParam("FlagLog", "Y");
            return _Database.GetTable(cmd.Command, sys_LogFields.__TableName);
        }
 
        /// <summary>
        ///     获取指定表需要跟踪的字段列表
        /// </summary>
        /// <param name="tableName">数据表</param>
        /// <returns></returns>
        public string[] GetTracedFields(string tableName)
        {
            var tracedFields = GetLogFieldDef(tableName);
            var fields = new string[tracedFields.Rows.Count];
            for (var i = 0; i <= tracedFields.Rows.Count - 1; i++)
                fields[i] = tracedFields.Rows[i]["FieldName"].ToStringEx();
 
            return fields;
        }
 
        [Obsolete]
        public bool SaveFieldDef(DataTable data)
        {
            var ds = new DataSet();
            ds.Tables.Add(data);
            return Update(ds);
        }
 
        public bool SaveLog(DataSet dsLogData)
        {
            return base.Update(dsLogData);
        }
 
        /// <summary>
        ///     搜索系统日志数据
        /// </summary>
        /// <param name="logUser">用户</param>
        /// <param name="tableName">数据表名</param>
        /// <param name="dateFrom">日志日期:由</param>
        /// <param name="dateTo">日志日期:至</param>
        /// <returns></returns>
        public DataSet SearchLog(string logUser, string tableName,
            string keyValue, DateTime dateFrom,
            DateTime dateTo)
        {
            var cmd = _Database.CreateSqlProc("sp_sys_SearchLog");
            cmd.AddParam("LogUser", DbType.String, logUser);
            cmd.AddParam("TableName", DbType.String, tableName);
            cmd.AddParam("KeyValue", DbType.String, keyValue);
            cmd.AddParam("LogDateFrom", DbType.String,
                ConvertEx.ToCharYYYYMMDD(dateFrom));
            cmd.AddParam("LogDateTo", DbType.String,
                ConvertEx.ToCharYYYYMMDD(dateTo));
            var ds = _Database.GetDataSet(cmd.Command);
            ds.Tables[0].TableName = sys_Log.__TableName;
            ds.Tables[1].TableName = sys_LogDtl.__TableName;
            return ds;
        }
 
        /// <summary>
        ///     根据表名获取该表的SQL命令生成器
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <returns></returns>
        protected override IGenerateSqlCommand CreateSqlGenerator(
            DataTable table)
        {
            Type ORM = null;
            if (table.TableName == sys_LogFields.__TableName)
                ORM = typeof(sys_LogFields);
 
            if (table.TableName == sys_Log.__TableName) ORM = typeof(sys_Log);
 
            if (table.TableName == sys_LogDtl.__TableName)
                ORM = typeof(sys_LogDtl);
 
            if (ORM == null) throw new Exception(table.TableName + "表没有ORM模型!");
 
            return new GenerateSqlCmdByTableFields(ORM, table,
                GeneratorFactory);
        }
    }
}