Ver código fonte

1. 修复Excel数据导入,支持设置唯一键表插入数据和更新数据,没有设置唯一键代表插入所有数据,更新数据无效。
2. Json序列化设置,开启long转string,解决大数字溢出问题。

Cyrus Zhou 10 meses atrás
pai
commit
e455cb4afa

+ 1 - 1
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -94,7 +94,7 @@ public class Startup : AppStartup
             setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用
             // setting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写
             // setting.NullValueHandling = NullValueHandling.Ignore; // 忽略空值
-            // setting.Converters.AddLongTypeConverters(); // long转string(防止js精度溢出) 超过17位开启
+            setting.Converters.AddLongTypeConverters(); // long转string(防止js精度溢出) 超过17位开启
             // setting.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; // 解决DateTimeOffset异常
             // setting.DateParseHandling = DateParseHandling.None; // 解决DateTimeOffset异常
             // setting.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }); // 解决DateTimeOffset异常

+ 19 - 6
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Service.cs.vm

@@ -6,7 +6,6 @@
 
 using Admin.NET.Core.Service;
 using Microsoft.AspNetCore.Http;
-using Admin.NET.Application.Entity;
 using Furion.DatabaseAccessor;
 using Furion.FriendlyException;
 using Mapster;
@@ -349,10 +348,14 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
                         }
                         @:return true;
                     @:}).Adapt<List<@(Model.ClassName)>>();
-
+                                   
+                    @{var updateFields = new List<string>();}  
                     @:
                     @:var storageable = _@(Model.LowerClassName)Rep.Context.Storageable(rows)
                         foreach (var column in Model.ImportFieldList){
+                        if (column.WhetherImport == "Y"){
+                        updateFields.Add(column.PropertyName);
+                        }
                         if (column.WhetherRequired == "Y"){
                         if(column.NetType.TrimEnd('?') == "string"){
                         @:.SplitError(it => string.IsNullOrWhiteSpace(it.Item.@(column.PropertyName)), "@(column.ColumnComment)不能为空")
@@ -362,15 +365,25 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
                         if (column.NetType?.TrimEnd('?') == "string" && column.ColumnLength > 0){
                         @:.SplitError(it => it.Item.@(column.PropertyName)?.Length > @(column.ColumnLength), "@(column.ColumnComment)长度不能超过@(column.ColumnLength)个字符")
                         }}
+                        if(Model.TableUniqueConfigList.Count>0){
                         foreach (var config in Model.TableUniqueConfigList) {
-                        @:.WhereColumns(it => new { @config.Format(", ", "it.{0}") }).SplitError(it => it.Any(), "@(config.Message)已存在")
+                        @:.WhereColumns(it => new { @config.Format(", ", "it.{0}") })
+                        }
+                        @:.SplitInsert(it=> !it.Any())
+                        @:.SplitUpdate(it=> it.Any())
+                        }else{                        
+                        @:.SplitInsert(_=> true) // 没有设置唯一键代表插入所有数据
                         }
-                        @:.SplitInsert(_ => true)
                         @:.ToStorage();
-
                     @:
                     @:storageable.AsInsertable.ExecuteCommand();// 不存在插入
-                    @:storageable.AsUpdateable.ExecuteCommand();// 存在更新
+                    @:storageable.AsUpdateable.UpdateColumns(it => new
+                    @:{
+                    @foreach (var field in updateFields)
+                    {
+                    @:    it.@(field),
+                    }
+                    @:}).ExecuteCommand();// 存在更新
                     @:
                     @:// 标记错误信息
                     @:markerErrorAction.Invoke(storageable, pageItems, rows);