You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
8.3 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MaterialTraceability.Common
{
public class MsgUtil
{
public static string HexStringToASCII(string hexstring)
{
byte[] buff = new byte[(hexstring.Length - 8)/ 2];
int index = 0;
for (int i = 0; i < hexstring.Length - 8; i += 2)
{
buff[index] = Convert.ToByte(hexstring.Substring(i, 2), 16);
++index;
}
string result = Encoding.Default.GetString(buff);
return result;
}
public static string StringReverse(string hexstring)
{
char[] cs = new char[20];
cs = hexstring.ToCharArray();
if (hexstring.Length%2 == 0)
{
for (int i = 0; i < cs.Length; i += 2)
{
Array.Reverse(cs, i, 2);
}
}
else
{
for (int i = 0; i < cs.Length-1; i += 2)
{
Array.Reverse(cs, i, 2);
}
}
string res = new string(cs);
return res;
}
/// <summary>
/// 计算时间差
/// </summary>
/// <param name="BeginTime"></param>
/// <param name="EndTime"></param>
/// <returns></returns>
public static string ExecDateTime(DateTime BeginTime, DateTime EndTime)
{
string dateDiff = null;
TimeSpan ts1 = new TimeSpan(BeginTime.Ticks);
TimeSpan ts2 = new TimeSpan(EndTime.Ticks);
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
dateDiff = ts3.Days.ToString() + "天" + ts3.Hours.ToString() + "小时" + ts3.Minutes.ToString() + "分钟" + ts3.Seconds.ToString() + "秒";
return dateDiff;
}
public static string ExecDateTime(DateTime BeginTime, DateTime EndTime, out double interval)
{
string dateDiff = null;
TimeSpan ts1 = new TimeSpan(BeginTime.Ticks);
TimeSpan ts2 = new TimeSpan(EndTime.Ticks);
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
dateDiff = ts3.Days.ToString() + "天" + ts3.Hours.ToString() + "小时" + ts3.Minutes.ToString() + "分钟" + ts3.Seconds.ToString() + "秒";
interval = double.Parse(ts3.TotalHours.ToString());
return dateDiff;
}
/// <summary>
/// 计算接口调用耗时
/// </summary>
/// <param name="BeginTime"></param>
/// <param name="EndTime"></param>
/// <returns></returns>
public static string ElapsedTime(DateTime BeginTime, DateTime EndTime)
{
string dateDiff = null;
TimeSpan ts1 = new TimeSpan(BeginTime.Ticks);
TimeSpan ts2 = new TimeSpan(EndTime.Ticks);
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
dateDiff = ts3.Milliseconds.ToString() + "ms";
return dateDiff;
}
protected static int WriteRow(DataRow dr, ISheet sheet, int irows)
{
int Result = 0;
IRow row = sheet.CreateRow(irows);
for (int icell = 0; icell < dr.Table.Columns.Count; icell++)
{
if (dr[icell] == null)
{
row.CreateCell(icell).SetCellValue("");
}
if (dr[icell] is DateTime)
{
row.CreateCell(icell).SetCellValue(((DateTime)dr[icell]).ToString("yyyy-MM-dd HH:mm:ss").Replace(" 00:00:00", ""));
continue;
}
if (dr[icell] is double)
{
row.CreateCell(icell).SetCellValue((double)dr[icell]);
continue;
}
if (dr[icell] is decimal)
{
string s = dr[icell].ToString();
row.CreateCell(icell).SetCellValue(double.Parse(s));
continue;
}
if (dr[icell] is int)
{
row.CreateCell(icell).SetCellValue((int)dr[icell]);
continue;
}
row.CreateCell(icell).SetCellValue(dr[icell].ToString());
}
Result++;
return Result;
}
public static void WriteMesLog(string filename,string resource, DataTable dt)
{
if (!Directory.Exists(filename))
{
Directory.CreateDirectory(filename);
}
//filename = filename + @"\" + resource + "_log_" + DateTime.Now.ToString("yyyy-MM-dd") + ".xls";
filename = filename+DateTime.Now.ToString("yyyy-MM-dd") + ".xls";
if (!File.Exists(filename)) // 返回bool类型存在返回true不存在返回false
{
System.IO.StreamWriter sw = System.IO.File.AppendText(filename);
sw.Close();
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
ISheet sheet = hssfworkbook.CreateSheet(resource +"_log_"+ DateTime.Now.ToString("yyyy-MM-dd"));
for (int idr = 0; idr < dt.Rows.Count; idr++)
{
WriteRow(dt.Rows[idr], sheet, idr);//写入每一行
}
FileStream fout = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);//写入流
fout.Flush();
hssfworkbook.Write(fout);//写入文件
hssfworkbook = null;
fout.Close();
}
else
{
//如果存在文件
FileStream fileReader = new FileStream(filename, FileMode.Open, FileAccess.Read);//读取流
IWorkbook workbook = new HSSFWorkbook(fileReader);
ISheet sheet = workbook.GetSheetAt(0);
int count = sheet.LastRowNum + 1;
for (int idr = 0; idr < dt.Rows.Count; idr++)
{
WriteRow(dt.Rows[idr], sheet, count);//写入每一行
}
FileStream fout = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);//写入流
fout.Flush();
workbook.Write(fout);//写入文件
workbook = null;
fout.Close();
}
}
/// <summary>
/// 解密
/// 孙本强 @ 2013-04-03 13:12:02
/// </summary>
/// <param name="src">The SRC.</param>
/// <param name="key">The key.</param>
/// <param name="encoding">The encoding.</param>
/// <returns></returns>
/// <remarks></remarks>
public static string DecryptString(string src, string key, Encoding encoding)
{
int KeyLen;
int KeyPos;
int offset;
string dest;
int SrcPos;
int SrcAsc;
int TmpSrcAsc;
KeyLen = key.Length;
if (KeyLen == 0)
{
key = "Mesnac";
}
KeyPos = 0;
SrcPos = 0;
SrcAsc = 0;
if (src.Length <= 2)
{
return string.Empty;
}
dest = "";
offset = Convert.ToInt32(src.Substring(0, 2), 16);
SrcPos = 2;
while (SrcPos < src.Length)
{
SrcAsc = Convert.ToInt32(src.Substring(SrcPos, 2), 16);
if (KeyPos < KeyLen)
{
KeyPos = KeyPos + 1;
}
else { KeyPos = 0; }
TmpSrcAsc = SrcAsc ^ (int)key[KeyPos]; //异或
if (TmpSrcAsc <= offset)
{
TmpSrcAsc = 255 + TmpSrcAsc - offset;
}
else
{
TmpSrcAsc = TmpSrcAsc - offset;
}
dest = dest + (char)TmpSrcAsc;
offset = SrcAsc;
SrcPos = SrcPos + 2;
}
return dest;
}
}
}