From f43b7df8400f4fcffc9f19dca0888d61e2b33d5f Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期三, 12 三月 2025 18:41:52 +0800
Subject: [PATCH] WMS系统添加PDA权限,PDA程序

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs |  124 ++++++++++++++++++++++++++++++++---------
 1 files changed, 97 insertions(+), 27 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
index ab77042..84bc1c5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
@@ -1,14 +1,16 @@
 锘縰sing SqlSugar;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.Linq;
+using System.Linq.Expressions;
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core.Const;
-using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 
 namespace WIDESEA_Core.Utilities
@@ -18,7 +20,6 @@
         /// <summary>
         /// 楠岃瘉鏁版嵁搴撳瓧娈电被鍨嬩笌鍊兼槸鍚︽纭紝
         /// </summary>
-        /// <param name="dbType">鏁版嵁搴撳瓧娈电被鍨�(濡倂archar,nvarchar,decimal,涓嶈甯﹀悗闈㈤暱搴﹀:varchar(50))</param>
         /// <param name="value">鍊�</param>
         /// <param name="propertyInfo">瑕侀獙璇佺殑绫荤殑灞炴�э紝鑻ヤ笉涓簄ull锛屽垯浼氬垽鏂瓧绗︿覆鐨勯暱搴︽槸鍚︽纭�</param>
         /// <returns>(bool, string, object)bool鎴愬惁鏍¢獙鎴愬姛,string鏍¢獙澶辫触淇℃伅,object,褰撳墠鏍¢獙鐨勫��</returns>
@@ -29,7 +30,7 @@
             if (propertyInfo != null)
             {
                 sugarColumn = propertyInfo.GetCustomAttribute<SugarColumn>();
-                dbType = propertyInfo != null ? propertyInfo.GetProperWithDbType() : SqlDbTypeName.NVarChar;
+                dbType = propertyInfo.PropertyType != null ? propertyInfo.GetProperWithDbType() : SqlDbTypeName.NVarChar;
             }
             dbType = dbType.ToLower();
             string val = value?.ToString();
@@ -107,6 +108,16 @@
             return (reslutMsg == "" ? true : false, reslutMsg, value);
         }
 
+        public static List<(bool, string, object)> ValidationValueForDbType(this PropertyInfo propertyInfo, params object[] values)
+        {
+            List<(bool, string, object)> result = new List<(bool, string, object)>();
+            foreach (object value in values)
+            {
+                result.Add(propertyInfo.ValidationVal(value));
+            }
+            return result;
+        }
+
         private static readonly Dictionary<Type, string> ProperWithDbType = new Dictionary<Type, string>() {
             {  typeof(string),SqlDbTypeName.NVarChar },
             { typeof(DateTime),SqlDbTypeName.DateTime},
@@ -118,6 +129,7 @@
             {  typeof(byte),SqlDbTypeName.Int },//绫诲瀷寰呭畬
             { typeof(Guid),SqlDbTypeName.UniqueIdentifier}
         };
+
         public static string GetProperWithDbType(this PropertyInfo propertyInfo)
         {
             bool result = ProperWithDbType.TryGetValue(propertyInfo.PropertyType, out string value);
@@ -128,19 +140,6 @@
             return SqlDbTypeName.NVarChar;
         }
 
-        public static string ValidateDicInEntity(this Type typeinfo, List<Dictionary<string, object>> dicList, bool removerKey, string[] ignoreFields = null)
-        {
-            PropertyInfo[] propertyInfo = typeinfo.GetProperties();
-            string reslutMsg = string.Empty;
-            foreach (Dictionary<string, object> dic in dicList)
-            {
-                reslutMsg = typeinfo.ValidateDicInEntity(dic, removerKey, propertyInfo, ignoreFields);
-                if (!string.IsNullOrEmpty(reslutMsg))
-                    return reslutMsg;
-            }
-            return reslutMsg;
-        }
-
         /// <summary>
         /// 鍒ゆ柇hash鐨勫垪鏄惁涓哄搴旂殑瀹炰綋锛屽苟涓斿�兼槸鍚︽湁鏁�
         /// </summary>
@@ -149,7 +148,7 @@
         /// <param name="removeNotContains">绉婚櫎涓嶅瓨鍦ㄥ瓧娈�</param>
         /// <param name="removerKey">绉婚櫎涓婚敭</param>
         /// <returns></returns>
-        public static string ValidateDicInEntity(this Type typeinfo, Dictionary<string, object> dic, bool removerKey, PropertyInfo[] propertyInfo, string[] ignoreFields = null)
+        public static string ValidateDicInEntity(this Type typeinfo, Dictionary<string, object> dic, bool removerKey, PropertyInfo[] propertyInfo, string[]? ignoreFields = null)
         {
             if (dic == null || dic.Count == 0) { return "鍙傛暟鏃犳晥"; }
 
@@ -171,30 +170,55 @@
 
             foreach (PropertyInfo property in propertyInfo)
             {
-                SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
                 if (sugarColumn == null)
+                {
+                    Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                    if(navigate != null)
+                    {
+                        continue;
+                    }
                     return "璇烽厤缃甋ugarColumn灞炴��";
+                }
+                    
                 //蹇界暐涓庝富閿殑瀛楁涓嶅仛楠岃瘉
                 if (property.Name == keyName.FirstLetterToUpper() || (ignoreFields != null && ignoreFields.Contains(property.Name)) || sugarColumn.IsOnlyIgnoreInsert || sugarColumn.IsOnlyIgnoreUpdate || sugarColumn.IsIgnore)
                     continue;
 
                 //涓嶅湪缂栬緫涓殑鍒楋紝鏄惁涔熻蹇呭~
-                if (!dic.ContainsKey(property.Name.FirstLetterToLower()))
+                if (!dic.ContainsKey(property.Name.FirstLetterToLower()) /*&& !dic.ContainsKey(property.Name.FirstLetterToUpper())*/)
                 {
                     if (!sugarColumn.IsNullable)
                     {
-                        if (sugarColumn.DefaultValue != null)
+                        if (sugarColumn.DefaultValue == null)
                             return sugarColumn.ColumnDescription + "涓哄繀椤绘彁浜ら」";
                         continue;
                     }
                     continue;
                 }
-                string str = dic[property.Name.FirstLetterToLower()].ToString();
-                //灏嗘墍鏈夌┖鍊艰缃负null
-                if (dic[property.Name.FirstLetterToLower()] != null && str == string.Empty)
-                    dic[property.Name.FirstLetterToLower()] = null;
+                if(dic[property.Name.FirstLetterToLower()] != null)
+                {
+                    string str = dic[property.Name.FirstLetterToLower()].ToString();
+                    //灏嗘墍鏈夌┖鍊艰缃负null
+                    if (str == string.Empty)
+                        dic[property.Name.FirstLetterToLower()] = null;
+                }
+                
             }
             return string.Empty;
+        }
+
+        public static string ValidateDicInEntity(this Type typeinfo, List<Dictionary<string, object>> dicList, bool removerKey, string[] ignoreFields = null)
+        {
+            PropertyInfo[] propertyInfo = typeinfo.GetProperties();
+            string reslutMsg = string.Empty;
+            foreach (Dictionary<string, object> dic in dicList)
+            {
+                reslutMsg = typeinfo.ValidateDicInEntity(dic, removerKey, propertyInfo, ignoreFields);
+                if (!string.IsNullOrEmpty(reslutMsg))
+                    return reslutMsg;
+            }
+            return reslutMsg;
         }
 
         public static string GetKeyName(this Type typeinfo)
@@ -206,9 +230,12 @@
         {
             foreach (PropertyInfo property in properties)
             {
-                SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
-                if (sugarColumn.IsPrimaryKey)
-                    return property.Name;
+                SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
+                if (sugarColumn != null)
+                {
+                    if (sugarColumn.IsPrimaryKey)
+                        return property.Name;
+                }
             }
             return null;
         }
@@ -293,5 +320,48 @@
             }
             return null;
         }
+
+        public static void ValidatePageOptions<TEntity>(PageDataOptions options, ref ISugarQueryable<TEntity> sugarQueryable)
+        {
+            string where = string.Empty;
+            PropertyInfo[] entityProperties = typeof(TEntity).GetProperties();
+            List<SearchParameters> searchParametersList = new List<SearchParameters>();
+            if (options.Filter != null && options.Filter.Count > 0)
+            {
+                searchParametersList.AddRange(options.Filter);
+            }
+            else if (!string.IsNullOrEmpty(options.Wheres))
+            {
+                try
+                {
+                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                    options.Filter = searchParametersList;
+                }
+                catch { }
+            }
+            for (int i = 0; i < searchParametersList.Count; i++)
+            {
+                if (string.IsNullOrEmpty(searchParametersList[i].Value))
+                {
+                    continue;
+                }
+
+                PropertyInfo? property = entityProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
+
+                if (property == null) continue;
+
+                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
+                if (results == null || results.Count() == 0)
+                {
+                    continue;
+                }
+                for (int j = 0; j < results.Count(); j++)
+                {
+                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
+                    Expression<Func<TEntity, bool>> expression = property.GetWhereExpression<TEntity>(results[j].Item3, null, expressionType);
+                    sugarQueryable = sugarQueryable.Where(expression);
+                }
+            }
+        }
     }
 }

--
Gitblit v1.9.3