using iWareLog.ORM; using iWareLog.LOG.Entity; using iWareLog.LOG.Dao; using iWareCommon.Common.Service; using iWareCommon.Utils; using System; using iWareCommon.Common.EnumType; using Newtonsoft.Json; using iWareLog.Properties; using iWareCommon.Common.Entity; using System.Linq; namespace iWareLog.LOG.Service { public class FailSentMessageService : CommonService { private static object Lock = new object(); private FailSentMessageService() : base(FailSentMessageDao.GetInstance()) { } private static FailSentMessageService Instance = null; /// /// 获取单例的方法 /// /// log服务的单例实体 public static FailSentMessageService GetInstance() { if (Instance == null) { lock (Lock) { if (Instance == null) { Instance = new FailSentMessageService(); } } } return Instance; } /// /// 重新发送 /// /// /// /// public bool ReSend(int id, out string msg) { using (var dbModel = new DbModelLog()) { try { msg = ""; var url = ""; var message = dbModel.LOGERRORFailSentMessages.FirstOrDefault(x => x.id == id); if (message == null) { msg = string.Format("没有找到id为{0}的记录", id); return false; } switch (message.url) { case "pushstatusforpreheating": case "pushstatusforheatstorage": case "pushstatusforbufferfeed": case "preheatstoragefinish": case "pushstatusforft": case "pushstatusforecmfeedbyrcs": case "pushstatusforecmblankingbyrcs": case "pushstatusforheattrans": case "pushstatusforartificialqualityinspection": case "heatstoroutbindrfid": case "heatstoroutbindfinish": case "pushstatusforbuffertrans": url = Resources.WipUrl + @"/"; break; case "syncmaterialinfo": case "materialstatemodify": case "getloadingtablestatus": case "getecmtablestatus": case "businessexception": case "equipwarn": case "equipstatus": case "agvrealtimelocation": case "outstoragecompleted": case "movestoragecompleted": case "bufferlayingoffcompleted": case "artificialwarehousing": case "processcardforwcs": case "resetprocesscardprintqueue": url = Resources.WipUrl2 + @"/"; break; case "reparsetask": break; } var responseStr = HttpHelper.GetHttpResponse(url + message.url, JsonConvert.DeserializeObject(message.requeststr), 5000); var resFormat = JsonConvert.DeserializeObject(responseStr); message.isok = resFormat.resCode == "00000" ? (int)EYesOrNo.是 : (int)EYesOrNo.否; message.updatetime = DateTime.Now; message.retrytimes += 1; dbModel.SaveChanges(); if (message.isok == (int)EYesOrNo.否) { msg = resFormat.resMsg; } return message.isok == (int)EYesOrNo.是; } catch (Exception ex) { msg = ex.Message; var message = dbModel.LOGERRORFailSentMessages.FirstOrDefault(x => x.id == id); message.isok = (int)EYesOrNo.否; message.updatetime = DateTime.Now; message.retrytimes += 1; dbModel.SaveChanges(); LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ReSend", msg); return false; } } } public bool PushBusinessException(int id, out string msg) { using (var dbModel2 = new DbModelLog()) { try { msg = ""; var message = dbModel2.LOGERRORFailSentMessages.FirstOrDefault(x => x.id == id); if (message == null) { msg = string.Format("没有找到id为{0}的记录", id); return false; } var requestBody = new { sysCode = "WCS", taskNo = StringHelper.GetValue(message.requeststr, "taskNo"), processCardNumber = StringHelper.GetValue(message.requeststr, "processCardNumber"), exceptionCode = "001", exceptionMsg = message.resmsg, timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; var responseStr = HttpHelper.GetHttpResponse(Resources.WipUrl2 + @"/businessexception", requestBody, 5000); LogTextHelper.WriteLine(Resources.LogDir, "PushBusinessException:responseStr = {0}", responseStr); return true; } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "PushBusinessException", msg); return false; } } } } }