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