using DataexchangeServer.Helper;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Configuration;
|
using System.Data;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Windows.Forms;
|
|
namespace DataexchangeServer
|
{
|
public delegate void WriteLogHandle(string msg);
|
|
#region 类的状态 enum State
|
/// <summary>
|
/// 类的状态
|
/// </summary>
|
public enum State
|
{
|
Alive, //激活
|
Finish,//完成
|
Sleep //睡眠
|
}
|
#endregion
|
|
public class Allocation
|
{
|
public State state { get; set; }
|
public string Name { get; set; }
|
public string ID { get; set; }
|
public string task_id { get; set; }
|
public DataTable tbQueue;
|
private OracleDb _sqlHelper;
|
private DataSet dsTemp = new DataSet();
|
|
public DateTime strStartTime { get; set; }
|
|
/// <summary>
|
/// 当消息有变化的时候将消息通过事件传输
|
/// </summary>
|
private string ConsoleMessage { get; set; }
|
public event WriteLogHandle WriteLog;
|
public event WriteLogHandle WriteErrorLog;
|
|
#region 线程类Allocation()
|
/// <summary>
|
/// 线程类
|
/// </summary>
|
public Allocation()
|
{
|
string conn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
|
conn = SecurityHelper.Decrypt(conn);
|
_sqlHelper = new OracleDb(conn);
|
//_sqlHelper =
|
//new SQLHelper(
|
// Encoding.Default.GetString(
|
// Convert.FromBase64String(ConfigurationManager.ConnectionStrings["conn"].ConnectionString)));
|
tbQueue = new DataTable();
|
string SqlStr = string.Format(@"Select * from SYSDEC where 1<>1");
|
tbQueue = _sqlHelper.ExecuteDataTable(SqlStr);
|
tbQueue.TableName = "SYSDEC";
|
tbQueue.PrimaryKey = new[] { tbQueue.Columns["task_id"] };
|
state = State.Sleep;
|
}
|
#endregion
|
|
#region 执行调用void Execute(object obj)
|
/// <summary>
|
/// 执行调用
|
/// </summary>
|
public void Execute(object obj)
|
{
|
string data = "";
|
string taskId = "";
|
string docType = "";
|
//string inputXml = "";
|
string operatype = "";
|
string msg = "";
|
string data_inserted = "";
|
object data_insertedT = "";
|
//lock (ID) ;
|
try
|
{
|
state = State.Alive;
|
DataRow[] rowArray = tbQueue.Select("", "create_time");
|
if (rowArray.Length == 0) return;
|
AE_MES_ERP Client = new AE_MES_ERP();
|
foreach (DataRow row in rowArray)
|
{
|
if (object.Equals(null, row["data_inserted"]))
|
{
|
row["msg"] = "插入的数据为空,请检查程序!";
|
row["states"] = "FAIL";
|
row["retry_times"] = Convert.ToInt16(row["retry_times"].ToString() == "" ? "0" : row["retry_times"].ToString()) + 15;
|
row["execute_time"] = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
continue;
|
}
|
|
taskId = row["task_id"].ToString();
|
data = row["data"].ToString();
|
docType = row["task_name"].ToString();
|
data_inserted = row["data_inserted"].ToString();
|
operatype = row["operatype"].ToString();
|
|
ConsoleMessage = string.Format("线程:{0},{1}执行内容:{2} 推送Data:{3} 执行时间:{4}",
|
Name,
|
row["creator"].ToString(),
|
row["descript"].ToString(),
|
row["data"].ToString(),
|
System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
if (WriteLog != null) { WriteLog(ConsoleMessage); }
|
|
//DataTable tbTemp = JSONHelper.JsonToDataTable(data_inserted);
|
if (docType.Contains("TB_ERPTOMES"))
|
{
|
dsTemp = JsonConvert.DeserializeObject(data_inserted, typeof(DataSet)) as DataSet;
|
if (dsTemp == null || dsTemp.Tables.Count == 0)
|
{
|
row["msg"] = "接口存在无效字符";
|
row["states"] = "FAIL";
|
row["retry_times"] = Convert.ToInt16(row["retry_times"].ToString() == "" ? "0" : row["retry_times"].ToString()) + 15;
|
row["execute_time"] = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
continue;
|
}
|
}
|
//dsTemp.Tables.Clear();
|
//dsTemp.Tables.Add(tbTemp);
|
//inputXml = dsTemp.GetXml();
|
msg = "";
|
//Thread.Sleep(3000);
|
//DataexchangeServer.IMS.WebServiceClient Client = new DataexchangeServer.IMS.WebServiceClient();
|
if (Client.ErpToMesData(docType, dsTemp, operatype, row, ref msg) == true)
|
{
|
if (msg.Length > 1)
|
{
|
row["msg"] = msg;
|
row["states"] = "FAIL";
|
row["retry_times"] = Convert.ToInt16(row["retry_times"].ToString() == "" ? "0" : row["retry_times"].ToString()) + 1;
|
row["execute_time"] = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
if (WriteErrorLog != null)
|
{
|
WriteErrorLog(msg);
|
}
|
}
|
else
|
{
|
//row["remark"] = "OK";
|
row["states"] = "SUCCESS";
|
row["execute_time"] = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
}
|
}
|
else
|
{
|
row["msg"] = msg;
|
row["states"] = "FAIL";
|
row["retry_times"] = Convert.ToInt16(row["retry_times"].ToString() == "" ? "0" : row["retry_times"].ToString()) + 1;
|
row["execute_time"] = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
if (WriteErrorLog != null)
|
{
|
WriteErrorLog(msg);
|
}
|
}
|
|
}
|
_sqlHelper.SaveDataToDB(tbQueue);
|
tbQueue.AcceptChanges();
|
}
|
catch (Exception ex)
|
{
|
//state = State.Finish;
|
//throw (ex);
|
//MessageBox.Show("当前错误信息如下:" + ex);
|
ConsoleMessage = string.Format(@"task_id:{0},{1}异常信息:" + ex.Message, taskId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss"));
|
bool result = JSONHelper.WriteToFile(ConsoleMessage);
|
|
ConsoleMessage = string.Format(@"Save {0},ID:{1} 出现异常信息,请在运行目录下查看。\log\", result, data);
|
if (WriteErrorLog != null)
|
{
|
WriteErrorLog(ConsoleMessage);
|
}
|
}
|
finally
|
{
|
state = State.Finish;
|
}
|
if (tbQueue.Rows.Count > 0)
|
{
|
ConsoleMessage = string.Format("线程:{0}任务结束。时间:{1}", Name, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss "));
|
if (WriteLog != null) { WriteLog(ConsoleMessage); }
|
//state = State.Finish;
|
}
|
}
|
#endregion
|
|
}
|
}
|