Files
Web_CRICS_Server_VS2010_Prod/WebSite/Global.asax.cs
2025-12-11 09:17:16 +08:00

766 lines
34 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Spring.Context;
using Spring.Context.Support;
using Spring.Web.Mvc;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using Service;
using Domain;
using RCUHost;
using Common;
using System.IO;
using Service.Implement;
using uPLibrary.Networking.M2Mqtt;
using System.Net;
using uPLibrary.Networking.M2Mqtt.Messages;
using FluentScheduler;
using CommonEntity;
using WebSite.Job;
using System.Collections.Concurrent;
namespace WebSite
{
// 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
// 请访问 http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : SpringMvcApplication
{
private readonly string currentUrl = System.Configuration.ConfigurationManager.AppSettings["CurrentUrl"];
private readonly string code = System.Configuration.ConfigurationManager.AppSettings["code"];//需要同步PMS房态的酒店编码多个以英文逗号隔开
private readonly string send_to_debugger = System.Configuration.ConfigurationManager.AppSettings["send_to_debugger"];
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(SpringMvcApplication));
public static IApplicationContext cxt = ContextRegistry.GetContext();
public static long UDPServerErrorCount = 0;
private IHostManager HostManager;
private ISysHotelManager SysHotelManager;
private IRoomStatusManager RoomStatusManager;
private IDeviceControlReceiver DeviceControlReceiver;
private IOverviewManager OverviewManager { get; set; }
public static IHostServer hostServer { get; set; }
//private IGroupManager GroupManager;
//private IHostRoomCardManager HostRoomCardManager;
private syncstatus.syncstatusSoapClient _client = null;//房态同步接口
//private ServiceReference2.ThirdpartyServiceClient _client1 = null;
//private XR_PMS.XRHotel_ServiceSoapClient _xrClient = null;//西软pms接口
private object _lock = new object(), _lock1 = new object();
//private List<Host> _hosts = null;//西软pms对接使用
public static int TimeInterval = 10;
public static string IntervalKey = "TimeInterval";
/// <summary>
/// 凌晨ECO
/// </summary>
public static string LingChenECO_IntervalKey = "LingChenECO_IntervalKey";
public static string LingChenECO_MissionSysKey = "LingChenECO_MissionSysKey";
public static string UDPLostKey = "UDPLostKey";
public static string UDPLostIntervalKey = "UDPLostIntervalKey";
public static string BlockLowerMachineKey = "BlockLowerMachineKey";
public static string ZeroX19_PassHotelCodeKey = "ZeroX19_PassHotelCode";
public void PreHot()
{
int minWorkerThreads = 32;
int minCompletionPortThreads = 32;
// 设置最小线程数
System.Threading.ThreadPool.SetMinThreads(minWorkerThreads, minCompletionPortThreads);
// 预热线程池
var countdown = new System.Threading.CountdownEvent(minWorkerThreads);
for (int i = 0; i < minWorkerThreads; i++)
{
System.Threading.ThreadPool.QueueUserWorkItem(_ =>
{
System.Threading.Thread.Sleep(100); // 模拟一点工作
countdown.Signal();
});
}
// 等待所有预热任务完成
countdown.Wait();
}
protected override void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时调用
PreHot();
log4net.Config.XmlConfigurator.Configure();//初始化log4net
SetInitAccount();
StartHostServer();
//StartHostServerNew();
BLWMQTT.StartMqtt();
//if ("1" == send_to_debugger)
//{
// UDPLogServer.Init();
// logger.Error("初始化debugger通讯");
//}
if (!string.IsNullOrEmpty(code))
{
StartTimer();
}
//HeartBeat();
long ll1 = CSRedisCacheHelper.ForeverGet<long>(UDPLostKey);
System.Threading.Interlocked.Exchange(ref DataTongJi.DefineLostPackage, ll1);
System.Threading.Interlocked.Exchange(ref DataTongJi.RecordLostPackage, 0);
int ll2 = CSRedisCacheHelper.ForeverGet<int>(UDPLostIntervalKey);
if (ll2 != 0)
{
DataTongJi.LostPackage_Interval = ll2;
}
var ll3 = CSRedisCacheHelper.ForeverGet<List<string>>(ZeroX19_PassHotelCodeKey);
if (ll3 != null)
{
DataTongJi.ZeroX19_PassHotelCode = new ConcurrentBag<string>(ll3);
}
var tq = CSRedisCacheHelper.ForeverGet<RedisTongJiData>(IntervalKey);
if (tq == null)
{
RedisTongJiData tq1 = new RedisTongJiData();
tq1.url = "api/CaiJiData";
tq1.cron_exp = string.Format("*/{0} * * * *", 10);
tq1.mission_key = MvcApplication.IntervalKey;
CSRedisCacheHelper.Forever<RedisTongJiData>(IntervalKey, tq1);
}
var GGG = CSRedisCacheHelper.ForeverGet<ConcurrentDictionary<string, ConcurrentBag<string>>>(BlockLowerMachineKey);
if (GGG != null)
{
DataTongJi.BlockLowerMachineList = GGG;
}
StartCPUTongJiTask();
//RCUOnLineCheck();
base.Application_Start(sender, e);
}
public static string WanBuJianKongSourceFileName = "Para_copy.yaml";
public static string WanBuJianKongTargetFileName = "C:\\Program Files\\windows_exporter\\textfile_inputs\\Para.prom";
public static string JianKong_TxtData { get; set; }
public static System.Timers.Timer RCUOnLineTimer = null;
public void RCUOnLineCheck()
{
RCUOnLineTimer = new System.Timers.Timer();
RCUOnLineTimer.Interval = 30 * 1000;
RCUOnLineTimer.Elapsed += new ElapsedEventHandler(OnLineCheck_Elapsed);
RCUOnLineTimer.Start();
}
private void OnLineCheck_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
var Q = DataTongJi.ONLINERCU;
var DT = DateTime.Now;
var V = Q.Where(A =>
{
var DT_E = A.Value.CurrentDateTime;
TimeSpan timespan = DT - DT_E;
if (timespan.TotalSeconds > 120)
{
return true;
}
return false;
});
foreach (var item in V)
{
var IF = item.Key;
RCUOnLineExtra N;
Q.TryRemove(IF, out N);
}
}
catch (Exception ex)
{
logger.Error("RCUOnLineCheck 数量统计出错了:" + ex.Message);
}
}
#region CPU统计
private void CPUtimer_Elapsed(object sender, ElapsedEventArgs e)
{
var T = sender as Timer;
try
{
T.Stop();
double d = CPUData.GetCPU();
DataTongJi.CPU_Data.Add(d);
T.Start();
}
catch (Exception ex)
{
logger.Error("CPU 数量统计出错了:" + ex.Message);
}
finally
{
T.Start();
}
}
public static System.Timers.Timer CPUTimer = null;
public void StartCPUTongJiTask()
{
try
{
CPUTimer = new System.Timers.Timer();
CPUTimer.Elapsed += new ElapsedEventHandler(CPUtimer_Elapsed);
//10分钟统计一次
//现在修改成20秒
//CPUTimer.Interval = 1 * 60 * 1000;
CPUTimer.Interval = 1000;
CPUTimer.Start();
}
catch (Exception ex)
{
logger.Error("StartTask Error:" + ex.Message);
}
}
#endregion
#region
#endregion
public void HeartBeat()
{
try
{
Timer timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Interval = 20000;
timer.Start();
}
catch (Exception)
{
}
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
if (BLWMQTT.MqttClientGlobal.IsConnected)
{
BLWMQTT.MqttClientGlobal.Publish("blw/mqtt/heartbeat", Encoding.UTF8.GetBytes("hello beat"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
}
else
{
BLWMQTT.StartMqtt();
}
}
catch (Exception)
{
}
}
protected void Application_End(object sender, EventArgs e)
{
try
{
hostServer.Close();
System.Threading.Thread.Sleep(5000);
System.Net.WebRequest request = System.Net.WebRequest.Create(currentUrl);
System.Net.WebResponse response = request.GetResponse();
logger.Error("系统重启Web服务");
response.Close();
}
catch (Exception)
{
}
}
protected override void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"Index", // 路由名称
"Index.html", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
routes.MapRoute(
"LogOn", // 路由名称
"LogOn", // 带有参数的 URL
new { controller = "Home", action = "LogOn", id = UrlParameter.Optional } // 参数默认值
);
routes.MapRoute(
"chuangwei_user_login", // Route name
"sky/api/login", // URL with parameters
new { controller = "api", action = "login" } // Parameter defaults
);
routes.MapRoute(
"chuangwei_user_refreshToken", // Route name
"sky/api/refreshToken", // URL with parameters
new { controller = "api", action = "refreshToken" } // Parameter defaults
);
routes.MapRoute(
"chuangwei_device_control", // Route name
"sky/api/device/control", // URL with parameters
new { controller = "iot", action = "ChuangWei_DeviceCommandControl" } // Parameter defaults
);
routes.MapRoute(
"chuangwei_hotel_info", // Route name
"sky/api/hotel/info", // URL with parameters
new { controller = "iot", action = "ChuangWei_HotelInfo" } // Parameter defaults
);
routes.MapRoute(
"chuangwei_room_info", // Route name
"sky/api/room/info", // URL with parameters
new { controller = "iot", action = "ChuangWei_RoomInfo" } // Parameter defaults
);
routes.MapRoute(
"chuangwei_device_info", // Route name
"sky/api/device/info", // URL with parameters
new { controller = "iot", action = "ChuangWei_DeviceInfo" } // Parameter defaults
);
routes.MapRoute(
"chuangwei_yijiantousu", // Route name
"sky/api/customer/complaint", // URL with parameters
new { controller = "iot", action = "ChuangWei_TouSu" } // Parameter defaults
);
routes.MapRoute(
"API", // Route name
"sky/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
base.RegisterRoutes(routes);
}
/// <summary>
/// 设置初始账号
/// </summary>
private void SetInitAccount()
{
//初始化默认酒店
SysHotelManager = (ISysHotelManager)cxt.GetObject("Manager.SysHotel");
var hotel = SysHotelManager.Get(1);
if (null == hotel)
{
hotel = new SysHotel
{
Code = "1001",
Name = "默认酒店",
EName = "Default Hotel",
TWName = "默認酒店",
Sort = 1,
ParentID = 0,
ActiveIndicator = true,
CreatedBy = "System",
CreatedDate = DateTime.Now,
ModifiedBy = "System",
ModifiedDate = DateTime.Now,
ValidateDate = Convert.ToDateTime("2037-12-31"),
SysHotelGroup = new SysHotelGroup { ID = 1, Parent = null, Name = "酒店", Sort = 1 }
};
SysHotelManager.Save(hotel);
}
//初始化默认酒店超级管理员角色
ISysRoleManager roleManager = (ISysRoleManager)cxt.GetObject("Manager.SysRole");
var role = roleManager.Get(1);
if (null == role)
{
role = new SysRole
{
Name = "Administrator",
Sort = 1,
ActiveIndicator = true,
CreatedBy = "System",
CreatedDate = DateTime.Now,
ModifiedBy = "System",
ModifiedDate = DateTime.Now,
HotelID = 1,
SysHotelGroup = new SysHotelGroup { ID = 1 },
};
roleManager.Save(role);
}
//初始化admin账号
ISysUserManager manger = (ISysUserManager)cxt.GetObject("Manager.SysUser");
const string account = "admin";
var user = manger.Get(account);
if (user == null)
{
IList<SysHotel> hotels = new List<SysHotel>();
hotels.Add(SysHotelManager.Get(1));
user = new SysUsers
{
Account = account,
Name = account,
Role = new SysRole { ID = 1 },
Group = new Group { ID = 1 },
SysHotelGroup = new SysHotelGroup { ID = 1 },
Hotels = hotels,
HotelID = 1,
ActiveIndicator = true,
CreatedBy = "System",
CreatedDate = DateTime.Now,
ModifiedBy = "System",
ModifiedDate = DateTime.Now
};
manger.Save(user);
}
}
private void StartHostServerNew()
{
hostServer = new RCUHost.Implement.HostServer();
hostServer.AddReceiver(new RCUHost.Implement.HeartReceiver());
hostServer.AddReceiver(new RCUHost.Implement.HostSearchReceiver());
hostServer.AddReceiver(new RCUHost.Implement.RoomCardReceiver());
hostServer.AddReceiver(new RCUHost.Implement.UpdateHostReceiver());
hostServer.AddReceiver(new RCUHost.Implement.UpdateHostFTPReceiver());
hostServer.AddReceiver(new RCUHost.Implement.UploadCurrentVersionReceiver());
hostServer.AddReceiver(new RCUHost.Implement.SyncTimeReceiver());
hostServer.AddReceiver(new RCUHost.Implement.RoomStatusReceiver());
hostServer.AddReceiver(new RCUHost.Implement.HostSecretReceiver());
hostServer.AddReceiver(new RCUHost.Implement.WordsReportReceiver());
hostServer.AddReceiver(new RCUHost.Implement.HostRegisterReceiver());
hostServer.AddReceiver(new RCUHost.Implement.ExplainDomainIPReceiver());
//阿宝添加的
hostServer.AddReceiver(new RCUHost.Implement.TFTPReceiver());
hostServer.AddReceiver(new RCUHost.Implement.TFTPSettingReceiver());
hostServer.AddReceiver(new RCUHost.Implement.UpgradeProgressBar());
hostServer.AddReceiver(new RCUHost.Implement.RoomStatusChangedReceiver());
hostServer.AddReceiver(new RCUHost.Implement.AskRoomStatusChangedReceiver());
hostServer.AddReceiver((IReceiver)new RCUHost.Implement.New_RoomStatusReceiver());
}
/// <summary>
/// 创建 HostServer 以便与下位机通信
/// </summary>
public static void StartHostServer()
{
//创建 HostServer
hostServer = (IHostServer)cxt.GetObject("RCUHost.HostServer");
//加载 Receiver, 只有加载对应的Receiver管理软件才能接收对应主机上报的命令
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.HeartReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.HostSearchReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.RoomCardReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.UpdateHostReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.UpdateHostFTPReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.UploadCurrentVersionReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.SyncTimeReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.RoomStatusReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.HostSecretReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.WordsReportReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.HostRegisterReceiver"));
//hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.UpdateConfigReceiver"));
//hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.UpdateRCUFileReceiver"));
//hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.DeviceControlReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.ExplainDomainIPReceiver"));
//阿宝添加的
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.TFTPReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.TFTPSettingReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.UpgradeProgressBar"));
//hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.HotelTimeReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.RoomStatusChangedReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.AskRoomStatusChangedReceiver"));
hostServer.AddReceiver((IReceiver)cxt.GetObject("RCUHost.New_RoomStatusReceiver"));
}
/// <summary>
/// 启动定时器
/// </summary>
private void StartTimer()
{
HostManager = (IHostManager)cxt.GetObject("Manager.Host");
RoomStatusManager = (IRoomStatusManager)cxt.GetObject("Manager.RoomStatus");
DeviceControlReceiver = (IDeviceControlReceiver)cxt.GetObject("RCUHost.DeviceControlReceiver");
OverviewManager = (IOverviewManager)cxt.GetObject("Manager.Overview");
_client = new syncstatus.syncstatusSoapClient();
Timer timer2 = new Timer(20000);//每20秒扫描一次
timer2.Elapsed += new ElapsedEventHandler(syncRoomStatusCallback);//定时同步PMS房态
timer2.Enabled = true;
timer2.AutoReset = true;
}
protected void Session_Start()
{
if (this.Request.UserLanguages == null || this.Request.UserLanguages.Length < 1 ||
(!string.IsNullOrEmpty(this.Request.UserLanguages[0]) && this.Request.UserLanguages[0].ToLower().StartsWith("zh")))
{
this.Session["isCN"] = 0;
HttpCookie isCNCookie = new HttpCookie("isCN");
isCNCookie.Value = "zh-cn";
isCNCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(isCNCookie);
}
}
protected void Session_End(object sender, EventArgs e)
{
}
private void syncRoomStatusCallback(object sender, ElapsedEventArgs e)
{
try
{
RCUHost.TimingHelper.HostTimingControlHelper.HostTimingControl(DeviceControlReceiver);//定时控制
DateTime now = DateTime.Now;
if (now.Hour == 00 && now.Minute == 00 && now.Second < 20)
{
//UploadHostAbnormalRecords();
}
DataSet dsHotel = _client.GetHotelCode();
lock (_lock1)
{
foreach (DataRow row in dsHotel.Tables[0].Rows)
{
if (Convert.ToInt16(row["HotelID"]) > 0)
{
DataSet ds = _client.GetCheckInOrOutRecord(row["Code"].ToString());
if (ds != null && ds.Tables.Count > 2 && ds.Tables[3].Rows.Count > 0)
{
int hotelID = Convert.ToInt16(ds.Tables[3].Rows[0]["HotelID"].ToString());//与PMS同步接口所配置的HotelID
if (hotelID > 0)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
var q = RoomStatusManager.Get(2);
SyncRoomStatus(hotelID, dr, q, 0);//更新出租房态
}
foreach (DataRow dr in ds.Tables[1].Rows)
{
var q = RoomStatusManager.Get(8);
SyncRoomStatus(hotelID, dr, q, 1);//更新退房房态
}
foreach (DataRow dr in ds.Tables[2].Rows)
{
var q = RoomStatusManager.Get(4);
SyncRoomStatus(hotelID, dr, q, 2);//更新待租房态
}
}
//logger.Error(string.Format("酒店({0})已同步房态", row["Code"].ToString() + row["Remark"].ToString()));
}
}
}
#region
/*try
{
//跟西软pms同步房态
if (_xrClient != null && _hosts != null && _hosts.Count > 0)
{
XmlDocument xmlXRRoomStatus = new XmlDocument();
xmlXRRoomStatus.LoadXml(_xrClient.Roomview("", "", ""));
XmlNodeList list = xmlXRRoomStatus.SelectSingleNode("interface").ChildNodes;
if (list.Count > 0)
{
List<string> lstRooms = new List<string>() { };
foreach (Host host in _hosts)
{
foreach (XmlNode node in list)
{
if (node["roomno"] != null && node["roomno"].InnerText == host.RoomNumber)
{
int roomStatusID = 16;//空房
switch (Convert.ToInt16(node["roomstate"].InnerText))
{
case 1://空净房
roomStatusID = 4;//待租
break;
case 2://空脏房
roomStatusID = 8;//退房
break;
case 3://住净房
case 4://住脏房
roomStatusID = 2;//出租
break;
//case 5://维修房
//case 6://临时房态(酒店自定义)
}
if (host.RoomStatus.ID != roomStatusID)
{
HostManager.ChangeRoomStatus(host, RoomStatusManager.Get(roomStatusID));
lstRooms.Add(host.RoomNumber);
}
break;
}
}
}
if (lstRooms.Count > 0)
{
logger.Error(string.Format("本次酒店1099珠海度假村千禧宫同步西软pms客房房态有{0}", string.Join(",", lstRooms)));
}
}
}
}
catch (Exception ex)
{
logger.Error("本次酒店1099珠海度假村千禧宫同步西软pms客房房态失败。原因" + ex.ToString());
}*/
//判断已插卡取电但尚未开房5分钟后上报报警数据给金天鹅PMS
/*Group group = GroupManager.Load(21);
IList<Host> hosts = HostManager.LoadAll(group);
foreach (Host host in hosts)
{
IList<HostRoomCard> hostRoomCards = HostRoomCardManager.LoadAll(host.RoomNumber, "");
if (hostRoomCards != null && hostRoomCards.Count > 0)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(_client1.GethHotelcode("宝来客控对接酒店"));
XmlElement element = xmlDoc.DocumentElement;
string hotelCode = element.GetElementsByTagName("Body")[0].ChildNodes[0].ChildNodes[0].InnerText;//"HOTEL1489374686";
xmlDoc = new XmlDocument();
XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");//创建类型声明节点
xmlDoc.AppendChild(node);
XmlNode root = xmlDoc.CreateElement("request");
xmlDoc.AppendChild(root);
XmlNode card = xmlDoc.CreateElement("Alarm");
root.AppendChild(card);
XmlNode data = xmlDoc.CreateNode(XmlNodeType.Element, "hotelCode", null);
data.InnerText = hotelCode;//酒店代码
card.AppendChild(data);
data = xmlDoc.CreateNode(XmlNodeType.Element, "roomno", null);
data.InnerText = host.RoomNumber;//房间号
card.AppendChild(data);
data = xmlDoc.CreateNode(XmlNodeType.Element, "remark", null);
data.InnerText = "";//备注
card.AppendChild(data);
data = xmlDoc.CreateNode(XmlNodeType.Element, "state", null);
HostRoomCard hostRoomCard = hostRoomCards[hostRoomCards.Count - 1];
if (host.RoomStatus.ID != 2 && host.RoomCard != null)
{
if ((hostRoomCard.IsAlarm == null || hostRoomCard.IsAlarm == false) &&
Convert.ToDateTime(hostRoomCard.InCardTime).AddMinutes(5) <= DateTime.Now)
{
data.InnerText = "1";//报警
card.AppendChild(data);
data = xmlDoc.CreateNode(XmlNodeType.Element, "key", null);
data.InnerText = "Wide_Third";//授权码
card.AppendChild(data);
//string result = _client1.send(xmlDoc.InnerXml);
logger.Error(xmlDoc.InnerXml);//result + Environment.NewLine +
hostRoomCard.IsAlarm = true;
HostRoomCardManager.Update(hostRoomCard);
}
}
else if (hostRoomCard.IsAlarm == true)
{
data.InnerText = "0";//取消报警
card.AppendChild(data);
data = xmlDoc.CreateNode(XmlNodeType.Element, "key", null);
data.InnerText = "Wide_Third";//授权码
card.AppendChild(data);
//string result = _client1.send(xmlDoc.InnerXml);
logger.Error(xmlDoc.InnerXml);//result + Environment.NewLine +
hostRoomCard.IsAlarm = false;
HostRoomCardManager.Update(hostRoomCard);
}
}
}*/
#endregion
}
}
catch (Exception ex)
{
logger.Error("定时同步房态异常。原因:" + ex.ToString());
}
}
/// <summary>
/// 同步房态
/// </summary>
/// <param name="hotelID">酒店ID</param>
/// <param name="dr"></param>
/// <param name="roomStatus">房态</param>
/// <param name="flag">更新字段标记</param>
private void SyncRoomStatus(int hotelID, DataRow dr, RoomStatus roomStatus, int flag)
{
_client.UpdateCheckInOrOutRecord(dr["Code"].ToString(), Convert.ToInt64(dr["ID"]), flag);//更新已同步状态
string RoomNUM = dr["RoomNumber"].ToString();
var T = new Tuple<int, string,RoomStatus>(hotelID,RoomNUM,roomStatus);
Task.Factory.StartNew((state) =>
{
var T1 = state as Tuple<int, string,RoomStatus>;
Host host = HostManager.GetByRoomNumber(T1.Item2, T1.Item1);
if (host != null)
{
HostManager.ChangeRoomStatus(host, T1.Item3);
string Key = CacheKey.SyncRoomStatus + "_" + host.HostNumber;
RoomStatusRequest ddd = new RoomStatusRequest();
ddd.HostNumber = host.HostNumber;
ddd.MAC = host.MAC;
ddd.Status = T1.Item3;
CSRedisCacheHelper.Set_PartitionWithForever<RoomStatusRequest>(Key, ddd);
}
},T);
}
/// <summary>
/// 定时上报主机异常记录
/// </summary>
private void UploadHostAbnormalRecords()
{
Task.Factory.StartNew(() =>
{
List<SysHotel> lstHotels = SysHotelManager.LoadAll().Where(r => !string.IsNullOrEmpty(r.FaultPushURL)).ToList();// && r.FaultPushURL.ToLower().IndexOf("iot.sditcn.com") > -1).ToList();//PDU上报
foreach (SysHotel hotel in lstHotels)
{
for (int i = 1; i < 4; i++)
{
System.Data.DataTable dt = OverviewManager.LoadHostAbnormalRecords(i, hotel.ID);//三种异常类型
XuanZhuResponse resp;
foreach (System.Data.DataRow dr in dt.Rows)
{
resp = new XuanZhuResponse();
resp.code = hotel.Code;
resp.roomNumber = dr["RoomNumber"].ToString();
resp.address = "";
resp.name = dr["AbnormalName"].ToString();
resp.status = 2;
resp.faultType = 1;
resp.faultData = 1;
XuanZhuOperation.ReportService(hotel.FaultPushURL, resp);
}
}
logger.Error(string.Format("定时上报酒店({0})主机异常记录", hotel.Code));
}
}, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
}
/// <summary>
/// 获取当前登录帐号
/// </summary>
/// <returns></returns>
//private IList<WebSite.Models.ActiveUserModel> GetActiveUsers()
//{
// var activeUsers = Application["ActiveUsers"] as List<WebSite.Models.ActiveUserModel>;
// if (activeUsers == null)
// {
// activeUsers = new List<WebSite.Models.ActiveUserModel>();
// Application["ActiveUsers"] = activeUsers;
// }
// return activeUsers;
//}
}
}