Explorar o código

!1905 修复行政区域同步统计局报错问题,并进行相应优化
Merge pull request !1905 from 夜鹰/v2

zuohuaijun hai 6 meses
pai
achega
90ecb14cd9

+ 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>

+ 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);
+            }
         }
 
         // 获取选择数据

+ 1 - 1
Web/src/components/svgIcon/index.vue

@@ -20,7 +20,7 @@ const props = defineProps({
 	// svg 大小
 	size: {
 		type: Number,
-		default: () => 14,
+		default: () => 16,
 	},
 	// svg 颜色
 	color: {