0
0
Ver Fonte

增加系统表Dual,用于查询系统函数。
增加表实体属性特性[ServerTime],用于审计数据绑定步计算的数据库时间。

zhontai há 4 anos atrás
pai
commit
87712afc08

+ 9 - 0
Admin.Core.Common/Attributes/ServerTimeAttribute.cs

@@ -0,0 +1,9 @@
+using System;
+
+namespace Admin.Core.Common.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class ServerTimeAttribute : Attribute
+    {
+    }
+}

+ 18 - 0
Admin.Core.Model/Admin/DualEntity.cs

@@ -0,0 +1,18 @@
+using FreeSql.DataAnnotations;
+using System;
+
+namespace Admin.Core.Model.Admin
+{
+    /// <summary>
+    /// 系统表,用于查询系统函数
+    /// </summary>
+	[Table(Name = "ad_dual")]
+    public class DualEntity
+    {
+        /// <summary>
+        /// 主键Id
+        /// </summary>
+        [Column(Position = 1, IsPrimary = true, IsNullable = false)]
+        public Guid Id { get; set; }
+    }
+}

+ 10 - 0
Admin.Core/Admin.Core.Model.xml

@@ -194,6 +194,16 @@
             Markdown文档
             </summary>
         </member>
+        <member name="T:Admin.Core.Model.Admin.DualEntity">
+            <summary>
+            系统表,用于查询系统函数
+            </summary>
+        </member>
+        <member name="P:Admin.Core.Model.Admin.DualEntity.Id">
+            <summary>
+            主键Id
+            </summary>
+        </member>
         <member name="T:Admin.Core.Model.Admin.LogAbstract">
             <summary>
             日志

+ 16 - 8
Admin.Core/Db/DBServiceCollectionExtensions.cs

@@ -7,6 +7,9 @@ using Admin.Core.Common.Configs;
 using Admin.Core.Common.Helpers;
 using Admin.Core.Common.Auth;
 using Admin.Core.Common.Dbs;
+using Admin.Core.Model.Admin;
+using System.Reflection;
+using Admin.Core.Common.Attributes;
 
 namespace Admin.Core.Db
 {
@@ -83,8 +86,8 @@ namespace Admin.Core.Db
 
             #region 审计数据
             //计算服务器时间
-            //var serverTime = fsql.Select<T>().Limit(1).First(a => DateTime.local);
-            //var timeOffset = DateTime.UtcNow.Subtract(serverTime);
+            var serverTime = fsql.Select<DualEntity>().Limit(1).First(a => DateTime.UtcNow);
+            var timeOffset = DateTime.UtcNow.Subtract(serverTime);
             var user = services.BuildServiceProvider().GetService<IUser>();
             fsql.Aop.AuditValue += (s, e) =>
             {
@@ -106,9 +109,12 @@ namespace Admin.Core.Db
                         case "TenantId":
                             e.Value = user.TenantId;
                             break;
-                            //case "CreatedTime":
-                            //    e.Value = DateTime.Now.Subtract(timeOffset);
-                            //    break;
+                    }
+
+                    if (e.Property.GetCustomAttribute<ServerTimeAttribute>(false) != null && (e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?))
+                    && (e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default))
+                    {
+                        e.Value = DateTime.Now.Subtract(timeOffset);
                     }
                 }
                 else if (e.AuditValueType == FreeSql.Aop.AuditValueType.Update)
@@ -121,9 +127,11 @@ namespace Admin.Core.Db
                         case "ModifiedUserName":
                             e.Value = user.Name;
                             break;
-                            //case "ModifiedTime":
-                            //    e.Value = DateTime.Now.Subtract(timeOffset);
-                            //    break;
+                    }
+                    if (e.Property.GetCustomAttribute<ServerTimeAttribute>(false) != null && (e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?))
+                    && (e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default))
+                    {
+                        e.Value = DateTime.Now.Subtract(timeOffset);
                     }
                 }
             };

+ 6 - 1
Admin.Core/Db/DbHelper.cs

@@ -286,6 +286,11 @@ namespace Admin.Core.Db
                 using (var uow = db.CreateUnitOfWork())
                 using (var tran = uow.GetOrBeginTransaction())
                 {
+                    if (!await db.Queryable<DualEntity>().AnyAsync())
+                    {
+                        await db.Insert<DualEntity>().WithTransaction(tran).AppendData(new DualEntity { }).ExecuteAffrowsAsync();
+                    }
+
                     await InitDtDataAsync(db, data.Dictionaries, tran, dbConfig);
                     await InitDtDataAsync(db, data.Apis, tran, dbConfig);
                     await InitDtDataAsync(db, data.Views, tran, dbConfig);
@@ -301,7 +306,7 @@ namespace Admin.Core.Db
 
                 db.Aop.AuditValue -= SyncDataAuditValue;
 
-                Console.WriteLine(" sync data succeed");
+                Console.WriteLine(" sync data succeed\r\n");
             }
             catch (Exception ex)
             {

+ 16 - 0
Admin.Core/Db/TenantDBServiceCollectionExtensions.cs

@@ -8,6 +8,9 @@ using Admin.Core.Common.Auth;
 using Admin.Core.Common.BaseModel;
 using Admin.Core.Repository;
 using Admin.Core.Common.Consts;
+using Admin.Core.Model.Admin;
+using Admin.Core.Common.Attributes;
+using System.Reflection;
 
 namespace Admin.Core.Db
 {
@@ -81,6 +84,9 @@ namespace Admin.Core.Db
                 #endregion
 
                 #region 审计数据
+                //计算服务器时间
+                var serverTime = fsql.Select<DualEntity>().Limit(1).First(a => DateTime.UtcNow);
+                var timeOffset = DateTime.UtcNow.Subtract(serverTime);
                 fsql.Aop.AuditValue += (s, e) =>
                 {
                     if (user == null || user.Id <= 0)
@@ -102,6 +108,11 @@ namespace Admin.Core.Db
                                 e.Value = user.TenantId;
                                 break;
                         }
+                        if (e.Property.GetCustomAttribute<ServerTimeAttribute>(false) != null && (e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?))
+                        && (e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default))
+                        {
+                            e.Value = DateTime.Now.Subtract(timeOffset);
+                        }
                     }
                     else if (e.AuditValueType == FreeSql.Aop.AuditValueType.Update)
                     {
@@ -114,6 +125,11 @@ namespace Admin.Core.Db
                                 e.Value = user.Name;
                                 break;
                         }
+                        if (e.Property.GetCustomAttribute<ServerTimeAttribute>(false) != null && (e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?))
+                        && (e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default))
+                        {
+                            e.Value = DateTime.Now.Subtract(timeOffset);
+                        }
                     }
                 };
                 #endregion

+ 2 - 2
Admin.Core/Startup.cs

@@ -77,9 +77,9 @@ namespace Admin.Core
                 services.TryAddSingleton<IUser, User>();
             }
 
-            //数据库
+            //数据库
             services.AddDbAsync(_env).Wait();
-            //租户
+            //租户数据
             services.AddTenantDb(_env);
 
             //应用配置