|
|
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;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|