using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Linq.Dynamic; using System.Text.RegularExpressions; using System.Web.Mvc; using Domain; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Service; using Common; using System.Web.Routing; using RCUHost; using System.Threading; using System.Threading.Tasks; using System.Text; using System.Web; using CommonEntity; using WebSite.Models; using RCUHost.Protocols; using RCUHost.Implement; using RestSharp; using System.Net; namespace WebSite.Controllers { public class HostController : BaseController { private const int AUTHORITY_Host = 30; private const int AUTHORITY_Secret = 34; /// /// 数据升级权限ID /// private const int AUTHORITY_DataUpgrade = 1003; private const int AUTHORITY_CHostUpgrade = 1006;//C主机升级权限 private const int AUTHORITY_HostAuthority = 1007;//主机授权权限 private const int AUTHORITY_MACAuthority = 1008;//MAC查询授权权限 private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(HostController)); private static string tool_sync_url = System.Configuration.ConfigurationManager.AppSettings["tool_sync_url"]; public IHostManager HostManager { get; set; } public IHostAirManager HostAirManager { get; set; } public IHostUpdateManager HostUpdateManager { get; set; } public IRoomStatusManager RoomStatusManager { get; set; } public IRoomTypeAirManager RoomTypeAirManager { get; set; } public IGroupManager GroupManager { get; set; } public ISysUserManager SysUserManager { get; set; } public IPowerSupplyControlManager PowerSupplyControlManager { get; set; } public ISysHotelManager SysHotelManager { get; set; } public IHostRCUManager HostRCUManager { get; set; } public IRoomTypeManager RoomTypeManager { get; set; } public ITFTP_SettingMananger TFTPManager { get; set; } //public ISmartRobotDisableTimeMananger SmartRobotDisableTimeMananger { get; set; } public IHostModalManager HostModalManager { get; set; } #region Action [Authorize] public ActionResult Index() { ViewData["EnableDataUpgrade"] = SysUserManager.HasAuthority(User.Identity.Name, AUTHORITY_DataUpgrade); ViewData["AUTHORITY_CHostUpgrade"] = SysUserManager.HasAuthority(User.Identity.Name, AUTHORITY_CHostUpgrade); ViewData["AUTHORITY_HostAuthority"] = SysUserManager.HasAuthority(User.Identity.Name, AUTHORITY_HostAuthority); ViewData["AUTHORITY_MACAuthority"] = SysUserManager.HasAuthority(User.Identity.Name, AUTHORITY_MACAuthority); return View("SimonIndex"); } [Authorize] public ActionResult SecretMgtIndex() { return View("SecretMgtIndex"); } [Authorize] public ActionResult HostInfo() { return View("HostInfo"); } [Authorize] public ActionResult Edit(int? id, string hostNumber, string ip, string mac, string version) { ViewData["Account"] = User.Identity.Name; if (id.HasValue) { return View(HostManager.Get(id.Value)); } else { var hotel = SysHotelManager.Get(CurrentHotelID); return View(new Host { ID = 0, HostNumber = hostNumber, RoomNumber = hostNumber, MAC = mac, SysHotel = hotel, Group = null, RoomType = null, Remark = hotel.Code, IsSyncRoomNumber = false, IsAutoUpdate = false, ServerIP = "106.75.37.225", ServerPort = 3339, IPType = 1, LanIP = "192.168.1.200", LanPort = 3341, SubnetMask = "255.255.255.0", Gateway = "192.168.1.1", DNS = "114.114.114.114", FCS_locationUUID = "" }); //var host = HostManager.GetByMAC(mac, CurrentHotelID); //if (host != null) //{ // return View(host); //} //else //{ // var hotel = SysHotelManager.Get(CurrentHotelID); // return View(new Host // { // ID = 0, // HostNumber = hostNumber, // RoomNumber = hostNumber, // MAC = mac, // SysHotel = hotel, // Group = null, // RoomType = null, // Remark = hotel.Code, // IsSyncRoomNumber = false, // IsAutoUpdate = false, // ServerIP = "106.75.37.225", // ServerPort = 3339, // IPType = 1, // LanIP = "192.168.1.200", // LanPort = 3341, // SubnetMask = "255.255.255.0", // Gateway = "192.168.1.1", // DNS = "114.114.114.114", // FCS_locationUUID="" // }); //} } } [Authorize] public ActionResult NetworkSetting() { return View(); } /// /// /// /// /// /// /// /// /// 房号 /// mac地址 /// 房型名称 /// 房号是否同步:0否,1是,2全部 /// [Authorize] public ActionResult LoadAllByPage(int page, int rows, string order, string sort, int? groupId, string roomNumber = "", string mac = "", string roomType = "", int isSyncRoomNumber = 1) { long total = 0; if (groupId.HasValue) { var list = HostManager.LoadAllByPage(out total, page, rows, order, sort, groupId.GetValueOrDefault(), CurrentHotelID, roomNumber, mac, roomType, isSyncRoomNumber).ToList(); IList result = new List(); foreach (var host in list) { int hotelid = host.SysHotel.ID; int hostid = host.ID; TFTP_Set ttt = TFTPManager.GetData(hotelid, hostid); if (ttt != null) { } result.Add(new { ID = host.ID, Status = CSRedisCacheHelper.Contains(host.HostNumber, host.MAC), Code = host.SysHotel.Code, HostNumber = host.HostNumber, RoomNumber = host.RoomNumber, MAC = host.MAC, GroupName = host.Group.Name, RoomType = host.RoomType.Name, IsSyncRoomNumber = host.IsSyncRoomNumber, IsAutoUpdate = host.IsAutoUpdate, Version = host.Version, ConfigVersion = host.ConfigVersion, RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd HH:mm:ss"), IP = host.IP, Port = host.Port, LanIP = host.IPType == 1 ? host.LanIP : "", LanPort = host.IPType == 1 ? host.LanPort : 0, SubnetMask = host.IPType == 1 ? host.SubnetMask : "", Gateway = host.IPType == 1 ? host.Gateway : "", DNS = host.IPType == 1 ? host.DNS : "", Remark = host.Remark, XiaoDuCUID = host.XiaoDuCUID, TCLCUID = host.TCLCUID, TCLSkillID = host.TCLSkillID, HiWeiCUID = host.HiWeiCUID, HuaWeiCUID = host.HuaWeiCUID, TianMaoCUID = host.TianMaoCUID, RokidWebhookUrl = host.RokidWebhookUrl, DeviceName = host.DeviceName, DeviceSecret = host.DeviceSecret, IsPublish = host.IsPublish, HostSecret = host.HostSecret, ProductKey = host.ProductKey, IotId = host.IotId, IPType = host.IPType == 1 ? HttpContext.InnerLanguage("Auto") : HttpContext.InnerLanguage("Manual"), ExpireTime = host.ExpireTime == null ? "" : Convert.ToDateTime(host.ExpireTime).ToString("yyyy-MM-dd HH:mm:ss"), SetExpireTime = host.SetExpireTime == null ? "" : Convert.ToDateTime(host.SetExpireTime).ToString("yyyy-MM-dd HH:mm:ss"), Season = ChangeSeason(host.Season), ServerIP = host.ServerIP, ServerPort = host.ServerPort, Model = host.Model, Launcher = host.LauncherVersion, IsTrigger = ttt != null ? ttt.IsTrigger : false, TargetDomain = ttt != null ? ttt.TargetDomain : "", TargetPort = ttt != null ? ttt.TargetPort : 0, LastTime = ttt != null ? ttt.LastTime : 0, CreateTime = ttt != null ? ttt.CreateTime : "", }); } return Json(new { total = total, rows = result }); } else { return Json(new { total = 0, rows = new List() }); } } [Authorize] public ActionResult LoadAllByPageForInfo(int page, int rows, string order, string sort, int? groupId, string roomNumber = "", string mac = "", string roomType = "", int isSyncRoomNumber = 1) { long total = 0; if (groupId.HasValue) { var list = HostManager.LoadAllByPage(out total, page, rows, order, sort, groupId.GetValueOrDefault(), CurrentHotelID, roomNumber, mac, roomType, isSyncRoomNumber).ToList(); var lstHostRCU = HostRCUManager.LoadAll(CurrentHotelID); IList result = new List(); int flag = 0; foreach (var host in list) { result.Add(new { ID = host.ID, Flag = flag, Type = "后台预设信息", HotelCode = host.SysHotel.Code, RoomType = host.RoomType.Name, RoomNumber = host.RoomNumber, MAC = host.MAC, IPType = (host.IPType == 0 ? HttpContext.InnerLanguage("Unknown") : (host.IPType == 2 ? HttpContext.InnerLanguage("Manual") : HttpContext.InnerLanguage("Auto"))), LanIP = host.IPType == 2 ? host.LanIP : "", Remark = host.Remark, RoomStatus = host.RoomStatus.Name, TypeNumber = "", Version = host.Version, ConfigVersion = host.ConfigVersion, HotelName = host.SysHotel.Name, RoomTypeRemark = "", HostID = host.ID, RoomTypeID = host.RoomType.ID, LanPort = host.IPType == 1 ? 0 : host.LanPort, Gateway = host.IPType == 1 ? "" : host.Gateway, SubnetMask = host.IPType == 1 ? "" : host.SubnetMask, DNS = host.IPType == 1 ? "" : host.DNS, ServerIP = host.ServerIP, RunTime = "", Season = ChangeSeason(host.Season), LockStatus = "", SetExpireTime = host.SetExpireTime == null ? "" : Convert.ToDateTime(host.SetExpireTime).ToString("yyyy-MM-dd HH:mm:ss"), ExpireTime = host.ExpireTime == null ? "" : Convert.ToDateTime(host.ExpireTime).ToString("yyyy-MM-dd HH:mm:ss"), Core = "", Model = host.Model, Launcher = host.LauncherVersion, UpdateTime = "" }); if (host.Version.StartsWith("C")) { HostRCU hostRCU = lstHostRCU.Where(r => r.HostID == host.ID).FirstOrDefault(); if (hostRCU != null) { result.Add(new { ID = hostRCU.HostID, Flag = flag, Type = "真实主机信息", HotelCode = hostRCU.HotelCode, RoomType = hostRCU.RoomType, RoomNumber = hostRCU.RoomNumber, MAC = hostRCU.MAC, IPType = (hostRCU.IPType == 0 ? HttpContext.InnerLanguage("Unknown") : (hostRCU.IPType == 2 ? HttpContext.InnerLanguage("Manual") : HttpContext.InnerLanguage("Auto"))), LanIP = hostRCU.LanIP, Remark = hostRCU.RoomRemark, RoomStatus = hostRCU.RoomStatus, TypeNumber = hostRCU.TypeNumber, Version = hostRCU.Version, ConfigVersion = hostRCU.ConfigVersion, HotelName = hostRCU.HotelName, RoomTypeRemark = hostRCU.RoomTypeRemark, HostID = hostRCU.HostID, RoomTypeID = hostRCU.RoomTypeID, LanPort = hostRCU.LanPort, Gateway = hostRCU.Gateway, SubnetMask = hostRCU.SubnetMask, DNS = hostRCU.DNS, ServerIP = hostRCU.ServerIP, RunTime = hostRCU.RunTime == null ? "" : Convert.ToDateTime(hostRCU.RunTime).ToString("yyyy-MM-dd HH:mm:ss"), Season = ChangeSeason(hostRCU.Season), LockStatus = hostRCU.LockStatus == 0 ? "正常" : "锁定", SetExpireTime = hostRCU.SetExpireTime == null ? "" : Convert.ToDateTime(hostRCU.SetExpireTime).ToString("yyyy-MM-dd HH:mm:ss"), ExpireTime = hostRCU.ExpireTime == null ? "" : Convert.ToDateTime(hostRCU.ExpireTime).ToString("yyyy-MM-dd HH:mm:ss"), Core = hostRCU.Core, Model = hostRCU.Model, Launcher = hostRCU.LauncherVersion, UpdateTime = hostRCU.UpdateTime == null ? "" : Convert.ToDateTime(hostRCU.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss") }); } } switch (flag) { case 0: flag = 1; break; default: flag = 0; break; } } return Json(new { total = total, rows = result }); } else { return Json(new { total = 0, rows = new List() }); } } private string ChangeSeason(string season) { System.Text.StringBuilder result = new System.Text.StringBuilder(); if (season != null) { for (int i = 0; i < season.Length; i++) { switch (Convert.ToInt16(season.Substring(i, 1))) { case 1: result.Append(HttpContext.InnerLanguage("Spring")); break; case 2: result.Append(HttpContext.InnerLanguage("Summer")); break; case 3: result.Append(HttpContext.InnerLanguage("Winter")); break; default: result.Append(HttpContext.InnerLanguage("Autumn")); break; } } } return result.ToString(); } /// /// 根据mac地址获取主机信息 /// /// /// [Authorize] [HttpPost] public ActionResult LoadHostByMAC(string mac) { object data = null; Host host = HostManager.GetByMAC(mac, CurrentHotelID); if (host != null) { data = new { host.ID, host.HostNumber, host.RoomNumber, host.IP, host.MAC, GroupID = host.Group != null ? host.Group.ID.ToString() : "", RoomTypeID = host.RoomType != null ? host.RoomType.ID.ToString() : "", host.Version, host.Remark, HotelID = host.SysHotel != null ? host.SysHotel.ID.ToString() : "", }; } return Json(new { IsSuccess = true, Data = data }); } /// /// 根据房型ID获取对应的主机列表(针对C主机) /// /// /// [Authorize] public ActionResult LoadHostByRoomType(int roomTypeID) { //var list = HostManager.LoadAll().Where(r => r.SysHotel.ID == CurrentHotelID && !string.IsNullOrEmpty(r.MAC) && r.RoomType.ID == roomTypeID && r.Version.StartsWith("C")).ToList(); var lists = HostManager.LoadHostByRoomType(CurrentHotelID, roomTypeID);//ID,HostNumber,RoomNumber,MAC,RoomTypeID,Model,LauncherVersion,Version,ConfigVersion,UpgradeStatus,UpgradeTime IList result = new List(); foreach (var list in lists) { ShengJiData sss = new ShengJiData(); sss.ID = ((object[])list)[0]; object hostnumber = ((object[])list)[1]; object mac = ((object[])list)[3]; if (hostnumber != null && mac != null) { sss.Status = CSRedisCacheHelper.Contains(hostnumber.ToString(), mac.ToString()); } else { sss.Status = ""; } //sss.Status = CSRedisCacheHelper.Contains(((object[])list)[1].ToString(), ((object[])list)[3].ToString()); sss.RoomNumber = ((object[])list)[2].ToString(); sss.MAC = ((object[])list)[3]; sss.Model = ((object[])list)[5]; sss.Launcher = ((object[])list)[6]; sss.Version = ((object[])list)[7]; sss.ConfigVersion = ((object[])list)[8]; sss.UpgradeStatus = ((object[])list)[10] == null ? "" : ((object[])list)[9]; sss.UpgradeTime = ((object[])list)[10] == null ? "" : Convert.ToDateTime(((object[])list)[10]).ToString("yyyy-MM-dd HH:mm:ss"); sss.ProgressBar = ""; result.Add(sss); //result.Add(new ShengJiData //{ // ID = ((object[])list)[0], // Status = CSRedisCacheHelper.Contains(((object[])list)[1].ToString(), ((object[])list)[3].ToString()), // RoomNumber = ((object[])list)[2].ToString(), // MAC = ((object[])list)[3], // //RoomType = host.RoomType.Name, // Model = ((object[])list)[5], // Launcher = ((object[])list)[6], // Version = ((object[])list)[7], // ConfigVersion = ((object[])list)[8], // UpgradeStatus = ((object[])list)[10] == null ? "" : ((object[])list)[9], // UpgradeTime = ((object[])list)[10] == null ? "" : Convert.ToDateTime(((object[])list)[10]).ToString("yyyy-MM-dd HH:mm:ss"), // ProgressBar = "" //}); } //foreach (var item in result) //{ // var SSS= item.UpgradeStatus; // if (SSS!=null) // { // if (SSS.ToString().Length<=5) // { // item.UpgradeStatus = item.UpgradeStatus.ToString() + ""; // } // } //} var QQQ = result.OrderBy(A => A.RoomNumber).ToList(); return Json(new { total = result.Count, rows = QQQ }); } /// /// 根据房型获取所有类型主机 /// /// /// [Authorize] public ActionResult LoadAllHostByRoomType(int roomTypeID) { var lists = HostManager.LoadAllHostByRoomType(CurrentHotelID, roomTypeID); IList result = new List(); foreach (var list in lists) { result.Add(new { ID = ((object[])list)[0], Status = CSRedisCacheHelper.Contains(((object[])list)[1].ToString(), ((object[])list)[3].ToString()), RoomNumber = ((object[])list)[2], MAC = ((object[])list)[3], ExpireTime = ((object[])list)[5] == null ? "" : Convert.ToDateTime(((object[])list)[5]).ToString("yyyy-MM-dd HH:mm:ss"), SetExpireTime = ((object[])list)[6] == null ? "" : Convert.ToDateTime(((object[])list)[6]).ToString("yyyy-MM-dd HH:mm:ss") }); } return Json(new { total = result.Count, rows = result }); } [Authorize] [HttpPost] public ActionResult Save(string jsonData) { try { Host entity = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonData); Host existHost = null; if (!string.IsNullOrEmpty(entity.MAC)) { if (!Regex.IsMatch(entity.MAC, Common.ValidatePattern.MAC)) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("InvalidMACAddress") }); } existHost = HostManager.GetByMAC(entity.MAC, CurrentHotelID);//同一酒店下MAC不能重复 if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = "MAC(" + entity.MAC + ")已存在酒店(" + entity.SysHotel.Code + ")客房(" + entity.RoomNumber + ")下,请重新输入。" }); } } if (!string.IsNullOrEmpty(entity.RoomNumber)) { existHost = HostManager.GetByRoomNumber(entity.RoomNumber, entity.SysHotel.ID);//同一酒店下房号不能重复 if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = "房号(" + entity.RoomNumber + ")已存在,请重新输入。" }); } } /*if (!string.IsNullOrEmpty(entity.XiaoDuCUID)) { existHost = HostManager.GetByXiaoDuCUID(entity.XiaoDuCUID); if (existHost != null && existHost.ID != entity.ID) { throw new ApplicationException(string.Format("XiaoDu CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.XiaoDuCUID, existHost.SysHotel.Name, existHost.RoomNumber)); } } if (!string.IsNullOrEmpty(entity.TCLCUID)) { existHost = HostManager.GetByTCLCUID(entity.TCLCUID); if (existHost != null && existHost.ID != entity.ID) { throw new ApplicationException(string.Format("TCL TV CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.XiaoDuCUID, existHost.SysHotel.Name, existHost.RoomNumber)); } } if (!string.IsNullOrEmpty(entity.HuaWeiCUID)) { existHost = HostManager.GetByHuaWeiCUID(entity.HuaWeiCUID); if (existHost != null && existHost.ID != entity.ID) { throw new ApplicationException(string.Format("HuaWei TV CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.HuaWeiCUID, existHost.SysHotel.Name, existHost.RoomNumber)); } }*/ Host host_take = null; string Key = CacheKey.HostInfo_Key_HostNumber + "_" + entity.HostNumber; object obj = MemoryCacheHelper.Get(Key); if (obj != null) { host_take = obj as Host; host_take.RoomNumber = entity.RoomNumber; //"SysHotel":{"ID":"1"},"Group":{"ID":"1811"},"RoomType":{"ID":"1"}} if (entity.SysHotel != null && existHost != null) { host_take.SysHotel = existHost.SysHotel; } if (entity.RoomType != null && existHost != null) { host_take.RoomType = existHost.RoomType; } if (entity.Group != null && existHost != null) { host_take.Group = existHost.Group; } host_take.IPType = entity.IPType; } string action = entity.ID == 0 ? HttpContext.InnerLanguage("New") : HttpContext.InnerLanguage("Edit"); HostManager.Save(entity); SaveSystemLog(AUTHORITY_Host, action, "【" + entity.RoomNumber + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("SaveSuccess") }); } catch (Exception ex) { SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("NewOrEdit"), ex.Message, false); logger.Error(ex); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("SaveFailedBecause") + ex.Message }); } } /// /// 通过excel导入主机列表 /// /// [Authorize] public ActionResult ImortHosts(System.Web.HttpPostedFileBase file) { try { if (file == null || file.ContentLength <= 0) { throw new ApplicationException(HttpContext.InnerLanguage("PleaseSelectTheUpgradePackageFile")); } string ext = System.IO.Path.GetExtension(file.FileName).ToLower(); if (ext != ".xls" && ext != ".xlsx") { throw new ApplicationException(HttpContext.InnerLanguage("PleaseSelectTheUpgradePackageFile")); } var tup = new Tuple(CurrentHotelID, file); System.Threading.Tasks.Task.Factory.StartNew((state) => { var ttt = state as Tuple; var file_o = ttt.Item2; var CurrentHotelIDAAA = ttt.Item1; using (ExcelHelper excelHelper = new ExcelHelper(file_o.FileName)) { DataTable dtNewHosts = excelHelper.ExcelToDataTable(file.InputStream, "", true); foreach (DataRow dr in dtNewHosts.Rows) { if (!string.IsNullOrEmpty(dr["房号"].ToString())) { Host host = HostManager.GetByRoomNumber(dr["房号"].ToString(), CurrentHotelIDAAA); if (host != null) { logger.Error(string.Format("导入酒店({0})主机的房号({1})已存在", CurrentHotelIDAAA, dr["房号"].ToString())); continue; } Domain.Group group = GroupManager.LoadAll().Where(r => r.Name == dr["分组"].ToString() && r.HotelID == CurrentHotelIDAAA).FirstOrDefault(); if (group == null) { logger.Error(string.Format("导入酒店({0})主机的分组({1})不存在", CurrentHotelIDAAA, dr["分组"].ToString())); continue; } RoomType roomType = RoomTypeManager.LoadAll().Where(r => r.Name == dr["房型"].ToString() && r.HotelID == CurrentHotelIDAAA).FirstOrDefault(); if (roomType == null) { logger.Error(string.Format("导入酒店({0})主机的分组({1})不存在", CurrentHotelIDAAA, dr["房型"].ToString())); continue; } host = new Host(); host.ID = 0; host.IPType = 1; host.RoomNumber = dr["房号"].ToString(); host.SysHotel = SysHotelManager.Get(CurrentHotelIDAAA); host.Group = group; host.RoomType = roomType; host.IsSyncRoomNumber = dr["房号同步"].ToString() == "是" ? true : false; host.XiaoDuCUID = dr["小度CUID"].ToString(); host.TianMaoCUID = dr["天猫精灵CUID"].ToString(); host.TCLCUID = dr["TCLCUID"].ToString(); host.TCLSkillID = dr["TCLSkillID"].ToString(); host.HiWeiCUID = dr["HiWeiCUID"].ToString(); host.FCS_locationUUID = dr["FCS_LocationUUID"].ToString(); HostManager.Save(host); SaveSystemLog(AUTHORITY_Host, "导入", "【" + host.RoomNumber + "】"); } } } }, tup, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("ImportSuccess") }); } catch (Exception ex) { SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("Import"), ex.Message, false); logger.Error(ex); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("SaveFailedBecause") + ex.Message }); } } ///// ///// 导出主机记录到excel ///// ///// //[Authorize] //public ActionResult ExportExcel() //{ // //过滤当前酒店 // Domain.Group group = GroupManager.LoadAll().Where(r => r.HotelID == CurrentHotelID && r.Parent == null).First(); // //var list = HostManager.LoadAll(group).Select(r => new { r.RoomNumber, r.IP, r.MAC, r.Group, r.Remark }).ToList(); // var list = HostManager.LoadAll(group).ToList();//.Select(r => new { r.RoomNumber, r.IP, r.MAC, r.Group, r.Remark }).ToList(); // NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); // NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); // sheet1.SetColumnWidth(0, 10 * 256); // sheet1.SetColumnWidth(1, 20 * 256); // sheet1.SetColumnWidth(2, 20 * 256); // sheet1.SetColumnWidth(3, 20 * 256); // NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); // //row1.CreateCell(0).SetCellValue(HttpContext.InnerLanguage("RoomNumber")); // //row1.CreateCell(1).SetCellValue("MAC"); // //row1.CreateCell(2).SetCellValue(HttpContext.InnerLanguage("Floor")); // //row1.CreateCell(3).SetCellValue(HttpContext.InnerLanguage("Remark")); // //row1.CreateCell(4).SetCellValue("IP"); // row1.CreateCell(0).SetCellValue("房号"); // row1.CreateCell(1).SetCellValue("分组"); // row1.CreateCell(2).SetCellValue("房型"); // row1.CreateCell(3).SetCellValue("房号同步"); // row1.CreateCell(4).SetCellValue("小度CUID"); // row1.CreateCell(5).SetCellValue("天猫精灵CUID"); // row1.CreateCell(6).SetCellValue("TCL CUID"); // //row1.CreateCell(7).SetCellValue("MAC"); // //row1.CreateCell(8).SetCellValue("IP"); // //row1.CreateCell(9).SetCellValue("备注"); // for (int i = 0; i < list.Count; i++) // { // NPOI.SS.UserModel.IRow row = sheet1.CreateRow(i + 1); // row.CreateCell(0).SetCellValue(list[i].RoomNumber); // //row.CreateCell(1).SetCellValue(list[i].MAC); // //row.CreateCell(2).SetCellValue(GroupManager.BuildGroupName(list[i].Group)); // //row.CreateCell(3).SetCellValue(list[i].Remark); // //row.CreateCell(4).SetCellValue(list[i].IP); // row.CreateCell(1).SetCellValue(list[i].Group.Name); // row.CreateCell(2).SetCellValue(list[i].RoomType.Name); // row.CreateCell(3).SetCellValue(list[i].IsSyncRoomNumber ? "是" : "否"); // row.CreateCell(4).SetCellValue(list[i].XiaoDuCUID); // row.CreateCell(5).SetCellValue(list[i].TianMaoCUID); // row.CreateCell(6).SetCellValue(list[i].TCLCUID); // //row.CreateCell(7).SetCellValue(list[i].MAC); // //row.CreateCell(8).SetCellValue(list[i].IP); // //row.CreateCell(9).SetCellValue(list[i].Remark); // } // NPOIMemoryStream nopiMS = new NPOIMemoryStream(); // nopiMS.AllowClose = false; // book.Write(nopiMS); // nopiMS.Flush(); // nopiMS.Seek(0, SeekOrigin.Begin); // nopiMS.AllowClose = true; // //string fileName = string.Format("blw_host{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss")); // string fileName = string.Format("blv_hosts_{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss")); // SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("ExportHostList"), ""); // return File(nopiMS, "application/vnd.ms-excel", fileName); // //using (MemoryStream stream = new MemoryStream()) // //{ // // book.Write(stream); // // stream.Seek(0, SeekOrigin.Begin); // // string filename = "blw_host.xls"; //Common.Tools.ToUtf8String("主机列表.xls"); // // SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("ExportHostList"), ""); // // return File(stream, "application/vnd.ms-excel", filename); // //} //} /// /// 导出主机记录到excel /// /// [Authorize] public ActionResult ExportExcel() { //过滤当前酒店 Domain.Group group = GroupManager.LoadAll().Where(r => r.HotelID == CurrentHotelID && r.Parent == null).First(); var list = HostManager.LoadAll(group).ToList();//.Select(r => new { r.RoomNumber, r.IP, r.MAC, r.Group, r.Remark }).ToList(); //var list = HostManager.LoadAll(group).Select(r => new { r.RoomNumber, r.IP, r.MAC, r.Group, r.Remark }).ToList(); NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); sheet1.SetColumnWidth(0, 10 * 256); sheet1.SetColumnWidth(1, 20 * 256); sheet1.SetColumnWidth(2, 20 * 256); sheet1.SetColumnWidth(3, 20 * 256); NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); row1.CreateCell(0).SetCellValue("房号"); row1.CreateCell(1).SetCellValue("分组"); row1.CreateCell(2).SetCellValue("房型"); row1.CreateCell(3).SetCellValue("房号同步"); row1.CreateCell(4).SetCellValue("小度CUID"); row1.CreateCell(5).SetCellValue("天猫精灵CUID"); row1.CreateCell(6).SetCellValue("TCLCUID"); row1.CreateCell(7).SetCellValue("TCLSkillID"); row1.CreateCell(8).SetCellValue("HiWeiCUID"); row1.CreateCell(9).SetCellValue("FCS_LocationUUID"); //row1.CreateCell(7).SetCellValue("MAC"); //row1.CreateCell(8).SetCellValue("IP"); //row1.CreateCell(9).SetCellValue("备注"); for (int i = 0; i < list.Count; i++) { NPOI.SS.UserModel.IRow row = sheet1.CreateRow(i + 1); row.CreateCell(0).SetCellValue(list[i].RoomNumber); row.CreateCell(1).SetCellValue(list[i].Group.Name); row.CreateCell(2).SetCellValue(list[i].RoomType.Name); row.CreateCell(3).SetCellValue(list[i].IsSyncRoomNumber ? "是" : "否"); row.CreateCell(4).SetCellValue(list[i].XiaoDuCUID); row.CreateCell(5).SetCellValue(list[i].TianMaoCUID); row.CreateCell(6).SetCellValue(list[i].TCLCUID); row.CreateCell(7).SetCellValue(list[i].TCLSkillID); row.CreateCell(8).SetCellValue(list[i].HiWeiCUID); row.CreateCell(9).SetCellValue(list[i].FCS_locationUUID); //row.CreateCell(7).SetCellValue(list[i].MAC); //row.CreateCell(8).SetCellValue(list[i].IP); //row.CreateCell(9).SetCellValue(list[i].Remark); } NPOIMemoryStream nopiMS = new NPOIMemoryStream(); nopiMS.AllowClose = false; book.Write(nopiMS); nopiMS.Flush(); nopiMS.Seek(0, SeekOrigin.Begin); nopiMS.AllowClose = true; string fileName = string.Format("blv_hosts_{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss")); SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("ExportHostList"), ""); return File(nopiMS, "application/vnd.ms-excel", fileName); //using (MemoryStream stream = new MemoryStream()) //{ // book.Write(stream); // stream.Seek(0, SeekOrigin.Begin); // string filename = "blw_host.xls"; //Common.Tools.ToUtf8String("主机列表.xls"); // SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("ExportHostList"), ""); // return File(stream, "application/vnd.ms-excel", filename); //} } ///// ///// 导出主机记录到excel ///// ///// //[Authorize] //public ActionResult ExportExcel() //{ // //过滤当前酒店 // Domain.Group group = GroupManager.LoadAll().Where(r => r.HotelID == CurrentHotelID && r.Parent == null).First(); // var list = HostManager.LoadAll(group).Select(r => new { r.RoomNumber, r.IP, r.MAC, r.Group, r.Remark }).ToList(); // NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); // NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); // sheet1.SetColumnWidth(0, 10 * 256); // sheet1.SetColumnWidth(1, 20 * 256); // sheet1.SetColumnWidth(2, 20 * 256); // sheet1.SetColumnWidth(3, 20 * 256); // NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); // row1.CreateCell(0).SetCellValue(HttpContext.InnerLanguage("RoomNumber")); // row1.CreateCell(1).SetCellValue("MAC"); // row1.CreateCell(2).SetCellValue(HttpContext.InnerLanguage("Floor")); // row1.CreateCell(3).SetCellValue(HttpContext.InnerLanguage("Remark")); // //row1.CreateCell(1).SetCellValue(list[i].Group.Name); // //row1.CreateCell(2).SetCellValue(list[i].RoomType.Name); // //row1.CreateCell(3).SetCellValue(list[i].IsSyncRoomNumber ? "是" : "否"); // row1.CreateCell(4).SetCellValue("IP"); // for (int i = 0; i < list.Count; i++) // { // NPOI.SS.UserModel.IRow row = sheet1.CreateRow(i + 1); // row.CreateCell(0).SetCellValue(list[i].RoomNumber); // row.CreateCell(1).SetCellValue(list[i].MAC); // row.CreateCell(2).SetCellValue(GroupManager.BuildGroupName(list[i].Group)); // row.CreateCell(3).SetCellValue(list[i].Remark); // row.CreateCell(4).SetCellValue(list[i].IP); // } // NPOIMemoryStream nopiMS = new NPOIMemoryStream(); // //using (NPOIMemoryStream nopiMS = new NPOIMemoryStream()) // nopiMS.AllowClose = false; // book.Write(nopiMS); // nopiMS.Flush(); // nopiMS.Seek(0, SeekOrigin.Begin); // nopiMS.AllowClose = true; // string fileName = string.Format("blw_host{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss")); // SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("ExportHostList"), ""); // return File(nopiMS, "application/vnd.ms-excel", fileName); // //using (MemoryStream stream = new MemoryStream()) // //{ // // book.Write(stream); // // stream.Seek(0, SeekOrigin.Begin); // // string filename = "blw_host.xls"; //Common.Tools.ToUtf8String("主机列表.xls"); // // SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("ExportHostList"), ""); // // return File(stream, "application/vnd.ms-excel", filename); // //} //} /// /// 修改主机网络 /// /// [Authorize] [HttpPost] public ActionResult ChangeNetworkSetting(int[] hostIDs, string ip, string subnetmask, string gateway, int port) { string ipPattern = @"^([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$"; try { if (!Regex.IsMatch(ip, ipPattern)) { throw new ApplicationException(HttpContext.InnerLanguage("InvalidIPAddress")); } if (!Regex.IsMatch(subnetmask, ipPattern)) { throw new ApplicationException(HttpContext.InnerLanguage("InvalidSubnetMask")); } if (!Regex.IsMatch(gateway, ipPattern)) { throw new ApplicationException(HttpContext.InnerLanguage("InvalidDefaultGateway")); } if (port < 0 || port > 65535) { throw new ApplicationException(HttpContext.InnerLanguage("InvalidCommunicationPort")); } var hostList = new List(); foreach (int id in hostIDs) { Host host = HostManager.Get(id); if (host == null) { throw new ApplicationException(HttpContext.InnerLanguage("InvalidHostNumber") + "【" + id + "】。"); } hostList.Add(host); } HostManager.ChangeNetworkSetting(hostList, ip, subnetmask, gateway, (ushort)port); string logDetail = "【" + ip + "," + subnetmask + "," + gateway + "," + port + "】"; SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("EditNetworkSetting"), logDetail); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("ModifiedSuccess") }); } catch (Exception ex) { SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("EditNetworkSetting"), ex.Message, false); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("ModificationFailsTheFailureReasons") + ex.Message }); } } /// /// 更改房态 /// /// [Authorize] public ActionResult ChangeRoomStatus(int id, int roomStatusID) { Host host = HostManager.Get(id); RoomStatus roomStatus = RoomStatusManager.Get(roomStatusID); if (host == null || roomStatus == null) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("InvalidOperation") }); } if (!host.Status) { string message = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber); return Json(new { IsSuccess = false, Message = message }); } string Key = CacheKey.SyncRoomStatus + "_" + host.HostNumber; RoomStatusRequest ddd = new RoomStatusRequest(); ddd.HostNumber = host.HostNumber; ddd.MAC = host.MAC; ddd.Status = roomStatus; CSRedisCacheHelper.Set_Partition(Key, ddd); string logDetail = string.Format("客房({0}房态({1})设置为:{2}", host.RoomNumber, host.RoomStatus.Name, roomStatus.Name); //"客房"host.RoomStatus.Name + "设置为:" + roomStatus.Name; HostManager.ChangeRoomStatus(host, roomStatus); SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("SetRoomStatus"), logDetail); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("ModifiedSuccess") }); } /// /// 客房电源 /// /// /// /// [Authorize] public ActionResult ChangePowerSupply(int hostID, PowerSupplyCtrl ctrl) { Host host = HostManager.Get(hostID); try { if (host == null) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("InvalidRoom") }); } if (!host.Status) { return Json(new { IsSuccess = false, Message = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber) }); } PowerSupplyControlManager.SendCtrl(host, ctrl); host.PowerSupply = ctrl == PowerSupplyCtrl.Normal ? true : false; string k2 = CacheKey.PowerSupply + "_" + host.HostNumber; CSRedisCacheHelper.Forever(k2, host.PowerSupply); Host hostAAA = null; string Key = CacheKey.RoomStatus_Prefix + "_" + host.HostNumber; object obj = MemoryCacheHelper.Get(Key); if (obj != null) { hostAAA = obj as Host; hostAAA.PowerSupply = host.PowerSupply; } HostManager.Update(host); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } catch (Exception ex) { logger.Error(ex); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } } [Authorize] public ActionResult Delete(IList idList) { IList roomNumberList = new List(); if (idList != null) { foreach (int id in idList) { roomNumberList.Add(HostManager.GetRoomNumber(id)); } } //需要删除相关设备 HostManager.Delete(idList.Cast().ToList()); SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("Delete"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("DeleteSuccess") }); } [Authorize] public ActionResult HostAuthorization(int hostID) { return View(HostManager.Get(hostID)); } /// /// 保存并下发到期时间 /// /// /// public ActionResult SaveHostAuthorization(IList idList, string expireTime) { bool result = true; IList roomNumberList = new List(); try { foreach (int id in idList) { Host host = HostManager.Get(id); roomNumberList.Add(host.RoomNumber); if (Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { using (MemoryStream buffer = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(buffer)) { writer.Write(new byte[] { 2 }); writer.Write(new byte[] { 32, 0, 0, 0 });//授权到期时间 writer.Write(BitConverter.GetBytes(TimeHelper.DateTimeToStamp(Convert.ToDateTime(expireTime))), 0, 4); writer.Write(new byte[] { 40, 0, 0, 0 });//设置到期时间 writer.Write(BitConverter.GetBytes(TimeHelper.DateTimeToStamp(DateTime.Now)), 0, 4); HostManager.PublishHostInfo(host, buffer.ToArray());//下发 HostManager.SyncHostInfo(host);//同步 SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("HostAuthorization"), "【" + host.RoomNumber + "】"); } } } else { result = false; string msg = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber); SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("HostAuthorization"), msg, false); } } } catch (Exception ex) { logger.Error("主机授权失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } if (result) { SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("HostAuthorization"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } else { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + HttpContext.InnerLanguage("HostOffine") }); } } /// /// 智能语音绑定 /// /// /// [Authorize] public ActionResult SmartVoiceBinding(int hostID) { return View(HostManager.Get(hostID)); } /// /// 保存智能语音绑定信息 /// /// /// public ActionResult SaveSmartVoiceBinding(string jsonData) { var entity = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonData); Host existHost = null; if (!string.IsNullOrEmpty(entity.XiaoDuCUID)) { string XiaoDuKongZhiKey = CacheKey.XiaoDuYuYin + "_" + entity.XiaoDuCUID; HttpContext.Cache.Remove(XiaoDuKongZhiKey); existHost = HostManager.GetByXiaoDuCUID(entity.XiaoDuCUID); if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = string.Format("小度CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.XiaoDuCUID, existHost.SysHotel.Name, existHost.RoomNumber) }); } } if (!string.IsNullOrEmpty(entity.TianMaoCUID)) { existHost = HostManager.GetByTianMaoCUID(entity.TianMaoCUID); if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = string.Format("天猫精灵CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.TianMaoCUID, existHost.SysHotel.Name, existHost.RoomNumber) }); } } if (!string.IsNullOrEmpty(entity.TCLCUID)) { existHost = HostManager.GetByTCLCUID(entity.TCLCUID); if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = string.Format("TCL TV CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.TCLCUID, existHost.SysHotel.Name, existHost.RoomNumber) }); } } if (!string.IsNullOrEmpty(entity.HuaWeiCUID)) { existHost = HostManager.GetByHuaWeiCUID(entity.HuaWeiCUID); if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = string.Format("华为TV CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.HuaWeiCUID, existHost.SysHotel.Name, existHost.RoomNumber) }); } } if (!string.IsNullOrEmpty(entity.HiWeiCUID)) { existHost = HostManager.GetByHuaWeiCUID(entity.HiWeiCUID); if (existHost != null && existHost.ID != entity.ID) { return Json(new { IsSuccess = false, Message = string.Format("华为TV CUID({0})已绑定到酒店({1})客房({2})下,请重新输入。", entity.HuaWeiCUID, existHost.SysHotel.Name, existHost.RoomNumber) }); } } Host host_take = null; string Key = CacheKey.HostInfo_Key_HostNumber + "_" + entity.HostNumber; object obj = MemoryCacheHelper.Get(Key); if (obj != null) { host_take = obj as Host; if (!string.IsNullOrEmpty(entity.XiaoDuCUID)) { host_take.XiaoDuCUID = entity.XiaoDuCUID; } if (!string.IsNullOrEmpty(entity.TianMaoCUID)) { host_take.TianMaoCUID = entity.TianMaoCUID; } if (!string.IsNullOrEmpty(entity.TCLCUID)) { host_take.TCLCUID = entity.TCLCUID; } if (!string.IsNullOrEmpty(entity.HuaWeiCUID)) { host_take.HuaWeiCUID = entity.HuaWeiCUID; } if (!string.IsNullOrEmpty(entity.HiWeiCUID)) { host_take.HiWeiCUID = entity.HiWeiCUID; } host_take.TCLSkillID = entity.TCLSkillID; host_take.DisableStartTime = entity.DisableStartTime; host_take.DisableEndTime = entity.DisableEndTime; host_take.IsWelcomeDisableTime = entity.IsWelcomeDisableTime; } //天猫的发现设备 string ChaXunKey = CacheKey.TianMaoJingLingQuerryAll + "_" + CurrentHotelID + "_" + entity.RoomNumber; HttpContext.Cache.Remove(ChaXunKey); //小度发现设备 string MyCacheKey = "小度音箱" + "Discovery_" + CurrentHotelID + "_" + entity.RoomNumber; HttpContext.Cache.Remove(MyCacheKey); HostManager.SaveSmartVoiceBinding(entity); if (existHost == null) { existHost = HostManager.GetByRoomNumber(entity.HostNumber, CurrentHotelID); } if (existHost != null) { //删除掉小度语间的缓存 string hotelid = existHost.SysHotel.ID.ToString(); string code = existHost.SysHotel.Code; string roomno = existHost.RoomNumber; string KKA = CacheKey.XiaoDuCacheUpdate + "_" + code + "_" + roomno; string CUIDKey = CSRedisCacheHelper.Get_Partition(KKA); //XiaoDuYuYin_950932DC9960012309FD if (!string.IsNullOrEmpty(CUIDKey)) { string XiaoDuKongZhiKey = CacheKey.XiaoDuYuYin + "_" + CUIDKey; HttpContext.Cache.Remove(CUIDKey); } string TianMaoKongZhiKey = CacheKey.TianMaoJingLing + "_" + hotelid + "_" + roomno; HttpContext.Cache.Remove(TianMaoKongZhiKey); } //string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //SmartRobotDisableTime ss = new SmartRobotDisableTime(); //ss.HostID = existHost.ID; //ss.HotelCode = existHost.SysHotel.Code; //ss.RoomNumber = existHost.RoomNumber; //ss.DisableSTime = entity1.WStarttime; //ss.DisableSTime = entity1.WEndtime; //ss.CreateTime = ti; //SmartRobotDisableTimeMananger.SaveOrUpdate(ss); SaveSystemLog(AUTHORITY_Host, HttpContext.InnerLanguage("Edit") + HttpContext.InnerLanguage("SmartVoiceBinding"), "【" + entity.RoomNumber + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("SaveSuccess") }); } /// /// 设置或取消连通房 /// /// 主机ID列表 /// false/设置连通房,true/取消连通房 /// [Authorize] public ActionResult ConnectRoom(IList hostIDs, bool cancel = false) { try { var hosts = new List(); foreach (int hostID in hostIDs) { var host = HostManager.Get(hostID); if (host != null) { hosts.Add(host); } } //HostManager.ConnectRoom(hosts, cancel); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } catch (Exception ex) { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("TheOperationFailedTheFailureReasons") + ex.Message }); } } /// /// 获取密钥 /// /// /// [Authorize] public ActionResult GetKey(IList idList) { bool result = true; IList roomNumberList = new List(); //根据酒店code和mac地址,调用阿里云物联网获取密钥 try { foreach (int id in idList) { Host host = HostManager.Get(id); roomNumberList.Add(host.RoomNumber); DeviceRegisterResult resultData = FreeGoOperation.DeviceRegister(host.MAC); if (resultData.errcode == "0") { host.DeviceName = resultData.device_name; host.DeviceSecret = resultData.device_secret; host.IotId = resultData.iot_id; host.ProductKey = resultData.product_key; host.IsPublish = false; HostManager.Update(host); } else { result = false; string msg = string.Format("调用FreeGo接口返回错误:RoomNumber:{0},ErrorCode:{1},ErrorMessage:{2}", host.RoomNumber, resultData.errcode, resultData.msg); SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("GetKey"), msg, false); } } } catch (Exception ex) { logger.Error("调用阿里云接口失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } if (result) { SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("GetKey"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } else { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } } /// /// 下发密钥 /// /// /// [Authorize] public ActionResult PublishKey(IList idList) { bool result = true; IList roomNumberList = new List(); try { foreach (int id in idList) { Host host = HostManager.Get(id); roomNumberList.Add(host.RoomNumber); if (Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { HostManager.SetDeviceSecret(host); host.IsPublish = true; HostManager.Update(host); } else { result = false; string msg = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber); SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("PublishKey"), msg, false); } } } catch (Exception ex) { logger.Error("下发密钥失败失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } if (result) { SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("PublishKey"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } else { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + HttpContext.InnerLanguage("HostOffine") }); } } /// /// 获取主机密钥 /// /// /// [Authorize] public ActionResult GetHostKey(IList idList) { bool result = true; IList roomNumberList = new List(); try { foreach (int id in idList) { Host host = HostManager.Get(id); roomNumberList.Add(host.RoomNumber); if (Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { HostManager.SendForGetHostSecret(host); } else { result = false; string msg = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber); SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("GetHostKey"), msg, false); } } } catch (Exception ex) { logger.Error("发送获取主机密钥命令失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } if (result) { SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("GetHostKey"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } else { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + HttpContext.InnerLanguage("HostOffine") }); } } /// /// 同步信息 /// /// /// [Authorize] public ActionResult SyncInfo(IList idList) { bool result = true; IList roomNumberList = new List(); try { foreach (int id in idList) { Host host = HostManager.Get(id); roomNumberList.Add(host.RoomNumber); if (Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { HostManager.SyncHostInfo(host); } else { result = false; string msg = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber); SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("SyncInfo"), msg, false); } } } catch (Exception ex) { logger.Error("发送同步主机信息命令失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } if (result) { SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("SyncInfo"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } else { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + HttpContext.InnerLanguage("HostOffine") }); } } /// /// 下发信息给主机 /// /// /// [Authorize] public ActionResult PublishInfo(IList idList) { bool result = true; IList roomNumberList = new List(); try { foreach (int id in idList) { Host host = HostManager.Get(id); roomNumberList.Add(host.RoomNumber); if (Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC)) { HostManager.PublishHostInfo(host); //if (string.IsNullOrEmpty(host.ServerIP) || !Regex.IsMatch(host.ServerIP, Common.ValidatePattern.IPAddress)) //{ // return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + "服务器IP不合法" }); //} //if (host.IPType == 2) //{ // if (string.IsNullOrEmpty(host.LanIP) || !Regex.IsMatch(host.LanIP, Common.ValidatePattern.IPAddress)) // { // return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + "局域网IP不合法" }); // } // if (string.IsNullOrEmpty(host.SubnetMask) || !Regex.IsMatch(host.SubnetMask, Common.ValidatePattern.IPAddress)) // { // return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + "子网掩码不合法" }); // } // if (string.IsNullOrEmpty(host.Gateway) || !Regex.IsMatch(host.Gateway, Common.ValidatePattern.IPAddress)) // { // return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + "网关不合法" }); // } // if (string.IsNullOrEmpty(host.DNS) || !Regex.IsMatch(host.DNS, Common.ValidatePattern.IPAddress)) // { // return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + "DNS不合法" }); // } //} } else { result = false; string msg = String.Format(HttpContext.InnerLanguage("SendFailedHostOffline"), host.RoomNumber); SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("PublishInfo"), msg, false); } } } catch (Exception ex) { logger.Error("下发主机房型房号命令失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") }); } if (result) { SaveSystemLog(AUTHORITY_Secret, HttpContext.InnerLanguage("PublishInfo"), "【" + String.Join(",", roomNumberList.ToArray()) + "】"); return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("OperationSuccess") }); } else { return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + HttpContext.InnerLanguage("HostOffine") }); } } /// /// 工具同步 /// /// /// [Authorize] public ActionResult ToolSync(string key) { if (string.IsNullOrEmpty(tool_sync_url)) { return Json(new { IsSuccess = false, Message = "未配置工具同步服务器地址!" }); } try { string result = HttpWebRequestHelper.PostWebRequest(tool_sync_url, ""); Newtonsoft.Json.Linq.JObject jData = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(result); if (jData["Status"] != null && Convert.ToBoolean(jData["Status"]) == true) { return Json(new { IsSuccess = true, Message = jData["messages"].ToString() }); } else { return Json(new { IsSuccess = false, Message = jData["messages"].ToString() }); } } catch (Exception ex) { logger.Error("发送工具同步命令失败:" + ex.ToString()); return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("OperationFailed") + ex.Message }); } } /// /// 根据mac获取对应的主机列表 /// /// /// [Authorize] public ActionResult LoadHostsByMAC(string mac) { IList result = new List(); if (!string.IsNullOrEmpty(mac)) { IList hosts; if (mac.Length == 17) { hosts = HostManager.LoadAll().Where(r => r.MAC == mac).ToList(); } else { hosts = HostManager.LoadAll().Where(r => r.MAC.Contains(mac)).ToList(); } foreach (Host host in hosts) { result.Add(new { ID = host.ID, HostNumber = host.HostNumber, RoomNumber = host.RoomNumber, MAC = host.MAC, Code = host.SysHotel.Code, Name = ReturnNameByLanguage(host.SysHotel.Name, host.SysHotel.EName, host.SysHotel.TWName) }); } } return Json(new { total = result.Count, rows = result }); } #region 加载控件数据 [Authorize] public ActionResult LoadDataForRoomNumberCombobox() { var result = new List(); var currentUser = SysUserManager.Get(User.Identity.Name);//获取当前用户 //var sysUserHotel = SysUserHotelManager.Get(currentUser.ID, CurrentHotelID);//获取当前用户所在酒店 var currentGroup = GroupManager.Get(currentUser.Group.ID);//获取当前用户所在酒店的楼层 if (currentUser.HotelID != CurrentHotelID)//如果当前用户所在酒店跟当前所选酒店不一致,则获取该酒店下第一个楼层分组 { currentGroup = GroupManager.LoadAll().FirstOrDefault(r => r.Parent == null && r.HotelID == CurrentHotelID); } DataTable table = HostManager.LoadRoomNumbers(currentGroup, CurrentHotelID); foreach (DataRow row in table.Rows) { result.Add(new { ID = row["ID"], RoomNumber = row["RoomNumber"], RoomTypeID = row["RoomTypeID"] }); } result.Insert(0, new { ID = 0, RoomNumber = HttpContext.InnerLanguage("CheckAll") }); return Json(result); } [Authorize] public ActionResult LoadRoomNumbersForCombobox() { var result = HostManager.LoadRoomNumbers().Select(r => new { RoomNumber = r }); return Json(result); } #endregion [Authorize] public ActionResult Read_TFTPSet_Array() { int hotelid = CurrentHotelID; using (Stream stream = Request.InputStream) { stream.Position = 0; using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { string body = reader.ReadToEnd(); var qqq = JsonConvert.DeserializeObject>>(body); foreach (var item in qqq) { string hotelcode = item["hotelcode"].ToString(); string hostnumber = item["hostnumber"].ToString(); string mac = item["mac"].ToString(); HostManager.Send_Query_Data(new byte[] { }, hostnumber, mac); } } } TFTP_Set TFG = TFTPManager.GetData(hotelid, 111); return Json(new { IsSuccess = true, Message = TFG }); } [Authorize] public ActionResult TFTPSet_Execute() { try { int hotelid = CurrentHotelID; using (Stream stream = Request.InputStream) { stream.Position = 0; //AA 55 15 01 54 33 53 41 D9 10 00 FF FF FF FF //包头 //FF //日志开启状态 //FF:全开 00:全关 //DC FF //日志上报端口 //65500 18 00 ////日志上报时间 24 小时 //17 //域名字符长度 ////域名 BoonliveNAS.synology.me 42 6F 6F 6E 6C 69 76 65 4E 41 53 2E 73 79 6E 6F 6C 6F 67 79 2E 6D 65 //XX XX //CRC 根据实际计算结果为准 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { string body = reader.ReadToEnd(); var item = JsonConvert.DeserializeObject(body); var lll = item.host_data; foreach (var singleitem in lll) { List list = new List(); if (item.isenable) { list.Add(0xff); } else { list.Add(0x00); } byte[] p1 = BitConverter.GetBytes(item.port); list.AddRange(p1); byte[] p2 = BitConverter.GetBytes(item.lasttime); list.AddRange(p2); byte[] bbb = Encoding.ASCII.GetBytes(item.domain); byte len = (byte)bbb.Length; list.Add(len); list.AddRange(bbb); byte[] bba = list.ToArray(); var hostnumber = singleitem.hostnumber; var mac = singleitem.mac; HostManager.Send_Setting_Data(bba, hostnumber, mac); } } return Json(new { IsSuccess = true, Message = "成功" }); } } catch (Exception ex) { logger.Error(ex.Message); logger.Error(ex.StackTrace); return Json(new { IsSuccess = false, Message = "保存失败" }); } } [Authorize()] public ActionResult GetVersion(List idList) { foreach (int id in idList) { Host host = HostManager.Get(id); HostManager.SyncHostInfo(host); } return Json(new { IsSuccess = true, Message = "成功" }); } #endregion /// /// 生成主机编号 /// /// [Authorize()] public ActionResult GenericHOSTNUMBER() { try { //1001-默认酒店 string[] Name = CurrentHotelName.Split('-'); string code = Name[0]; NewDataSQL.GenericHOSTNUMBER(CurrentHotelID.ToString(), code); return Json(new { IsSuccess = true, Message = "成功" }); } catch (Exception) { return Json(new { IsSuccess = false, Message = "失败" }); } } /// /// 发送B1 /// /// [Authorize()] public ActionResult Send_B1(string MAC, string HostNumber) { try { var hostList = HostManager.LoadAll(CurrentHotelID); //[AA 55 15 00 54 33 53 41 B1 01 00 FF FF FF FF 00 00 00 00 1F 24 ] var L1 = hostList.Select(A => new { HostNumber = A.HostNumber, MAC = A.MAC }); foreach (var item in L1) { HostModalManager.SendData(item.HostNumber, item.MAC, new byte[] { }); } return Json(new { IsSuccess = true, Message = "成功" }); } catch (Exception) { return Json(new { IsSuccess = false, Message = "失败" }); } } //{ // "baiduReqBody": "{\"header\":{\"namespace\":\"DuerOS.ConnectedHome.Discovery\",\"name\":\"DiscoverAppliancesRequest\", //\"messageId\":\"6d6d6e14-8aee-473e-8c24-0d31ff9c17a2\", //\"payloadVersion\":\"1\"},\ //"payload\":{\"accessToken\":\"pass\",\"openUid\":\"pass\",\"cuid\":\"pass\"}}", // "deviceFactory": "携旅提供-客控逻辑标识", // "forceUpdate": "1", // "deleteFlag": "1", // "hotelContract": "携旅提供-酒店逻辑标识", // "macList": [ // "00:00:00:00:00:00" // ] //} [Authorize()] public ActionResult HaiXinFoundDevice() { try { HaiXinData h = new HaiXinData(); CommonEntity.header h1 = new CommonEntity.header(); h1.@namespace = "DuerOS.ConnectedHome.Discovery"; h1.name = "DiscoverAppliancesRequest"; h1.messageId = Guid.NewGuid().ToString("N"); h1.payloadVersion = "1"; CommonEntity.payload p = new CommonEntity.payload() { accessToken = "pass", openUid = "pass", cuid = "pass" }; HaiXinHeader he = new HaiXinHeader() { header = h1, payload = p }; string str = JsonConvert.SerializeObject(he); HaiXinData da = new HaiXinData(); da.baiduReqBody = str; da.deviceFactory = "boonlive"; da.forceUpdate = "1"; da.deleteFlag = "1"; var Q = SysHotelManager.Get(CurrentHotelID); da.hotelContract = Q.HeTongNumber; List hosts = HostManager.LoadAll().Where(A => A.SysHotel.ID == CurrentHotelID).Select(A => A.XiaoDuCUID).ToList(); da.macList = hosts; var client1 = new RestClient("https://device-manage.ctlife.tv/"); var request1 = new RestRequest("api/extend/device/app/baiduSeriesFindDevice", Method.POST); logger.Error("发送的数据为:" + JsonConvert.SerializeObject(da)); request1.AddJsonBody(da); var QQQ = client1.Execute(request1); string ddd = QQQ.Content; logger.Error("发现设备返回的是:" + ddd); HttpStatusCode HHH = QQQ.StatusCode; if (HHH == HttpStatusCode.Created || HHH == HttpStatusCode.OK) { } return Json(new { IsSuccess = true, Message = "设备更新成功" }); } catch (Exception ex) { logger.Error("发现设备:" + ex.Message); return Json(new { IsSuccess = false, Message = "失败" }); } } } public class host_data { public string hostnumber { get; set; } public string mac { get; set; } } public class FTP_JSON { public List host_data { get; set; } public bool isenable { get; set; } public string domain { get; set; } public UInt16 port { get; set; } public UInt16 lasttime { get; set; } } public class ShengJiData { public object ID { get; set; } public object Status { get; set; } public string RoomNumber { get; set; } public object MAC { get; set; } public object Model { get; set; } public object Launcher { get; set; } public object Version { get; set; } public object ConfigVersion { get; set; } public object UpgradeStatus { get; set; } public object UpgradeTime { get; set; } public string ProgressBar { get; set; } } }