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 /// /// 类的状态 /// 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; } /// /// 当消息有变化的时候将消息通过事件传输 /// private string ConsoleMessage { get; set; } public event WriteLogHandle WriteLog; public event WriteLogHandle WriteErrorLog; #region 线程类Allocation() /// /// 线程类 /// 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) /// /// 执行调用 /// 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 } }