Files

1873 lines
85 KiB
C#
Raw Permalink Normal View History

2025-12-11 09:17:16 +08:00
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;
/// <summary>
/// 数据升级权限ID
/// </summary>
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();
}
/// <summary>
///
/// </summary>
/// <param name="page"></param>
/// <param name="rows"></param>
/// <param name="order"></param>
/// <param name="sort"></param>
/// <param name="groupId"></param>
/// <param name="roomNumber">房号</param>
/// <param name="mac">mac地址</param>
/// <param name="roomType">房型名称</param>
/// <param name="isSyncRoomNumber">房号是否同步0否1是2全部</param>
/// <returns></returns>
[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<object> result = new List<object>();
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<object>() });
}
}
[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<object> result = new List<object>();
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<object>() });
}
}
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();
}
/// <summary>
/// 根据mac地址获取主机信息
/// </summary>
/// <param name="mac"></param>
/// <returns></returns>
[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 });
}
/// <summary>
/// 根据房型ID获取对应的主机列表针对C主机
/// </summary>
/// <param name="roomTypeID"></param>
/// <returns></returns>
[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<ShengJiData> result = new List<ShengJiData>();
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 });
}
/// <summary>
/// 根据房型获取所有类型主机
/// </summary>
/// <param name="roomTypeID"></param>
/// <returns></returns>
[Authorize]
public ActionResult LoadAllHostByRoomType(int roomTypeID)
{
var lists = HostManager.LoadAllHostByRoomType(CurrentHotelID, roomTypeID);
IList<object> result = new List<object>();
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<Host>(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 });
}
}
/// <summary>
/// 通过excel导入主机列表
/// </summary>
/// <returns></returns>
[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<int, HttpPostedFileBase>(CurrentHotelID, file);
System.Threading.Tasks.Task.Factory.StartNew((state) =>
{
var ttt = state as Tuple<int, HttpPostedFileBase>;
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 });
}
}
///// <summary>
///// 导出主机记录到excel
///// </summary>
///// <returns></returns>
//[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);
// //}
//}
/// <summary>
/// 导出主机记录到excel
/// </summary>
/// <returns></returns>
[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);
//}
}
///// <summary>
///// 导出主机记录到excel
///// </summary>
///// <returns></returns>
//[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);
// //}
//}
/// <summary>
/// 修改主机网络
/// </summary>
/// <returns></returns>
[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<Host>();
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 });
}
}
/// <summary>
/// 更改房态
/// </summary>
/// <returns></returns>
[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<RoomStatusRequest>(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") });
}
/// <summary>
/// 客房电源
/// </summary>
/// <param name="id"></param>
/// <param name="roomStatusID"></param>
/// <returns></returns>
[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<bool>(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<int> idList)
{
IList<string> roomNumberList = new List<string>();
if (idList != null)
{
foreach (int id in idList)
{
roomNumberList.Add(HostManager.GetRoomNumber(id));
}
}
//需要删除相关设备
HostManager.Delete(idList.Cast<object>().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));
}
/// <summary>
/// 保存并下发到期时间
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult SaveHostAuthorization(IList<int> idList, string expireTime)
{
bool result = true;
IList<string> roomNumberList = new List<string>();
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") });
}
}
/// <summary>
/// 智能语音绑定
/// </summary>
/// <param name="hostID"></param>
/// <returns></returns>
[Authorize]
public ActionResult SmartVoiceBinding(int hostID)
{
return View(HostManager.Get(hostID));
}
/// <summary>
/// 保存智能语音绑定信息
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult SaveSmartVoiceBinding(string jsonData)
{
var entity = Newtonsoft.Json.JsonConvert.DeserializeObject<Host>(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<string>(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") });
}
/// <summary>
/// 设置或取消连通房
/// </summary>
/// <param name="hostIDs">主机ID列表</param>
/// <param name="cancel">false/设置连通房true/取消连通房</param>
/// <returns></returns>
[Authorize]
public ActionResult ConnectRoom(IList<int> hostIDs, bool cancel = false)
{
try
{
var hosts = new List<Host>();
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 });
}
}
/// <summary>
/// 获取密钥
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
[Authorize]
public ActionResult GetKey(IList<int> idList)
{
bool result = true;
IList<string> roomNumberList = new List<string>();
//根据酒店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") });
}
}
/// <summary>
/// 下发密钥
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
[Authorize]
public ActionResult PublishKey(IList<int> idList)
{
bool result = true;
IList<string> roomNumberList = new List<string>();
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") });
}
}
/// <summary>
/// 获取主机密钥
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
[Authorize]
public ActionResult GetHostKey(IList<int> idList)
{
bool result = true;
IList<string> roomNumberList = new List<string>();
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") });
}
}
/// <summary>
/// 同步信息
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
[Authorize]
public ActionResult SyncInfo(IList<int> idList)
{
bool result = true;
IList<string> roomNumberList = new List<string>();
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") });
}
}
/// <summary>
/// 下发信息给主机
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
[Authorize]
public ActionResult PublishInfo(IList<int> idList)
{
bool result = true;
IList<string> roomNumberList = new List<string>();
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") });
}
}
/// <summary>
/// 工具同步
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
[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 });
}
}
/// <summary>
/// 根据mac获取对应的主机列表
/// </summary>
/// <param name="roomTypeID"></param>
/// <returns></returns>
[Authorize]
public ActionResult LoadHostsByMAC(string mac)
{
IList<object> result = new List<object>();
if (!string.IsNullOrEmpty(mac))
{
IList<Host> 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<object>();
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<List<Dictionary<string, string>>>(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<FTP_JSON>(body);
var lll = item.host_data;
foreach (var singleitem in lll)
{
List<byte> list = new List<byte>();
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<int> idList)
{
foreach (int id in idList)
{
Host host = HostManager.Get(id);
HostManager.SyncHostInfo(host);
}
return Json(new { IsSuccess = true, Message = "成功" });
}
#endregion
/// <summary>
/// 生成主机编号
/// </summary>
/// <returns></returns>
[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 = "失败" });
}
}
/// <summary>
/// 发送B1
/// </summary>
/// <returns></returns>
[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<string> 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> 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; }
}
}