From e483ac11616ffc9260d8f491fcc0d66f480b5443 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期四, 16 四月 2026 10:12:52 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/LongTu/FangGangAGV

---
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs |  177 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 135 insertions(+), 42 deletions(-)

diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs
index 5ea5cb1..b418268 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs
@@ -903,51 +903,51 @@
             return _db.UpdateNav(Entity).IncludesAllFirstLayer().ExecuteCommand();
         }
 
-        public bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType)
-        {
-            Type type = entity.GetType();
-            Assembly assembly = type.Assembly;
-            Type? htyType = assembly.GetType(type.FullName + "_Hty");
-            if (htyType != null)
-            {
-                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)
-                {
-                    operateTypePro.SetValue(obj, operateType.ToString());
-                    sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
+        //public bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType)
+        //{
+        //    Type type = entity.GetType();
+        //    Assembly assembly = type.Assembly;
+        //    Type? htyType = assembly.GetType(type.FullName + "_Hty");
+        //    if (htyType != null)
+        //    {
+        //        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)
+        //        {
+        //            operateTypePro.SetValue(obj, operateType.ToString());
+        //            sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
 
-                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+        //            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);
+        //            for (int i = 0; i < propertyInfos.Count; i++)
+        //            {
+        //                PropertyInfo propertyInfo = propertyInfos[i];
+        //                PropertyInfo? property = type.GetProperty(propertyInfo.Name);
 
-                        if (property != null)
-                        {
-                            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));
-                            }
-                        }
-                    }
-                    if (obj != null)
-                        _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
-                }
-            }
-            return DeleteData(entity);
-        }
+        //                if (property != null)
+        //                {
+        //                    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));
+        //                    }
+        //                }
+        //            }
+        //            if (obj != null)
+        //                _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+        //        }
+        //    }
+        //    return DeleteData(entity);
+        //}
 
         public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType)
         {
@@ -1003,6 +1003,99 @@
             return DeleteData(entities);
         }
 
+        public bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType)
+        {
+            Type type = typeof(TEntity);
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+
+            if (htyType != null)
+            {
+                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)
+                {
+                    operateTypePro.SetValue(obj, operateType.ToString());
+                    sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
+
+                    // 杩囨护鎺夊鑸睘鎬у拰闆嗗悎灞炴��
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties()
+                        .Where(x => x.Name != operateTypePro.Name
+                                 && x.Name != sourceIdPro.Name
+                                 && x.Name != keyPro.Name
+                                 && !IsNavigationOrCollectionProperty(x))  // 鏂板杩囨护鏉′欢
+                        .ToList();
+
+                    for (int i = 0; i < propertyInfos.Count; i++)
+                    {
+                        PropertyInfo propertyInfo = propertyInfos[i];
+                        PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                        if (property != null)
+                        {
+                            // 璺宠繃瀵艰埅灞炴�у拰闆嗗悎绫诲瀷
+                            if (IsNavigationOrCollectionProperty(property))
+                            {
+                                continue;
+                            }
+
+                            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
+                            {
+                                //var value = entityProperty.GetValue(entity);
+                                //// 澶勭悊 null 鍊�
+                                //htyPropertyInfo.SetValue(obj, value ?? DBNull.Value);
+                                propertyInfo.SetValue(obj, property.GetValue(entity));
+                            }
+                        }
+                    }
+
+                    if (obj != null)
+                        _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+                }
+            }
+            return DeleteData(entity);
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁涓哄鑸睘鎬ф垨闆嗗悎灞炴��
+        /// </summary>
+        private bool IsNavigationOrCollectionProperty(PropertyInfo property)
+        {
+            // 妫�鏌ユ槸鍚︽湁 Navigate 鐗规�э紙瀵艰埅灞炴�э級
+            if (property.GetCustomAttribute<Navigate>() != null)
+                return true;
+
+            // 妫�鏌ユ槸鍚︿负闆嗗悎绫诲瀷锛堜竴瀵瑰锛�
+            if (property.PropertyType.IsGenericType &&
+                (property.PropertyType.GetGenericTypeDefinition() == typeof(List<>) ||
+                 property.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>) ||
+                 property.PropertyType.GetGenericTypeDefinition() == typeof(IEnumerable<>)))
+                return true;
+
+            // 妫�鏌ユ槸鍚︿负闈炲熀鍏冪被鍨嬬殑澶嶆潅瀵硅薄锛堜竴瀵逛竴瀵艰埅锛�
+            if (property.PropertyType.IsClass &&
+                property.PropertyType != typeof(string) &&
+                !property.PropertyType.IsValueType)
+            {
+                // 鎺掗櫎绯荤粺绫诲瀷
+                if (property.PropertyType.Namespace?.StartsWith("System") == false)
+                    return true;
+            }
+
+            return false;
+        }
+
         //List<TResult> QueryMuch<T, T2, T3, TResult>(
         //    Expression<Func<T, T2, T3, object[]>> joinExpression,
         //    Expression<Func<T, T2, T3, TResult>> selectExpression,

--
Gitblit v1.9.3