From 37454e625df68d40897112b2e8c2e3cf4d7163e3 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期三, 25 三月 2026 11:43:10 +0800
Subject: [PATCH] 1

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs |   87 +++++++++++++++++++------------------------
 1 files changed, 39 insertions(+), 48 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
index 171d380..09541ce 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
@@ -873,7 +873,10 @@
         {
             Type type = entity.GetType();
             Assembly assembly = type.Assembly;
-            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+
+            Type? htyType = assembly.GetTypes().FirstOrDefault(t => !t.IsInterface && !t.IsAbstract && type.IsAssignableFrom(t) && typeof(IBaseHistoryEntity).IsAssignableFrom(t));
+
+            //assembly.GetType(type.FullName + "_Hty");
             if (htyType != null)
             {
                 object? obj = Activator.CreateInstance(htyType);
@@ -892,16 +895,12 @@
                         PropertyInfo propertyInfo = propertyInfos[i];
                         PropertyInfo? property = type.GetProperty(propertyInfo.Name);
 
-                        if (property != null)
+                        if (property != null && property.CanWrite)
                         {
                             if (propertyInfo.Name == nameof(BaseEntity.Modifier))
                             {
                                 propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
                             }
-                            else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
-                            {
-                                propertyInfo.SetValue(obj, DateTime.Now);
-                            }                            
                             else
                             {
                                 propertyInfo.SetValue(obj, property.GetValue(entity));
@@ -909,70 +908,62 @@
                         }
                     }
                     if (obj != null)
-                        _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+                        _db.InsertableByObject(obj).AS(htyType.Name).ExecuteCommand();
                 }
             }
             return DeleteData(entity);
-           
+
         }
+
 
         public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType)
         {
             Type type = typeof(TEntity);
             Assembly assembly = type.Assembly;
-            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+
+            Type? htyType = assembly.GetTypes().FirstOrDefault(t => !t.IsInterface && !t.IsAbstract && type.IsAssignableFrom(t) && typeof(IBaseHistoryEntity).IsAssignableFrom(t));
             if (htyType != null)
             {
-                object? obj2 = Activator.CreateInstance(htyType);
-                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
-                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
-                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
-                if (obj2 != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                List<object> list = new List<object>();
+                foreach (var item in entities)
                 {
-                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
-                    List<object> list = new List<object>();
-                    foreach (var item in entities)
+                    object? obj = Activator.CreateInstance(htyType);
+                    PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                    PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                    PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                    if (obj != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
                     {
-                        object? obj = Activator.CreateInstance(htyType);
-                        if (obj != null)
-                        {
-                            operateTypePro.SetValue(obj, operateType.ToString());
-                            sourceIdPro.SetValue(obj, keyPro.GetValue(item));
-                            for (int i = 0; i < propertyInfos.Count; i++)
-                            {
-                                PropertyInfo propertyInfo = propertyInfos[i];
-                                PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+                        operateTypePro.SetValue(obj, operateType.ToString());
+                        sourceIdPro.SetValue(obj, keyPro.GetValue(item));
 
-                                if (property != null)
+                        List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+
+                        for (int i = 0; i < propertyInfos.Count; i++)
+                        {
+                            PropertyInfo propertyInfo = propertyInfos[i];
+                            PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                            if (property != null && property.CanWrite)
+                            {
+                                if (propertyInfo.Name == nameof(BaseEntity.Modifier))
                                 {
-                                    if (propertyInfo.Name == nameof(BaseEntity.Modifier))
-                                    {
-                                        propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
-                                    }
-                                    else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
-                                    {
-                                        propertyInfo.SetValue(obj, DateTime.Now);
-                                    }
-                                    else
-                                    {
-                                        propertyInfo.SetValue(obj, property.GetValue(item));
-                                    }
+                                    propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                                }
+                                else
+                                {
+                                    propertyInfo.SetValue(obj, property.GetValue(item));
                                 }
                             }
-                            list.Add(obj);
                         }
-                    }
-                    if (list.Count > 0)
-                        _db.InsertableByObject(list).AS(type.Name + "_Hty").ExecuteCommand();
 
+                        list.Add(obj);
+                    }
                 }
+
+                if (list != null && list.Any())
+                    _db.InsertableByObject(list).AS(htyType.Name).ExecuteCommand();
             }
             return DeleteData(entities);
         }
-        //List<TResult> QueryMuch<T, T2, T3, TResult>(
-        //    Expression<Func<T, T2, T3, object[]>> joinExpression,
-        //    Expression<Func<T, T2, T3, TResult>> selectExpression,
-        //    Expression<Func<T, T2, T3, bool>> whereLambda = null) where T : class, new(){throw new NotImplementedException();}
-        //Task<PageModel<TEntity>> QueryPage(PaginationModel pagination){throw new NotImplementedException();}
     }
 }

--
Gitblit v1.9.3