using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using log4net; using DSWeb.Areas; using System.Threading; using System.Timers; using DSWeb.Areas.Mobile.DAL; using System.Net; using System.IO; using AutoMapper; using DSWeb.Areas.Dispatch.DB; using DSWeb.Areas.Dispatch.Models; using DSWeb.Areas.MvcShipping.DB; using DSWeb.Areas.MvcShipping.Models.MsOpRule; using DSWeb.Areas.MvcShipping.Models.MsOpSeaeRunBill; using DSWeb.Areas.MvcShipping.Comm; using BookingWeb.DB.Model; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; using NPOI.SS.Formula.Functions; using static DSWeb.Areas.CommMng.DAL.BasicDataRefDAL; using DSWeb.Areas.CommMng.DAL; using NPOI.OpenXmlFormats.Wordprocessing; namespace DSWeb { public class Global : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { string ls = System.Configuration.ConfigurationSettings.AppSettings["isly"].ToString(); if (ls == "1") { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); routes.MapRoute( "Default", //适用于虚拟主机,ext可以为ashx,aspx,ascx,asmx "{controller}.{ext}/{action}/{id}", new { controller = "Home", action = "Index", id = "" }, new[] { "DSWeb.Controllers" }); routes.MapRoute( "Default2", //适用可以设置IIS或IIS版本为7.0以上 "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" }, new[] { "DSWeb.Controllers" }); } } protected void Application_Start(object sender, EventArgs e) { string ls = System.Configuration.ConfigurationSettings.AppSettings["isly"].ToString(); if (ls == "1") { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); } System.Timers.Timer evtTimer = new System.Timers.Timer(150000); evtTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnEvtTimer); evtTimer.Interval = 150000; evtTimer.Enabled = true; //HomeService.HomeService.StoreMemcachedForCount(); //log4j日志记录 log4net.Config.XmlConfigurator.Configure();//读取了配置文件中关于Log4Net配置信息. //开启一个线程,扫描异常信息队列。 string filePath = Server.MapPath("/Log/"); ThreadPool.QueueUserWorkItem((a) => { while (true) { //判断一下队列中是否有数据 if (ExceptionAttribute.ExecptionQueue.Count() > 0) { Exception ex = ExceptionAttribute.ExecptionQueue.Dequeue(); if (ex != null) { //将异常信息写到日志文件中。 //string fileName = DateTime.Now.ToString("yyyy-MM-dd"); //File.AppendAllText(filePath+fileName+".txt",ex.ToString(),System.Text.Encoding.UTF8); ILog logger = LogManager.GetLogger("errorMsg"); logger.Error(ex.ToString()); } else { //如果队列中没有数据,休息 Thread.Sleep(3000); } } else { //如果队列中没有数据,休息 Thread.Sleep(3000); } } }, filePath); var appid = ConfigurationManager.AppSettings["appid"]; if (appid != null && appid.ToString() != "") { //每隔5个小时,刷新微信的AccessToken System.Timers.Timer myTimer = new System.Timers.Timer(1000 * 60 * 60 * 5); myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed); myTimer.Enabled = true; myTimer.AutoReset = true; } var ReceiveDjydc = ConfigurationManager.AppSettings["ReceiveDjydc"]; if (ReceiveDjydc != null && ReceiveDjydc.ToString().ToUpper() == "TRUE") { if (ReceiveDjydc == "true") { //SaveLog("", "", "接收大简云订舱", "启动接收"); DoReceiveDjydc(); } } var SERVICEBILL = ConfigurationManager.AppSettings["SERVICEBILL"]; if (SERVICEBILL != null && SERVICEBILL.ToString() != "") { if (SERVICEBILL == "true") { //SaveLog("", "", "接收大简云订舱", "启动接收"); DoReceiveSERVICEBILL(); } } var ReceiveVGMReceipt = ConfigurationManager.AppSettings["ReceiveVGMReceipt"]; if (ReceiveVGMReceipt != null && ReceiveVGMReceipt.ToString().ToUpper() == "TRUE") { DoReceiveDjyVGMReceipt(); } var ReceiveDjyDoc= ConfigurationManager.AppSettings["ReceiveDjyDoc"]; if (ReceiveDjyDoc != null && ReceiveDjyDoc.ToString().ToUpper() == "TRUE") { if (ReceiveDjyDoc == "true") { DoReceiveDjyDocReceipt(); } } var ReceiveZHApply = ConfigurationManager.AppSettings["ReceiveZHApply"]; if (ReceiveZHApply != null && ReceiveZHApply.ToString().ToUpper() == "TRUE") { if (ReceiveZHApply == "true") { DoReceiveZHApplyReceipt(); } } InitMapper(); JobScheduler.Start(); } private static void OnEvtTimer(object sender, System.Timers.ElapsedEventArgs e) { //定时运行服务 //c#让webservice定时执行 /*HomeService.HomeService.StoreMemcachedForCount(""); HomeService.HomeService.StoreMemcachedForList("");*/ // HomeService.NavigationService.StoreMemcached(); } protected void Session_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { if (Context.Request.FilePath == "/") Context.RewritePath("Default.aspx"); } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { Exception lastError = Server.GetLastError(); ExceptionAttribute.AddException(lastError); //Server.Transfer("~/Error/FriendError.aspx"); } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { #region 微信刷新AccessToken定时器关联 //下面的代码是关键,可解决IIS应用程序池自动回收的问题 Thread.Sleep(1000); //这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start string url = "http://www.baidu.com"; HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流 #endregion } void myTimer_Elapsed(object source, ElapsedEventArgs e) { try { DBLog.Log(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":AutoTask is Working!"); TokenTask(); } catch (Exception ee) { DBLog.Log(ee.ToString()); } } void TokenTask() { AccessTokenDAL.RefrashAccessToken(); } void InitMapper() { Mapper.Initialize(cfg => { cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap() .ForMember(x => x.AuditStatsName, m => { m.MapFrom(d => d.IsAudit ? "已审核" : "未审核"); }); cfg.CreateMap() .ForMember(x => x.COMPTIME, m => { m.MapFrom(d => d.COMPTIME.HasValue ? d.COMPTIME.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""); }) .ForMember(x => x.COMPTIME_DATE, m => { m.MapFrom(d => d.COMPTIME.HasValue ? d.COMPTIME.Value.ToString("yyyy-MM-dd") : ""); }) .ForMember(x => x.COMPTIME_TIME, m => { m.MapFrom(d => d.COMPTIME.HasValue ? d.COMPTIME.Value.ToString("HH:mm:ss") : ""); }); cfg.CreateMap() .ForMember(x => x.EnableDisableTime, m => { m.MapFrom(d => d.EnableDisableTime.HasValue ? d.EnableDisableTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : ""); }); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap() .ForMember(x => x.RUNTIME, m => { m.MapFrom(d => d.RUNTIME.HasValue ? d.RUNTIME.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""); }); cfg.CreateMap(); cfg.CreateMap() .ForMember(x => x.RUNTIME, m => { m.MapFrom(d => d.RUNTIME.HasValue ? d.RUNTIME.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""); }) .ForMember(x => x.STATUS, m => { m.MapFrom(d => EnumExt.GetDescription((OpSeaeRunBillStatus)Enum.Parse(typeof(OpSeaeRunBillStatus), d.STATUS), true)); }) .ForMember(x => x.CREATETIME, m => { m.MapFrom(d => d.CREATETIME.HasValue ? d.CREATETIME.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""); }); cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap() .ForMember(x => x.AuditStatsName, m => { m.MapFrom(d => d.IsAudit ? "已审核" : "未审核"); }); cfg.CreateMap() .ForMember(x => x.IDENTIFICATION_STATE_STR, m => { m.MapFrom(d => d.IDENTIFICATION_STATE == "NotIndent" ? "未提交" : (d.IDENTIFICATION_STATE == "Identifying" ? "待审核" : (d.IDENTIFICATION_STATE == "Indentified" ? "已通过" : "已驳回"))); }) .ForMember(x => x.STATUS_STR, m => { m.MapFrom(d => d.STATUS == "Active" ? "激活" : "禁用"); }) .ForMember(x => x.REG_TIME, m => { m.MapFrom(d => d.REG_TIME.ToString("yyyy-MM-dd HH:mm:ss")); }); cfg.CreateMap() .ForMember(x => x.ISCONTAINERSOC, map => map.MapFrom(t => t.ISCONTAINERSOC == "1" ? true : false)) .ForMember(x => x.ETD, map => map.MapFrom(t => t.ETD.HasValue ? t.ETD.Value.ToString("yyyy-MM-dd") : "")) .ForMember(x => x.MODIFYTIME, map => map.MapFrom(t => t.MODIFYTIME.HasValue ? t.MODIFYTIME.Value.Ticks : 0)) ; }); } private IConnection mqConn; private const string ExchangeName = "output"; #region 接收大简云订舱业务 private void DoReceiveDjydc() { var RecMqUri = ConfigurationManager.AppSettings["ReceiveMQUri"]; var 消费队列数据 = true; ConnectionFactory factory = new ConnectionFactory(); factory.Uri = RecMqUri; mqConn = factory.CreateConnection(); IModel modelDingCang = mqConn.CreateModel(); if(!string.IsNullOrWhiteSpace(ExchangeName)) modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); var QueuePrefix_DingCang = ConfigurationManager.AppSettings["QueuePrefix_DingCang"]; var DjydcCompanyid = ConfigurationManager.AppSettings["DjydcCompanyid"]; modelDingCang.QueueDeclare($"{QueuePrefix_DingCang}{DjydcCompanyid}", false, false, false, null); var consumerDingCang = new EventingBasicConsumer(modelDingCang); consumerDingCang.Received += (ch, ea) => { var body = ea.Body; try { ////不压缩 //var strBody = Encoding.UTF8.GetString(body.ToArray()); ////压缩 var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); //var strBody = strBodyZip; var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); SaveLog(strBody, "", "接收大简云订舱", "解压内容"); //测试数据不需解压缩 //var strBody = strBodyZip; //logger.Debug($"收到大简云订舱输出数据:{strBody}"); //导出到东胜6 //if(strBody.Contains("TAHT30633700")) DSWeb.Areas.CommMng.DAL.MqWorkDAL.DingCangToDS7(strBody); } catch (Exception ex) { var excep = ex; while (excep != null) { //logger.Error(excep.Message); //logger.Error(excep.StackTrace); excep = excep.InnerException; } } }; //第二个参数控制【是否消费掉队列里的数据】 modelDingCang.BasicConsume($"{QueuePrefix_DingCang}{DjydcCompanyid}", 消费队列数据, consumerDingCang); } #endregion #region 接收委托结算业务的回推消息队列 private void DoReceiveSERVICEBILL() { var RecMqUri = ConfigurationManager.AppSettings["SERVICEBILL_MQUri"]; var 消费队列数据 = true; ConnectionFactory factory = new ConnectionFactory(); factory.Uri = RecMqUri; mqConn = factory.CreateConnection(); IModel modelDingCang = mqConn.CreateModel(); if (!string.IsNullOrWhiteSpace(ExchangeName)) modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); var QueuePrefix = ConfigurationManager.AppSettings["SERVICEBILL_QueuePrefix"]; var Companyid = ConfigurationManager.AppSettings["SERVICEBILLCompanyid"]; modelDingCang.QueueDeclare($"{QueuePrefix}{Companyid}", false, false, false, null); var consumer = new EventingBasicConsumer(modelDingCang); consumer.Received += (ch, ea) => { var body = ea.Body; try { ////不压缩 //var strBody = Encoding.UTF8.GetString(body.ToArray()); ////压缩 var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); SaveLog(strBody, "", "接收委托结算", "解压内容"); //测试数据不需解压缩 //var strBody = strBodyZip; //logger.Debug($"收到大简云订舱输出数据:{strBody}"); //导出到东胜6 //if(strBody.Contains("TAHT30633700")) DSWeb.Areas.CommMng.DAL.SERVICEBILL_MqWorkDAL.ReceiveSERIVICEBILL(strBody); } catch (Exception ex) { var excep = ex; while (excep != null) { //logger.Error(excep.Message); //logger.Error(excep.StackTrace); excep = excep.InnerException; } } }; //第二个参数控制【是否消费掉队列里的数据】 modelDingCang.BasicConsume($"{QueuePrefix}{Companyid}", 消费队列数据, consumer); } #endregion #region 接收大简云vgm回执状态回推消息队列 private void DoReceiveDjyVGMReceipt() { var RecMqUri = ConfigurationManager.AppSettings["VGMMQUrl"]; var 消费队列数据 = true; ConnectionFactory factory = new ConnectionFactory(); factory.Uri = RecMqUri; mqConn = factory.CreateConnection(); IModel modelDingCang = mqConn.CreateModel(); //if (!string.IsNullOrWhiteSpace(ExchangeName)) // modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); var QueuePrefix = ConfigurationManager.AppSettings["QueuePrefix_VGMReceipt"]; var Companyid = ConfigurationManager.AppSettings["DjyOldCOMPID"]; modelDingCang.QueueDeclare($"{QueuePrefix}{Companyid}", false, false, false, null); var consumer = new EventingBasicConsumer(modelDingCang); consumer.Received += (ch, ea) => { var body = ea.Body; try { ////不压缩 //var strBody = Encoding.UTF8.GetString(body.ToArray()); ////压缩 //var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); //var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); var strBody = Encoding.UTF8.GetString(body.ToArray()); SaveLog(strBody, "", "接收VGM回执", "解压内容"); //测试数据不需解压缩 //var strBody = strBodyZip; //logger.Debug($"收到大简云订舱输出数据:{strBody}"); //导出到东胜6 //if(strBody.Contains("TAHT30633700")) DSWeb.Areas.CommMng.DAL.DJYVGMReceipt_MqWorkDAL.ReceiveDjyVGMReceipt(strBody); } catch (Exception ex) { var excep = ex; while (excep != null) { //logger.Error(excep.Message); //logger.Error(excep.StackTrace); excep = excep.InnerException; } } }; //第二个参数控制【是否消费掉队列里的数据】 modelDingCang.BasicConsume($"{QueuePrefix}{Companyid}", 消费队列数据, consumer); } #endregion #region 接收大简云邮件附件回推消息队列 private void DoReceiveDjyDocReceipt() { var RecMqUri = ConfigurationManager.AppSettings["DOCMQUrl"]; var 消费队列数据 = true; ConnectionFactory factory = new ConnectionFactory(); factory.Uri = RecMqUri; mqConn = factory.CreateConnection(); IModel modelDingCang = mqConn.CreateModel(); //if (!string.IsNullOrWhiteSpace(ExchangeName)) // modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); var QueuePrefix = ConfigurationManager.AppSettings["QueuePrefix_DOCReceipt"]; modelDingCang.QueueDeclare($"{QueuePrefix}", false, false, false, null); var consumer = new EventingBasicConsumer(modelDingCang); consumer.Received += (ch, ea) => { var body = ea.Body; try { ////不压缩 //var strBody = Encoding.UTF8.GetString(body.ToArray()); ////压缩 //var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); //var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); var strBody = Encoding.UTF8.GetString(body.ToArray()); SaveLog(strBody, "", "接收邮件附件回执", "解压内容"); DSWeb.Areas.CommMng.DAL.DJYDocReceipt_MqWorkDAL.ReceiveDjyDOCReceipt(strBody); } catch (Exception ex) { var excep = ex; while (excep != null) { //logger.Error(excep.Message); //logger.Error(excep.StackTrace); excep = excep.InnerException; } } }; //第二个参数控制【是否消费掉队列里的数据】 modelDingCang.BasicConsume($"{QueuePrefix}", 消费队列数据, consumer); } #endregion #region 接收智慧通关回推消息队列 private void DoReceiveZHApplyReceipt() { var RecMqUri = ConfigurationManager.AppSettings["ZHApplyMQUrl"]; var ZHApplyInputBy = ConfigurationManager.AppSettings["ZHApplyInputBy"]; var ZHApplyCompanyid = ConfigurationManager.AppSettings["ZHApplyCompanyid"]; var 消费队列数据 = false; ConnectionFactory factory = new ConnectionFactory(); factory.Uri = RecMqUri; mqConn = factory.CreateConnection(); IModel modelDingCang = mqConn.CreateModel(); //if (!string.IsNullOrWhiteSpace(ExchangeName)) // modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); var QueuePrefix = ConfigurationManager.AppSettings["QueuePrefix_ApplyReceipt"]; modelDingCang.QueueDeclare($"{QueuePrefix}", false, false, false, null); var consumer = new EventingBasicConsumer(modelDingCang); consumer.Received += (ch, ea) => { var body = ea.Body; try { ////不压缩 //var strBody = Encoding.UTF8.GetString(body.ToArray()); ////压缩 //var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); //LoggerHelper loggerHelper = new LoggerHelper("接收大简云订舱"); //SaveLog(strBodyZip, "", "接收大简云订舱", "压缩内容"); //var strBody = Areas.CommMng.DAL.BasicDataRefDAL.Decompress(strBodyZip); var strBody = Encoding.UTF8.GetString(body.ToArray()); SaveLog(strBody, "", "接收智慧通关消息", "内容"); DSWeb.Areas.CommMng.DAL.DJYApplyReceipt_MqWorkDAL.ReceiveApplyReceipt(strBody, ZHApplyInputBy, ZHApplyCompanyid); } catch (Exception ex) { var excep = ex; while (excep != null) { //logger.Error(excep.Message); //logger.Error(excep.StackTrace); excep = excep.InnerException; } } }; modelDingCang.BasicConsume($"{QueuePrefix}", 消费队列数据, consumer); } #endregion } }