2023-04-28 12:21:24 +08:00

301 lines
9.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace IronIntel.Contractor
{
public class Helper
{
public static readonly DateTime DBMinDateTime = new DateTime(1900, 01, 01);
static Helper()
{
FileTypes.Add(".jfif", "image/jpeg");
FileTypes.Add(".jpg", "image/jpeg");
FileTypes.Add(".jpeg", "image/jpeg");
FileTypes.Add(".bmp", "image/jpeg");
FileTypes.Add(".gif", "image/jpeg");
FileTypes.Add(".png", "image/png");
FileTypes.Add(".tiff", "image/tiff");
FileTypes.Add(".mp4", "video/mp4");
FileTypes.Add(".mp3", "audio/mpeg");
FileTypes.Add(".mp2", "audio/mp2");
FileTypes.Add(".m4e", "video/mp4");
FileTypes.Add(".mpeg", "video/mpg");
FileTypes.Add(".avi", "video/avi");
FileTypes.Add(".mov", "video/quicktime");
FileTypes.Add(".pdf", "application/pdf");
}
public static bool IsNullDateTime(DateTime? dt)
{
return dt == null || dt.Value < DBMinDateTime;
}
public static bool IsTrue(string s)
{
const string YES = "Yes";
const string TRUE = "True";
const string ONE = "1";
return (string.Compare(s, YES, true) == 0) || (string.Compare(s, TRUE, true) == 0) || (string.Compare(s, ONE) == 0);
}
public static bool Contains(string text, string val)
{
if (!string.IsNullOrWhiteSpace(text))
{
return text.IndexOf(val, StringComparison.OrdinalIgnoreCase) >= 0;
}
else
{
return false;
}
}
public static void CloneProperty(object objDes, object objSrc)
{
if (objDes == null || objSrc == null)
return;
PropertyInfo[] pisDes = objDes.GetType().GetProperties();
Type tSrc = objSrc.GetType();
foreach (PropertyInfo piDes in pisDes)
{
if (!piDes.CanWrite)
continue;
PropertyInfo piSrc = tSrc.GetProperty(piDes.Name, piDes.PropertyType);
if (piSrc == null || !piSrc.CanRead)
continue;
try
{
piDes.SetValue(objDes, piSrc.GetValue(objSrc, null), null);
}
catch (Exception e)
{
e.ToString();
}
}
}
public static object DateValueToNull(DateTime date)
{
if (date <= DBMinDateTime)
return null;
else
return date;
}
public static object DateValueToNullOrBigHour(DateTime date)
{
if (date <= DBMinDateTime)
return null;
else
return date.AddDays(1).AddSeconds(-1);
}
public static object NumberValueToNull(int value)
{
if (value < 0)
return null;
else
return value;
}
public static object NumberValueToNull(double value)
{
if (value < 0)
return null;
else
return value;
}
public static string GetDefaultOdoUnitString()
{
if (SystemParams.CustomerDetail.OdometerUnit == Foresight.Standard.Units.DistanceUnits.Kilometres)
return "Kilometre";
else //if (SystemParams.CustomerDetail.OdometerUnit == Foresight.Fleet.Units.DistanceUnits.Miles)
return "Mile";
}
public static System.Drawing.Color ConvertHtmlColor(string color, System.Drawing.Color def)
{
System.Drawing.Color c = def;
if (System.Text.RegularExpressions.Regex.IsMatch(color, "#([0-9a-fA-F]{6})"))
{
try
{
c = System.Drawing.ColorTranslator.FromHtml(color);
}
catch { }
}
return c;
}
public static byte[] GetThumbImg(byte[] buff, int width = 300, int height = 300)
{
try
{
using (MemoryStream ms = new MemoryStream(buff))
{
ms.Position = 0;
System.Drawing.Image img = RotateImage(ms);
var tp = Scale(img.Width, img.Height, width, height);
System.Drawing.Image img1 = new System.Drawing.Bitmap(img, tp.Item1, tp.Item2);
using (MemoryStream ms1 = new MemoryStream())
{
img1.Save(ms1, System.Drawing.Imaging.ImageFormat.Png);
ms1.Position = 0;
return ms1.ToArray();
}
}
}
catch
{
return buff;
}
}
private static Tuple<int, int> Scale(int src_width, int src_height, int dest_width, int dest_height)
{
double srcratio = (double)src_width / (double)src_height;
double w = dest_width;
double h = (w / srcratio);
if (h > dest_height)
{
h = dest_height;
w = h * srcratio;
}
return new Tuple<int, int>((int)w, (int)h);
}
/// <summary>
/// 根据图片exif调整方向
/// </summary>
/// <param name="sm"></param>
/// <returns></returns>
private static Bitmap RotateImage(Stream sm)
{
System.Drawing.Image img = System.Drawing.Image.FromStream(sm);
var exif = img.PropertyItems;
byte orien = 0;
var item = exif.Where(m => m.Id == 274).ToArray();
if (item.Length > 0 && item[0].Value != null && item[0].Value.Length > 0)
orien = item[0].Value[0];
switch (orien)
{
case 2:
img.RotateFlip(RotateFlipType.RotateNoneFlipX);//horizontal flip
break;
case 3:
img.RotateFlip(RotateFlipType.Rotate180FlipNone);//right-top
break;
case 4:
img.RotateFlip(RotateFlipType.RotateNoneFlipY);//vertical flip
break;
case 5:
img.RotateFlip(RotateFlipType.Rotate90FlipX);
break;
case 6:
img.RotateFlip(RotateFlipType.Rotate90FlipNone);//right-top
break;
case 7:
img.RotateFlip(RotateFlipType.Rotate270FlipX);
break;
case 8:
img.RotateFlip(RotateFlipType.Rotate270FlipNone);//left-bottom
break;
default:
break;
}
return (Bitmap)img;
}
public static bool IsEmail(string email)
{
//string s = @"^(([^<>()[\]\\.,;:\s@{qm}]+(\.[^<>()[\]\\.,;:\s@{qm}]+)*)|({qm}.+{qm}))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";
//s = s.Replace("{qm}", "\\\"");
string s = @"^\w[-\w.+]*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
return new System.Text.RegularExpressions.Regex(s).IsMatch(email);
}
public static bool IsNumber(string str)
{
string s = @"^\d+$";
return new System.Text.RegularExpressions.Regex(s).IsMatch(str);
}
public static readonly Dictionary<string, string> FileTypes = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
public static readonly string[] ImageTypes = new string[] { ".jfif", ".jpg", ".jpeg", ".bmp", ".png", ".tiff", ".gif" };
public static string GetFileExtention(string filename)
{
if (string.IsNullOrWhiteSpace(filename))
{
return ".jpg";
}
int idx = filename.LastIndexOf('.');
if (idx > 0 && idx < (filename.Length - 1))
{
return filename.Substring(idx);
}
else
{
return ".jpg";
}
}
public static bool IsImage(string filetype)
{
foreach (var s in ImageTypes)
{
if (string.Equals(s, filetype, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
public static double? ConvertToDouble(string d, double? def = null)
{
if (string.IsNullOrEmpty(d))
{
return null;
}
double t;
if (double.TryParse(d, out t))
{
return t;
}
return def;
}
public static int ConvertToInt32(string d, int def = 0)
{
int t;
if (int.TryParse(d, out t))
{
return t;
}
return def;
}
public static readonly string[] DevAccounts = new string[] {
"dchu@foresightintelligence.com",
"qhong@foresightintelligence.com",
"lwang@foresightintelligence.com",
"ljzeng@foresightintelligence.com",
"llj@foresightintelligence.com"
};
}
}