Shun 2 年 前
コミット
a1c3dcb7cc
1 ファイル変更616 行追加0 行削除
  1. 616 0
      src/YSAI.DAQ/YSAI.Unility/ExtensionTool.cs

+ 616 - 0
src/YSAI.DAQ/YSAI.Unility/ExtensionTool.cs

@@ -1,6 +1,7 @@
 
 using Microsoft.IdentityModel.Tokens;
 using Newtonsoft.Json;
+using System.Net;
 using System.Security.Cryptography;
 using System.Text;
 using System.Text.RegularExpressions;
@@ -12,7 +13,622 @@ namespace YSAI.Unility
     /// </summary>
     public static class ExtensionTool
     {
+        /// <summary>
+        /// 生成新的GUID(有的需要生成连续的Guid,所以统一调用这里的方法)
+        /// </summary>
+        /// <returns></returns>
+        public static Guid NewGuid()
+        {
+            return Guid.NewGuid();
+        }
+
+        /// <summary>
+        /// 判断为空GUID
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static bool IsEmptyGuid(this Guid guid)
+        {
+            return guid == Guid.Empty;
+        }
+
+        /// <summary>
+        /// 判断为空GUID
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static bool IsEmptyGuid(this Guid? guid)
+        {
+            return !guid.HasValue || guid.Value == Guid.Empty;
+        }
+
+        /// <summary>
+        /// 判断不为空GUID
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static bool IsNotEmptyGuid(this Guid guid)
+        {
+            return guid != Guid.Empty;
+        }
+
+        /// <summary>
+        /// 判断不为NULL和空GUID
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static bool IsNotEmptyGuid(this Guid? guid)
+        {
+            return guid.HasValue && guid.Value != Guid.Empty;
+        }
+
+        /// <summary>
+        /// 将GUID转换为整数
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static int ToInt(this Guid guid)
+        {
+            return Math.Abs(guid.GetHashCode());
+            //byte[] buffer = guid.ToByteArray();
+            //return BitConverter.ToInt32(buffer, 0);
+        }
+
+        /// <summary>
+        /// 转换GUID为大写字符串
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static string ToUpperString(this Guid guid)
+        {
+            return guid.ToString().ToUpper();
+        }
+        /// <summary>
+        /// 转换guid为小写字符串
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static string ToLowerString(this Guid guid)
+        {
+            return guid.ToString().ToLower();
+        }
+
+        /// <summary>
+        /// 没有分隔线的字符串
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static string ToNString(this Guid guid)
+        {
+            return guid.ToString("N");
+        }
+
+        /// <summary>
+        /// 没有分隔线的小写字符串
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static string ToLowerNString(this Guid guid)
+        {
+            return guid.ToString("N").ToLower();
+        }
+
+        /// <summary>
+        /// 没有分隔线的大写字符串
+        /// </summary>
+        /// <param name="guid"></param>
+        /// <returns></returns>
+        public static string ToUpperNString(this Guid guid)
+        {
+            return guid.ToString("N").ToUpper();
+        }
+
+        /// <summary>
+        /// 将int转换为GUID
+        /// </summary>
+        /// <param name="i">111</param>
+        /// <returns>00000000-0000-0000-0000-000000000111</returns>
+        public static Guid ToGuid(this int i)
+        {
+            return i.ToString().PadLeft(32, '0').ToGuid();
+        }
+
+        /// <summary>
+        /// 将long转换为GUID
+        /// </summary>
+        /// <param name="i">111</param>
+        /// <returns>00000000-0000-0000-0000-000000000111</returns>
+        public static Guid ToGuid(this long i)
+        {
+            return i.ToString().PadLeft(32, '0').ToGuid();
+        }
+
+        /// <summary>
+        /// 将GUID转换为int
+        /// </summary>
+        /// <param name="guid">00000000-0000-0000-0000-000000000111 的GUID</param>
+        /// <returns>111</returns>
+        public static int ToInteger(this Guid guid)
+        {
+            return guid.ToNString().TrimStart('0').ToInt();
+        }
+
+        /// <summary>
+        /// 将GUID转换为long
+        /// </summary>
+        /// <param name="guid">00000000-0000-0000-0000-000000000111 的GUID</param>
+        /// <returns>111</returns>
+        public static long ToLong(this Guid guid)
+        {
+            return guid.ToNString().TrimStart('0').ToLong();
+        }
+
+        
+
+        /// <summary>
+        /// 格式化为长日期格式(yyyy年M月d日)
+        /// </summary>
+        /// <param name="date"></param>
+        /// <returns></returns>
+        public static string ToLongDate(this DateTime date)
+        {
+            return date.ToString("yyyy年M月d日");
+        }
+
+        /// <summary>
+        /// 格式化为长日期格式(yyyy年MM月dd日)
+        /// </summary>
+        /// <param name="date"></param>
+        /// <returns></returns>
+        public static string ToLongDate1(this DateTime date)
+        {
+            return date.ToString("yyyy年MM月dd日");
+        }
+
+        /// <summary>
+        /// 格式化为日期格式(yyyy-MM-dd)
+        /// </summary>
+        /// <param name="date"></param>
+        /// <returns></returns>
+        public static string ToDateString(this DateTime date)
+        {
+            return date.ToString("yyyy-MM-dd");
+        }
+
+        /// <summary>
+        /// 格式化为日期时间格式(yyyy-MM-dd HH:mm:ss)
+        /// </summary>
+        /// <param name="date"></param>
+        public static string ToDateTimeString(this DateTime date)
+        {
+            return date.ToString("yyyy-MM-dd HH:mm:ss");
+        }
+
+        /// <summary>
+        /// 格式化为日期时间格式(yyyy-MM-dd HH:mm)
+        /// </summary>
+        /// <param name="date"></param>
+        public static string ToShortDateTimeString(this DateTime date)
+        {
+            return date.ToString("yyyy-MM-dd HH:mm");
+        }
+
+        /// <summary>
+        /// 格式化为日期时间格式(yyyy-MM-dd HH:mm:ss)
+        /// </summary>
+        /// <param name="date"></param>
+        public static string ToDateTimeString(this DateTime? date)
+        {
+            return date.HasValue ? date.Value.ToDateTimeString() : string.Empty;
+        }
+
+        /// <summary>
+        /// 取日期时间的日期部分
+        /// </summary>
+        /// <param name="date"></param>
+        /// <returns></returns>
+        public static DateTime GetDate(this DateTime date)
+        {
+            return date.ToString("yyyy-MM-dd").ToDateTime();
+        }
+
+        /// <summary>
+        /// 判断字符串是否为null或""
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsNullOrEmpty(this string str)
+        {
+            return string.IsNullOrEmpty(str);
+        }
+        /// <summary>
+        /// 判断字符串是否为null或""或" "(包含空字符的字符串)
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsNullOrWhiteSpace(this string str)
+        {
+            return string.IsNullOrWhiteSpace(str);
+        }
+        /// <summary>
+        /// 比较字符串区分大小写
+        /// </summary>
+        /// <param name="str1">字符串1</param>
+        /// <param name="str2">字符串2</param>
+        /// <returns></returns>
+        public static bool EqualsIgnoreCase(this string str1, string str2)
+        {
+            return null == str1 ? null == str2 : str1.Equals(str2, StringComparison.CurrentCultureIgnoreCase);
+        }
+        /// <summary>
+        /// 判断字符串是否包含(不区分大不写)
+        /// </summary>
+        /// <param name="str1"></param>
+        /// <param name="str2"></param>
+        /// <returns></returns>
+        public static bool ContainsIgnoreCase(this string str1, string str2)
+        {
+            return null == str1 || null == str2 ? false : str1.IndexOf(str2, StringComparison.CurrentCultureIgnoreCase) >= 0;
+        }
+        /// <summary>
+        /// 去除空格
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static string Trim1(this string str)
+        {
+            return str.IsNullOrEmpty() ? "" : str.Trim();
+        }
+        /// <summary>
+        /// 将字符串转换为GUID
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static Guid ToGuid(this string str)
+        {
+            return Guid.TryParse(str.Trim1(), out Guid guid) ? guid : Guid.Empty;
+        }
+        /// <summary>
+        /// 判断一个字符串是否是GUID
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsGuid(this string str)
+        {
+            return Guid.TryParse(str.Trim1(), out _);
+        }
+        /// <summary>
+        /// 判断一个字符串是否是GUID
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsGuid(this string str, out Guid guid)
+        {
+            return Guid.TryParse(str.Trim1(), out guid);
+        }
+        /// <summary>
+        /// 判断一个字符串是否是字体图标(以fa开头)
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsFontIco(this string str)
+        {
+            return str.Trim1().StartsWith("fa");
+        }
+        /// <summary>
+        /// 判断字符串是否为整数
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsInt(this string str)
+        {
+            return int.TryParse(str, out _);
+        }
+        /// <summary>
+        /// 判断字符串是否为整数
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsInt(this string str, out int i)
+        {
+            return int.TryParse(str, out i);
+        }
+        /// <summary>
+        /// 将字符串转换为整数
+        /// </summary>
+        /// <param name="str"></param>
+        /// <param name="defaultValue">转换失败时的默认值</param>
+        /// <returns></returns>
+        public static int ToInt(this string str, int defaultValue = int.MinValue)
+        {
+            return int.TryParse(str, out int i) ? i : defaultValue;
+        }
+
+        /// <summary>
+        /// 判断字符串是否是长整型
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsLong(this string str)
+        {
+            return long.TryParse(str, out _);
+        }
+
+        /// <summary>
+        /// 判断字符串是否是长整型
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsLong(this string str, out long l)
+        {
+            return long.TryParse(str, out l);
+        }
+
+        /// <summary>
+        /// 将字符串转换为长整型
+        /// </summary>
+        /// <param name="str"></param>
+        /// <param name="defauleValue">转换失败后的默认值</param>
+        /// <returns></returns>
+        public static long ToLong(this string str, long defauleValue = long.MinValue)
+        {
+            return long.TryParse(str, out long l) ? l : defauleValue;
+        }
+
+        /// <summary>
+        /// 判断字符串是否为数字
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsDecimal(this string str)
+        {
+            return decimal.TryParse(str, out _);
+        }
+        /// <summary>
+        /// 判断字符串是否为数字
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsDecimal(this string str, out decimal d)
+        {
+            return decimal.TryParse(str, out d);
+        }
+        /// <summary>
+        /// 将字符串转换为数字
+        /// </summary>
+        /// <param name="str"></param>
+        /// <param name="defaultValue">转换失败时的默认值</param>
+        /// <returns></returns>
+        public static decimal ToDecimal(this string str, decimal defaultValue = decimal.MinValue)
+        {
+            return decimal.TryParse(str, out decimal d) ? d : defaultValue;
+        }
+        
+        /// <summary>
+        /// 判断字符串是否为日期时间
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsDateTime(this string str)
+        {
+            return DateTime.TryParse(str, out DateTime dt);
+        }
+        /// <summary>
+        /// 判断字符串是否为日期时间
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsDateTime(this string str, out DateTime dt)
+        {
+            return DateTime.TryParse(str, out dt);
+        }
+        /// <summary>
+        /// 将字符串转换为日期时间
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static DateTime ToDateTime(this string str)
+        {
+            return DateTime.TryParse(str, out DateTime dt) ? dt : DateTime.MinValue;
+        }
+        /// <summary>
+        /// 验证字符串是否为数字
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsDigital(this string str)
+        {
+            foreach (char c in str.ToCharArray())
+            {
+                if (!char.IsDigit(c))
+                {
+                    return false;
+                }
+            }
+            return true;
+        }
+        /// <summary>
+        /// 验证是否为固话号码
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static bool IsTelNumber(this string str)
+        {
+            //去掉-线后全为数字
+            return str.IsNullOrWhiteSpace() ? false : !str.StartsWith("-") && str.Replace("-", "").IsDigital();
+        }
 
+        /// <summary>
+        /// 去掉组织机构人员前缀
+        /// </summary>
+        /// <returns></returns>
+        public static string RemoveUserPrefix(this string str)
+        {
+            return str.IsNullOrWhiteSpace() ? "" : str.StartsWith("u_") ? str.TrimStart('u', '_') : str;
+        }
+        /// <summary>
+        /// 去掉组织机构工作组前缀
+        /// </summary>
+        /// <returns></returns>
+        public static string RemoveWorkGroupPrefix(this string str)
+        {
+            return str.IsNullOrWhiteSpace() ? "" : str.StartsWith("w_") ? str.TrimStart('w', '_') : str;
+        }
+        /// <summary>
+        /// 去掉组织机构人员兼职前缀
+        /// </summary>
+        /// <returns></returns>
+        public static string RemoveUserRelationPrefix(this string str)
+        {
+            return str.IsNullOrWhiteSpace() ? "" : str.StartsWith("r_") ? str.TrimStart('r', '_') : str;
+        }
+
+        /// <summary>
+        /// 移出所有空格
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static string TrimAll(this string str)
+        {
+            return Regex.Replace(str, @"\s", "");
+        }
+
+        /// <summary>
+        /// 转换为SQL的in字符串
+        /// </summary>
+        /// <param name="str">逗号分开的字符串</param>
+        /// <param name="isSignle">是否加单引号</param>
+        /// <returns></returns>
+        public static string ToSqlIn(this string str, bool isSignle = true)
+        {
+            if (str.IsNullOrEmpty())
+            {
+                return string.Empty;
+            }
+            StringBuilder stringBuilder = new StringBuilder();
+            foreach (string s in str.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
+            {
+                if (isSignle)
+                {
+                    stringBuilder.Append("'");
+                }
+                stringBuilder.Append(s);
+                if (isSignle)
+                {
+                    stringBuilder.Append("'");
+                }
+                stringBuilder.Append(",");
+            }
+            return stringBuilder.ToString().TrimEnd(',');
+        }
+
+       
+
+        /// <summary>
+        /// URL编码
+        /// </summary>
+        /// <param name="url"></param>
+        /// <returns></returns>
+        public static string UrlEncode(this string url)
+        {
+            return WebUtility.UrlEncode(url);
+        }
+        /// <summary>
+        /// URL解码
+        /// </summary>
+        /// <param name="url"></param>
+        /// <returns></returns>
+        public static string UrlDecode(this string url)
+        {
+            return WebUtility.UrlDecode(url);
+        }
+        /// <summary>
+        /// HTML编码
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static string HtmlEncode(this string str)
+        {
+            return WebUtility.HtmlEncode(str);
+        }
+        /// <summary>
+        /// HTML解码
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static string HtmlDecode(this string str)
+        {
+            return WebUtility.HtmlDecode(str);
+        }
+        /// <summary>
+        /// 将List拼接为字符串
+        /// </summary>
+        /// <param name="ts"></param>
+        /// <param name="split">分隔符</param>
+        /// <param name="prefix">前缀</param>
+        /// <param name="suffix">后缀</param>
+        /// <returns></returns>
+        public static string JoinList<T>(this IEnumerable<T> ts, string split = ",", string prefix = "", string suffix = "")
+        {
+            if (null == ts || !ts.Any())
+            {
+                return "";
+            }
+            StringBuilder stringBuilder = new StringBuilder();
+            foreach (var t in ts)
+            {
+                stringBuilder.Append(prefix);
+                stringBuilder.Append(t);
+                stringBuilder.Append(suffix);
+                stringBuilder.Append(split);
+            }
+            return stringBuilder.ToString().TrimEnd(split.ToCharArray());
+        }
+        /// <summary>
+        /// 将List转换为SQL in语句
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="ts"></param>
+        /// <param name="single">是包含单引号</param>
+        /// <returns></returns>
+        public static string JoinSqlIn<T>(this List<T> ts, bool single = true)
+        {
+            return ts.JoinList(",", single ? "'" : "", single ? "'" : "");
+        }
+        /// <summary>
+        /// 得到实符串实际长度
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static int Size(this string str)
+        {
+            byte[] strArray = Encoding.Default.GetBytes(str);
+            return strArray.Length;
+        }
+
+        /// <summary>
+        /// 将日期时间转换为INT
+        /// </summary>
+        /// <param name="dateTime">日期时间</param>
+        /// <returns></returns>
+        public static int ToInt(this DateTime dateTime)
+        {
+            DateTime dt1 = new DateTime(1970, 1, 1, 8, 0, 0);
+            DateTime dt2 = Convert.ToDateTime(dateTime);
+            return Convert.ToInt32((dt2 - dt1).TotalSeconds);
+        }
+
+        /// <summary>
+        /// 将INT转换为日期时间
+        /// </summary>
+        /// <param name="ticks"></param>
+        /// <returns></returns>
+        public static DateTime ToDateTime(this int ticks)
+        {
+            DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0);
+            startTime = startTime.AddSeconds(ticks).ToLocalTime();
+            return startTime;
+        }
         public static string UTF8ToBase64(this string data)
         {
             if (data.IsEmpty())