浏览代码

修复全局过滤器动态表达式错误

zuohuaijun 3 年之前
父节点
当前提交
4254ad43e6

+ 1 - 47
Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs

@@ -18,53 +18,7 @@ public class DbJobPersistence : IJobPersistence
     /// <returns></returns>
     public IEnumerable<SchedulerBuilder> Preload()
     {
-        using var serviceScope = _serviceProvider.CreateScope();
-        var jobDetailRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobDetail>>();
-        var jobTriggerRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobTrigger>>();
-
-        // 获取内存的作业
-        IEnumerable<SchedulerBuilder> memoryJobs = App.EffectiveTypes.ScanToBuilders();
-
-        // 若数据库不存在任何作业,则返回内存作业
-        if (!jobDetailRep.IsAny(u => true)) return memoryJobs;
-
-        var schedulerBuilders = new List<SchedulerBuilder>();
-
-        // 获取数据库所有作业
-        var dbJobs = jobDetailRep.GetList();
-        foreach (var dbJob in dbJobs)
-        {
-            var jobDetail = JobBuilder.Create(dbJob.AssemblyName, dbJob.JobType).LoadFrom(dbJob);
-
-            // 加载数据库的触发器
-            var triggerBuilders = new List<TriggerBuilder>();
-            var dbTriggers = jobTriggerRep.GetList(u => u.JobId == dbJob.JobId)
-                .Select(u => Triggers.Create(u.AssemblyName, u.TriggerType).LoadFrom(u)).ToArray();
-            triggerBuilders.AddRange(dbTriggers);
-
-            var memoryTriggers = memoryJobs.Where(u => u.GetJobBuilder().JobId == dbJob.JobId).SelectMany(u => u.GetTriggerBuilders());
-            foreach (var memTrigger in memoryTriggers)
-            {
-                var triggerId = memTrigger.TriggerId;
-                // 若数据库中已包含这个触发器
-                if (!string.IsNullOrWhiteSpace(triggerId) && dbTriggers.Any(u => u.TriggerId == triggerId))
-                    continue;
-                triggerBuilders.Add(memTrigger);
-            }
-            schedulerBuilders.Add(SchedulerBuilder.Create(jobDetail, triggerBuilders.ToArray()).Updated());
-        }
-
-        // 合并作业
-        foreach (var job in memoryJobs)
-        {
-            var jobId = job.GetJobBuilder().JobId;
-            // 若数据库中已包含这个作业
-            if (!string.IsNullOrWhiteSpace(jobId) && dbJobs.Any(u => u.JobId == jobId))
-                continue;
-            schedulerBuilders.Add(job);
-        }
-
-        return schedulerBuilders;
+        return App.EffectiveTypes.ScanToBuilders();
     }
 
     /// <summary>

+ 10 - 14
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -67,13 +67,6 @@ public static class SqlSugarSetup
         {
             IsAutoRemoveDataCache = true
         };
-
-        // PostgreSQL库-时间异常
-        if (config.DbType == SqlSugar.DbType.PostgreSQL)
-        {
-            AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
-            AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
-        }
     }
 
     /// <summary>
@@ -242,7 +235,7 @@ public static class SqlSugarSetup
             var seedDataTable = seedData.ToList().ToDataTable();
             seedDataTable.TableName = dbProvider.EntityMaintenance.GetEntityInfo(entityType).DbTableName;
             if (config.EnableUnderLine) // 驼峰转下划线
-            {                
+            {
                 foreach (DataColumn col in seedDataTable.Columns)
                 {
                     col.ColumnName = UtilMethods.ToUnderLine(col.ColumnName);
@@ -315,8 +308,9 @@ public static class SqlSugarSetup
                     (tAtt == null && (string)db.CurrentConnectionConfig.ConfigId != SqlSugarConst.ConfigId))
                     continue;
 
-                Expression<Func<EntityBase, bool>> dynamicExpression = u => u.IsDelete == false;
-                var tableFilterItem = new TableFilterItem<object>(entityType, dynamicExpression);
+                var lambda = DynamicExpressionParser.ParseLambda(new[] {
+                    Expression.Parameter(entityType, "u") }, typeof(bool), $"{nameof(EntityBase.IsDelete)} == @0", false);
+                var tableFilterItem = new TableFilterItem<object>(entityType, lambda);
                 tableFilterItems.Add(tableFilterItem);
                 db.QueryFilter.Add(tableFilterItem);
             }
@@ -363,8 +357,9 @@ public static class SqlSugarSetup
                         continue;
                 }
 
-                Expression<Func<EntityTenant, bool>> dynamicExpression = u => u.TenantId == long.Parse(tenantId);
-                var tableFilterItem = new TableFilterItem<object>(entityType, dynamicExpression);
+                var lambda = DynamicExpressionParser.ParseLambda(new[] {
+                    Expression.Parameter(entityType, "u") }, typeof(bool), $"{nameof(EntityTenant.TenantId)} == @0", long.Parse(tenantId));
+                var tableFilterItem = new TableFilterItem<object>(entityType, lambda);
                 tableFilterItems.Add(tableFilterItem);
                 db.QueryFilter.Add(tableFilterItem);
             }
@@ -410,8 +405,9 @@ public static class SqlSugarSetup
                     (tAtt == null && (string)db.CurrentConnectionConfig.ConfigId != SqlSugarConst.ConfigId))
                     continue;
 
-                Expression<Func<EntityBaseData, bool>> dynamicExpression = u => orgIds.Contains((long)u.CreateOrgId);
-                var tableFilterItem = new TableFilterItem<object>(entityType, dynamicExpression);
+                var lambda = DynamicExpressionParser.ParseLambda(new[] {
+                    Expression.Parameter(entityType, "u") }, typeof(bool), $"@0.Contains((long)u.{nameof(EntityBaseData.CreateOrgId)})", orgIds);
+                var tableFilterItem = new TableFilterItem<object>(entityType, lambda);
                 tableFilterItems.Add(tableFilterItem);
                 db.QueryFilter.Add(tableFilterItem);
             }