using Face.Domain.Entities; using Face.Services.Manager; using Face.SystemTask; using Face.Web.Areas.App.Controllers; using Face.Web.Areas.App.Models; using FluentScheduler; using MySql.Data.MySqlClient; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net.NetworkInformation; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using TencentCloud.Common.Profile; using TencentCloud.Common; using WebServer; using static Face.Web.Areas.App.Models.Roominfo; using System.Text; using WebSocketToolsConsole; namespace Face.Web { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { MyRegistry.GoWork(); AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //定时器 System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed); //设置引发时间的时间间隔 此处设置为1秒 aTimer.Interval = 1000 * 10;//3600秒也就是1小时,每1小时刷新一次,就是每1小时执行方法一次 aTimer.Enabled = true; //自定义定时作业计划 JobManager.Initialize(new TimingPlanRegistry()); //timingOut(); //注册UDP监视 //Services.UDPHelp.StartReceive(); //(new System.Threading.Thread(new System.Threading.ThreadStart(Services.UDPHelp.CreatSocket))).Start(); //开辟一个新线程 //(new System.Threading.Thread(new System.Threading.ThreadStart(Services.UDPHelp_New.CreatSocket))).Start(); //开辟一个新线程 //Services.UDP.UDPHelp.RecevieAndSend(); //Thread t = new Thread(timingOut); //t.Start(); //Thread S = new Thread(UdpCommunication.UdpStateinfo); //S.Start(); //timingOut(); } protected void Session_OnStart() { Session.Timeout = 60 * 4; } public void timingOut() //预约退房 { List relist = null; Result result = new Result(); try { using (var db = SqlSugarBase.GesmartDb()) { var list = db.Queryable().Where(s => s.testState != 2 && s.testState != 3).ToList(); foreach (var item in list) { var timeOut = DateTime.Parse(item.predictCheckIn.ToString()).AddMinutes(Convert.ToDouble(item.checkInduration.ToString())); var hotellist = SqlSugarBase.authoriydb.Queryable().First(s => s.Id == item.hotelid); GetRoomInterface.test te = new GetRoomInterface.test { code = hotellist.Code.ToString(), creatDate = hotellist.CreateTime.ToString("yyyy-MM-dd") }; var geiRoomShow = GetRoomInterface.Roomport(te); if (geiRoomShow.IsSuccess == true) { relist = geiRoomShow.Result; result = relist.FirstOrDefault(x => x.ID == item.Roomid); } var dqsj = timeOut - DateTime.Now; if (item.testState != 1) { if (item.predictCheckIn <= DateTime.Now)//立刻开房 { List tu = new List(); using (var sx = SqlSugarBase.GesmartDb()) { var dingdan = sx.Queryable().Where(s => s.masterid == item.id).ToList(); foreach (var info in dingdan) { var user = sx.Queryable().First(x => x.id == info.Lodgerid); if (user != null) { tu.Add(user); } } bool isok = true; List users = new List(); for (int i = 0; i < tu.Count; i++) { WebServer.UserInfo fo = new WebServer.UserInfo() { idcard = tu[i].idNumber, customer = tu[i].name, sex = tu[i].sex == 1 ? "男" : "女", photoUrl = "http://face.blv-oa.com/ImgServer/FileImage?url=" + tu[i].picture, }; users.Add(fo); int uid = tu[i].id; var sm = SqlSugarBase.Db.Queryable().First(x => x.id == uid); isok = WebHelp.Send(new SendInfo { code = hotellist.Code.ToString(), roomNumber = result.RoomNumber, idNumber = sm.idNumber, phoneNumber = sm.phone }, users.ToArray()); users.Clear(); int states = 4; if (isok) { states = 1; } SqlSugarBase.Db.Updateable().SetColumns(s => s.testState == states).Where(x => x.id == item.id).ExecuteCommand(); } } } else { //预约开房 Task.Factory.StartNew(() => { var dqdate = Convert.ToDateTime(item.predictCheckIn.ToString()) - DateTime.Now; var sun = (DateTime.Now + dqdate); if (sun < DateTime.Now.AddMinutes(20)) { Task.Delay(dqdate).Wait(); List tu = new List(); using (var sx = SqlSugarBase.GesmartDb()) { var dingdan = sx.Queryable().Where(s => s.masterid == item.id).ToList(); foreach (var info in dingdan) { var user = sx.Queryable().First(x => x.id == info.Lodgerid); tu.Add(user); } bool isok = true; List users = new List(); for (int i = 0; i < tu.Count; i++) { WebServer.UserInfo fo = new WebServer.UserInfo() { idcard = tu[i].idNumber, customer = tu[i].name, sex = tu[i].sex == 1 ? "男" : "女", photoUrl = "http://face.blv-oa.com/ImgServer/FileImage?url=" + tu[i].picture, }; users.Add(fo); int uid = tu[i].id; var sm = SqlSugarBase.Db.Queryable().First(x => x.id == uid); isok = WebHelp.Send(new SendInfo { code = hotellist.Code.ToString(), roomNumber = result.RoomNumber, idNumber = sm.idNumber, phoneNumber = sm.phone }, users.ToArray()); users.Clear(); } int states = 4; if (isok) { states = 1; } SqlSugarBase.Db.Updateable().SetColumns(x => x.testState == states).Where(x => x.id == item.id).ExecuteCommand(); } } }); } } { //var dates = item.predictCheckIn - DateTime.Now; } if (dqsj <= TimeSpan.FromMinutes(0))//立刻退房 { Logs.WriteTimingUDPLog("全局异步立刻退房操作"); if (item.checkInduration != 0) { FJHelp.outinfos(item.id.ToString()); Logs.WriteTimingUDPLog("全局异步立刻退房成功"); } } else//预约退房 { if (item.checkInduration != 0) { Task.Factory.StartNew(() => { Task.Delay(dqsj).Wait(); Logs.WriteTimingUDPLog("全局异步预约退房操作"); FJHelp.outinfos(item.id.ToString()); Logs.WriteTimingUDPLog("全局异步预约退房成功"); }); } } } } } catch (Exception) { Logs.WriteTimingUDPLog("全局错误"); } } void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { } protected void Application_Error(Object sender, EventArgs e) { Exception lastError = Server.GetLastError();//获取异常 if (lastError != null) { //异常信息 string strExceptionMessage = string.Empty; //对HTTP 404做额外处理,其他错误全部当成500服务器错误 HttpException httpError = lastError as HttpException; //得到错误信息,可以写到日志里 LogHelp.WriteExceptionLog(lastError); //一定要调用Server.ClearError()否则会触发错误详情页(就是黄页) //Server.ClearError(); } } } public class MyRegistry : Registry { //无参构造函数 public MyRegistry() { //每天2点 Schedule(() => { string fname = "移海"; List tbl = SqlSugarBase.GesmartDb().Queryable().Where(x=>x.Status==true && x.Factory== fname).ToList(); for (int i = 0; i < tbl.Count; i++) { if (tbl[i].Status == true) { Entity.Rootinfo info = new Entity.Rootinfo(); info.pmsid = -1; Entity.msgx msgx = new Entity.msgx(); StringBuilder sbperson = new StringBuilder(); sbperson.Append("key=abc"); //sbperson.Append("&number=50"); //sbperson.Append("&offset=0"); msgx.msgid = Guid.NewGuid().ToString(); msgx.sn = tbl[i].SerialNo; msgx.cmd = "getDeviceInfo";//得到设备信息 msgx.msg = System.Web.HttpUtility.HtmlDecode(sbperson.ToString()); info.msgx = msgx; info.pmsid = -1; string sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(info); UdpCommunication.QueueSend(sendMsg); Task.Delay(10000); } } using (var db = SqlSugarBase.GesmartDb()) { //string sn = tbl[i].SerialNo; //var dbt = db.Queryable().First(x => x.SerialNo == sn); ULog uLog = new ULog { Uname = "oy" /*Session["username"].ToString()*/, faceSN = "所以在线的人脸机"/*tbl[i].SerialNo*/, operatetype = "得到设备基本信息,每天晚上2点执行一次", hotelcode = 0 /*int.Parse(Session["hotelCode"].ToString())*/,// roomid = 0, Creationtime = DateTime.Now }; SqlSugarBase.Db.Insertable(uLog).ExecuteCommand(); } //if (!SyncHotelServer.SyncHotelGroups()) // Logs.WriteTimingUDPLog("2:00执行定时任务--清除酒店失败~"); }).ToRunEvery(0).Days().At(2, 00); } public static void GoWork() { JobManager.Initialize(new MyRegistry()); } } }