Przeglądaj źródła

!1907 修复 同步行政区域 始终进入大数据量写入逻辑,并对其判断逻辑进行优化
Merge pull request !1907 from 夜鹰/v2

zuohuaijun 1 rok temu
rodzic
commit
75e669da1c

+ 12 - 11
Admin.NET/Admin.NET.Core/Service/Region/SysRegionService.cs

@@ -153,14 +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.AsTenant().UseTranAsync(async () =>
-        {
+        await _sysRegionRep.AsTenant().UseTranAsync(async () => {
             await _sysRegionRep.DeleteAsync(u => u.Id > 0);
             await SyncByMap(syncLevel);
-        }, err =>
-        {
-            throw Oops.Oh(ErrorCodeEnum.R2005);
+        }, err => {
+            throw Oops.Oh(ErrorCodeEnum.R2005, err.Message);
         });
+        
 
         // var context = BrowsingContext.New(AngleSharp.Configuration.Default.WithDefaultLoader());
         // var dom = await context.OpenAsync(_url);
@@ -350,17 +349,19 @@ public class SysRegionService : IDynamicApiController, ITransient
                     list.Add(county);
                 }
             }
-
+            
             // 按省份同步快速写入提升同步效率,全部一次性写入容易出现从统计局获取数据失败
             // 仅当数据量大于1000或非Oracle数据库时采用大数据量写入方式(SqlSugar官方已说明,数据量小于1000时,其性能不如普通插入, oracle此方法不支持事务)
-            if (list.Count > 1000 || _sysRegionRep.Context.CurrentConnectionConfig.DbType != SqlSugar.DbType.Oracle)
+            if (list.Count > 1000 && _sysRegionRep.Context.CurrentConnectionConfig.DbType != SqlSugar.DbType.Oracle)
             {
                 // 执行大数据量写入
-                var t = _sysRegionRep.Context.Fastest<SysRegion>().BulkCopyAsync(list);
-
-                // 若写入失败则尝试普通插入方式
-                if (t.Exception != null)
+                try
+                {
+                    await _sysRegionRep.Context.Fastest<SysRegion>().BulkCopyAsync(list);
+                }
+                catch(SqlSugarException)
                 {
+                    // 若写入失败则尝试普通插入方式
                     await _sysRegionRep.InsertRangeAsync(list);
                 }
             }