using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using Service;
using Domain;
using WebSite.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using System.Diagnostics;
using System.Text;
using System.Net;
using System.IO;
using System.Threading.Tasks;
using CommonEntity;
using Common;
using RestSharp;
using System.Configuration;
using RCUHost.Implement;
using Jose;
using System.Web.Caching;
using System.Collections.Concurrent;
using System.Threading;
using RCUHost;
using uPLibrary.Networking.M2Mqtt.Messages;
namespace WebSite.Controllers
{
public class ApiController : BaseController
{
private static long hostBaseCount = Convert.ToInt64(System.Configuration.ConfigurationManager.AppSettings["host_base_count"]);
private const int AuthorityID = 13;
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(ApiController));
public IHostManager HostManager { get; set; }
//阿宝添加的
public IHostUpdateStatusManager HostUpdateStatusManager { get; set; }
public ISysHotelManager SysHotelManager { get; set; }
public ISysHotelGroupManager SysHotelGroupManager { get; set; }
public IPowerSupplyControlManager PowerSupplyControlManager { get; set; }
public IHostAirManager HostAirManager { get; set; }
public IRoomTypeSceneManager RoomTypeSceneManager { get; set; }
public ILightControlManager LightControlManager { get; set; }
public IHostModalManager HostModalManager { get; set; }
public IRoomServiceManager RoomServiceManager { get; set; }
public IAlarmSettingManager AlarmSettingManager { get; set; }
public IHostModalRecordManager HostModalRecordManager { get; set; }
public IRoomTypeWXMenusManager RoomTypeWXMenusManager { get; set; }
public ISysOauth2Manager SysOauth2Manager { get; set; }
public IRoomTypeManager RoomTypeManager { get; set; }
public ISysProvinceManager SysProvinceManager { get; set; }
public IOverviewManager OverviewManager { get; set; }
public ISysUserManager SysUserManager { get; set; }
public IHostFaultsManager HostFaultsManager { get; set; }
public IRoomTypeModalManager RoomTypeModalManager { get; set; }
public IRoomCardManager RoomCardManagerTest { get; set; }
public IGroupManager GroupManager { get; set; }
public IRoomModalManager RoomModalManager { get; set; }
//新添加的
public IRoomStatusManager RoomStatusManager { get; set; }
public IDeviceControlReceiver DeviceControlReceiver { get; set; }
private string msg = "";
private int hotelID = 0;
public ActionResult Index()
{
return View();
}
///
/// 验证酒店ID和房号
///
///
///
///
///
///
private Host CheckRoomNumber(string code, string creatDate, ref string msg, ref int hotelID, string roomNumber = "")
{
SysHotel sysHotel = SysHotelManager.GetByCode(code, Convert.ToDateTime(creatDate));
if (sysHotel == null)
{
msg = "酒店未知";
hotelID = 0;
return null;
}
hotelID = sysHotel.ID;
if (!string.IsNullOrEmpty(roomNumber))
{
Host host = HostManager.GetByRoomNumber(roomNumber, sysHotel.ID);
if (host == null)
{
msg = "房号[" + roomNumber + "]不存在";
return null;
}
if (!Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC))
{
msg = "房号[" + roomNumber + "]网络异常";
return null;
}
return host;
}
return null;
}
///
/// 如果存在取电服务记录,且不是打开状态,则返回false,不可控制设备(除了空调),不存在取电服务,可以控制
///
///
///
private bool CheckGetPower(Host host)
{
if (!host.SysHotel.IsVoincePowerOn)
{
return true;//不需要取电服务打开即可控制
}
string HostNumberOnly = host.HostNumber;
string Key = CacheKey.HostInfo_Key_HostNumber + "_" + HostNumberOnly;
object FFK = MemoryCacheHelper.Get(Key);
if (FFK != null)
{
Host NNN = FFK as Host;
if (NNN.RoomCard != null)
{
return true;//已插卡即可控制
}
}
else
{
if (host.RoomCard != null)
{
return true;//已插卡即可控制
}
}
string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000001";
var obj = CSRedisCacheHelper.Get_Partition(KKey);
if (obj != null)
{
HostModal_Cache hhh = obj as HostModal_Cache;
if (hhh.Status != 1)
{
return false;
}
}
return true;
}
public static readonly string mqtt_topic = "blw/webapi/report";
#region 提供api给第三方平台对接
///
/// 获取主机状态(如果指定房号roomNumber参数,则提供入住人信息)
///
///
///
public ActionResult GetRCUStatus(string jsonData)
{
try
{
WebApiInvoke_FenXi("GetRCUStatus");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string code = jData["code"].ToString();
string room_number = jData["roomNumber"].ToString();
if (string.IsNullOrEmpty(code) || string.IsNullOrEmpty(room_number))
{
return Json(new { IsSuccess = "酒店编码或者房间号不能为空", Result = msg }, JsonRequestBehavior.AllowGet);
}
string IP = "";
string PPP = Request.UserHostAddress;
string III = Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(III))
{
IP = PPP;
}
else
{
IP = III;
}
string KKK = "GetRCUStatus_" + IP + "_" + code + "_" + room_number;
object ooo = MemoryCacheHelper.Get(KKK);
if (ooo != null)
{
DateTime dt = DateTime.Parse(ooo.ToString());
TimeSpan span = DateTime.Now - dt;
if (span.TotalSeconds <= 15)
{
return Json(new { IsSuccess = true, Result = "wait for a moment" }, JsonRequestBehavior.AllowGet);
}
else
{
string start_timeddd = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MemoryCacheHelper.Set(KKK, start_timeddd);
}
}
else
{
string start_timeddd = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MemoryCacheHelper.Set(KKK, start_timeddd);
}
}
catch (Exception)
{
}
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//return Json(new { IsSuccess = false, Result = "接口地址改用(https://boonlive-rcu.com/api/GetRCUStatus)" }, JsonRequestBehavior.AllowGet);
//System.Threading.Thread.Sleep(100);
//if (!Common.RateLimiter.TryRequest())
//{
// return Json(new { IsSuccess = false, Result = "Too Many Requests" }, JsonRequestBehavior.AllowGet);
//}
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
Host host1 = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, "");
if (host1 == null && hotelID == 0)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
if (jData["roomNumber"] == null || string.IsNullOrEmpty(jData["roomNumber"].ToString()))
{
return Json(new { IsSuccess = false, Result = "roomNumber房号参数不能为空" }, JsonRequestBehavior.AllowGet);
}
string roomNumber = jData["roomNumber"].ToString();
//logger.Error(string.Format("api获取酒店{0}主机{1}状态列表,来自{2}", jData["code"].ToString(), roomNumber, GetClientIP()));
List roomModels = new List();
IList hosts = null;
string Key = CacheKey.WebAPIGetRCUStatus + "_" + hotelID + "_" + roomNumber;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
{
hosts = obj as IList;
}
else
{
hosts = HostManager.LoadAll(hotelID, roomNumber).ToList();//OrderBy(r => r.RoomNumber).
MemoryCacheHelper.SlideSet(Key, hosts);
}
foreach (Host host in hosts)
{
RoomModel roomModel = new RoomModel();
roomModel.ID = host.ID;
roomModel.HostStatus = host.Status;//主机状态:0离线,1在线
roomModel.RoomNumber = host.RoomNumber;//房号
if (host.RoomStatus != null)
{
roomModel.RoomStatus = (Language == Language.CN ? host.RoomStatus.Name : host.RoomStatus.EName);
}
roomModel.RoomStatus += host.DoorLockStatus ? "(" + HttpContext.InnerLanguage("DoorOpen") + ")" : "(" + HttpContext.InnerLanguage("DoorClose") + ")";//房态和房门状态
roomModel.Identity = (host.RoomCard != null && host.RoomCard.RoomCardType != null) ? (Language == Language.CN ? host.RoomCard.RoomCardType.Name : host.RoomCard.RoomCardType.EName) : HttpContext.InnerLanguage("Nobody");//身份
roomModel.IsConnectingRoom = false;//host.IsConnectingRoom;//是否连通房
string k2 = CacheKey.PowerSupply + "_" + host.HostNumber;
bool b = CSRedisCacheHelper.ForeverGet(k2);
roomModel.PowerSupply = b;//电源状态
string KeyKey = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber;
object objobj = MemoryCacheHelper.Get(KeyKey);
Host HHH = objobj as Host;
if (HHH != null)
{
string host_number = host.HostNumber;
string mac = host.MAC;
bool is_online = CSRedisCacheHelper.Contains(host_number, mac);
roomModel.HostStatus = is_online;//主机状态:0离线,1在线
string kk2 = CacheKey.PowerSupply + "_" + host.HostNumber;
bool bb = CSRedisCacheHelper.ForeverGet(k2);
roomModel.PowerSupply = bb;//电源状态
#region 暂时丢掉
//roomModel.HostStatus = host.Status;//主机状态:0离线,1在线
//roomModel.RoomNumber = host.RoomNumber;//房号
//if (host.RoomStatus != null)
//{
// roomModel.RoomStatus = (Language == Language.CN ? host.RoomStatus.Name : host.RoomStatus.EName);
//}
//roomModel.RoomStatus += host.DoorLockStatus ? "(" + HttpContext.InnerLanguage("DoorOpen") + ")" : "(" + HttpContext.InnerLanguage("DoorClose") + ")";//房态和房门状态
//roomModel.Identity = (host.RoomCard != null && host.RoomCard.RoomCardType != null) ? (Language == Language.CN ? host.RoomCard.RoomCardType.Name : host.RoomCard.RoomCardType.EName) : HttpContext.InnerLanguage("Nobody");//身份
//roomModel.IsConnectingRoom = false;//host.IsConnectingRoom;//是否连通房
//roomModel.PowerSupply = host.PowerSupply;//电源状态
////空调信息
//HostModal hostModal = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.ActiveIndicator).OrderBy(r => r.Modal.Sort).FirstOrDefault();
//if (hostModal != null)
//{
// roomModel.AirID = hostModal.Modal.ID;
// roomModel.AirStatus = hostModal.Status;
// roomModel.ModalAddress = hostModal.Modal.ModalAddress;
// roomModel.RoomTemp = hostModal.CurrentTemp;
// roomModel.SettingTemp = hostModal.SettingTemp;
// roomModel.Mode = hostModal.Mode;
// roomModel.FanSpeed = hostModal.FanSpeed;
// roomModel.Valve = (int)hostModal.Valve;
// roomModel.ValveName = hostModal.Valve == 1 ? HttpContext.InnerLanguage("On") : HttpContext.InnerLanguage("Off");//阀门
//}
//else
//{
// roomModel.AirID = 0;
// roomModel.AirStatus = 2;
// roomModel.ModalAddress = "";
// roomModel.RoomTemp = 0;
// roomModel.SettingTemp = 0;
// roomModel.Mode = 0;
// roomModel.FanSpeed = 0;
// roomModel.Valve = 0;
// roomModel.ValveName = HttpContext.InnerLanguage("Off");//阀门
//}
////指定服务信息
//var services = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator && r.Status == 1).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID);
//roomModel.SOS = GetService(services, "004000008");
//roomModel.DND = GetService(services, "004000002");
//roomModel.Clean = GetService(services, "004000003");
//roomModel.Checkout = GetService(services, "004000006");
#endregion
}
//空调信息
HostModal KongTiaoInfoTake = null;
string KongInfo = "KongTiaoInfo_" + host.ID;
var OOjb = MemoryCacheHelper.Get(KongInfo);
if (OOjb != null)
{
KongTiaoInfoTake = (HostModal)OOjb;
}
else
{
KongTiaoInfoTake = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.ActiveIndicator).OrderBy(r => r.Modal.Sort).FirstOrDefault();
MemoryCacheHelper.Set(KongInfo, KongTiaoInfoTake);
}
string KKey = "";
if (KongTiaoInfoTake != null)
{
KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + KongTiaoInfoTake.Modal.ModalAddress;
}
else
{
KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_007001000";
}
var hostModal = CSRedisCacheHelper.Get_Partition(KKey);
if (hostModal != null)
{
roomModel.AirID = hostModal.Modal.ID;
roomModel.AirStatus = hostModal.Status;
roomModel.ModalAddress = hostModal.Modal.ModalAddress;
roomModel.RoomTemp = hostModal.AirConditionData.CurrentTemp;
roomModel.SettingTemp = hostModal.AirConditionData.SettingTemp;
roomModel.Mode = hostModal.AirConditionData.Mode;
roomModel.FanSpeed = hostModal.AirConditionData.FanSpeed;
roomModel.Valve = (int)hostModal.AirConditionData.Valve;
roomModel.ValveName = hostModal.AirConditionData.Valve == 1 ? HttpContext.InnerLanguage("On") : HttpContext.InnerLanguage("Off");//阀门
}
else
{
roomModel.AirID = 0;
roomModel.AirStatus = 2;
roomModel.ModalAddress = "";
roomModel.RoomTemp = 0;
roomModel.SettingTemp = 0;
roomModel.Mode = 0;
roomModel.FanSpeed = 0;
roomModel.Valve = 0;
roomModel.ValveName = HttpContext.InnerLanguage("Off");//阀门
}
IList services = null;
//指定服务信息
string ServicesKey = "Services_" + host.ID;
object ooo = MemoryCacheHelper.Get(ServicesKey);
if (ooo != null)
{
services = ooo as IList;
}
else
{
//services = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator && r.Status == 1).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID);
services = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ActiveIndicator).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID);
MemoryCacheHelper.SlideSet(ServicesKey, services);
}
string SOSKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000008";
string DNDKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000002";
string CleanKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000003";
string CheckOutKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000006";
var hostModal1 = CSRedisCacheHelper.Get_Partition(SOSKey);
var hostModal2 = CSRedisCacheHelper.Get_Partition(DNDKey);
var hostModal3 = CSRedisCacheHelper.Get_Partition(CleanKey);
var hostModal4 = CSRedisCacheHelper.Get_Partition(CheckOutKey);
roomModel.SOS = GetService(services, "004000008");
roomModel.DND = GetService(services, "004000002");
roomModel.Clean = GetService(services, "004000003");
roomModel.Checkout = GetService(services, "004000006");
if (hostModal1 != null)
{
roomModel.SOS.Status = hostModal1.Status;
}
if (hostModal2 != null)
{
roomModel.DND.Status = hostModal2.Status;
}
if (hostModal3 != null)
{
roomModel.Clean.Status = hostModal3.Status;
}
if (hostModal4 != null)
{
roomModel.Checkout.Status = hostModal4.Status;
}
#region 弃用的代码,影响使用
//获取当前入住人信息
//if (!string.IsNullOrEmpty(roomNumber))
//{
// using (syncstatus.syncstatusSoapClient wsClient = new syncstatus.syncstatusSoapClient())
// {
// string phoneNumber = "";
// string xmlString = wsClient.GetRoomCustomerByHotelID(host.SysHotel.ID, roomNumber, ref phoneNumber);
// if (!string.IsNullOrEmpty(xmlString))
// {
// try
// {
// System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
// doc.LoadXml(xmlString);
// foreach (System.Xml.XmlNode node in doc.GetElementsByTagName("interface")[0].ChildNodes)
// {
// roomModel.Customers.Add(new RoomCustomer()
// {
// idtype = node.Attributes["idtype"].Value,
// idcard = node.Attributes["idcard"].Value,
// customer = node.Attributes["customer"].Value,
// sex = node.Attributes["sex"].Value,
// country = node.Attributes["country"].Value,
// checkindate = Convert.ToDateTime(node.Attributes["checkindate"].Value),
// phoneNumber = phoneNumber
// });
// }
// }
// catch (Exception ex1)
// {
// logger.Error(string.Format("解释酒店({0})客房({1})入住人信息({2})异常),原因:{3}", host.SysHotel.Code + host.SysHotel.Name, host.RoomNumber, xmlString, ex1.Message));
// }
// }
// }
//}
#endregion
roomModels.Add(roomModel);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRCUStatus");
return Json(new { IsSuccess = true, Result = roomModels }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取主机状态失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
private ServiceModel GetService(IList services, string modalAddress)
{
var serviceModel = new ServiceModel { Status = 2, Code = "", Name = "", Color = "" };
var service = services.FirstOrDefault(r => r.Modal.ModalAddress == modalAddress);
if (service != null)
{
serviceModel = new ServiceModel
{
Status = 1,
Code = service.Modal.ModalAddress,
Name = (Language == Domain.Language.CN) ? service.Modal.Name : service.Modal.EnglishName,
Color = service.Modal.Color == "" ? service.Modal.Color : "#080808"
};
services.Remove(service);
}
return serviceModel;
}
///
/// 打开/关闭rcu
///
///
///
public ActionResult SetRCUPower(string jsonData)
{
return Json(new { IsSuccess = false, Result = "接口已停用" }, JsonRequestBehavior.AllowGet);
}
///
/// 打开/关闭rcu(授权使用)
///
///
///
public ActionResult SetRCUPowerLicense(string jsonData)
{
WebApiInvoke_FenXi("SetRCUPowerLicense");
//MonitorWebAPI(jsonData, "SetRCUPowerLicense");
try
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
int status = Convert.ToInt16(jData["status"]);//设置状态:1开启,2关闭
PowerSupplyCtrl power = status == 1 ? PowerSupplyCtrl.Normal : PowerSupplyCtrl.Lock;//实际下位机:0开启,1关闭
PowerSupplyControlManager.SendCtrl(host, power);
host.PowerSupply = (power == PowerSupplyCtrl.Normal ? true : false);
string k2 = CacheKey.PowerSupply + "_" + host.HostNumber;
CSRedisCacheHelper.Forever(k2, host.PowerSupply);
HostManager.Update(host);
string detail = string.Format("{0}客房{1}的主机电源", (status == 1 ? "打开" : "关闭"), roomNumber);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("Relay"), detail, true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCUPowerLicense");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置电源失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
public static string TongJiEnable = ConfigurationManager.AppSettings["tongjiflag"];
private void TongJi(string jsonData, string start_time, string end_time, JObject jData, string METHOD_Name)
{
if (TongJiEnable.Equals("0"))
{
return;
}
string code = "0000";
var mmm = jData["code"];
if (mmm != null)
{
code = mmm.ToString();
}
string roomnumber = "0000";
var nnn = jData["roomNumber"];
if (nnn != null)
{
roomnumber = nnn.ToString();
}
var t = new Tuple(jsonData, start_time, end_time, code, roomnumber, METHOD_Name);
Task.Factory.StartNew((state) =>
{
var ttt = state as Tuple;
string jt = ttt.Item1;
string st_t = ttt.Item2;
string ed_t = ttt.Item3;
string co = ttt.Item4;
string rm = ttt.Item5;
string MN = ttt.Item6;
MonitorWebAPI(jt, METHOD_Name, st_t, ed_t, co, rm);
}, t);
}
///
/// 获取房间的空调列表
///
///
///
public ActionResult GetRoomAirList(string jsonData)
{
//return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet);
try
{
WebApiInvoke_FenXi("GetRoomAirList");
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
IList hostModals = HostModalManager.Load(host.ID, DeviceType.AirConditioner).Where(r => r.Modal.WXActiveIndicator).ToList();
if (hostModals == null || hostModals.Count < 1)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置空调" }, JsonRequestBehavior.AllowGet);
}
List list = new List();
foreach (HostModal item in hostModals)
{
Air air = new Air
{
HostID = item.HostID,
ModalAddress = item.Modal.ModalAddress,
Name = item.Modal.Name,
RoomTypeAirID = item.Modal.ID,
Status = item.Status,
SettingTemp = item.SettingTemp,
CurrentTemp = item.CurrentTemp,
Mode = item.Mode,
FanSpeed = item.FanSpeed,
Valve = item.Valve
};
list.Add(air);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomAirList");
//SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("AirConditioningControl"), "获取客房" + roomNumber + "空调信息", true, "api", hotelID);
return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取空调失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
private void MonitorWebAPI(string jsonData, string MethodName, string st_time, string end_time, string hotel_code, string RoomNumber)
{
try
{
string IP = "";
string PPP = Request.UserHostAddress;
string III = Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(III))
{
IP = PPP;
}
else
{
IP = III;
}
WebAPIMonitorData s = new WebAPIMonitorData();
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
s.MethodName = MethodName;
s.InvokStart_Time = st_time;
s.InvokEnd_Time = end_time;
s.HotelCode = hotel_code;
s.RoomNumber = RoomNumber;
s.RemoteIP = IP;
s.Parameters = new List() { jsonData };
SendMQTTData.WebAPI_DataSend(s, mqtt_topic);
}
catch (Exception)
{
}
}
///
/// 设置空调
///
///
///
public ActionResult SetRCUAir(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("SetRCUAir");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
string modalAddress = jData["modalAddress"].ToString();//组地址
var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress);
if (hostModal == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的空调" }, JsonRequestBehavior.AllowGet);
}
int status = 0, brightness = 0, temperature = 0, fanSpeed = 0, mode = 0, valve = 0;//0表示不变
StringBuilder detail = new StringBuilder();
detail.Append(string.Format("设置客房{0}{1}({2}):", roomNumber, hostModal.Modal.Name, modalAddress));
if (jData["onOff"] != null)
{
status = int.Parse(jData["onOff"].ToString());//开关:1开,2关
detail.Append("状态:" + (status == 1 ? "打开," : "关闭,"));
}
if (jData["temperature"] != null)
{
temperature = int.Parse(jData["temperature"].ToString());//设置温度16~32
detail.Append("温度:" + temperature.ToString() + ",");
}
if (jData["fanSpeed"] != null)
{
fanSpeed = int.Parse(jData["fanSpeed"].ToString());//风速:0自动,1低速,2中速,3高速
switch (fanSpeed)
{
case 1:
detail.Append("风速:" + "低速,");
break;
case 2:
detail.Append("风速:" + "中速,");
break;
case 3:
detail.Append("风速:" + "高速,");
break;
default:
detail.Append("风速:" + "自动,");
break;
}
}
if (jData["mode"] != null)
{
mode = int.Parse(jData["mode"].ToString());//模式:0自动,1制冷,2制热,3送风
switch (mode)
{
case 1:
detail.Append("模式:" + "制冷,");
break;
case 2:
detail.Append("模式:" + "制热,");
break;
case 3:
detail.Append("模式:" + "送风,");
break;
default:
detail.Append("模式:" + "自动,");
break;
}
}
if (jData["valve"] != null)
{
valve = int.Parse(jData["valve"].ToString());//阀门:1开,2关
detail.Append("阀门:" + (status == 1 ? "打开" : "关闭"));
}
HostModalManager.SetDevice(host, hostModal, status, brightness, temperature, fanSpeed, mode, valve);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("AirConditioningControl"), detail.ToString(), true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCUAir");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置空调失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取房间的场景列表
///
///
///
public ActionResult GetRoomSceneList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetRoomSceneList");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
IList modals = RoomTypeSceneManager.LoadAll().Where(r => r.RoomType.ID == host.RoomType.ID && r.ActiveIndicator).OrderBy(r => r.Sort).ToList();
if (modals == null || modals.Count < 1)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置场景" }, JsonRequestBehavior.AllowGet);
}
List list = new List();
foreach (var modal in modals)
{
SceneState sceneState = new SceneState
{
SceneID = modal.ID,
Name = modal.Name,
Icon = modal.Icon
};
list.Add(sceneState);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomSceneList");
//SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), "获取客房" + roomNumber + "场景信息", true, "api", hotelID);
return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取场景失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 设置场景
///
///
///
public ActionResult SetRCUScene(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("SetRCUScene");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
if (!CheckGetPower(host))
{
return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet);
}
string sceneID = jData["sceneID"].ToString();//场景ID:1、2、3
//string status = jData["status"].ToString();//状态:1开,2关
var scene = RoomTypeSceneManager.Get(int.Parse(sceneID));
if (scene == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的场景" }, JsonRequestBehavior.AllowGet);
}
LightControlManager.ApplyScene(host, scene);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), string.Format("打开客房{0}{1}场景", roomNumber, scene.Name), true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCUScene");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置场景失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取房间的灯光列表
///
///
///
public ActionResult GetRoomLightList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet);
try
{
WebApiInvoke_FenXi("GetRoomLightList");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
//IList hostModals = HostModalManager.LoadAll().Where(r => (r.Modal.Type == DeviceType.Relay || r.Modal.Type == DeviceType.Dimmer
// || r.Modal.Type == DeviceType.PWMDimmer || r.Modal.Type == DeviceType.Traic || r.Modal.Type == DeviceType.PWMExpand || r.Modal.Type == DeviceType.PBLED)
// && r.HostID == host.ID && r.Modal.ActiveIndicator == true).ToList();
IList hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.WXActiveIndicator).ToList();
//if ((hostModals1 == null || hostModals1.Count < 1) && (hostModals2 == null || hostModals2.Count < 1))
//{
// return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置灯光或调光" }, JsonRequestBehavior.AllowGet);
//}
IList list = new List();
foreach (HostModal modal in hostModals)
{
switch (modal.Modal.Type)
{
case DeviceType.Relay://主机继电器
case DeviceType.Dimmer://LED调光
case DeviceType.PWMDimmer://PWM调光
case DeviceType.PWMExpand://PWM扩展
case DeviceType.PBLED:
case DeviceType.Traic://可控硅调光
case DeviceType.Strip://灯带调光
case DeviceType.A9IORelay:
case DeviceType.LVout://弱电输出
case DeviceType.Expand://扩展继电器
case DeviceType.PB20:
case DeviceType.PB20_LD:
case DeviceType.PB20_LS:
Light light = new Light
{
Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName),
ModalAddress = modal.Modal.ModalAddress,
Status = modal.Status,
Brightness = modal.Brightness
};
list.Add(light);
break;
}
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomLightList");
//SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("LightControl"), "获取客房" + roomNumber + "灯光信息", true, "api", hotelID);
return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取灯光失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 设置灯光
///
///
///
public ActionResult SetRCULight(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("SetRCULight");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
if (!CheckGetPower(host))
{
return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet);
}
string modalAddress = jData["modalAddress"].ToString();//组地址
int status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关
int brightness = Convert.ToInt16(jData["brightness"].ToString());//亮度:0~100
var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress);
if (hostModal == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的灯光" }, JsonRequestBehavior.AllowGet);
}
HostModalManager.SetDevice(host, hostModal, status, brightness);
string detail = string.Format("{0}客房{1}{2}({3}),亮度{4}", (status == 1 ? "打开" : "关闭"), roomNumber, hostModal.Modal.Name, modalAddress, brightness);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("LightControl"), detail, true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCULight");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置灯光失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取房间的窗帘列表
///
///
///
public ActionResult GetRoomCurtainList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//return Json(new { IsSuccess = false, Result = "接口修改调整" }, JsonRequestBehavior.AllowGet);
try
{
WebApiInvoke_FenXi("GetRCUStatus");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
IList hostModals = HostModalManager.Load(host.ID, DeviceType.Curtain).Where(r => r.Modal.WXActiveIndicator).ToList();
if (hostModals == null || hostModals.Count < 1)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置窗帘" }, JsonRequestBehavior.AllowGet);
}
IList list = new List();
foreach (HostModal modal in hostModals)
{
Curtain curtain = new Curtain
{
Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName),
ModalAddress = modal.Modal.ModalAddress,
Status = modal.Status
};
list.Add(curtain);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomCurtainList");
//SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), "获取客房" + roomNumber + "窗帘信息", true, "api", hotelID);
return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 设置窗帘
///
///
///
public ActionResult SetRCUCurtain(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("SetRCUCurtain");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
if (!CheckGetPower(host))
{
return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet);
}
string modalAddress = jData["modalAddress"].ToString();//组地址
int status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关,6停止
var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress);
if (hostModal == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的窗帘" }, JsonRequestBehavior.AllowGet);
}
HostModalManager.SetDevice(host, hostModal, status, 0);
string detail = string.Format("{0}客房{1}{2}({3})", (status == 1 ? "打开" : (status == 6 ? "停止" : "关闭")), roomNumber, hostModal.Modal.Name, modalAddress);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), detail, true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCUCurtain");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
logger.Error(ex.StackTrace);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取房间的背景音乐列表
///
///
///
public ActionResult GetRoomMusicList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetRoomMusicList");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
IList hostModals = HostModalManager.Load(host.ID, DeviceType.Music).Where(r => r.Modal.WXActiveIndicator).ToList();
if (hostModals == null || hostModals.Count < 1)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置背景音乐" }, JsonRequestBehavior.AllowGet);
}
IList list = new List();
foreach (HostModal modal in hostModals)
{
Music music = new Music
{
Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName),
ModalAddress = modal.Modal.ModalAddress,
Status = modal.Status,
Brightness = modal.Brightness,
Mode = modal.Mode
};
list.Add(music);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomMusicList");
//SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), "获取客房" + roomNumber + "背景音乐信息", true, "api", hotelID);
return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 设置背景音乐
///
///
///
public ActionResult SetRCUMusic(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("SetRCUMusic");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
if (!CheckGetPower(host))
{
return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet);
}
string modalAddress = jData["modalAddress"].ToString();//组地址
var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress);
if (hostModal == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的背景音乐" }, JsonRequestBehavior.AllowGet);
}
int status = 0, brightness = 0, mode = 0;//0表示不变
StringBuilder detail = new StringBuilder();
detail.Append(string.Format("设置客房{0}{1}({2}):", roomNumber, hostModal.Modal.Name, modalAddress));
if (jData["status"] != null)
{
status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关
detail.Append("状态:" + (status == 1 ? "打开," : "关闭,"));
}
if (jData["brightness"] != null)
{
brightness = Convert.ToInt16(jData["brightness"].ToString());//音量:1~10
detail.Append("音量:" + brightness + ",");
}
if (jData["mode"] != null)
{
mode = int.Parse(jData["mode"].ToString());//模式:0自动,1制冷,2制热,3送风
switch (mode)
{
case 2:
detail.Append("模式:" + "暂停");
break;
case 3:
detail.Append("模式:" + "上一曲");
break;
case 4:
detail.Append("模式:" + "下一曲");
break;
case 5:
detail.Append("模式:" + "音量加");
break;
case 6:
detail.Append("模式:" + "音量减");
break;
default:
detail.Append("模式:" + "播放");
break;
}
}
HostModalManager.SetDevice(host, hostModal, status, brightness, 0, 0, mode, 0);
//string detail = string.Format("{0}客房{1}{2}({3})", (status == 1 ? "打开" : (status == 6 ? "停止" : "关闭")), roomNumber, hostModal.Modal.Name, modalAddress);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("CurtainControl"), detail.ToString(), true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCUMusic");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置窗帘失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取房间的服务列表
///
///
/// https://pms.boonlive-rcu.com/api/GetRoomServiceList?jsonData={"creatDate":"2023-11-16","roomNumber":"2206","code":"1762"}
///
///
///
public ActionResult GetRoomServiceList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetRoomServiceList");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
IList hostModals = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.WXActiveIndicator).ToList();
if (hostModals == null || hostModals.Count < 1)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]未配置服务信息" }, JsonRequestBehavior.AllowGet);
}
//logger.Error(string.Format("api获取酒店{0}客房{1}服务列表,来自{2}", jData["code"].ToString(), roomNumber, GetClientIP()));
IList list = new List();
foreach (HostModal modal in hostModals)
{
Light light = new Light
{
Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName),
ModalAddress = modal.Modal.ModalAddress,
Status = modal.Status
};
list.Add(light);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomServiceList");
//SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SetRoomService"), "获取客房" + roomNumber + "服务信息", true, "api", hotelID);
return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取服务失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 设置服务
///
///
///
public ActionResult SetRCUService(string jsonData)
{
try
{
WebApiInvoke_FenXi("SetRCUService");
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
string modalAddress = jData["modalAddress"].ToString();//组地址
if (!modalAddress.StartsWith("020") && !CheckGetPower(host))//微信锁类型过滤
{
return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet);
}
int status = Convert.ToInt16(jData["status"].ToString());//状态:1开,2关
int brightness = status == 1 ? 100 : 0; //Convert.ToInt16(jData["brightness"].ToString());//亮度:0~100
var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress);
if (hostModal == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]无效的服务" }, JsonRequestBehavior.AllowGet);
}
switch (modalAddress)
{
case "004000008"://SOS
case "004000013"://门磁
return Json(new { IsSuccess = false, Result = "该服务(" + modalAddress + ")不可远程控制" }, JsonRequestBehavior.AllowGet);
}
HostModalManager.SetDevice(host, hostModal, status, brightness);
string detail = string.Format("{0}客房{1}{2}({3})服务", (status == 1 ? "打开" : "关闭"), roomNumber, hostModal.Modal.Name, modalAddress);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SetRoomService"), detail, true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetRCUService");
return Json(new { IsSuccess = true, Result = "房号[" + roomNumber + "]操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置服务失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取设备操作记录
///
///
///
public ActionResult GetDeviceOperationLog(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetDeviceOperationLog");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, roomNumber);
if (host == null)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
string modalAddress = jData["modalAddress"].ToString();//组地址
IList result = HostModalRecordManager.LoadByHostID(host.ID, modalAddress);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetDeviceOperationLog");
return Json(new { IsSuccess = true, Result = result }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取设备操作记录失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
///
/// 获取操作记录
///
///
///
public ActionResult GetOperationLog(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetOperationLog");
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
Host host = CheckRoomNumber(jData["code"].ToString(), jData["creatDate"].ToString(), ref msg, ref hotelID, "");
if (host == null && hotelID == 0)
{
return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
string searchDate = "";
if (jData["searchDate"] != null && jData["searchDate"].ToString() != "")
{
searchDate = Convert.ToDateTime(jData["searchDate"].ToString()).ToString("yyyy-MM-dd");
}
IList logs = SysSystemLogsManager.LoadAll().Where(r => r.HotelID == hotelID && r.Account == "api").ToList();
if (!string.IsNullOrEmpty(searchDate))
{
logs = logs.Where(r => Convert.ToDateTime(r.Time).ToString("yyyy-MM-dd") == searchDate).ToList();
}
logs = logs.OrderByDescending(o => o.Time).ToList();
IList