From 0fb0f17319ecf71d66b96a6acfd07f754be9443e Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 24 十月 2024 13:44:38 +0800
Subject: [PATCH] WCS添加穿梭车信息表,修改任务信息表
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs | 322 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 322 insertions(+), 0 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"
new file mode 100644
index 0000000..c351b8b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Utilities/EntityProperties.cs"
@@ -0,0 +1,322 @@
+锘縰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.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.Utilities
+{
+ public static class EntityProperties
+ {
+ /// <summary>
+ /// 楠岃瘉鏁版嵁搴撳瓧娈电被鍨嬩笌鍊兼槸鍚︽纭紝
+ /// </summary>
+ /// <param name="value">鍊�</param>
+ /// <param name="propertyInfo">瑕侀獙璇佺殑绫荤殑灞炴�э紝鑻ヤ笉涓簄ull锛屽垯浼氬垽鏂瓧绗︿覆鐨勯暱搴︽槸鍚︽纭�</param>
+ /// <returns>(bool, string, object)bool鎴愬惁鏍¢獙鎴愬姛,string鏍¢獙澶辫触淇℃伅,object,褰撳墠鏍¢獙鐨勫��</returns>
+ public static (bool, string, object) ValidationVal(this PropertyInfo propertyInfo, object value)
+ {
+ string dbType = "";
+ SugarColumn sugarColumn = null;
+ if (propertyInfo != null)
+ {
+ sugarColumn = propertyInfo.GetCustomAttribute<SugarColumn>();
+ dbType = propertyInfo.PropertyType != null ? propertyInfo.GetProperWithDbType() : SqlDbTypeName.NVarChar;
+ }
+ dbType = dbType.ToLower();
+ string val = value?.ToString();
+ //楠岃瘉闀垮害
+ string reslutMsg = string.Empty;
+ if (dbType == SqlDbTypeName.Int)
+ {
+ if (!value.IsInt())
+ reslutMsg = "鍙兘涓烘湁鏁堟暣鏁�";
+ } //2021.10.12澧炲姞灞炴�ф牎楠宭ong绫诲瀷鐨勬敮鎸�
+ else if (dbType == SqlDbTypeName.BigInt)
+ {
+ if (!long.TryParse(val, out _))
+ {
+ reslutMsg = "鍙兘涓烘湁鏁堟暣鏁�";
+ }
+ }
+ else if (dbType == SqlDbTypeName.DateTime
+ || dbType == SqlDbTypeName.Date
+ || dbType == SqlDbTypeName.SmallDateTime
+ || dbType == SqlDbTypeName.SmallDate
+ )
+ {
+ if (!value.IsDate())
+ reslutMsg = "蹇呴』涓烘棩鏈熸牸寮�";
+ }
+ else if (dbType == SqlDbTypeName.Float || dbType == SqlDbTypeName.Decimal || dbType == SqlDbTypeName.Double)
+ {
+
+ if (!val.IsNumber(null))
+ {
+ reslutMsg = "涓嶆槸鏈夋晥鏁板瓧";
+ }
+ }
+ else if (dbType == SqlDbTypeName.UniqueIdentifier)
+ {
+ if (!val.IsGuid())
+ {
+ reslutMsg = propertyInfo.Name + "Guid涓嶆纭�";
+ }
+ }
+ else if (propertyInfo != null
+ && (dbType == SqlDbTypeName.VarChar
+ || dbType == SqlDbTypeName.NVarChar
+ || dbType == SqlDbTypeName.NChar
+ || dbType == SqlDbTypeName.Char
+ || dbType == SqlDbTypeName.Text))
+ {
+
+ //榛樿nvarchar(max) 銆乼ext 闀垮害涓嶈兘瓒呰繃20000
+ if (val.Length > 200000)
+ {
+ reslutMsg = $"瀛楃闀垮害鏈�澶氥��200000銆�";
+ }
+ else
+ {
+
+ int length = sugarColumn.Length;
+ if (length == 0) { return (true, null, null); }
+ //鍒ゆ柇鍙屽瓧鑺備笌鍗曞瓧娈�
+ else if (length < 8000 &&
+ ((dbType.Substring(0, 1) != "n"
+ && Encoding.UTF8.GetBytes(val.ToCharArray()).Length > length)
+ || val.Length > length)
+ )
+ {
+ reslutMsg = $"鏈�澶氬彧鑳姐�恵length}銆戜釜瀛楃銆�";
+ }
+ }
+ }
+ if (!string.IsNullOrEmpty(reslutMsg) && propertyInfo != null)
+ {
+ reslutMsg = sugarColumn.ColumnDescription + reslutMsg;
+ }
+ 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},
+ {typeof(long),SqlDbTypeName.BigInt },
+ {typeof(int),SqlDbTypeName.Int},
+ { typeof(decimal),SqlDbTypeName.Decimal },
+ { typeof(float),SqlDbTypeName.Float },
+ { typeof(double),SqlDbTypeName.Double },
+ { typeof(byte),SqlDbTypeName.Int },//绫诲瀷寰呭畬
+ { typeof(Guid),SqlDbTypeName.UniqueIdentifier}
+ };
+
+ public static string GetProperWithDbType(this PropertyInfo propertyInfo)
+ {
+ bool result = ProperWithDbType.TryGetValue(propertyInfo.PropertyType, out string value);
+ if (result)
+ {
+ return value;
+ }
+ return SqlDbTypeName.NVarChar;
+ }
+
+ /// <summary>
+ /// 鍒ゆ柇hash鐨勫垪鏄惁涓哄搴旂殑瀹炰綋锛屽苟涓斿�兼槸鍚︽湁鏁�
+ /// </summary>
+ /// <param name="typeinfo"></param>
+ /// <param name="dic"></param>
+ /// <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)
+ {
+ if (dic == null || dic.Count == 0) { return "鍙傛暟鏃犳晥"; }
+
+ // 涓嶅瓨鍦ㄧ殑瀛楁鐩存帴绉婚櫎
+ dic.Where(x => !propertyInfo.Any(p => p.Name == x.Key.FirstLetterToUpper())).Select(s => s.Key).ToList().ForEach(f =>
+ {
+ dic.Remove(f);
+ });
+
+ string keyName = typeinfo.GetKeyName();
+ //绉婚櫎涓婚敭
+ if (removerKey)
+ dic.Remove(keyName);
+ //else
+ //{
+ // if (!dic.ContainsKey(keyName))
+ // return "璇蜂紶鍏ヤ富閿弬鏁�";
+ //}
+
+ foreach (PropertyInfo property in propertyInfo)
+ {
+ 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()) /*&& !dic.ContainsKey(property.Name.FirstLetterToUpper())*/)
+ {
+ if (!sugarColumn.IsNullable)
+ {
+ if (sugarColumn.DefaultValue == null)
+ return sugarColumn.ColumnDescription + "涓哄繀椤绘彁浜ら」";
+ continue;
+ }
+ continue;
+ }
+ 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)
+ {
+ return typeinfo.GetProperties().GetKeyName();
+ }
+
+ public static string GetKeyName(this PropertyInfo[] properties)
+ {
+ foreach (PropertyInfo property in properties)
+ {
+ SugarColumn? sugarColumn = property.GetCustomAttribute<SugarColumn>();
+ if (sugarColumn != null)
+ {
+ if (sugarColumn.IsPrimaryKey)
+ return property.Name;
+ }
+ }
+ return null;
+ }
+
+ public static PropertyInfo GetKeyProperty(this Type typeinfo)
+ {
+ PropertyInfo[] properties = typeinfo.GetProperties();
+ foreach (PropertyInfo property in properties)
+ {
+ SugarColumn sugarColumn = property.GetCustomAttribute<SugarColumn>();
+ if (sugarColumn?.IsPrimaryKey ?? false)
+ {
+ return property;
+ }
+ }
+ return null;
+ }
+
+ public static Type GetDetailType(this Type typeinfo)
+ {
+ PropertyInfo[] properties = typeinfo.GetProperties();
+ foreach (PropertyInfo property in properties)
+ {
+ Navigate? navigate = property.GetCustomAttribute<Navigate>();
+ if (navigate is not null)
+ {
+ if (navigate.GetNavigateType() == NavigateType.OneToOne)
+ return property.PropertyType;
+ else
+ return property.PropertyType.GenericTypeArguments[0];
+ }
+ }
+ return null;
+ }
+
+ public static string GetMainIdByDetail(this Type typeinfo)
+ {
+ PropertyInfo[] properties = typeinfo.GetProperties();
+ foreach (PropertyInfo property in properties)
+ {
+ Navigate? navigate = property.GetCustomAttribute<Navigate>();
+ if (navigate is not null)
+ {
+ return navigate.GetName();
+ }
+ }
+ return null;
+ }
+
+ public static void SetDetailId<T>(this Type typeinfo, T enetiy, object id, string name)
+ {
+ PropertyInfo property = typeinfo.GetProperty(name);
+ if (property != null)
+ {
+ property.SetValue(enetiy, id);
+ }
+ }
+
+ public static PropertyInfo? GetNavigatePro(this Type typeinfo)
+ {
+ PropertyInfo[] properties = typeinfo.GetProperties();
+ foreach (PropertyInfo property in properties)
+ {
+ Navigate? navigate = property.GetCustomAttribute<Navigate>();
+ if (navigate is not null)
+ {
+ return property;
+ }
+ }
+ return null;
+ }
+
+ public static object GetPropertyValue<T>(this Type typeinfo, T data, string propertyName)
+ {
+ if (typeinfo != typeof(T))
+ return null;
+
+ PropertyInfo? property = typeinfo.GetProperty(propertyName);
+ if (property != null)
+ {
+ return property.GetValue(data);
+ }
+ return null;
+ }
+ }
+}
--
Gitblit v1.9.3