فهرست منبع

1. 修复 行政区域同步统计局 时,若数据库连接没有 SUPER or SYSTEM_VARIABLES_ADMIN 权限时引发权限错误;
2. 优化 行政区域同步统计局,仅当数据量大于1000或非Oracle数据库时采用大数据量写入方式(SqlSugar官方已说明,数据量小于1000时,其性能不如普通插入, oracle此方法不支持事务)
3. 同步时采用事务,以免在同步失败时,前面又已清空数据

夜鹰 6 ماه پیش
والد
کامیت
aaea04e6cc

+ 2 - 2
Admin.NET/Admin.NET.Core/Enum/TenantTypeEnum.cs

@@ -13,9 +13,9 @@ namespace Admin.NET.Core;
 public enum TenantTypeEnum
 {
     /// <summary>
-    /// Id隔离
+    /// ID隔离
     /// </summary>
-    [Description("Id隔离")]
+    [Description("ID隔离")]
     Id = 0,
 
     /// <summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -294,7 +294,7 @@ public class SysConfigService : IDynamicApiController, ITransient
 
         tenant.Copy(input);
         tenant.RegWayId = input.EnableReg == YesNoEnum.Y ? input.RegWayId : null;
-        await _sysConfigRep.Context.Updateable(tenant).ExecuteCommandAsync();
+        await _sysTenantRep.Context.Updateable(tenant).ExecuteCommandAsync();
     }
 
     private void Remove(SysConfig config)

+ 24 - 4
Admin.NET/Admin.NET.Core/Service/Region/SysRegionService.cs

@@ -153,9 +153,13 @@ public class SysRegionService : IDynamicApiController, ITransient
         var syncLevel = await _sysConfigService.GetConfigValue<int>(ConfigConst.SysRegionSyncLevel);
         if (syncLevel is < 1 or > 5) syncLevel = 3;//默认区县级
 
-        await _sysRegionRep.DeleteAsync(u => u.Id > 0);
-
-        await SyncByMap(syncLevel);
+        await _sysRegionRep.AsTenant().UseTranAsync(async () => {
+            await _sysRegionRep.DeleteAsync(u => u.Id > 0);
+            await SyncByMap(syncLevel);
+        }, err => {
+            throw Oops.Oh(ErrorCodeEnum.R2005);
+        });
+        
 
         // var context = BrowsingContext.New(AngleSharp.Configuration.Default.WithDefaultLoader());
         // var dom = await context.OpenAsync(_url);
@@ -345,8 +349,24 @@ public class SysRegionService : IDynamicApiController, ITransient
                     list.Add(county);
                 }
             }
+            
             // 按省份同步快速写入提升同步效率,全部一次性写入容易出现从统计局获取数据失败
-            await _sysRegionRep.Context.Fastest<SysRegion>().BulkCopyAsync(list);
+            // 仅当数据量大于1000或非Oracle数据库时采用大数据量写入方式(SqlSugar官方已说明,数据量小于1000时,其性能不如普通插入, oracle此方法不支持事务)
+            if (list.Count > 1000 || _sysRegionRep.Context.CurrentConnectionConfig.DbType != SqlSugar.DbType.Oracle)
+            {
+                // 执行大数据量写入
+                var t = _sysRegionRep.Context.Fastest<SysRegion>().BulkCopyAsync(list);
+
+                // 若写入失败则尝试普通插入方式
+                if (t.Exception != null)
+                {
+                    await _sysRegionRep.InsertRangeAsync(list);
+                }
+            }
+            else
+            {
+                await _sysRegionRep.InsertRangeAsync(list);
+            }
         }
 
         // 获取选择数据

+ 3 - 3
Admin.NET/Plugins/Admin.NET.Plugin.K3Cloud/Service/Dto/K3CloudLoginOutput.cs

@@ -1,4 +1,4 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
 //
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
 //
@@ -10,10 +10,10 @@ public class K3CloudLoginOutput
 {
     public string Message { get; set; }
     public string MessageCode { get; set; }
-    public ErpLoginResultType LoginResultType { get; set; }
+    public ErpLoginResultTypeEnum LoginResultType { get; set; }
 }
 
-public enum ErpLoginResultType
+public enum ErpLoginResultTypeEnum
 {
     /// <summary>
     /// 激活