You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
546 lines
20 KiB
546 lines
20 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Configuration;
|
|
using System.Reflection;
|
|
using System.IO;
|
|
using System.Diagnostics;
|
|
using System.Data.SqlClient;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
using System.Security.Cryptography;
|
|
//using NFine.Data.Extensions;
|
|
|
|
|
|
namespace ICSSoft.FromERP
|
|
{
|
|
public class ICSHelper
|
|
{
|
|
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
public static string GetConnectString()
|
|
{
|
|
try
|
|
{
|
|
string connectionString = GetConfigString("SysConnectionString");
|
|
return connectionString;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static string GetPLMConnectString()
|
|
{
|
|
try
|
|
{
|
|
string connectionString = GetConfigString("SysPlmConnectionString");
|
|
return connectionString;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static string GetERPConnectString()
|
|
{
|
|
try
|
|
{
|
|
string connectionString = GetConfigString("SysErpConnectionString");
|
|
return connectionString;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static string GetConfigString(string name)
|
|
{
|
|
try
|
|
{
|
|
Configuration config = GetConfig();
|
|
string configString = config.ConnectionStrings.ConnectionStrings[name].ConnectionString.ToString();
|
|
return configString;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static Dictionary<string, string> GetConfigString()
|
|
{
|
|
try
|
|
{
|
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
|
Configuration config = GetConfig();
|
|
var settings = config.AppSettings.Settings;
|
|
foreach (var key in settings.AllKeys)
|
|
{
|
|
string value = settings[key].Value.ToString();
|
|
dictionary.Add(key.ToString(), value);
|
|
}
|
|
return dictionary;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static Configuration GetConfig()
|
|
{
|
|
Assembly assembly = Assembly.GetCallingAssembly();
|
|
string path = string.Format("{0}.config", assembly.Location);
|
|
if (!File.Exists(path))
|
|
{
|
|
throw new FileNotFoundException(path + "路径下的文件未找到!");
|
|
}
|
|
try
|
|
{
|
|
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
|
|
configFile.ExeConfigFilename = path;
|
|
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None);
|
|
return config;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static void Log(string name)
|
|
{
|
|
string procName = Process.GetCurrentProcess().ProcessName;
|
|
using (PerformanceCounter pc = new PerformanceCounter("Process", "Private Bytes", procName))
|
|
{
|
|
log.Warn(name + "-当前程序内存占用:" + pc.NextValue());
|
|
}
|
|
long memoryUsed = GC.GetTotalMemory(true);
|
|
log.Warn(name + "-内存占用:" + memoryUsed);
|
|
}
|
|
|
|
public static string Time(string Namespace, string ClassName, string TenantId, string sql, string TempTableName)
|
|
{
|
|
try
|
|
{
|
|
string value = @"DECLARE @LastTime datetime='2000-01-01'
|
|
--同步时间表不存在插入记录
|
|
IF NOT EXISTS(SELECT ID FROM ICSERPTime WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}')
|
|
BEGIN
|
|
INSERT INTO ICSERPTime VALUES('{0}','{1}',@LastTime
|
|
,'','','{2}'
|
|
,@LastTime,'job',@LastTime,'job','job','job')
|
|
END
|
|
--取出最后同步日期
|
|
SELECT @LastTime=ModifyDate FROM ICSERPTime WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}'
|
|
--根据时间过滤所需数据放入临时表,必须要有MTIME字段
|
|
{3}
|
|
--从临时表取出最后修改日期
|
|
SELECT @LastTime=MAX(MTIME) FROM {4}
|
|
--更新时间表同步日期
|
|
UPDATE ICSERPTime SET ModifyDate=@LastTime,LastModificationTime=GETDATE(),LastModifierUserName='job' ,LastModifierUserId='job'
|
|
WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}'
|
|
";
|
|
return string.Format(value, Namespace, ClassName, TenantId, sql, TempTableName);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw;
|
|
}
|
|
}
|
|
public static string InsertSQL(string TableName, Dictionary<string, string> values)
|
|
{
|
|
try
|
|
{
|
|
string col = string.Empty;
|
|
string value = string.Empty;
|
|
foreach (var item in values)
|
|
{
|
|
col += item.Key + ",";
|
|
value += item.Value + ",";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(value))
|
|
{
|
|
return string.Format("INSERT INTO {0} ({1}) SELECT {2} FROM ", TableName, col.TrimEnd(','), value.TrimEnd(','));
|
|
}
|
|
return value;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw;
|
|
}
|
|
}
|
|
public static string UpdateSQL(string TableName, Dictionary<string, string> values)
|
|
{
|
|
try
|
|
{
|
|
string value = string.Empty;
|
|
foreach (var item in values)
|
|
{
|
|
value += item.Key +"="+ item.Value + ",";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(value))
|
|
{
|
|
return string.Format("UPDATE {0} SET {1} FROM ", TableName, value.TrimEnd(','));
|
|
}
|
|
return "";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static void ExecuteDate(string conStr, string sql)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection con = new SqlConnection(conStr))
|
|
{
|
|
con.Open();
|
|
try
|
|
{
|
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
|
using (SqlTransaction tran = con.BeginTransaction())
|
|
{
|
|
using (SqlCommand command = new SqlCommand())
|
|
{
|
|
command.Connection = con;
|
|
command.Transaction = tran;
|
|
command.CommandTimeout = 100;
|
|
command.CommandText = sql;
|
|
try
|
|
{
|
|
int result = command.ExecuteNonQuery();
|
|
tran.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
tran.Rollback();
|
|
log.Error( ex.ToString() + Environment.NewLine + "异常SQL:" + Environment.NewLine + sql);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
if (con.State == ConnectionState.Open)
|
|
con.Close();
|
|
con.Dispose();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取拼音
|
|
/// </summary>
|
|
/// <param name="str"></param>
|
|
/// <returns></returns>
|
|
public static string GetPYString(string str)
|
|
{
|
|
string tempStr = "";
|
|
foreach (char c in str)
|
|
{
|
|
if ((int)c >= 33 && (int)c <= 126)
|
|
{//字母和符号原样保留
|
|
tempStr += c.ToString();
|
|
}
|
|
else
|
|
{//累加拼音声母
|
|
tempStr += GetPYChar(c.ToString());
|
|
}
|
|
}
|
|
return tempStr;
|
|
}
|
|
///
|
|
/// 取单个字符的拼音声母
|
|
///
|
|
/// 要转换的单个汉字
|
|
/// 拼音声母
|
|
public static string GetPYChar(string c)
|
|
{
|
|
byte[] array = new byte[2];
|
|
array = System.Text.Encoding.Default.GetBytes(c);
|
|
int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));
|
|
if (i < 0xB0A1) return "*";
|
|
if (i < 0xB0C5) return "a";
|
|
if (i < 0xB2C1) return "b";
|
|
if (i < 0xB4EE) return "c";
|
|
if (i < 0xB6EA) return "d";
|
|
if (i < 0xB7A2) return "e";
|
|
if (i < 0xB8C1) return "f";
|
|
if (i < 0xB9FE) return "g";
|
|
if (i < 0xBBF7) return "h";
|
|
if (i < 0xBFA6) return "j";
|
|
if (i < 0xC0AC) return "k";
|
|
if (i < 0xC2E8) return "l";
|
|
if (i < 0xC4C3) return "m";
|
|
if (i < 0xC5B6) return "n";
|
|
if (i < 0xC5BE) return "o";
|
|
if (i < 0xC6DA) return "p";
|
|
if (i < 0xC8BB) return "q";
|
|
if (i < 0xC8F6) return "r";
|
|
if (i < 0xCBFA) return "s";
|
|
if (i < 0xCDDA) return "t";
|
|
if (i < 0xCEF4) return "w";
|
|
if (i < 0xD1B9) return "x";
|
|
if (i < 0xD4D1) return "y";
|
|
if (i < 0xD7FA) return "z";
|
|
return "*";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 返回一个数据表
|
|
/// </summary>
|
|
/// <param name="connectionString">数据库连接字符串</param>
|
|
/// <param name="cmdType">命令类型</param>
|
|
/// <param name="cmdText">SQL语句</param>
|
|
/// <param name="commandParameters">参数</param>
|
|
/// <param name="strTableName">数据表名</param>
|
|
/// <param name="bIsLoadStru">是否加载数据表结构</param>
|
|
/// <returns></returns>
|
|
public static DataTable ExecuteTable(string connection, string cmdText)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection con = new SqlConnection(connection))
|
|
{
|
|
con.Open();
|
|
try
|
|
{
|
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
|
|
|
using (SqlCommand command = new SqlCommand())
|
|
{
|
|
command.CommandText = cmdText;
|
|
|
|
DataSet ds = new DataSet();
|
|
SqlDataAdapter da = new SqlDataAdapter(command);
|
|
da.SelectCommand.Connection = con; //加上这个
|
|
//da.FillSchema(ds, SchemaType.Source);
|
|
|
|
da.Fill(ds);
|
|
return ds.Tables[0];
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
if (con.State == ConnectionState.Open)
|
|
con.Close();
|
|
con.Dispose();
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw ex;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
public static DataTable GetERPDB(string conStr)
|
|
{
|
|
try
|
|
{
|
|
string value = @"SELECT * FROM SysWorkPoint";
|
|
return ExecuteTable(conStr, value);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static object ExecuteScalar(string connString, string sql)
|
|
{
|
|
using (SqlConnection conn = new SqlConnection(connString))
|
|
{
|
|
conn.Open();
|
|
object obj = null;
|
|
try
|
|
{
|
|
SqlCommand cmd = new SqlCommand(sql, conn);
|
|
//if (spArr.Length > 0)
|
|
// cmd.Parameters.AddRange(spArr.SetDBNull());
|
|
obj = cmd.ExecuteScalar();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
conn.Close();
|
|
//conn.Dispose();
|
|
}
|
|
return obj;
|
|
}
|
|
}
|
|
|
|
public static DateTime GetTime(string Conn, string Namespace, string ClassName, string TenantId)
|
|
{
|
|
|
|
try
|
|
{
|
|
string value = @"DECLARE @LastTime datetime='2000-01-01'
|
|
--同步时间表不存在插入记录
|
|
IF NOT EXISTS(SELECT ID FROM ICSERPTime WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}')
|
|
BEGIN
|
|
INSERT INTO ICSERPTime VALUES('{0}','{1}',@LastTime
|
|
,'','','{2}'
|
|
,@LastTime,'job',@LastTime,'job','job','job')
|
|
END
|
|
--取出最后同步日期
|
|
SELECT @LastTime=ModifyDate FROM ICSERPTime WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}'
|
|
--根据时间过滤所需数据放入临时表,必须要有MTIME字段
|
|
Select @LastTime
|
|
";
|
|
return ExecuteScalar(Conn, string.Format(value, Namespace, ClassName, TenantId)).ToDateTime();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public static void UpdateTime(string Conn, string Namespace, string ClassName, string TenantId, DateTime time)
|
|
{
|
|
|
|
try
|
|
{
|
|
string value = @"DECLARE @LastTime datetime='2000-01-01'
|
|
--同步时间表不存在插入记录
|
|
IF NOT EXISTS(SELECT ID FROM ICSERPTime WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}')
|
|
BEGIN
|
|
INSERT INTO ICSERPTime VALUES('{0}','{1}',@LastTime
|
|
,'','','{2}'
|
|
,@LastTime,'job',@LastTime,'job','job','job')
|
|
END
|
|
select @LastTime='{3}'
|
|
--取出最后同步日期
|
|
UPDATE ICSERPTime SET ModifyDate=@LastTime,LastModificationTime=GETDATE(),LastModifierUserName='job' ,LastModifierUserId='job'
|
|
WHERE Namespace='{0}' AND ClassName='{1}' AND TenantId='{2}'
|
|
";
|
|
ExecuteScalar(Conn, string.Format(value, Namespace, ClassName, TenantId, time.ToStringBz()));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString());
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public static void ExecuteDateNew(string conStr, string sql)
|
|
{
|
|
|
|
using (SqlConnection con = new SqlConnection(conStr))
|
|
{
|
|
con.Open();
|
|
try
|
|
{
|
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
|
using (SqlTransaction tran = con.BeginTransaction())
|
|
{
|
|
using (SqlCommand command = new SqlCommand())
|
|
{
|
|
command.Connection = con;
|
|
command.Transaction = tran;
|
|
command.CommandTimeout = 100;
|
|
command.CommandText = sql;
|
|
try
|
|
{
|
|
int result = command.ExecuteNonQuery();
|
|
tran.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
tran.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.ToString() + Environment.NewLine + "异常SQL:" + Environment.NewLine + sql);
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
if (con.State == ConnectionState.Open)
|
|
con.Close();
|
|
con.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static string ApiSign(string app_id, string app_secret, long timestamp)
|
|
{
|
|
return ToMd5($"app_id{app_id}app_secret{app_secret}_timestamp{timestamp}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Md5
|
|
/// </summary>
|
|
/// <param name="txt"></param>
|
|
/// <returns></returns>
|
|
public static string ToMd5(string txt)
|
|
{
|
|
byte[] sor = Encoding.UTF8.GetBytes(txt);
|
|
MD5 md5 = MD5.Create();
|
|
byte[] result = md5.ComputeHash(sor);
|
|
StringBuilder strbul = new StringBuilder(40);
|
|
for (int i = 0; i < result.Length; i++)
|
|
{
|
|
//加密结果"x2"结果为32位,"x3"结果为48位,"x4"结果为64位
|
|
strbul.Append(result[i].ToString("x2"));
|
|
}
|
|
return strbul.ToString();
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|