namespace OASystem.Infrastructure.Tools;
///
/// 工具类
///
public static class CommonFun
{
public static string GUID => Guid.NewGuid().ToString("N");
public static bool IsNull(this string s)
{
return string.IsNullOrWhiteSpace(s);
}
public static bool NotNull(this string s)
{
return !string.IsNullOrWhiteSpace(s);
}
public static int GetRandom(int minNum, int maxNum)
{
var seed = BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0);
return new Random(seed).Next(minNum, maxNum);
}
public static string GetSerialNumber(string prefix = "")
{
return prefix + DateTime.Now.ToString("yyyyMMddHHmmssfff") + GetRandom(1000, 9999).ToString();
}
public static string ToJson(this object obj)
{
return JsonSerializer.Serialize(obj);
}
public static T ToObject(this string json)
{
return JsonSerializer.Deserialize(json);
}
public static object GetDefaultVal(string typename)
{
return typename switch
{
"Boolean" => false,
"DateTime" => default(DateTime),
"Date" => default(DateTime),
"Double" => 0.0,
"Single" => 0f,
"Int32" => 0,
"String" => string.Empty,
"Decimal" => 0m,
_ => null,
};
}
public static void CoverNull(T model) where T : class
{
if (model == null)
{
return;
}
var typeFromHandle = typeof(T);
var properties = typeFromHandle.GetProperties();
var array = properties;
for (var i = 0; i < array.Length; i++)
{
var propertyInfo = array[i];
if (propertyInfo.GetValue(model, null) == null)
{
propertyInfo.SetValue(model, GetDefaultVal(propertyInfo.PropertyType.Name), null);
}
}
}
public static void CoverNull(List models) where T : class
{
if (models.Count == 0)
{
return;
}
foreach (var model in models)
{
CoverNull(model);
}
}
public static bool ToBool(this object thisValue, bool errorvalue = false)
{
if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out bool reval))
{
return reval;
}
return errorvalue;
}
#region 文件操作
public static FileInfo[] GetFiles(string directoryPath)
{
if (!IsExistDirectory(directoryPath))
{
throw new DirectoryNotFoundException();
}
var root = new DirectoryInfo(directoryPath);
return root.GetFiles();
}
public static bool IsExistDirectory(string directoryPath)
{
return Directory.Exists(directoryPath);
}
public static string ReadFile(string Path)
{
string s;
if (!File.Exists(Path))
s = "不存在相应的目录";
else
{
var f2 = new StreamReader(Path, Encoding.Default);
s = f2.ReadToEnd();
f2.Close();
f2.Dispose();
}
return s;
}
public static void FileMove(string OrignFile, string NewFile)
{
File.Move(OrignFile, NewFile);
}
public static void CreateDir(string dir)
{
if (dir.Length == 0) return;
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
}
#endregion
#region IP
///
/// 是否为ip
///
///
///
public static bool IsIP(string ip)
{
return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}
public static string GetIP(HttpRequest request)
{
if (request == null)
{
return "";
}
var ip = request.Headers["X-Real-IP"].FirstOrDefault();
if (ip.IsNull())
{
ip = request.Headers["X-Forwarded-For"].FirstOrDefault();
}
if (ip.IsNull())
{
ip = request.HttpContext?.Connection?.RemoteIpAddress?.ToString();
}
if (ip.IsNull() || !IsIP(ip))
{
ip = "127.0.0.1";
}
return ip;
}
#endregion
#region 随机数
///
/// 根据自定义随机包含的字符获取指定长度的随机字符
///
/// 随机字符长度
/// 随机字符
public static string GetRandomStr(int length)
{
string a = "ABCDEFGHJKLMNPQRSTUVWXYZ012356789";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++)
{
sb.Append(a[new Random(Guid.NewGuid().GetHashCode()).Next(0, a.Length - 1)]);
}
return sb.ToString();
}
///
/// 根据自定义随机包含的字符获取指定长度的随机字符
///
/// 随机字符长度
/// 随机字符
public static string GetRandomAllStr(int length)
{
string a = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz012356789";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++)
{
sb.Append(a[new Random(Guid.NewGuid().GetHashCode()).Next(0, a.Length - 1)]);
}
return sb.ToString();
}
#endregion
}