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 |  284 +++++++++-----------------------------------------------
 1 files changed, 46 insertions(+), 238 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 2d08e68..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,15 +895,11 @@
                         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
                             {
@@ -909,253 +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(TEntity entity, OperateTypeEnum operateType)
-        //{
-        //    // 鏍稿績閫昏緫锛氱敤浜嬪姟淇濊瘉鍘熷瓙鎬э紝寮傚父鎹曡幏閬垮厤娴佺▼涓柇锛屾棩蹇楄緟鍔╂帓鏌�
-        //    bool isSuccess = false;
-        //    string entityTypeName = entity?.GetType().Name ?? "鏈煡瀹炰綋";
-
-        //    try
-        //    {
-        //        // 鍓嶇疆鏍¢獙锛氬疄浣撲笉鑳戒负绌�
-        //        if (entity == null)
-        //        {
-        //            return false;
-        //        }
-
-        //        Type entityType = entity.GetType();
-        //        Assembly assembly = entityType.Assembly;
-        //        string htyTypeName = $"{entityType.FullName}_Hty";
-        //        Type? htyType = assembly.GetType(htyTypeName);
-
-        //        // 1. 妫�鏌ュ巻鍙茶〃绫诲瀷鏄惁瀛樺湪
-        //        if (htyType == null)
-        //        {
-
-        //            return false;
-        //        }
-
-        //        // 2. 鍒涘缓鍘嗗彶琛ㄥ疄渚嬶紙澶勭悊鏃犲弬鏋勯�犲嚱鏁颁笉瀛樺湪鐨勬儏鍐碉級
-        //        object? htyObj;
-        //        try
-        //        {
-        //            htyObj = Activator.CreateInstance(htyType);
-        //        }
-        //        catch (Exception ex)
-        //        {
-        //            // _logger.LogError(ex, "DeleteAndMoveIntoHty锛氬垱寤哄巻鍙茶〃瀹炰緥 {HtyTypeName} 澶辫触", htyTypeName);
-        //            return false;
-        //        }
-        //        if (htyObj == null)
-        //        {
-        //            // _logger.LogWarning("DeleteAndMoveIntoHty锛氬巻鍙茶〃瀹炰緥 {HtyTypeName} 鍒涘缓缁撴灉涓簄ull", htyTypeName);
-        //            return false;
-        //        }
-
-        //        // 3. 鑾峰彇鏍稿績灞炴�э紙鎸囧畾BindingFlags纭繚鑾峰彇鍏叡瀹炰緥灞炴�э級
-        //        BindingFlags propFlags = BindingFlags.Public | BindingFlags.Instance;
-        //        PropertyInfo? keyPro = typeof(TEntity).GetKeyProperty(); // 鑷畾涔夋柟娉曢渶纭繚杩斿洖闈炵┖锛屾澶勫鍔犲垽绌�
-        //        PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType), propFlags);
-        //        PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId), propFlags);
-
-        //        // 鏍¢獙鏍稿績灞炴�ф槸鍚﹀瓨鍦�
-        //        if (keyPro == null)
-        //        {
-        //            //_logger.LogError("DeleteAndMoveIntoHty锛氬疄浣� {EntityType} 鏈壘鍒颁富閿睘鎬�", entityType.FullName);
-        //            return false;
-        //        }
-        //        if (operateTypePro == null)
-        //        {
-        //            //_logger.LogError("DeleteAndMoveIntoHty锛氬巻鍙茶〃 {HtyTypeName} 鏈壘鍒癘perateType灞炴��", htyTypeName);
-        //            return false;
-        //        }
-        //        if (sourceIdPro == null)
-        //        {
-        //            // _logger.LogError("DeleteAndMoveIntoHty锛氬巻鍙茶〃 {HtyTypeName} 鏈壘鍒癝ourceId灞炴��", htyTypeName);
-        //            return false;
-        //        }
-
-        //        // 4. 璧嬪�兼牳蹇冨睘鎬э紙鏍¢獙绫诲瀷鍖归厤锛岄伩鍏峉etValue鎶涘紓甯革級
-        //        try
-        //        {
-        //            // 澶勭悊OperateType绫诲瀷鍖归厤锛氳嫢鍘嗗彶琛ㄥ睘鎬ф槸鏋氫妇绫诲瀷锛岀洿鎺ヤ紶鏋氫妇鑰岄潪瀛楃涓�
-        //            if (operateTypePro.PropertyType == typeof(OperateTypeEnum))
-        //            {
-        //                operateTypePro.SetValue(htyObj, operateType);
-        //            }
-        //            else if (operateTypePro.PropertyType == typeof(string))
-        //            {
-        //                operateTypePro.SetValue(htyObj, operateType.ToString());
-        //            }
-        //            else
-        //            {
-        //                //_logger.LogError("DeleteAndMoveIntoHty锛氬巻鍙茶〃 {HtyTypeName} 鐨凮perateType灞炴�х被鍨� {PropType} 涓嶅尮閰嶏紙浠呮敮鎸佹灇涓�/瀛楃涓诧級", htyTypeName, operateTypePro.PropertyType.FullName);
-        //                return false;
-        //            }
-
-        //            // 璧嬪�糞ourceId锛堟牎楠岀被鍨嬪尮閰嶏級
-        //            object sourceIdValue = keyPro.GetValue(entity)!;
-        //            if (sourceIdPro.PropertyType != sourceIdValue.GetType())
-        //            {
-        //                sourceIdValue = Convert.ChangeType(sourceIdValue, sourceIdPro.PropertyType); // 绫诲瀷杞崲
-        //            }
-        //            sourceIdPro.SetValue(htyObj, sourceIdValue);
-        //        }
-        //        catch (Exception ex)
-        //        {
-        //            // _logger.LogError(ex, "DeleteAndMoveIntoHty锛氬巻鍙茶〃 {HtyTypeName} 鏍稿績灞炴�ц祴鍊煎け璐�", htyTypeName);
-        //            return false;
-        //        }
-
-        //        // 5. 璧嬪�煎叾浠栧睘鎬э紙鎺掗櫎鏍稿績灞炴�э級
-        //        List<PropertyInfo> htyProperties = htyType.GetProperties(propFlags)
-        //            .Where(x => x.Name != operateTypePro.Name
-        //                     && x.Name != sourceIdPro.Name
-        //                     && x.Name != keyPro.Name)
-        //            .ToList();
-
-        //        foreach (PropertyInfo htyProp in htyProperties)
-        //        {
-        //            PropertyInfo? entityProp = entityType.GetProperty(htyProp.Name, propFlags);
-        //            if (entityProp == null) continue; // 瀹炰綋鏃犺灞炴�у垯璺宠繃
-
-        //            try
-        //            {
-        //                object propValue;
-        //                // 澶勭悊淇敼浜猴細閬垮厤App.User绌哄紩鐢�
-        //                if (htyProp.Name == nameof(BaseEntity.Modifier))
-        //                {
-        //                    propValue = App.User?.UserId > 0 ? App.User?.UserName : "System";
-        //                }
-        //                // 澶勭悊淇敼鏃堕棿
-        //                else if (htyProp.Name == nameof(BaseEntity.ModifyDate))
-        //                {
-        //                    propValue = DateTime.Now;
-        //                }
-        //                // 鍏朵粬灞炴�т粠鍘熷疄浣撳彇鍊�
-        //                else
-        //                {
-        //                    propValue = entityProp.GetValue(entity) ?? DBNull.Value; // 澶勭悊null鍊�
-        //                }
-
-        //                // 绫诲瀷杞崲鍚庤祴鍊硷紙閬垮厤绫诲瀷涓嶅尮閰嶏級
-        //                if (propValue != DBNull.Value && propValue != null)
-        //                {
-        //                    propValue = Convert.ChangeType(propValue, htyProp.PropertyType);
-        //                }
-        //                htyProp.SetValue(htyObj, propValue);
-        //            }
-        //            catch (Exception ex)
-        //            {
-        //                // _logger.LogWarning(ex, "DeleteAndMoveIntoHty锛氬巻鍙茶〃 {HtyTypeName} 灞炴�� {PropName} 璧嬪�煎け璐ワ紝璺宠繃璇ュ睘鎬�", htyTypeName, htyProp.Name);
-        //            }
-        //        }
-        //        try
-        //        {                   
-        //            // 鎵ц鎻掑叆鍘嗗彶琛�
-        //            int insertRows = _db.InsertableByObject(htyObj).AS(entityType.Name + "_Hty").ExecuteCommand();
-
-        //            if (insertRows <= 0)
-        //            {
-        //                // _logger.LogError("DeleteAndMoveIntoHty锛氬巻鍙茶〃 {HtyTypeName} 鎻掑叆澶辫触锛堝奖鍝嶈鏁�0锛�", htyTypeName);
-        //                _db.InsertableByObject(htyObj).AS(entityType.Name + "_Hty").ExecuteCommand();
-        //                return false;
-        //            }
-        //            // 鎻掑叆鎴愬姛鍚庢墽琛屽垹闄�
-        //            bool deleteSuccess = DeleteData(entity);
-        //            if (!deleteSuccess)
-        //            {
-        //                //_logger.LogError("DeleteAndMoveIntoHty锛氬疄浣� {EntityType} 鍒犻櫎澶辫触", entityType.FullName);
-        //                DeleteData(entity);
-        //                return false;
-        //            }
-        //            // 鎻愪氦浜嬪姟
-
-        //            isSuccess = true;
-        //            //_logger.LogInformation("DeleteAndMoveIntoHty锛氬疄浣� {EntityType} 宸叉垚鍔熺Щ鍏ュ巻鍙茶〃骞跺垹闄ゅ師鏁版嵁", entityType.FullName);
-        //        }
-        //        catch (Exception ex)
-        //        {
-
-        //            // _logger.LogError(ex, "DeleteAndMoveIntoHty锛氫簨鍔℃墽琛屽け璐ワ紙鎻掑叆鍘嗗彶琛�/鍒犻櫎鍘熸暟鎹級", entityType.FullName);
-        //            return false;
-        //        }         
-        //    }
-        //    catch (Exception ex)
-        //    {
-        //        //  _logger.LogError(ex, "DeleteAndMoveIntoHty锛氬鐞嗗疄浣� {EntityTypeName} 鏃跺彂鐢熸湭鎹曡幏寮傚父", entityTypeName);
-        //        return false;
-        //    }
-
-        //    return isSuccess;
-        //}
-
-
 
         public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType)
-{
-    Type type = typeof(TEntity);
-    Assembly assembly = type.Assembly;
-    Type? htyType = assembly.GetType(type.FullName + "_Hty");
-    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<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);
-                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);
+            Type type = typeof(TEntity);
+            Assembly assembly = type.Assembly;
 
-                        if (property != null)
+            Type? htyType = assembly.GetTypes().FirstOrDefault(t => !t.IsInterface && !t.IsAbstract && type.IsAssignableFrom(t) && typeof(IBaseHistoryEntity).IsAssignableFrom(t));
+            if (htyType != null)
+            {
+                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)
+                    {
+                        operateTypePro.SetValue(obj, operateType.ToString());
+                        sourceIdPro.SetValue(obj, keyPro.GetValue(item));
+
+                        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++)
                         {
-                            if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                            PropertyInfo propertyInfo = propertyInfos[i];
+                            PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                            if (property != null && property.CanWrite)
                             {
-                                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));
+                                if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                                {
+                                    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);
         }
-    }
-    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