Files
Web_CRICS_Server_VS2010_Prod/WebSite/Controllers/ApiController.cs

6399 lines
287 KiB
C#
Raw Normal View History

2025-12-11 09:17:16 +08:00
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();
}
/// <summary>
/// 验证酒店ID和房号
/// </summary>
/// <param name="code"></param>
/// <param name="creatDate"></param>
/// <param name="roomNumber"></param>
/// <param name="msg"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 如果存在取电服务记录且不是打开状态则返回false不可控制设备除了空调,不存在取电服务,可以控制
/// </summary>
/// <param name="host"></param>
/// <returns></returns>
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<HostModal_Cache>(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给第三方平台对接
/// <summary>
/// 获取主机状态如果指定房号roomNumber参数则提供入住人信息
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<RoomModel> roomModels = new List<RoomModel>();
IList<Host> hosts = null;
string Key = CacheKey.WebAPIGetRCUStatus + "_" + hotelID + "_" + roomNumber;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
{
hosts = obj as IList<Host>;
}
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<bool>(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<bool>(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<HostModal_Cache>(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<HostModal> services = null;
//指定服务信息
string ServicesKey = "Services_" + host.ID;
object ooo = MemoryCacheHelper.Get(ServicesKey);
if (ooo != null)
{
services = ooo as IList<HostModal>;
}
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<HostModal_Cache>(SOSKey);
var hostModal2 = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(DNDKey);
var hostModal3 = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(CleanKey);
var hostModal4 = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(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<HostModal> 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;
}
/// <summary>
/// 打开/关闭rcu
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult SetRCUPower(string jsonData)
{
return Json(new { IsSuccess = false, Result = "接口已停用" }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 打开/关闭rcu授权使用
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<bool>(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<string, string, string, string, string, string>(jsonData, start_time, end_time, code, roomnumber, METHOD_Name);
Task.Factory.StartNew((state) =>
{
var ttt = state as Tuple<string, string, string, string, string, string>;
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);
}
/// <summary>
/// 获取房间的空调列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<HostModal> 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<Air> list = new List<Air>();
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<string>() { jsonData };
SendMQTTData.WebAPI_DataSend<WebAPIMonitorData>(s, mqtt_topic);
}
catch (Exception)
{
}
}
/// <summary>
/// 设置空调
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取房间的场景列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<RoomTypeScene> 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<SceneState> list = new List<SceneState>();
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);
}
}
/// <summary>
/// 设置场景
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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();//场景ID1、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);
}
}
/// <summary>
/// 获取房间的灯光列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<HostModal> 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<HostModal> 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<Light> list = new List<Light>();
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);
}
}
/// <summary>
/// 设置灯光
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取房间的窗帘列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<HostModal> 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<Curtain> list = new List<Curtain>();
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);
}
}
/// <summary>
/// 设置窗帘
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取房间的背景音乐列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<HostModal> 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<Music> list = new List<Music>();
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);
}
}
/// <summary>
/// 设置背景音乐
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取房间的服务列表
///
///
/// https://pms.boonlive-rcu.com/api/GetRoomServiceList?jsonData={"creatDate":"2023-11-16","roomNumber":"2206","code":"1762"}
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<HostModal> 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<Light> list = new List<Light>();
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);
}
}
/// <summary>
/// 设置服务
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取设备操作记录
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<HostModalRecord> 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);
}
}
/// <summary>
/// 获取操作记录
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
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<SysSystemLogs> 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<object> list = new List<object>();
foreach (SysSystemLogs log in logs)
{
list.Add(new
{
Action = log.Action,
Detail = log.Detail,
Result = log.Result,
Account = log.Account,
IP = log.IP,
Time = Convert.ToDateTime(log.Time).ToString("yyyy-MM-dd HH:mm:ss")
});
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetOperationLog");
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);
}
}
/// <summary>
/// 获取空气质量检测数据
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetAirDetectList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetAirDetectList");
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<Light> list = new List<Light>();
var hostModals = HostModalManager.Load(host.ID, DeviceType.AirDetect).Where(r => r.Modal.WXActiveIndicator);
foreach (HostModal modal in hostModals)
{
Light light = new Light
{
Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName),
ModalAddress = modal.Modal.ModalAddress,
Brightness = modal.Brightness
};
list.Add(light);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetAirDetectList");
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 class FaultData
{
public bool RCU_Status { get; set; }
public IEnumerable<object> list { get; set; }
}
/// <summary>
/// 获取主机异常数据
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHostFaultList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetHostFaultList");
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);
}
var hostFault = HostFaultsManager.LoadHostFault(host.ID);
string host_number = host.HostNumber;
string mac = host.MAC;
bool is_online = CSRedisCacheHelper.Contains(host_number, mac);
//roomModel.HostStatus = is_online;//主机状态0离线1在
IList<HostModal> AllDeviceData = null;//RoomServiceManager.LoadCurrentRoomServices(room.HostID);
string Key = "AllDeviceData_" + host.ID.ToString();
object oos = HttpContext.Cache.Get(Key);
if (oos != null)
{
AllDeviceData = oos as IList<HostModal>;
}
else
{
AllDeviceData = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.ActiveIndicator && r.Modal.Abnormal).ToList();//RoomServiceManager.LoadCurrentRoomServices(room.HostID);
}
var list = hostFault.Select((r) =>
{
return new FFFault
{
Name = ReturnNameByLanguage(r[0].ToString(), r[1].ToString(), r[2].ToString()),
Address = r[7].ToString(),
//8
AbnormalStatus = r[8].ToString(),
StatusDate = Convert.ToDateTime(r[9]).Year < 1900 ? "" : Convert.ToDateTime(r[9]).ToString("yyyy-MM-dd HH:mm:ss"),
//10
AbnormalElectricQty = r[10].ToString(),
ElectricQtyDate = Convert.ToDateTime(r[11]).Year < 1900 ? "" : Convert.ToDateTime(r[11]).ToString("yyyy-MM-dd HH:mm:ss"),
// 12
Abnormal3 = (Convert.ToInt16(r[12]) * 10).ToString(),//数据乘以10单位mA
Abnormal3Date = Convert.ToDateTime(r[13]).Year < 1900 ? "" : Convert.ToDateTime(r[13]).ToString("yyyy-MM-dd HH:mm:ss"),
//14
Abnormal4 = r[14].ToString(),
Abnormal4Date = Convert.ToDateTime(r[15]).Year < 1900 ? "" : Convert.ToDateTime(r[15]).ToString("yyyy-MM-dd HH:mm:ss")
};
});
List<FFFault> llist = new List<FFFault>();
foreach (var item1 in AllDeviceData)
{
//如果这个数据在故障表中出现过就代表 他已经出现了故障,就不添加到故障表中
bool bl = list.Any(A => A.Address.Equals(item1.Modal.ModalAddress));
if (!bl)
{
FFFault f = new FFFault();
f.Name = item1.Modal.Name;
f.Address = item1.Modal.ModalAddress;
//离线或者在线
//没有离线所以是0
f.AbnormalStatus = "0";
f.StatusDate = "";
//10
f.AbnormalElectricQty = "";
f.ElectricQtyDate = "";
// 12
f.Abnormal3 = "";//数据乘以10单位mA
f.Abnormal3Date = "";
//14
f.Abnormal4 = "";
f.Abnormal4Date = "";
llist.Add(f);
}
}
llist.AddRange(list);
FaultData d = new FaultData();
d.list = llist;
d.RCU_Status = is_online;
return Json(new { IsSuccess = true, Result = d }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取主机异常数据失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
public class FFFault
{
public string Name;
public string Address;
public string AbnormalStatus;
public string StatusDate;
public string AbnormalElectricQty;
public string ElectricQtyDate;
public string Abnormal3;
public string Abnormal3Date;
public string Abnormal4;
public string Abnormal4Date;
}
/// <summary>
/// 获取房型及其回路数据
/// 宝易软件会用到
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetRoomTypeAndModalsList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
WebApiInvoke_FenXi("GetRoomTypeAndModalsList");
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);
}
//阿宝添加的
//2025-01-02
//修改原因: 添加 是否删除字段条件
IList<RoomType> roomTypes = RoomTypeManager.LoadAll().Where(r => r.HotelID == hotelID && !r.IsDeleted).ToList();
IList<object> list = new List<object>();
foreach (RoomType roomType in roomTypes)
{
IList<object> modalsList = new List<object>();
foreach (RoomTypeModal model in roomType.Modals)
{
if (model.WXActiveIndicator)
{
modalsList.Add(new
{
ID = model.ID,
ModalAddress = model.ModalAddress,
Name = model.Name,
EnglistName = model.EnglishName,
TWName = model.TWName,
TypeName = Common.Tools.GetDescription(model.Type)
});
}
}
list.Add(new
{
ID = roomType.ID,
Code = roomType.Code,
Name = roomType.Name,
Modals = modalsList
});
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetRoomTypeAndModalsList");
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);
}
}
/// <summary>
/// 获取指定酒店信息
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHotelInfo(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
SysHotel sysHotel = SysHotelManager.GetByCode(jData["code"].ToString(), Convert.ToDateTime(jData["creatDate"].ToString()));
if (sysHotel == null)
{
return Json(new { IsSuccess = false, Result = "酒店未知,请核实参数" }, JsonRequestBehavior.AllowGet);
}
IList<object> list = new List<object>();
list.Add(new
{
Code = sysHotel.Code,
Name = sysHotel.Name,
EName = sysHotel.EName,
TWName = sysHotel.TWName,
Contact = sysHotel.Contact,
Phone = sysHotel.Phone,
Address = sysHotel.Address,
TVControlUrl = sysHotel.TVControlUrl,
TVControlToken = sysHotel.TVControlToken,
WelcomeSpeech = sysHotel.WelcomeSpeech,
GoodbyeSpeech = sysHotel.GoodbyeSpeech,
DeviceStatusPushURL = sysHotel.DeviceStatusPushURL,
ValidateDate = sysHotel.ValidateDate,
Remark = sysHotel.Remark
});
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHotelInfo");
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);
}
}
[HttpPost()]
public ActionResult GetHotelIdByCode(string code, string key)
{
if (key.Equals("i_love_blw^_^"))
{
SysHotel sysHotel = SysHotelManager.GetByCode(code);
return Json(new { id = sysHotel.ID, createdDate = sysHotel.CreatedDate, welcomeSpeech = sysHotel.WelcomeSpeech }, JsonRequestBehavior.AllowGet);
}
return Json(new { id = 0 }, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult GetHotelListByCode(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
if (jData["key"].ToString() != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
string code = jData["id"].ToString();
int id = 0;
int.TryParse(code, out id);
var hotel = SysHotelManager.LoadAll().Where(r => r.ID == id && !r.IsDeleted).FirstOrDefault();
string CreatDate = hotel.CreatedDate.ToString("yyyy-MM-dd");
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHotelList");
return Json(new { IsSuccess = true, Result = CreatDate }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取酒店列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "获取酒店列表失败:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取酒店列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHotelList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
if (jData["key"].ToString() != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
var hotels = SysHotelManager.LoadAll().Where(r => !r.IsDeleted).ToList();
IList<object> list = new List<object>();
foreach (SysHotel hotel in hotels)
{
list.Add(new
{
ID = hotel.ID,
Code = hotel.Code,
Name = hotel.Name,
EName = hotel.EName,
TWName = hotel.TWName,
Contact = hotel.Contact,
Phone = hotel.Phone,
Address = hotel.Address,
ValidateDate = hotel.ValidateDate,
CreatDate = hotel.CreatedDate.ToString("yyyy-MM-dd"),
Remark = hotel.Remark,
Status = hotel.Status,
IsApprove = hotel.IsApprove,
SysHotelGroupID = hotel.SysHotelGroup == null ? 0 : hotel.SysHotelGroup.ID,
SysHotelGroupName = hotel.SysHotelGroup == null ? "" : hotel.SysHotelGroup.Name,
});
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHotelList");
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);
}
}
/// <summary>
/// 获取酒店分组列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHotelGroupList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
if (jData["key"].ToString() != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
var hotelGroups = SysHotelGroupManager.LoadAll().Where(r => !r.IsDeleted).ToList();
IList<object> list = new List<object>();
foreach (SysHotelGroup hotelGroup in hotelGroups)
{
list.Add(new
{
ID = hotelGroup.ID,
Name = hotelGroup.Name,
ParentID = hotelGroup.Parent == null ? 0 : hotelGroup.Parent.ID,
ParentName = hotelGroup.Parent == null ? "" : hotelGroup.Parent.Name,
Sort = hotelGroup.Sort
});
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHotelGroupList");
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);
}
}
/// <summary>
/// 获取用户列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetUserList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
if (jData["key"].ToString() != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
var users = SysUserManager.LoadAll().Where(r => !r.IsDeleted).ToList();
IList<object> list = new List<object>();
foreach (SysUsers user in users)
{
list.Add(new
{
ID = user.ID,
HotelID = user.HotelID,
SysHotelGroupID = user.SysHotelGroup == null ? 0 : user.SysHotelGroup.ID,
SysHotelGroupName = user.SysHotelGroup == null ? "" : user.SysHotelGroup.Name,
GroupID = user.Group == null ? 0 : user.Group.ID,
GroupName = user.Group == null ? "" : user.Group.Name,
Account = user.Account,
Password = user.Password,
Password2 = user.Password2,
Name = user.Name,
RoleID = user.Role == null ? 0 : user.Role.ID,
RoleName = user.Role == null ? "" : user.Role.Name,
Sex = user.Sex,
Phone = user.Phone,
Email = user.Email,
ActiveIndicator = user.ActiveIndicator,
CreatedDate = user.CreatedDate.ToString("yyyy-MM-dd HH:mm:ss"),
Sort = user.Sort,
Remark = user.Remark
});
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetUserList");
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);
}
}
/// <summary>
/// 获取主机列表
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHostList(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
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);
}
IList<Host> hosts = HostManager.LoadAll(hotelID).OrderBy(r => r.RoomNumber).ToList();
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHostList");
return Json(new { IsSuccess = true, Result = GetHostList(hosts) }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取主机列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "获取主机列表:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取酒店列表 通过GroupId
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHostListWithGroupId(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
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);
}
string Key = "GetHostListWithGroupId_" + hotelID;
object obj = MemoryCacheHelper.Get(Key);
IList<Host> hosts = null;
if (obj != null)
{
hosts = obj as IList<Host>;
}
else
{
hosts = HostManager.LoadAll(hotelID).OrderBy(r => r.RoomNumber).ToList();
MemoryCacheHelper.Set(Key, hosts);
}
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHostList");
return Json(new { IsSuccess = true, Result = GetHostListNew(hosts) }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取主机列表失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "获取主机列表:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 根据mac获取主机
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHostByMAC(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
if (jData["key"].ToString() != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
if (string.IsNullOrEmpty(jData["mac"].ToString()))
{
return Json(new { IsSuccess = false, Result = "参数mac不能为空" }, JsonRequestBehavior.AllowGet);
}
IList<Host> hosts = HostManager.LoadByMac(jData["mac"].ToString());
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHostByMAC");
return Json(new { IsSuccess = true, Result = GetHostList(hosts) }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("根据mac获取主机失败。参数" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "根据mac获取主机失败" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost()]
public ActionResult GetHostByMAC_POST()
{
try
{
string a = Request.Form["key"].ToString();
//string b = Request.Form["mac"].ToString();
string rm = Request.Form["roomnumber"].ToString();
string hotelcode = Request.Form["hotelcode"].ToString();
if (a != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
if (string.IsNullOrEmpty(hotelcode))
{
return Json(new { IsSuccess = false, Result = "参数hotelcode不能为空" }, JsonRequestBehavior.AllowGet);
}
Host hosts = HostManager.GetByRoomNumber(rm, hotelcode);
var Q = new List<Host>();
Q.Add(hosts);
return Json(new { IsSuccess = true, Result = GetHostList_NEW(Q) }, JsonRequestBehavior.AllowGet);
//return Json(new { IsSuccess = true, Result = hosts }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("根据mac获取主机失败。原因" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "根据mac获取主机失败" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 根据房号和酒店ID获取主机
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHostByRoomNumber(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//Request.InputStream.Position = 0;
//byte[] reqBody = new byte[Request.InputStream.Length];
//Request.InputStream.Read(reqBody, 0, reqBody.Length);
//string reqData = System.Text.Encoding.UTF8.GetString(reqBody);
//if (!string.IsNullOrEmpty(reqData))
//{
// jsonData = reqData;
//}
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
if (jData["key"].ToString() != "blw_ws@2015")
{
return Json(new { IsSuccess = false, Result = "参数key无效" }, JsonRequestBehavior.AllowGet);
}
if (string.IsNullOrEmpty(jData["roomNumber"].ToString()))
{
return Json(new { IsSuccess = false, Result = "参数roomNumber不能为空" }, JsonRequestBehavior.AllowGet);
}
if (string.IsNullOrEmpty(jData["hotelID"].ToString()))
{
return Json(new { IsSuccess = false, Result = "参数hotelID不能为空" }, JsonRequestBehavior.AllowGet);
}
Host host = HostManager.GetByRoomNumber(jData["roomNumber"].ToString(), Convert.ToInt16(jData["hotelID"].ToString()));
IList<Host> hosts = new List<Host>();
hosts.Add(host);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "GetHostByRoomNumber");
return Json(new { IsSuccess = true, Result = GetHostList(hosts) }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("根据房号和酒店ID获取主机失败。参数" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "根据房号和酒店ID获取主机失败" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 转换输出主机列表
/// </summary>
/// <param name="hosts"></param>
/// <returns></returns>
private IList<object> GetHostList(IList<Host> hosts)
{
IList<object> list = new List<object>();
foreach (Host host in hosts)
{
list.Add(new
{
ID = host.ID,
HotelID = host.SysHotel == null ? 0 : host.SysHotel.ID,
HotelName = host.SysHotel == null ? "" : host.SysHotel.Name,
HostNumber = host.HostNumber,
RoomNumber = host.RoomNumber,
Status = host.Status,
RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd"),
RoomStatusID = host.RoomStatus == null ? 0 : host.RoomStatus.ID,
RoomStatusName = host.RoomStatus == null ? "" : host.RoomStatus.Name,
RoomTypeID = host.RoomType == null ? 0 : host.RoomType.ID,
RoomTypeName = host.RoomType == null ? "" : host.RoomType.Name,
MAC = host.MAC,
MACBindDate = host.MACBindDate == null ? "" : Convert.ToDateTime(host.MACBindDate).ToString("yyyy-MM-dd"),
IPType = host.IPType,
IP = host.IP,
SubnetMask = host.SubnetMask,
Gateway = host.Gateway,
DNS = host.DNS,
Port = host.Port,
ServerIP = host.ServerIP,
ServerPort = host.ServerPort,
Remark = host.Remark,
MachineType = host.Model,
ConfigurationVersion = host.ConfigVersion,
Version = host.Version,
LauncherVersion = host.LauncherVersion
});
}
return list;
}
private IList<object> GetHostListNew(IList<Host> hosts)
{
//string DNDKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000002";
//string CleanKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000003";
//string CheckOutKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000006";
IList<object> list = new List<object>();
foreach (Host host in hosts)
{
string SOSKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000008";
var hostModal1 = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(SOSKey);
int status = 0;
if (hostModal1 != null)
{
status = hostModal1.Status;
}
list.Add(new
{
ID = host.ID,
HotelID = host.SysHotel == null ? 0 : host.SysHotel.ID,
GroupId = host.Group.ID,
HotelName = host.SysHotel == null ? "" : host.SysHotel.Name,
HostNumber = host.HostNumber,
RoomNumber = host.RoomNumber,
Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC),
SOS_Status = status,
RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd"),
RoomStatusID = host.RoomStatus == null ? 0 : host.RoomStatus.ID,
RoomStatusName = host.RoomStatus == null ? "" : host.RoomStatus.Name,
RoomTypeID = host.RoomType == null ? 0 : host.RoomType.ID,
RoomTypeName = host.RoomType == null ? "" : host.RoomType.Name,
MAC = host.MAC,
MACBindDate = host.MACBindDate == null ? "" : Convert.ToDateTime(host.MACBindDate).ToString("yyyy-MM-dd"),
IPType = host.IPType,
IP = host.IP,
SubnetMask = host.SubnetMask,
Gateway = host.Gateway,
DNS = host.DNS,
Port = host.Port,
ServerIP = host.ServerIP,
ServerPort = host.ServerPort,
Remark = host.Remark,
MachineType = host.Model,
ConfigurationVersion = host.ConfigVersion,
Version = host.Version,
LauncherVersion = host.LauncherVersion
});
}
return list;
}
private IList<object> GetHostList_NEW(IList<Host> hosts)
{
IList<object> list = new List<object>();
foreach (Host host in hosts)
{
list.Add(new
{
ID = host.ID,
HotelCode = host.SysHotel.Code,
HotelID = host.SysHotel == null ? 0 : host.SysHotel.ID,
HotelName = host.SysHotel == null ? "" : host.SysHotel.Name,
HostNumber = host.HostNumber,
RoomNumber = host.RoomNumber,
Status = host.Status,
RegisterDate = host.RegisterDate.ToString("yyyy-MM-dd"),
RoomStatusID = host.RoomStatus == null ? 0 : host.RoomStatus.ID,
RoomStatusName = host.RoomStatus == null ? "" : host.RoomStatus.Name,
RoomTypeID = host.RoomType == null ? 0 : host.RoomType.ID,
RoomTypeName = host.RoomType == null ? "" : host.RoomType.Name,
MAC = host.MAC,
MACBindDate = host.MACBindDate == null ? "" : Convert.ToDateTime(host.MACBindDate).ToString("yyyy-MM-dd"),
IPType = host.IPType,
IP = host.IP,
SubnetMask = host.SubnetMask,
Gateway = host.Gateway,
DNS = host.DNS,
Port = host.Port,
LanIP = host.LanIP,
LanPort = host.LanPort,
ServerIP = host.ServerIP,
ServerPort = host.ServerPort,
Remark = host.Remark,
TiaoMaoCUID = host.TianMaoCUID,
XiaoDuCUID = host.XiaoDuCUID
});
}
return list;
}
/// <summary>
/// 设置或更新主机mac
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult SetHostMAC(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string roomNumber = jData["roomNumber"].ToString();
string mac = jData["mac"].ToString();
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);
}
Host host = HostManager.GetByRoomNumber(roomNumber, hotelID);
if (host == null)
{
return Json(new { IsSuccess = false, Result = "房号[" + roomNumber + "]不存在" }, JsonRequestBehavior.AllowGet);
}
string detail = string.Format("解绑客房({0})主机MAC", roomNumber);
if (!string.IsNullOrEmpty(mac))
{
IList<Host> hosts = HostManager.LoadByMac(mac);
foreach (Host host2 in hosts)
{
if (host2.ID != host.ID)
{
return Json(new { IsSuccess = false, Result = string.Format("MAC({0})已绑定在酒店({1})客房({2})下。", mac, host2.SysHotel.Name + host2.SysHotel.Code, host2.RoomNumber) }, JsonRequestBehavior.AllowGet);
}
}
detail = string.Format("绑定客房({0})主机MAC({1})", roomNumber, host.MAC);
}
host.MAC = mac;
host.MACBindDate = DateTime.Now;//更新mac绑定时间
HostManager.Update(host);
SaveSystemLog(AuthorityID, "设置主机MAC", detail, true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SetHostMAC");
return Json(new { IsSuccess = true, Result = string.Format("房号[{0}]{1}成功", roomNumber, string.IsNullOrEmpty(mac) ? "解绑MAC" : "绑定MAC") }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("设置主机MAC失败。参数" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "设置主机MAC失败" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 同步房态
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult SyncRoomStatus(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string hotelCode = jData["hotelCode"].ToString();
string roomNumber = jData["roomNumber"].ToString();
Host host = HostManager.GetByRoomNumber(roomNumber, hotelCode);
if (host == null)
{
return Json(new { IsSuccess = false, Result = string.Format("未找到对应主机(roomNumber:{0},hotelCode:{1})", roomNumber, hotelCode) }, JsonRequestBehavior.AllowGet);
}
int roomStatusID = Convert.ToInt16(jData["roomStatusID"]);//设置房态2出租4待租8退房16空房
HostManager.ChangeRoomStatus(host, roomStatusID);
string detail = string.Format("同步客房{0}房态(ID:{1})", roomNumber, roomStatusID);
SaveSystemLog(AuthorityID, "同步房态", detail, true, "api", hotelID);
string end_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
TongJi(jsonData, start_time, end_time, jData, "SyncRoomStatus");
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);
}
}
#endregion
#region
/// <summary>
/// 酒店分布
/// </summary>
/// <returns></returns>
public ActionResult GetHotelsForTCV()
{
ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com");
try
{
IEnumerable<IGrouping<string, SysHotel>> hotelGroup = this.SysHotelManager.LoadAll().GroupBy(r => r.ProvinceCode);
IList<SysProvince> province = SysProvinceManager.LoadAll();
IList<object> list = new List<object>();
foreach (IGrouping<string, SysHotel> item in hotelGroup)
{
if (item.Key != null)
{
list.Add(new
{
x = province.Where(r => r.Code == item.Key).FirstOrDefault().Name,
y = item.Count(),
s = "thermal"
});
}
}
return Json(list, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取酒店分布数据失败:" + ex.ToString() + ",来自:" + GetClientIP());
return Json("获取酒店分布数据失败:" + ex.Message, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取主机总数等
/// </summary>
/// <returns></returns>
public ActionResult GetHostsForTCV()
{
ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com");
try
{
var hosts = HostManager.LoadAll();
int onlineCount = hosts.Where(r => r.Status == true).ToList().Count;
IList<object> list = new List<object>();
list.Add(new { x = "总数", y = hostBaseCount + hosts.Count });
list.Add(new { x = "在线", y = hostBaseCount + onlineCount });
list.Add(new { x = "离线", y = hosts.Count - onlineCount });
return Json(list, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取主机数据失败:" + ex.ToString() + ",来自:" + GetClientIP());
return Json("获取主机数据失败:" + ex.Message, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 根据状态获取酒店
/// </summary>
/// <param name="status">酒店状态0正式运营1批量安装2样板间</param>
/// <param name="row"></param>
/// <returns></returns>
public ActionResult GetHotelsByStatusForTCV(int status, int row)
{
ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com");
try
{
var hotels = this.SysHotelManager.LoadAll().Where(r => r.Status == status).Take(row).ToList();
IList<object> list = new List<object>();
foreach (SysHotel hotel in hotels)
{
list.Add(new
{
key1 = hotel.Code,
value1 = hotel.Name
});
}
return Json(list, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取酒店数据失败:" + ex.ToString() + ",来自:" + GetClientIP());
return Json("获取酒店数据失败:" + ex.Message, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取存在异常主机
/// 红外检测逻辑取电后房间红外5个小时内没触发判断了红外坏
/// 门磁检查逻辑:房间取电后没有门磁开关信息判断门磁坏
/// 房间误取电判断:房间两天一直取电不断电判断房间取电不正常
/// </summary>
/// <returns></returns>
public ActionResult GetAbnormalHostsForTCV()
{
ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com");
try
{
DataSet dsResult = OverviewManager.LoadHostAbnormalRecordsAll(0);
IList<object> list = new List<object>();
foreach (DataRow dr in dsResult.Tables[0].Rows)
{
list.Add(new
{
key1 = dr["Code"].ToString() + dr["Name"].ToString(),
value1 = dr["RoomNumber"].ToString(),
value2 = dr["AbnormalName"].ToString()
});
}
return Json(list, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取异常主机数据失败:" + ex.ToString() + ",来自:" + GetClientIP());
return Json("获取异常主机数据失败:" + ex.Message, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 到期提醒
/// </summary>
/// <returns></returns>
public ActionResult GetExpireHotelsForTCV(int row)
{
ControllerContext.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "https://boonlive-rcu.com");
try
{
var hotels = this.SysHotelManager.LoadAll().Where(r => r.ValidateDate < DateTime.Now.AddMonths(1)).OrderBy(r => r.ValidateDate).Take(row).ToList();
IList<object> list = new List<object>();
foreach (SysHotel hotel in hotels)
{
list.Add(new
{
key1 = hotel.Code + hotel.Name,
value1 = hotel.ValidateDate.ToString("yyyy年M月d日")
});
}
return Json(list, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("获取酒店到期提醒数据失败:" + ex.ToString() + ",来自:" + GetClientIP());
return Json("获取酒店到期提醒数据失败:" + ex.Message, JsonRequestBehavior.AllowGet);
}
}
#endregion
#region
/// <summary>
/// 微信小程序获取手机号后台第一步获取session_key
/// </summary>
/// <param name="code"></param>
/// <param name="appid"></param>
/// <param name="secret"></param>
/// <returns></returns>
public ActionResult GetSessionKey(string jsonData)
{
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string code = jData["code"].ToString();
string appid = jData["appid"].ToString();
string secret = jData["secret"].ToString();
string html = string.Empty;
string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse;
System.IO.Stream ioStream = response.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(ioStream, Encoding.UTF8);
html = sr.ReadToEnd();
sr.Close();
ioStream.Close();
response.Close();
JObject jResult = (JObject)JsonConvert.DeserializeObject(html);
return Json(new { IsSuccess = (jResult["errcode"] == null ? true : false), Result = html }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("小程序获取session_key失败" + ex.ToString() + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 微信小程序获取手机号后台:第二步解释手机号
/// </summary>
/// <param name="encryptedData"></param>
/// <param name="iv"></param>
/// <param name="session_key"></param>
/// <returns></returns>
public ActionResult GetPhoneNumber(string jsonData)
{
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string encryptedData = jData["encrypted_data"].ToString();
string iv = jData["iv"].ToString();
string session_key = jData["session_key"].ToString();
byte[] encryData = Convert.FromBase64String(encryptedData);
System.Security.Cryptography.RijndaelManaged rijndaelCipher = new System.Security.Cryptography.RijndaelManaged();
rijndaelCipher.Key = Convert.FromBase64String(session_key);
rijndaelCipher.IV = Convert.FromBase64String(iv);
rijndaelCipher.Mode = System.Security.Cryptography.CipherMode.CBC;
rijndaelCipher.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
System.Security.Cryptography.ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length);
string result = Encoding.Default.GetString(plainText);
dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic;
if (jData["is_gethotelinfo"] == null || !Convert.ToBoolean(jData["is_gethotelinfo"].ToString()))
{
return Json(new { IsSuccess = true, Result = model.phoneNumber }, JsonRequestBehavior.AllowGet);
}
else
{
return GetHotelInfoForWX("{'phone':'" + model.phoneNumber + "'}");
}
}
catch (Exception ex)
{
logger.Error("小程序获取手机号失败:" + ex.ToString() + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 通过开房手机号获取对应酒店信息
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult GetHotelInfoForWX(string jsonData)
{
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string phone = jData["phone"].ToString();
if (string.IsNullOrEmpty(phone))
{
return Json(new { IsSuccess = false, Result = "手机号不能为空!" }, JsonRequestBehavior.AllowGet);
}
DataTable dtRecord = null;
using (syncstatus.syncstatusSoapClient wsClient = new syncstatus.syncstatusSoapClient())
{
dtRecord = wsClient.GetCodeAndRoomNumberByPhone(phone);
if (dtRecord == null || dtRecord.Rows.Count == 0)
{
return Json(new { IsSuccess = false, Result = string.Format("该手机号[{0}]未找到当前开房记录!", phone) }, JsonRequestBehavior.AllowGet);
}
string code = dtRecord.Rows[0]["Code"].ToString();
string roomNumber = dtRecord.Rows[0]["RoomNumber"].ToString();
SysHotel sysHotel = SysHotelManager.GetByCode(code);
if (sysHotel == null)
{
return Json(new { IsSuccess = false, Result = string.Format("酒店未知,或属于本地部署酒店[code={0}]", code) }, JsonRequestBehavior.AllowGet);
}
IList<object> list = new List<object>();
list.Add(new
{
code = sysHotel.Code,
creatDate = sysHotel.CreatedDate,
roomNumber = roomNumber,
phone = phone
});
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);
}
}
#endregion
#region 绿Opera pms对接
/// <summary>
/// 按照绿云Opera PMS文档设计
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult OperaPMSToRCU()
{
Request.InputStream.Position = 0;
byte[] reqBody = new byte[Request.InputStream.Length];
Request.InputStream.Read(reqBody, 0, reqBody.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(reqBody);
//logger.Error("收到Opera数据" + jsonData);
try
{
OperaPMSRequest request = JsonConvert.DeserializeObject<OperaPMSRequest>(jsonData);//得到PMS请求ohotel中集团代码57173G酒店代码57173
string hotelCode;
switch (request.hotelCode.ToUpper())
{
case "57173":
hotelCode = "1161";
break;
case "YW-DEV":
hotelCode = "1473";
break;
default:
hotelCode = request.hotelCode;
break;
}
SysHotel hotel = SysHotelManager.GetByCode(hotelCode);
if (hotel == null)
{
return Json(new { rescode = "0", resDesc = "无效酒店代码:" + request.hotelCode }, JsonRequestBehavior.AllowGet);
}
Host host = HostManager.GetByRoomNumber(request.rmno, hotel.ID);
if (host == null)
{
return Json(new { rescode = "0", resDesc = "无效房号:" + request.rmno }, JsonRequestBehavior.AllowGet);
}
if (request.bizType == null)
{
return Json(new { rescode = "0", resDesc = "bizType不能为空" }, JsonRequestBehavior.AllowGet);
}
string validate = "8888";//微信验证码,默认身份证后四位
if (request.idNo != null && request.idNo.Length > 4)
{
validate = request.idNo.Substring(request.idNo.Length - 4);
}
switch (request.bizType.ToUpper())
{
case "CHECKIN":
HostManager.ChangeRoomStatus(host, 2, validate);//2出租4待租8退房16空房
break;
case "CHECKOUT":
HostManager.ChangeRoomStatus(host, 8);
break;
case "RMCHG"://换房:先退房,再开房
Host hostOld = HostManager.GetByRoomNumber(request.oldRmno, hotel.ID);
if (hostOld == null)
{
return Json(new { rescode = "0", resDesc = "无效旧房号:" + request.oldRmno }, JsonRequestBehavior.AllowGet);
}
HostManager.ChangeRoomStatus(hostOld, 8);
HostManager.ChangeRoomStatus(host, 2, validate);
break;
default:
HostManager.ChangeRoomStatus(host, 4);//待租
break;
}
SaveSystemLog(AuthorityID, request.bizType, request.rmno, true, "api", hotel.ID);
return Json(new { rescode = "200", resDesc = "操作成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("Opera PMS对接RCU失败。参数" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { rescode = "0", resDesc = "接口处理异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 绿云Opera pms对接
/// </summary>
public class OperaPMSRequest
{
/// <summary>
///
/// </summary>
public DateTime arr { get; set; }
/// <summary>
/// 业务点 CHECKIN入住多人CHECKOUT退房多人RMCHG换房一人MASTERCHG:主单信息修改默认只发送续住GUESTCHG:客人档案修改(默认只在客人姓名、手机号修改时触发发送)
/// 注CHECK-OUT时处理整个房间退房需要判断是否有同住人在住
/// </summary>
public string bizType { get; set; }
/// <summary>
///
/// </summary>
public DateTime dep { get; set; }
/// <summary>
///
/// </summary>
public List<string> extras { get; set; }
/// <summary>
///
/// </summary>
public string firstName { get; set; }
/// <summary>
///
/// </summary>
public string hotelCode { get; set; }
/// <summary>
///
/// </summary>
public string hotelGroupCode { get; set; }
/// <summary>
///
/// </summary>
public string language { get; set; }
/// <summary>
///
/// </summary>
public string lastName { get; set; }
/// <summary>
///
/// </summary>
public string masterId { get; set; }
/// <summary>
///
/// </summary>
public string name { get; set; }
/// <summary>
///
/// </summary>
public string profileNum { get; set; }
/// <summary>
///
/// </summary>
public string rmno { get; set; }
/// <summary>
/// 原房号 换房RMCHG的时候才可选择进行发送
/// </summary>
public string oldRmno { get; set; }
/// <summary>
///
/// </summary>
public bool share { get; set; }
/// <summary>
///
/// </summary>
public string workstationId { get; set; }
/// <summary>
/// 证件号
/// </summary>
public string idNo { get; set; }
///// <summary>
///// oHotel中集团代码
///// </summary>
//public string hotelGroupCode { get; set; }
///// <summary>
///// 集团名称
///// </summary>
////public string hotelGroupDescript { get; set; }
///// <summary>
///// oHotel中酒店代码必需和Opera一致
///// </summary>
//public string hotelCode { get; set; }
///// <summary>
///// 酒店名称
///// </summary>
////public string hotelDescript { get; set; }
///// <summary>
///// 酒店ID同一集团下酒店唯一
///// </summary>
////public long hotelId { get; set; }
///// <summary>
///// 客人ID同一酒店下唯一。客人每次入住都会产生一个唯一标识后面续住MASTERCHG退房CHECKOUT换房RMCHG修改信息GUESTCHG这个masterId都是不会变的.Opera订单号resrvNameId
///// </summary>
//public long masterId { get; set; }
///// <summary>
///// 同住人标识同住客人的Identifier是一致的如果Identifier不一致即使前后房号一致也不认为是同住客人。
///// </summary>
////public long Identifier { get; set; }
///// <summary>
///// 团队标识 默认为0标识非团队客人
///// </summary>
////public long grpAccnt { get; set; }
///// <summary>
///// 联房标识 相同联房标识的,认为是同行客人
///// </summary>
////public long linkId { get; set; }
///// <summary>
///// 业务点 CHECKIN入住多人CHECKOUT退房多人RMCHG换房一人MASTERCHG:主单信息修改默认只发送续住GUESTCHG:客人档案修改(默认只在客人姓名、手机号修改时触发发送)
///// 注CHECK-OUT时处理整个房间退房需要判断是否有同住人在住
///// </summary>
//public string bizType { get; set; }
///// <summary>
///// 全名
///// </summary>
//public string name { get; set; }
///// <summary>
///// 抵店时间 格式yyyy-MM-dd HH:mm:ss
///// </summary>
//public string arr { get; set; }
///// <summary>
///// 离店时间 格式yyyy-MM-dd HH:mm:ss
///// </summary>
//public string dep { get; set; }
///// <summary>
///// 房号 换房操作时,作为新房号使用
///// </summary>
//public string rmno { get; set; }
///// <summary>
///// 手机号 客人隐私,经过酒店同意才开放
///// </summary>
//public string mobile { get; set; }
///// <summary>
///// 订单类型(不使用此字段)
///// </summary>
//public string rsvClass { get; set; }
///// <summary>
///// 名(英文/拼音)
///// </summary>
//public string firstName { get; set; }
///// <summary>
///// 姓(英文/拼音)
///// </summary>
//public string lastName { get; set; }
///// <summary>
///// 语种 未做特殊修改情况下C 中文E 英语F 法文G 德文J 日语K 韩文
///// </summary>
//public string language { get; set; }
///// <summary>
///// 性别 1男/2女
///// </summary>
////public string sex { get; set; }
///// <summary>
///// VIP信息Opera中数据未作变换
///// </summary>
//public string vipStatus { get; set; }
///// <summary>
///// 额外字段最多10项字符串列表形式DefRef1-DefRef10
///// </summary>
//public List<string> extras { get; set; }
/// <summary>
/// 证件类型 未做特殊修改情况下01身份证02临时身份证14普通护照列举3类常用如需要不常用证件类型可联系绿云项目经理提供
/// </summary>
//public string idCode { get; set; }
/// <summary>
/// 邮箱 客人隐私,经过酒店同意才开放
/// </summary>
//public string email { get; set; }
/// <summary>
/// 帐户类别 F=散客 G=团队 H=消费帐户
/// </summary>
//public string rsvClass { get; set; }
/// <summary>
/// 预订人姓名
/// </summary>
//public string rsvMan { get; set; }
/// <summary>
/// CRS订单号
/// </summary>
//public string crsNo { get; set; }
/// <summary>
/// 手工单号
/// </summary>
//public string rsvNo { get; set; }
/// <summary>
/// 房价 酒店隐私,经过酒店同意才开放
/// </summary>
//public decimal realRate { get; set; }
/// <summary>
/// 业务发生时间 格式yyyy-MM-dd'T'HH:mm:ssZ
/// </summary>
//public string date { get; set; }
/// <summary>
/// 消费金额 退房CHECKOUT的时候才可选择进行发送
/// </summary>
//public decimal pay { get; set; }
}
#endregion
#region
/// <summary>
/// 若琪对接
/// </summary>
/// <returns></returns>
public ActionResult RokidV2()
{
Request.InputStream.Position = 0;
byte[] reqBody = new byte[Request.InputStream.Length];
Request.InputStream.Read(reqBody, 0, reqBody.Length);
string reqData = System.Text.Encoding.Default.GetString(reqBody);
try
{
Domain.Rokid.Request.RootRequest request = JsonConvert.DeserializeObject<Domain.Rokid.Request.RootRequest>(reqData);
string token = request.header.authorization.token;
if (string.IsNullOrEmpty(token))
{
return Json(returnError("token不能为空"), JsonRequestBehavior.AllowGet);
}
string hotelCode = token;//.Substring(0, token.IndexOf("BLW"));
if (token.IndexOf("BLW") > -1)
{
hotelCode = token.Substring(0, token.IndexOf("BLW"));
}
SysHotel hotel = SysHotelManager.GetByCode(hotelCode);//根据酒店编码获取酒店
if (hotel == null)
{
logger.Error("获取指定酒店失败(" + hotelCode + ")");
return Json(returnError("获取指定酒店失败(" + hotelCode + ")"), JsonRequestBehavior.AllowGet);
}
if (DateTime.Now > hotel.ValidateDate)//酒店已到期
{
return Json(returnError("当前访问酒店已过期"), JsonRequestBehavior.AllowGet);
}
switch (request.header.@namespace)
{
case "Rokid.Discovery":
{
IList<Host> hosts = HostManager.LoadAll(hotel.ID).Where(r => r.Status == true).ToList();
List<Domain.Rokid.Discovery.Endpoints> endpoints = new List<Domain.Rokid.Discovery.Endpoints>();
foreach (Host host in hosts)
{
//获取需要控制的场景
IList<RoomTypeScene> sceneModals = RoomTypeSceneManager.LoadAll().Where(r => r.RoomType.ID == host.RoomType.ID && r.ActiveIndicator).OrderBy(r => r.Sort).ToList();
foreach (RoomTypeScene scene in sceneModals)
{
endpoints.Add(new Domain.Rokid.Discovery.Endpoints
{
endpointId = host.ID.ToString() + "&" + scene.ID.ToString(),
displayType = "scene",
displayName = scene.Name,
recommendRoomName = host.RoomNumber,
recommendHomeName = hotel.Name + "(" + host.RoomNumber + ")",
modelId = "",
additionalInfo = new Domain.Rokid.Discovery.AdditionalInfo { key = "scene" },
capabilities = Domain.Rokid.Discovery.CustomerCapabilities.SwitchCapabilities(),
states = new List<Domain.Rokid.Discovery.States> { new Domain.Rokid.Discovery.States { @interface = "Switch", value = "Off", timeOfSample = DateTime.Now.ToString() } }
});
}
//获取需要控制的设备信息
IList<HostModal> hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.WXActiveIndicator).OrderBy(r => r.Modal.Type).ToList();
foreach (HostModal hostModal in hostModals)
{
string displayType = "light";//区分设备种类
List<Domain.Rokid.Discovery.Capabilities> capabilities = Domain.Rokid.Discovery.CustomerCapabilities.SwitchCapabilities();
switch (hostModal.Modal.Type)
{
case DeviceType.Dimmer:
case DeviceType.Traic:
case DeviceType.Strip:
case DeviceType.PWMDimmer:
case DeviceType.PWMExpand:
case DeviceType.PBLED:
case DeviceType.LVout://弱电输出
case DeviceType.PB20:
case DeviceType.PB20_LD:
case DeviceType.PB20_LS:
capabilities = Domain.Rokid.Discovery.CustomerCapabilities.BrightnessCapabilities();
break;
case DeviceType.AirConditioner:
//displayType = "ac";
capabilities = Domain.Rokid.Discovery.CustomerCapabilities.AirCapabilities();
break;
case DeviceType.Curtain:
//displayType = "curtain";
capabilities = Domain.Rokid.Discovery.CustomerCapabilities.MotionSwitchCapabilities();
break;
}
endpoints.Add(new Domain.Rokid.Discovery.Endpoints
{
endpointId = host.ID.ToString() + "&" + hostModal.Modal.ModalAddress,
displayType = displayType,
displayName = hostModal.Modal.Name,
recommendRoomName = host.RoomNumber,
recommendHomeName = hotel.Name + "(" + host.RoomNumber + ")",
modelId = "",
additionalInfo = new Domain.Rokid.Discovery.AdditionalInfo { key = displayType },
capabilities = capabilities,
states = new List<Domain.Rokid.Discovery.States> { new Domain.Rokid.Discovery.States { @interface = "Switch", value = hostModal.Status == 1 ? "On" : "Off", timeOfSample = DateTime.Now.ToString() } }
});
}
}
Domain.Rokid.Discovery.DiscoveryResponse dis = new Domain.Rokid.Discovery.DiscoveryResponse
{
header = new Domain.Rokid.Discovery.Header
{
messageId = request.header.messageId,
@namespace = "Rokid",
name = "DiscoveryResponse",
payloadVersion = "v1"
},
payload = new Domain.Rokid.Discovery.Payload { endpoints = endpoints }
};
logger.Error(string.Format("若琪(酒店:{0})本次获取设备数量:{1}", hotel.Code + hotel.Name, dis.payload.endpoints.Count.ToString()));
return new ContentResult
{
Content = new System.Web.Script.Serialization.JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(dis),
ContentType = "application/json"
};
}
default:
{
string endpointId = request.endpoint.endpointId;
int hostID = Convert.ToInt32(endpointId.Split('&')[0]);
Host host = HostManager.Get(hostID);
if (host == null)
{
return Json(returnError("无效的主机,ID=" + hostID.ToString()), JsonRequestBehavior.AllowGet);
}
if (!Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC))
{
return Json(returnError("房号[" + host.RoomNumber + "]网络异常"), JsonRequestBehavior.AllowGet);
}
if (!CheckGetPower(host))
{
return Json(returnError("房号[" + host.RoomNumber + "]非取电状态,不可控制!"), JsonRequestBehavior.AllowGet);//非取电状态,不可控制!
}
string modalAddress = endpointId.Split('&')[1];
string key = request.endpoint.additionalInfo.key;//区分设备种类
string name = request.header.name;
List<RoomTypeWXMenus> wxMenus = RoomTypeWXMenusManager.LoadAll(host.RoomType.ID).Where(r => r.ActiveIndicator == true).ToList();
//var takePowerModal = HostModalManager.GetByModalAddress(host.ID, "004000001");
switch (key)
{
case "scene"://场景类
//foreach (RoomTypeWXMenus wxMenu in wxMenus)
//{
// if (wxMenu.Code == "changjing" && wxMenu.TakePower)
// {
// if (takePowerModal.Status != 1)
// {
// return Json(returnError("房号[" + host.RoomNumber + "]的取电未打开,不可控制"), JsonRequestBehavior.AllowGet);
// }
// break;
// }
//}
//var wxMenu = RoomTypeWXMenusManager.LoadAll(host.RoomType.ID).Where(r => r.Code == "changjing" && r.ActiveIndicator == true).FirstOrDefault();
//if (wxMenu == null)
//{
// return Json(returnError("房号[" + host.RoomNumber + "]的场景不能控制"), JsonRequestBehavior.AllowGet);
//}
//else if (wxMenu.TakePower)
//{
// var takePowerModal = HostModalManager.Load(host.ID, DeviceType.ServiceInfo).Where(r => r.Modal.ModalAddress == "004000001").FirstOrDefault();
// if (takePowerModal.Status != 1)
// {
// return Json(returnError("房号[" + host.RoomNumber + "]的取电未打开,不可控制"), JsonRequestBehavior.AllowGet);
// }
//}
if (!CheckGetPower(host))
{
return Json(new { IsSuccess = false, Result = "非取电状态,不可控制!" }, JsonRequestBehavior.AllowGet);
}
var scene = RoomTypeSceneManager.Get(int.Parse(modalAddress));
if (scene == null)
{
return Json(returnError("房号[" + host.RoomNumber + "]无效的场景,ID=" + modalAddress), JsonRequestBehavior.AllowGet);
}
LightControlManager.ApplyScene(host, scene);
SaveSystemLog(AuthorityID, HttpContext.InnerLanguage("SceneControl"), string.Format("打开客房({0})场景:{1}ID{2}", host.RoomNumber, scene.Name, scene.ID), true, "若琪", host.SysHotel.ID);
break;
default:
var hostModal = HostModalManager.GetByModalAddress(host.ID, modalAddress);
if (hostModal == null)
{
return Json(returnError("房号[" + host.RoomNumber + "]无效的设备,ModalAddress=" + modalAddress), JsonRequestBehavior.AllowGet);
}
int status, brightness, temperature, fanSpeed, mode, valve;
status = 1;
brightness = hostModal.Brightness;
temperature = hostModal.SettingTemp;
fanSpeed = hostModal.FanSpeed;
mode = hostModal.Mode;
valve = hostModal.Valve;
switch (name)
{
case "Switch.On"://打开亮度100
case "Brightness.SetMax":
brightness = 100;
break;
case "Switch.Off"://关闭亮度0
status = 2;
brightness = 0;
break;
case "Brightness.SetMin"://最小亮度
brightness = 1;
break;
case "Brightness.Set"://设定亮度
brightness = Convert.ToInt16(request.payload.value);
break;
case "Brightness.Adjust"://调节亮度
if (request.payload.delta == -1)
{
brightness++;//下调
}
else
{
brightness--;//上调
}
break;
case "MotionSwitch.Off"://窗帘停下
status = 6;
break;
case "Temperature.Set"://设定温度
int value = Convert.ToInt16(request.payload.value);
if (15 < value && value < 33)
{
temperature = value;
}
break;
case "Temperature.SetMax"://设定最大温度
temperature = 32;
break;
case "Temperature.SetMin"://设定最小温度
temperature = 16;
break;
case "Temperature.Adjust"://调节温度
if (request.payload.delta == -1)
{
temperature = 15;//下调
}
else
{
temperature = 33;//上调
}
break;
case "FanSpeed.Set"://自动风速
fanSpeed = 0;
break;
case "FanSpeed.SetMin"://低风速
fanSpeed = 1;
break;
case "FanSpeed.Adjust"://中风速
fanSpeed = 2;
break;
case "FanSpeed.SetMax"://高风速
fanSpeed = 3;
break;
case "Mode.Auto"://自动模式
mode = 0;
break;
case "Mode.Cool"://制冷模式
mode = 1;
break;
case "Mode.Heat"://制热模式
mode = 2;
break;
case "Mode.Fan"://送风模式
mode = 3;
break;
}
HostModalManager.SetDevice(host, hostModal, status, brightness, temperature, fanSpeed, mode, valve);
string action = "打开";
if (status == 2)
{
action = "关闭";
}
else if (status == 6)
{
action = "暂停";
}
string detail = string.Format("{0}客房{1}{2}({3})", action, host.RoomNumber, hostModal.Modal.Name, modalAddress);
SaveSystemLog(AuthorityID, "设备控制", detail, true, "若琪", host.SysHotel.ID);
break;
}
//回应状态
Domain.Rokid.Control.ControlResponse con = new Domain.Rokid.Control.ControlResponse
{
header = new Domain.Rokid.Control.Header
{
messageId = request.header.messageId,
@namespace = "Rokid",
name = "Response",
payloadVersion = "v1"
},
endpoint = new Domain.Rokid.Control.Endpoint
{
endpointId = endpointId,
states = new List<Domain.Rokid.Control.States>()
},
payload = new Domain.Rokid.Control.Payload { }
};
return Json(con, JsonRequestBehavior.AllowGet);
}
}
}
catch (Exception ex)
{
logger.Error(string.Format("RequestData:{0},error:{1},来自:{2}", reqData, ex.ToString(), GetClientIP()));
return Json(returnError(ex.Message), JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 给若琪返回错误信息
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
private Domain.Rokid.Error.ErrorResponse returnError(string message)
{
Domain.Rokid.Error.ErrorResponse err = new Domain.Rokid.Error.ErrorResponse
{
header = new Domain.Rokid.Error.Header
{
messageId = "789-123",
@namespace = "Rokid",
name = "ErrorResponse",
payloadVersion = "v1"
},
payload = new Domain.Rokid.Error.Payload
{
name = "E_DRIVER_ERROR",
message = message
}
};
return err;
}
#endregion
#region PDU平台调用
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult GetRCUInfoForPDU(string jsonData)
{
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);
}
string roomNumber = "";
if (jData["roomNumber"] != null)
{
roomNumber = jData["roomNumber"].ToString();
}
IList<Host> hosts = HostManager.LoadAll(hotelID, roomNumber).OrderBy(r => r.RoomNumber).ToList();
IList<object> list = new List<object>();
foreach (Host host in hosts)
{
IList<HostModal> hostModals = HostModalManager.LoadByHostID(host.ID).Where(r => r.Modal.ActiveIndicator).ToList();
IList<object> lstModals = new List<object>();
foreach (HostModal modal in hostModals)
{
lstModals.Add(new
{
Type = Common.Tools.GetDescription(modal.Modal.Type), //回路类型
ModalAddress = modal.Modal.ModalAddress, //回路地址
Name = modal.Modal.Name//回路名称
});
}
list.Add(new
{
Code = host.SysHotel.Code,//酒店编码
HotelName = host.SysHotel.Name,
HostNumber = host.HostNumber,
RoomNumber = host.RoomNumber,//房号
Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC),//是否在线
MAC = host.MAC,//MAC
GroupName = host.Group.Name,
RoomTypeName = host.RoomType.Name,//房态
//IPType = host.IPType,//IP类型1自动2手动
//IP = host.IP,//IP
//Port = host.Port,//端口
LanIP = host.LanIP,//局域网IP
LanPort = host.LanPort,//局域网端口
SubnetMask = host.SubnetMask,//子网掩码
Gateway = host.Gateway,//网关
DNS = host.DNS,//DNS
Version = host.Version,//固件版本
ConfigVersion = host.ConfigVersion,//配置版本
Model = host.Model,//Model
Launcher = host.LauncherVersion,//Launcher版本
XiaoDuCUID = host.XiaoDuCUID,//小度cuid
TianMaoCUID = host.TianMaoCUID,//天猫精灵cuid
TCLCUID = host.TCLCUID,//tcl cuid
Modals = lstModals//回路列表(类型、地址、名称)
});
}
//return Json(new { IsSuccess = true, Result = list }, JsonRequestBehavior.AllowGet);
object result = new { IsSuccess = true, Result = list };
return new ContentResult
{
Content = new System.Web.Script.Serialization.JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(result),
ContentType = "application/json"
};
}
catch (Exception ex)
{
logger.Error("获取主机状态失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
#endregion
/// <summary>
/// 通知后台有新的升级包
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult PublishUpgradePackage(string jsonData)
{
return Json(new { IsSuccess = true, Result = "接口调整中" }, JsonRequestBehavior.AllowGet);
/*try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
int roomTypeID = Convert.ToInt16(jData["roomTypeID"].ToString());//房型ID
int type = Convert.ToInt16(jData["type"].ToString());//1固件升级bin或hex2配置升级dat
string version = jData["version"].ToString();//版本号
logger.Error("收到通知后台有新的升级包:" + jsonData);
return Json(new { IsSuccess = true, Result = "通知成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("通知后台有新的升级包失败。参数:" + jsonData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}*/
}
/// <summary>
/// 上报房型回路:每次上报一个房型
/// </summary>
/// <param name="jsonData"></param>
/// <returns></returns>
public ActionResult UploadRoomTypeModal()
{
//return Json(new { IsSuccess = true, Result = "接口调整中" }, JsonRequestBehavior.AllowGet);
Request.InputStream.Position = 0;
byte[] reqBody = new byte[Request.InputStream.Length];
Request.InputStream.Read(reqBody, 0, reqBody.Length);
string reqData = System.Text.Encoding.UTF8.GetString(reqBody);
if (string.IsNullOrEmpty(reqData))
{
return Json(new { IsSuccess = false, Result = "传递参数不能为空" }, JsonRequestBehavior.AllowGet);
}
logger.Error("收到上报房型回路数据:");// + reqData);
try
{
List<RoomTypeModal> lstRTModels = JsonConvert.DeserializeObject<List<RoomTypeModal>>(reqData);
if (lstRTModels == null || lstRTModels.Count == 0)
{
return Json(new { IsSuccess = false, Result = "上报回路记录为空" }, JsonRequestBehavior.AllowGet);
}
/*int roomTypeID = lstRTModels[0].RoomType.ID;
RoomType rt = RoomTypeManager.Get(roomTypeID);//获取当前房型
if (rt == null)
{
return Json(new { IsSuccess = false, Result = "未找到对应的房型ID=" + roomTypeID }, JsonRequestBehavior.AllowGet);
}
RoomTypeModalManager.DeleteByRoomTypeID(rt.ID, 1);//先删除该房型下所有宝易上传的回路
foreach (RoomTypeModal rtModal in lstRTModels)
{
var roomTypeModal = new RoomTypeModal();
roomTypeModal.RoomType = rt;//房型对象提供房型ID即可
roomTypeModal.ModalAddress = rtModal.ModalAddress;//回路地址
roomTypeModal.Name = rtModal.Name;//回路名称
roomTypeModal.Type = rtModal.Type;//回路类型
roomTypeModal.Outlet = rtModal.Outlet;//输出口
//roomTypeModal.EnglishName = rtModal.EnglishName;//英文名称
//roomTypeModal.TWName = rtModal.TWName;//繁体名称
roomTypeModal.Power = rtModal.Power;//功率
roomTypeModal.Default = false;
roomTypeModal.Subtype = null;
roomTypeModal.Sort = 1;
roomTypeModal.Color = "";
roomTypeModal.ActiveIndicator = true;//新增时默认显示
roomTypeModal.WXActiveIndicator = true;//只要显示,微信默认允许控制
roomTypeModal.SourceType = 1;//宝易上传
RoomTypeModalManager.Save(roomTypeModal);//新增房型下单个回路
}*/
return Json(new { IsSuccess = true, Result = "上报成功,总回路数:" + lstRTModels.Count }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("上报房型回路失败。参数:" + reqData + ",原因:" + ex + ",来自:" + GetClientIP());
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
public ActionResult GetAllKTMission()
{
List<KongTiaoTimer> kl = HostManager.GetInitializeKTMission();
return Json(kl, JsonRequestBehavior.AllowGet);
}
public ActionResult AirConditionTimer(string jsonData)
{
logger.Error("shou dao le shu ju: " + jsonData);
if (!string.IsNullOrEmpty(jsonData))
{
var jf = Newtonsoft.Json.JsonConvert.DeserializeObject<MissionRequestData>(jsonData);
HostManager.AirConditionTimer_Controller(jf.KT.HotelID, jf.KT.HotelCode, jf.KT.CreateDate, jf.KT.HostID, jf.KT.RoomNo, jf.KT);
}
return null;
}
/// <summary>
/// 这个接口可以实现定时任务
/// 调用任务管理器
/// 传入以下json 或者 formdata
/// %{"url"=>url,"mission_key" => mission_key,"mission_name"=>mission_name,"cron_exp"=>cron_exp}
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult AirConditionTimerPost()
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
//req = Server.UrlDecode(req);
logger.Error("shou dao le shu ju: " + jsonData);
if (!string.IsNullOrEmpty(jsonData))
{
var jf = Newtonsoft.Json.JsonConvert.DeserializeObject<MissionRequestData>(jsonData);
HostManager.AirConditionTimer_Controller(jf.KT.HotelID, jf.KT.HotelCode, jf.KT.CreateDate, jf.KT.HostID, jf.KT.RoomNo, jf.KT);
}
return null;
}
public ActionResult jiekou_test()
{
HttpContext.Cache.Remove("auuuuhfjkdshee");
HostManager.LoggerTest();//2出租4待租8退房16空房
return Json(new { rescode = "200", resDesc = "操作成功" }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 获取节能模式数据
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetECOList()
{
var ll = HostManager.Get_ECOList();
return Json(ll);
}
/// <summary>
/// 节能模式接口
///
/// 任务管理 系统 在规定时间段内, 每隔一段时间会向这边发送一条指令
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult StartAll_ECO_Mission()
{
string hotelid = Request.Form["hotelid"];
string key = Request.Form["key"];
HostManager.ECO_Execute(hotelid);
return Json(new { status = "sucess" });
}
public static readonly string AirReport_Address = ConfigurationManager.AppSettings["baojing_airreport_address"];
public static readonly string baojing_airreport_key = ConfigurationManager.AppSettings["baojing_airreport_key"];
[HttpPost()]
public ActionResult GetAirDetectListPost()
{
Task.Factory.StartNew(() =>
{
try
{
List<KongQi> listdata = GetPrepareData();
var QQQ = listdata.GroupBy(A => new { A.HotelID, A.HotelCode, A.RoomNumber, A.CreatDate });
foreach (var itemKey in QQQ)
{
var item = itemKey.Key;
string roomNumber = item.RoomNumber;
string code = item.HotelCode;
string createDate = item.CreatDate;
DateTime dts = DateTime.Parse(createDate);
string cd = dts.ToString("yyyy-MM-dd");
Host host = CheckRoomNumber(code, cd, ref msg, ref hotelID, roomNumber);
if (host == null)
{
logger.Error("host not exists hotelcode: " + code + " createDate: " + cd + " roomnumber: " + roomNumber);
continue;
//return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
}
if (host != null)
{
var hostModals = HostModalManager.Load(host.ID, DeviceType.AirDetect).Where(r => r.Modal.WXActiveIndicator);
TimeSpan ts = DateTime.Now.ToLocalTime() - new DateTime(1970, 1, 1, 8, 0, 0, 0, DateTimeKind.Utc);
string current_timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
KongQiReport re = new KongQiReport();
re.hotel_code = code;
re.room_no = roomNumber;
re.time = current_timestamp;
string md5key = Tools.MD5Encrypt(baojing_airreport_key);
//hotel_code=酒店编码&time=时间戳&key=密钥
string sss = string.Format("hotel_code={0}&time={1}&key={2}", code, current_timestamp, md5key);
//logger.Error("sss is: " + sss);
string sign = Tools.MD5Encrypt(sss).ToLower();
re.sign = sign;
foreach (HostModal modal in hostModals)
{
//string Name = ReturnNameByLanguage(modal.Modal.Name, modal.Modal.EnglishName, modal.Modal.TWName);
string ModalAddress = modal.Modal.ModalAddress;
string status = modal.Brightness.ToString();
string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + ModalAddress;
var obj = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(KKey);
if (obj != null)
{
HostModal_Cache hhh = obj as HostModal_Cache;
status = hhh.Brightness.ToString();
}
switch (ModalAddress)
{
case "009000001"://CO2浓度 ppm
re.co2 = status;
break;
case "009000002"://甲醛浓度 ug/m3 实际显示单位为mg/M3
re.methanal = status;
break;
case "009000003"://TVOC浓度 ug/m3 实际显示单位为mg/M3
re.tvoc = status;
break;
case "009000004"://PM2.5浓度 ug/m3
re.pm25 = status;
break;
case "009000005"://PM10浓度 ug/m3
re.pm10 = status;
break;
case "009000006"://温度 度
re.temperature = status;
break;
case "009000007"://湿度 %RH
re.humidness = status;
break;
default:
break;
}
}
//list{Name名称)ModalAddress回路 地址Brightness, Status对应值}
var client1 = new RestClient(AirReport_Address);
var request1 = new RestRequest("/rcu/v1/air", Method.POST);
request1.RequestFormat = DataFormat.Json;
//string json = Newtonsoft.Json.JsonConvert.SerializeObject(re);
//logger.Error("空气质量送了数据:" + AirReport_Address+" data: "+json);
request1.AddJsonBody(re);
client1.ExecuteAsync(request1, (response) =>
{
string result = response.Content;
//logger.Error("空气质量返回了:"+result);
});
}
}
}
catch (Exception ex)
{
logger.Error(ex.Message + ex.StackTrace);
//return Json(new { IsSuccess = false, Result = ex.Message }, JsonRequestBehavior.AllowGet);
}
});
return Json(new { IsSuccess = true, Result = "sucess" }, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult GetAirDetectPrepareData()
{
List<KongQi> list = GetPrepareData();
return Json(list);
}
private List<KongQi> GetPrepareData()
{
string Key = "AirDetectPrepareData";
List<KongQi> list = new List<KongQi>();
bool re = CSRedisCacheHelper.Contains(Key);
if (re)
{
list = CSRedisCacheHelper.Get<List<KongQi>>(Key);
}
else
{
var ddd = SysHotelManager.GetNeedData();
CSRedisCacheHelper.Set(Key, ddd);
list = ddd;
}
return list;
}
/// <summary>
/// ECO重置 接口
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult ECO_Reset()
{
HostManager.Zero_Refresh();
return Json(new { });
}
[HttpPost()]
public ActionResult webChatLoadHostByRoomType()
{
string a = Request.Form["hotelid"].ToString();
string b = Request.Form["roomTypeID"].ToString();
int hotelid, roomTypeID = 0;
int.TryParse(a, out hotelid);
int.TryParse(b, out roomTypeID);
object ooobj = Request.Form["roomNumber"];
IList<object> lists = null;
if (ooobj != null)
{
string c = ooobj.ToString();
//根据房型获取所有主机ID
lists = HostManager.LoadHostByRoomTypeChengZiHao(hotelid, roomTypeID, c);
}
else
{
lists = HostManager.LoadHostByRoomType(hotelid, roomTypeID);
}
IList<object> result = new List<object>();
foreach (var list in lists)
{
object[] ooo = (object[])list;
result.Add(new
{
ID = ooo[0],
RoomNumber = ooo[2],
Status = CSRedisCacheHelper.Contains(ooo[1].ToString(), ooo[3].ToString()),
MAC = ooo[3],
Model = ooo[5],
Launcher = ooo[6],
Version = ooo[7],
ConfigVersion = ooo[8],
UpgradeStatus = ooo[10] == null ? "" : ooo[9],
UpgradeTime = ooo[10] == null ? "" : Convert.ToDateTime(ooo[10]).ToString("yyyy-MM-dd HH:mm:ss"),
LanIP = ooo[11],
LanPort = ooo[12],
TypeNumber = ooo[13]
});
}
var LLL = GetShengJiWenJianFileName(hotelid, roomTypeID);
return Json(new { IsSuccess = true, HostData = result, updateFile = LLL });
}
private static string tool_sync_url_base_url = System.Configuration.ConfigurationManager.AppSettings["tool_sync_url_base_url"];
private List<Dictionary<string, string>> GetShengJiWenJianFileName(int hotelid, int roomTypeID)
{
var client1 = new RestClient(tool_sync_url_base_url);
var request1 = new RestRequest("/Upgrade/GetFileName", Method.POST);
//注意方法是POST
//两个参数名字必须是 topic 和payload ,区分大小写的
request1.AddParameter("hotel_id", hotelid);
request1.AddParameter("room_type_id", roomTypeID);
//[
// {
// "HOTEL_OLD_ID": 98,
// "ROOM_TYPE_OLD_ID": 4356,
// "CONFIG_BIN": "15_Config-1085-宝来威体验厅-研发部-250109154719.dat",
// "App_Cfg_For_L2": "",
// "App_Cfg_For_L4": "C1F_A_L4_40_250109_NM.hex",
// "Hex_Code_For_L2": "",
// "Hex_Code_For_L4": "",
// "APPTYPE": "App_Cfg",
// "Cfg_Type": "CFG_TYPE_BLV_STUDIO",
// "LUNCHER_HEX": ""
// }
//]
var response = client1.Execute(request1);
string sss = response.Content;
var fileNames = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(sss);
return fileNames;
}
[HttpPost()]
public ActionResult GetUpdatedFile()
{
string strroomTypeID = Request.Form["roomTypeID"].ToString();
int a = 0;
int.TryParse(strroomTypeID, out a);
HostUpdateController h = new HostUpdateController();
return h.GetUpdatedFile(a);
}
private static string get_update_url = System.Configuration.ConfigurationManager.AppSettings["get_update_url"];
#region
/// <summary>
///upgradefileName 后缀有要:求
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult WebChatUpgrade()
{
try
{
string b = Request.Form["roomTypeID"].ToString();
if (string.IsNullOrEmpty(b))
{
return Json(new { IsSuccess = false, Data = "roomTypeID不能为空" });
}
string host_list_str = Request.Form["hostid_lists"].ToString();
string fileName = Request.Form["upgradefileName"].ToString();
if (string.IsNullOrEmpty(host_list_str))
{
return Json(new { IsSuccess = false, Data = "hostid_lists不能为空" });
}
int roomTypeID = 0;
int.TryParse(b, out roomTypeID);
logger.Error("微信端开始升级: " + fileName + " " + roomTypeID + " host_list: " + host_list_str);
var host_list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<int>>(host_list_str);
//让服务器获取升级文件
HostUpdateController.GetUpdateFileByRoomTypeID(roomTypeID);
string lll = JsonConvert.SerializeObject(host_list);
HostUpdateController hh = new HostUpdateController();
logger.Error("开始升级: " + fileName + " host_list: " + lll);
//升级
hh.ShengJI_NEW(host_list, fileName, HostManager);
return Json(new { IsSuccess = true, Data = "正在升级,请等待……" });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Data = ex.Message });
}
}
[HttpPost()]
public ActionResult QueryUpdateHostProgressBar(string HostIDList)
{
try
{
var Q = new List<BarData>();
List<int> LLL = JsonConvert.DeserializeObject<List<int>>(HostIDList);
foreach (int item in LLL)
{
string Key = CacheKey.UPGradeProgressBar + "_" + item.ToString();
var DDD = CSRedisCacheHelper.Get<BarData>(Key);
if (DDD != null)
{
Q.Add(DDD);
}
}
return Json(new { IsSuccess = true, Response = Q });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("ReleaseUpgradeFailedBecause") + ex.Message });
}
}
[HttpPost()]
public ActionResult QueryUpdateHostStatus(int HotelID, int roomTypeID)
{
try
{
var lists = HostManager.LoadHostByRoomType(HotelID, roomTypeID);//ID,HostNumber,RoomNumber,MAC,RoomTypeID,Model,LauncherVersion,Version,ConfigVersion,UpgradeStatus,UpgradeTime
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],
//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")
});
}
var QQQ = result.ToList();
QQQ.Sort();
return Json(new { total = result.Count, rows = QQQ });
//var statusList = HostUpdateStatusManager.LoadAll().Where(r => r.HostUpdate.ID == hostUpdateID).Select(r => new { id = r.ID, hostID = r.Host.ID, status = r.Status });
//return Json(new { IsSuccess = true, Data = statusList });
}
catch (Exception ex)
{
logger.Error(HttpContext.InnerLanguage("ReleaseUpgradeFails"), ex);
return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("ReleaseUpgradeFailedBecause") + ex.Message });
}
}
#endregion
#region
[HttpPost()]
public ActionResult Monitor_Host_Handle()
{
string Key = CacheKey.Key;
string Data = Request.Form["data"].ToString();
string AddOrRemove = Request.Form["add_remove"].ToString();
List<Monitor_Host> lll = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Monitor_Host>>(Data);
lll.RemoveAll(A => string.IsNullOrEmpty(A.Key_HostNumber));
var qqq = CSRedisCacheHelper.ForeverGet<List<Monitor_Host>>(Key);
if (qqq == null)
{
var list = new List<Monitor_Host>();
CSRedisCacheHelper.Forever<List<Monitor_Host>>(Key, list);
}
qqq = CSRedisCacheHelper.ForeverGet<List<Monitor_Host>>(Key);
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
if (AddOrRemove.Equals("add"))
{
foreach (var item in lll)
{
item.CreateDateTime = ti;
//bool bf = qqq.Any(A => A.HotelCode.Equals(item.HotelCode) && item.RoomNumber.Equals(A.RoomNumber));
bool bf = qqq.Any(A =>
{
string AAA = A.HotelCode;
string BBB = A.Key_HostNumber;
if (!string.IsNullOrEmpty(AAA) && !string.IsNullOrEmpty(BBB))
{
return AAA.Equals(item.HotelCode) && BBB.Equals(item.Key_HostNumber);
}
return false;
});
if (bf == false)
{
qqq.Add(item);
}
else
{
qqq.RemoveAll(A => A.HotelCode.Equals(item.HotelCode) && A.Key_HostNumber.Equals(item.Key_HostNumber));
qqq.Add(item);
}
}
CSRedisCacheHelper.Forever<List<Monitor_Host>>(Key, qqq);
}
else if (AddOrRemove.Equals("remove"))
{
foreach (var item in lll)
{
string item_h = item.HotelCode;
string item_r = item.RoomNumber;
string hostnumber = item.Key_HostNumber;
if (!string.IsNullOrEmpty(item_h) && !string.IsNullOrEmpty(item_r) && !string.IsNullOrEmpty(hostnumber))
{
qqq.RemoveAll(A => !string.IsNullOrEmpty(A.HotelCode) && A.HotelCode.Equals(item_h) && !string.IsNullOrEmpty(A.Key_HostNumber) && A.Key_HostNumber.Equals(hostnumber));
}
}
CSRedisCacheHelper.Forever<List<Monitor_Host>>(Key, qqq);
}
return Json(new { IsSuccess = true, Data = "" });
}
[HttpPost()]
public ActionResult GetAll_MonitorHost()
{
string Key = CacheKey.Key;
var qqq = CSRedisCacheHelper.ForeverGet<List<Monitor_Host>>(Key);
if (qqq == null)
{
qqq = new List<Monitor_Host>();
}
qqq = qqq.OrderBy(A => A.HotelCode).ToList();
return Json(qqq);
}
[HttpPost()]
public ActionResult IOT_Monitor_Host_Handle()
{
string Key = CacheKey.IOTKey;
string Data = Request.Form["data"].ToString();
string AddOrRemove = Request.Form["add_remove"].ToString();
List<IOT_Monitor_Host> lll = Newtonsoft.Json.JsonConvert.DeserializeObject<List<IOT_Monitor_Host>>(Data);
var qqq = CSRedisCacheHelper.ForeverGet<List<IOT_Monitor_Host>>(Key);
if (qqq == null)
{
var list = new List<IOT_Monitor_Host>();
CSRedisCacheHelper.Forever<List<IOT_Monitor_Host>>(Key, list);
}
qqq = CSRedisCacheHelper.ForeverGet<List<IOT_Monitor_Host>>(Key);
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
if (AddOrRemove.Equals("add"))
{
foreach (var item in lll)
{
item.CreateDateTime = ti;
bool bf = qqq.Any(A => A.HotelCode.Equals(item.HotelCode) && item.RoomNumber.Equals(A.RoomNumber));
if (bf == false)
{
qqq.Add(item);
}
else
{
qqq.RemoveAll(A => A.HotelCode.Equals(item.HotelCode) && A.RoomNumber.Equals(item.RoomNumber));
qqq.Add(item);
}
}
CSRedisCacheHelper.Forever<List<IOT_Monitor_Host>>(Key, qqq);
}
else if (AddOrRemove.Equals("remove"))
{
foreach (var item in lll)
{
string item_h = item.HotelCode;
string item_r = item.RoomNumber;
qqq.RemoveAll(A => A.HotelCode.Equals(item_h) && A.RoomNumber.Equals(item_r));
}
CSRedisCacheHelper.Forever<List<IOT_Monitor_Host>>(Key, qqq);
}
return Json(new { IsSuccess = true, Data = "" });
}
[HttpPost()]
public ActionResult IOT_GetAll_MonitorHost()
{
string Key = CacheKey.IOTKey;
var qqq = CSRedisCacheHelper.ForeverGet<List<IOT_Monitor_Host>>(Key);
if (qqq == null)
{
qqq = new List<IOT_Monitor_Host>();
}
qqq = qqq.OrderBy(A => A.HotelCode).ToList();
return Json(qqq);
}
#endregion
[HttpPost()]
public ActionResult RedisTest()
{
string Data = Request.Form["data"].ToString();
string AddOrRemove = Request.Form["add_remove"].ToString();
CSRedisCacheHelper.Forever<string>(Data, AirReport_Address);
return Json("hello");
}
[HttpPost()]
public bool CheckGetTakePower()
{
int hostid = 0;
int.TryParse(Request.Form["hostid"].ToString(), out hostid);
//string hotel_code = "";
//string createDate = "";
//string roomNumber = "";
//hotel_code= Request.Form["code"].ToString();
//roomNumber= Request.Form["roomNumber"].ToString();
//createDate= Request.Form["createDate"].ToString();
//Host host = CheckRoomNumber(hotel_code, createDate, ref msg, ref hotelID, roomNumber);
//if (host == null)
//{
// return Json(new { IsSuccess = false, Result = msg }, JsonRequestBehavior.AllowGet);
//}
//DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//Dictionary<string, string> dic = new Dictionary<string, string>();
HostModal hostModal = HostModalManager.LoadByHostID(hostid).Where(r => r.Modal.ActiveIndicator == true && r.Modal.ModalAddress == "004000001").FirstOrDefault();
if (hostModal != null && hostModal.Status != 1)
{
//DateTime dt = hostModal.UpdateTime.Value;
//dic.Add("HostID", hostid.ToString());
//dic.Add("TakeCard_Status", "true");
//dic.Add("LastDateTime", dt.ToString("yyyy-MM-dd HH:mm:ss"));
return true;
}
else
{
return false;
}
//return Json(new { IsSuccess = false, Result = dic }, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult SetRoomCard()
{
return null;
}
public static string FCSLoginUrl = ConfigurationManager.AppSettings["FCSLoginUrl"];
public static string FCSLoginUserName = ConfigurationManager.AppSettings["FCSLoginUserName"];
public static string FCSLoginPassWord = ConfigurationManager.AppSettings["FCSLoginPassWord"];
#region FCS数据推送
[HttpPost()]
public ActionResult GetFCSTokenPost()
{
try
{
var client1 = new RestClient(FCSLoginUrl);
var request1 = new RestRequest("/api/security/authenticate", Method.POST);
Dictionary<string, string> dic = new Dictionary<string, string>();
User us = new User();
us.username = FCSLoginUserName;
us.password = FCSLoginPassWord;
us.oauth_id = 1;
request1.AddJsonBody(us);
var QQQ = client1.Execute(request1);
string ddd = QQQ.Content;
var FFFA = Newtonsoft.Json.JsonConvert.DeserializeObject<FCS_ReturnInfo>(ddd);
string TokenKey = CacheKey.FCSToken;
CSRedisCacheHelper.Set_Partition(TokenKey, FFFA, 1);
}
catch (Exception)
{
}
return null;
}
/// <summary>
/// 每隔30分钟去查询一下设备是否在线和离线
///
/// 查询的时候根据locationUUID
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetFCS_RCU_Status()
{
try
{
var QQQ = SysHotelManager.LoadFCS_PushData();
foreach (var item in QQQ)
{
var PPP = HostManager.LoadAll().Where(A => A.IsDeleted == false && !string.IsNullOrEmpty(A.FCS_locationUUID)).ToList();
foreach (Host itemT in PPP)
{
//根据酒店hotelcode
string code = itemT.SysHotel.Code;
string roomno = itemT.RoomNumber;
string locationUUID = itemT.FCS_locationUUID;
string hostNumber = itemT.HostNumber;
string MAC = itemT.MAC;
string PropertyUUID = itemT.SysHotel.FCS_PropertyID;
string FCS_RCU_Device_Offline = itemT.SysHotel.FCS_RCU_Device_Offline;
string FCSLoginUrl = itemT.SysHotel.FCSLoginUrl;
string FCSLoginUserName = itemT.SysHotel.FCSLoginUserName;
string FCSLoginPassWord = itemT.SysHotel.FCSLoginPassWord;
string FCS_Carbon_UUID = itemT.SysHotel.FCS_Carbon_UUID;
string FCS_SOS_UUID = itemT.SysHotel.FCS_SOS_UUID;
string FCS_Clean_UUID = itemT.SysHotel.FCS_Clean_UUID;
string FCS_MenCi_Open = itemT.SysHotel.FCS_MenCi_Open;
string FCS_MenCi_Close = itemT.SysHotel.FCS_MenCi_Close;
string FCS_RCU_Online = itemT.SysHotel.FCS_RCU_Online;
string FCS_RCU_Offline = itemT.SysHotel.FCS_RCU_Offline;
var aaa = Common.CSRedisCacheHelper.Contains(Convert.ToString(hostNumber), MAC);
string KKK = "GetFCS_RCU_Status_" + hostNumber + "_" + MAC;
var Q = CSRedisCacheHelper.Get_Partition<string>(KKK);
//如果在线
if (aaa)
{
if (!string.IsNullOrEmpty(Q))
{
if (Q.Equals("offline"))
{
RR.FCS_PushData(FCS_RCU_Online, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno);
}
}
else
{
CSRedisCacheHelper.Set_Partition(KKK, "online");
RR.FCS_PushData(FCS_RCU_Online, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno);
}
}
else
{
if (!string.IsNullOrEmpty(Q))
{
if (Q.Equals("offline"))
{
RR.FCS_PushData(FCS_RCU_Offline, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno);
}
}
else
{
CSRedisCacheHelper.Set_Partition(KKK, "offline");
RR.FCS_PushData(FCS_RCU_Offline, itemT.FCS_locationUUID, PropertyUUID, FCSLoginUrl, FCSLoginUserName, FCSLoginPassWord, code, roomno);
}
}
}
}
}
catch (Exception)
{
}
return null;
}
/// <summary>
/// 获取 FCS 清理触发的 订单表
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetFCSClean_OrderList()
{
try
{
string Key = CacheKey.FCSToken;
var TokenTakeOut = CSRedisCacheHelper.Get_Partition<FCS_ReturnInfo>(Key, 1);
if (TokenTakeOut == null)
{
return Json(new { Status = "ok", Message = "NoData" }, JsonRequestBehavior.AllowGet);
}
var dic = CSRedisCacheHelper.HMGetAll(3, CacheKey.FCSOrder);
foreach (var item in dic)
{
var OrderData = JsonConvert.DeserializeObject<FCS_OrderData>(item.Value);
var CleanUUID = OrderData.ItemUUID;
var HostNUMBER = OrderData.HostNUMBER;
var PropertyID = OrderData.PropertyID;
var LocationUUID = OrderData.LocationUUID;
string vvv = string.Format("= ''{0}''", LocationUUID);
QueryFCSOrder ooo = new QueryFCSOrder();
ooo.filter = "";
ooo.column_filter = new OrderQueryItem() { field = "location_uuid", value = new List<string>() { vvv } };
var client1 = new RestClient(FCSLoginUrl);
var request1 = new RestRequest("/job/status", Method.POST);
request1.AddHeader("token", TokenTakeOut.data.access_token);
request1.AddHeader("property", PropertyID);
request1.AddJsonBody(ooo);
var QQQ = client1.Execute(request1);
string ddd = QQQ.Content;
var FFFA = Newtonsoft.Json.JsonConvert.DeserializeObject<QueryOrderResponse>(ddd);
var D1 = FFFA.data.FirstOrDefault(A => A["item_uuid"].Equals(CleanUUID));
if (D1 != null)
{
string V = "";
D1.TryGetValue("job_status", out V);
if (V.Equals("cancelled"))
{
Host host = new Host();
host.HostNumber = HostNUMBER;
HostModal s = new HostModal();
s.Modal = new RoomTypeModal() { ModalAddress = "004000003", Type = DeviceType.ServiceInfo };
HostModalManager.SetDevice(host, s, 0, 0);
}
}
}
}
catch (Exception ex)
{
logger.Error("GetFCSClean_OrderList");
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
}
return null;
}
#endregion
#region Api路径下
[HttpPost()]
public ActionResult login()
{
ReturnInfo r = new ReturnInfo();
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
var user = JsonConvert.DeserializeObject<chuangweilogin>(jsonData);
var user1 = SysUserManager.Get(user.username, user.password);
//if (user.username.Equals("chuangwei") && user.password.Equals("123456"))
if (user1 != null)
{
r = SignKeyCommon.GetTokenData(user.username);
}
//if (user != null)
//{
//}
else
{
r.code = 10009;
r.msg = "登录失败,用户名或者密码不正确";
}
}
catch (Exception ex)
{
r.code = 500;
r.msg = ex.Message;
}
return Json(r, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult refreshToken()
{
ReturnInfo Re = new ReturnInfo();
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
JWTData JJJ = null;
int code = 0;
string msg = "";
var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonData);
if (dic != null)
{
string retoken = dic["refreshToken"];
var T = SignKeyCommon.TokenValidate(retoken, out JJJ, out code, out msg);
if (T)
{
Re = SignKeyCommon.GetTokenData(JJJ.username);
}
else
{
Re.msg = msg;
Re.code = code;
}
}
else
{
code = 10021;
msg = "非法token";
}
}
catch (Exception ex)
{
Re.code = 500;
Re.msg = ex.Message;
}
return Json(Re, JsonRequestBehavior.AllowGet);
}
#endregion
#region TCL电视
[HttpPost()]
public ActionResult GetTCLLoginToken()
{
try
{
TCLCommon.GetTCLTV_Token();
}
catch (Exception)
{
}
return null; ;
}
#endregion
/// <summary>
/// 模拟接口
/// </summary>
/// <returns></returns>
public ActionResult ChangeRoomStatus_Test()
{
Host host = HostManager.GetByRoomNumber("8888", 1);
HostManager.ChangeRoomStatus(host, 2);//2出租4待租8退房16空房
return Json(new { rescode = "200", resDesc = "操作成功" }, JsonRequestBehavior.AllowGet);
}
[HttpGet()]
public ActionResult LogTest()
{
MemoryCacheHelper.Set("UDPPackage_a", "aa", DateTimeOffset.Now.AddSeconds(20));
return Json(new { rescode = "200" }, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult QueryFaceInfo(int HotelId, int RoomId)
{
try
{
string Name = "";
string Key = "FaceInfo_" + RoomId + "_" + hotelID;
var Obj = MemoryCacheHelper.Get(Key);
if (Obj != null)
{
Name = Obj.ToString();
}
else
{
Host host = HostManager.GetByRoomNumber(RoomId, HotelId);
string hg = host.RoomType.Name;
MemoryCacheHelper.SlideSet(Key, hg);
Name = hg;
}
return Json(new { RoomTypeName = Name, resDesc = "查询成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { error_msg = ex.Message, resDesc = "查询失败" }, JsonRequestBehavior.AllowGet);
}
}
public static string DayKeyPrefix = "WebApiAnalysis_";
[HttpPost()]
public ActionResult GetAllWebApiInvoke_FenXi()
{
try
{
List<TongJiApiInvokeInfo> list = new List<TongJiApiInvokeInfo>();
string OldData1 = DateTime.Now.AddDays(0).ToString("yyyy-MM-dd");
string OldData2 = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
string OldData3 = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
var q1 = CSRedisCacheHelper.Get_Partition<TongJiApiInvokeInfo>(DayKeyPrefix + OldData1, 1);
var q2 = CSRedisCacheHelper.Get_Partition<TongJiApiInvokeInfo>(DayKeyPrefix + OldData2, 1);
var q3 = CSRedisCacheHelper.Get_Partition<TongJiApiInvokeInfo>(DayKeyPrefix + OldData3, 1);
if (q1 != null)
{
list.Add(q1);
}
if (q2 != null)
{
list.Add(q2);
}
if (q3 != null)
{
list.Add(q3);
}
return Json(new { WebApiInvokeInfo = list, resDesc = "查询成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { error_msg = ex.Message, resDesc = "查询失败" }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 这段代码暂时废弃掉,原来找不到 CPU占用100%的时候用,现在找到了,用不到这个接口了
/// </summary>
/// <param name="MethodName"></param>
public static void WebApiInvoke_FenXi(string MethodName)
{
//string OldData = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd");
//var q = CSRedisCacheHelper.Get_Partition<TongJiApiInvokeInfo>(OldData, 1);
//if (q != null)
//{
// CSRedisCacheHelper.Del(new string[] { OldData });
//}
//string DayKey = DayKeyPrefix + DateTime.Now.ToString("yyyy-MM-dd");
//int H = DateTime.Now.Hour;
//var q1 = CSRedisCacheHelper.Get_Partition<TongJiApiInvokeInfo>(DayKey, 1);
//if (q1 != null)
//{
// string KKK = MethodName + "#" + H;
// //0:12 是 0-1点的数据
// //1:23 是1-2的数据 归纳就是 当前小时的数据就是 属于下个小时的数据
// int Count = 0;
// bool bf = q1.DataList.TryGetValue(KKK, out Count);
// if (bf == false)
// {
// q1.DataList.Add(KKK, 0);
// }
// else
// {
// int NewCount = Count + 1;
// q1.DataList[KKK] = NewCount;
// }
// CSRedisCacheHelper.Set_Partition<TongJiApiInvokeInfo>(DayKey, q1, 1);
//}
//else
//{
// TongJiApiInvokeInfo t = new TongJiApiInvokeInfo();
// t.DataList = new Dictionary<string, int>();
// for (int i = 0; i < 24; i++)
// {
// string KKK = MethodName + "#" + i;
// t.DataList.Add(KKK, 0);
// }
// CSRedisCacheHelper.Set_Partition<TongJiApiInvokeInfo>(DayKey, t, 1);
//}
}
#region
public class TempData
{
public int Id { get; set; }
public string Name { get; set; }
}
public class TempDataA
{
public int ID;
public string Code;
public string GroupName;
public string Name;
public string CreateDate { get; set; }
}
public class ResponseData
{
public IList<object> OwinFloorGroupList { get; set; }
public List<TempDataA> HotelListInfo { get; set; }
}
[HttpPost()]
public ActionResult LogSystemlogin()
{
NReturnInfo r = new NReturnInfo();
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
var user = JsonConvert.DeserializeObject<chuangweilogin>(jsonData);
var entity = SysUserManager.Get(user.username, user.password);
if (entity != null)
{
//var Q = entity.Hotels.Select(A => new TempData { Id = A.ID, Name = A.Name });
IList<object> result = new List<object>();
result.Add(SysHotelGroupManager.CreateGroupTree2(entity.SysHotelGroup));
var Q1 = result.FirstOrDefault();
if (Q1 != null)
{
int id = (int)Q1.GetType().GetProperty("ID").GetValue(Q1, null);
string KKKey = "LogSystemloginData_" + id.ToString() + "_" + entity.Account;
object oooa = HttpContext.Cache.Get(KKKey);
if (oooa != null)
{
r.response = oooa;
}
else
{
var DDD = GetData(id, entity.Account);
HttpContext.Cache.Add(KKKey, DDD, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
r.response = DDD;
}
}
else
{
r.response = new List<object>();
}
r.isok = true;
}
else
{
r.isok = false;
r.message = "登录失败,用户名或者密码不正确";
}
}
catch (Exception ex)
{
r.isok = false;
r.message = ex.Message;
}
return Json(r, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 新的日志登录系统
/// 这里的代码,时间紧急。是临时方案,
/// 考虑不周
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult LogSystemloginNew()
{
NReturnInfo r = new NReturnInfo();
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
var user = JsonConvert.DeserializeObject<chuangweilogin>(jsonData);
var entity = SysUserManager.Get(user.username, user.password);
ResponseData rf = new ResponseData();
if (entity != null)
{
if (entity.HotelID > 0 && entity.Group == null)//酒店用户没有楼层分组权限
{
return Json(null, JsonRequestBehavior.AllowGet);
}
IList<object> groupTree = new List<object>();
//如果该用户所在分组同属于当前酒店,则获取该分组下客房,否则获取该酒店下所有客房
if (entity.Group != null && entity.Group.HotelID == entity.HotelID)
{
groupTree.Add(GroupManager.CreateGroupTree2(entity.Group, entity.HotelID));
}
else
{
IList<Group> currentGroup = GroupManager.GetGroupList(entity.HotelID);
if (currentGroup.Count > 0)
{
groupTree.Add(GroupManager.CreateGroupTree2(currentGroup[0], entity.HotelID));
}
}
rf.OwinFloorGroupList = groupTree;
}
if (entity != null)
{
IList<object> result = new List<object>();
result.Add(SysHotelGroupManager.CreateGroupTree2(entity.SysHotelGroup));
if (entity.Account.Equals("admin") || entity.Account.Equals("leo") || entity.Account.Equals("blw"))
{
result.Add(GroupManager.CreateGroupTree2(entity.Group, entity.HotelID));
var Q1 = result.FirstOrDefault();
if (Q1 != null)
{
int id = (int)Q1.GetType().GetProperty("ID").GetValue(Q1, null);
string KKKey = "LogSystemloginData_" + id.ToString() + "_" + entity.Account;
object oooa = HttpContext.Cache.Get(KKKey);
if (oooa != null)
{
rf.HotelListInfo = (List<TempDataA>)oooa;
r.response = rf;
}
else
{
var DDD = GetData(id, entity.Account);
HttpContext.Cache.Add(KKKey, DDD, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
rf.HotelListInfo = DDD;
r.response = rf;
}
}
else
{
r.response = new List<object>();
}
}
else
{
string KKKey = "LogSystemloginData_" + entity.Group.ID.ToString() + "_" + entity.Account;
object oooa = HttpContext.Cache.Get(KKKey);
if (oooa != null)
{
rf.HotelListInfo = (List<TempDataA>)oooa;
r.response = rf;
}
else
{
var roomList = HostManager.LoadAll(entity.Group);
List<TempDataA> LL = roomList.Select(A => new TempDataA
{
Code = A.SysHotel.Code,
CreateDate = A.SysHotel.CreatedDate.ToString("yyyy-MM-dd"),
GroupName = A.SysHotel.SysHotelGroup.Name,
Name = A.SysHotel.Name,
ID = A.SysHotel.ID
}).ToList();
rf.HotelListInfo = LL;
HttpContext.Cache.Add(KKKey, LL, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
r.response = rf;
}
}
r.isok = true;
}
else
{
r.isok = false;
r.message = "登录失败,用户名或者密码不正确";
}
}
catch (Exception ex)
{
r.isok = false;
r.message = ex.Message;
}
return Json(r, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult GetGroupId()
{
NReturnInfo r = new NReturnInfo();
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
var user = JsonConvert.DeserializeObject<chuangweilogin>(jsonData);
var currentUser = SysUserManager.Get(user.username, user.password);
if (currentUser.HotelID > 0 && currentUser.Group == null)//酒店用户没有楼层分组权限
{
return Json(null, JsonRequestBehavior.AllowGet);
}
IList<object> groupTree = new List<object>();
groupTree.Add(new { id = 0, text = HttpContext.InnerLanguage("HotelFloor") });
//如果该用户所在分组同属于当前酒店,则获取该分组下客房,否则获取该酒店下所有客房
if (currentUser.Group != null && currentUser.Group.HotelID == currentUser.HotelID)
{
groupTree.Add(GroupManager.CreateGroupTree2(currentUser.Group, currentUser.HotelID));
}
else
{
IList<Group> currentGroup = GroupManager.GetGroupList(currentUser.HotelID);
if (currentGroup.Count > 0)
{
groupTree.Add(GroupManager.CreateGroupTree2(currentGroup[0], currentUser.HotelID));
}
}
return Json(groupTree, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
r.isok = false;
r.message = ex.Message;
}
return Json(r, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 根据 根节点查询数据信息
/// </summary>
/// <param name="groupId"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult GetCurrentHotel(int? groupId)
{
IList<SysHotel> hotels = new List<SysHotel>();
switch (User.Identity.Name.ToLower())
{
case "admin":
case "leo":
case "blw":
hotels = SysHotelManager.LoadAll().Where(r => !r.IsDeleted).ToList();
break;
default:
hotels = SysHotelManager.LoadAll().Where(r => r.IsApprove && !r.IsDeleted).ToList();//装载已审核的酒店
break;
}
if (groupId.HasValue && groupId != 1)//过滤分组
{
hotels = hotels.Where(r => r.SysHotelGroup.ID == groupId ||
(r.SysHotelGroup.Parent != null && r.SysHotelGroup.Parent.ID == groupId) ||
(r.SysHotelGroup.Parent != null && r.SysHotelGroup.Parent.Parent != null && r.SysHotelGroup.Parent.Parent.ID == groupId)).ToList();
}
hotels = hotels.OrderByDescending(o => o.ID).ThenBy(o => o.SysHotelGroup.Sort).ToList();
var hotelData = hotels.Select(r => new
{
r.ID,
r.Code,
GroupName = SysHotelGroupManager.BuildGroupName(r.SysHotelGroup),
Name = ReturnNameByLanguage(r.Name, r.EName, r.TWName)
}).ToList();
return Json(new { total = hotels.Count, rows = hotelData }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 根据房间号,酒店编号来查询房型信息。
/// </summary>
/// <param name="roomnumber"></param>
/// <param name="hotelcode"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult GetRoomTypeInfo(string roomnumber, string hotelcode)
{
try
{
Host host = HostManager.GetByRoomNumber(roomnumber, hotelcode);
var AA = host.RoomType;
var G = new { RoomTypeId = AA.ID, RoomTypeName = AA.Name };
return Json(new { Result = G, resDesc = "查询成功" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { error_msg = ex.Message, resDesc = "查询失败" }, JsonRequestBehavior.AllowGet);
}
}
[HttpGet()]
public ActionResult GetRoomTypeAndModalsListLog(string jsonData)
{
string start_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
try
{
JObject jData = (JObject)JsonConvert.DeserializeObject(jsonData);
string code = jData["code"].ToString();
SysHotel sysHotel = SysHotelManager.GetByCode(code);
if (sysHotel == null)
{
msg = "酒店未知";
return Json(new { IsSuccess = false, Result = "msg" }, JsonRequestBehavior.AllowGet);
}
int hhh = sysHotel.ID;
IList<RoomType> roomTypes = RoomTypeManager.LoadAll().Where(r => r.HotelID == hhh && !r.IsDeleted).ToList();
IList<object> list = new List<object>();
foreach (RoomType roomType in roomTypes)
{
IList<MMM> modalsList = new List<MMM>();
foreach (RoomTypeModal model in roomType.Modals)
{
modalsList.Add(new MMM
{
ID = model.ID,
ModalAddress = model.ModalAddress,
Name = model.Name,
EnglistName = model.EnglishName,
TWName = model.TWName,
TypeName = Common.Tools.GetDescription(model.Type),
SourceType = model.SourceType,
ActiveIndicator = model.ActiveIndicator
});
}
list.Add(new
{
ID = roomType.ID,
Code = roomType.Code,
Name = roomType.Name,
Modals = modalsList.OrderBy(A => A.ModalAddress)
});
}
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 static string missionsys_address = ConfigurationManager.AppSettings["missionsys_address"];
/// <summary>
/// 设置统计的时间
/// </summary>
/// <param name="interval_Minutes"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult TongJiTimerIntervalSet(int interval_Minutes)
{
try
{
RedisTongJiData tq = new RedisTongJiData();
tq.url = "api/CaiJiData";
tq.cron_exp = string.Format("*/{0} * * * *", interval_Minutes);
tq.mission_key = MvcApplication.IntervalKey;
CSRedisCacheHelper.Forever<RedisTongJiData>(MvcApplication.IntervalKey, tq);
var client1 = new RestClient(missionsys_address);
var request1 = new RestRequest("api/declare_mission", Method.POST);
request1.AddParameter("url", tq.url);
request1.AddParameter("mission_key", tq.mission_key);
request1.AddParameter("mission_name", tq.mission_key);
request1.AddParameter("cron_exp", tq.cron_exp);
client1.ExecuteAsync(request1, (response) =>
{
string result = response.Content;
});
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取统计时间间隔
/// </summary>
public ActionResult GetTongJiTimerInterval()
{
try
{
var DDD = CSRedisCacheHelper.ForeverGet<RedisTongJiData>(MvcApplication.IntervalKey);
var Time = DDD.cron_exp;
//var Time = "*/10 * * * *";
string[] data = Time.Split('/', ' ');
return Json(new { IsSuccess = true, Result = data[1].ToString() }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
#region
/// <summary>
/// 隔几包 丢一包
/// </summary>
/// <param name="LostHz"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult DefineUDPLostDataRate(long LostHz)
{
try
{
CSRedisCacheHelper.Forever<long>(MvcApplication.UDPLostKey, LostHz);
//DataTongJi.DefineLostPackage = LostHz;
//DataTongJi.RecordLostPackage = 0;
Interlocked.Exchange(ref DataTongJi.DefineLostPackage, LostHz);
Interlocked.Exchange(ref DataTongJi.RecordLostPackage, 0);
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取UDP丢包速率
/// 隔几包丢一包
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetDefineUDPLostDataRate()
{
try
{
var Lf = CSRedisCacheHelper.ForeverGet<long>(MvcApplication.UDPLostKey);
return Json(new { IsSuccess = true, Result = Lf }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
#endregion
#region
/// <summary>
/// 获取UDP超时时间
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetDefineUDPLostDataInterval()
{
try
{
var L = CSRedisCacheHelper.ForeverGet<int>(MvcApplication.UDPLostIntervalKey);
return Json(new { IsSuccess = true, Result = L }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 间隔多久的数据要丢掉
/// </summary>
/// <param name="Interval"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult DefineUDPLostDataInterval(int Interval)
{
try
{
CSRedisCacheHelper.Forever<int>(MvcApplication.UDPLostIntervalKey, Interval);
DataTongJi.LostPackage_Interval = Interval;
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
#endregion
/// <summary>
/// 有哪些酒店的数据不会被0x19 机制给过滤掉
/// </summary>
/// <param name="hotelcode"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult ZeroX19DataSet(string hotelcode)
{
try
{
var LLL = CSRedisCacheHelper.ForeverGet<List<string>>(MvcApplication.ZeroX19_PassHotelCodeKey);
if (!LLL.Contains(hotelcode))
{
LLL.Add(hotelcode);
CSRedisCacheHelper.Forever<List<string>>(MvcApplication.ZeroX19_PassHotelCodeKey, LLL);
}
if (!DataTongJi.ZeroX19_PassHotelCode.Contains(hotelcode))
{
DataTongJi.ZeroX19_PassHotelCode.Add(hotelcode);
}
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取0x19 起了作用的酒店
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetZeroX19Data()
{
try
{
var L = CSRedisCacheHelper.ForeverGet<List<string>>(MvcApplication.ZeroX19_PassHotelCodeKey);
return Json(new { IsSuccess = true, Result = L }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取RCU在线数量
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetRCUOnLine()
{
try
{
var L = DataTongJi.ONLINERCU;
var L1 = L.Count.ToString();
return Json(new { IsSuccess = true, Result = L1 }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取取电开关的在线数量
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetTakeCard_OnLine()
{
try
{
var L = DataTongJi.TakeCardOnLine;
var L1 = L.Where(A => A.Value.Status == 0x01).ToList().Count.ToString();
return Json(new { IsSuccess = true, Result = L1 }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 获取所有的 黑名单数据
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult GetBlockLWSetData()
{
try
{
var QQQ = CSRedisCacheHelper.ForeverGet<ConcurrentDictionary<string, ConcurrentBag<string>>>(MvcApplication.BlockLowerMachineKey);
if (QQQ != null)
{
return Json(new { IsSuccess = true, Result = QQQ }, JsonRequestBehavior.AllowGet);
}
return Json(new { IsSuccess = true, Result = QQQ }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 设置下位机黑名单
/// </summary>
/// <param name="interval_Minutes"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult BlockLWSet()
{
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
var user = JsonConvert.DeserializeObject<Block_NameList>(jsonData);
ConcurrentBag<string> L = null;
string hotelcode = user.HotelCode;
bool bl = DataTongJi.BlockLowerMachineList.TryGetValue(hotelcode, out L);
if (bl && L != null)
{
DataTongJi.BlockLowerMachineList.TryRemove(hotelcode, out L);
}
else
{
ConcurrentBag<string> USA = new ConcurrentBag<string>(user.HostNumberList);
DataTongJi.BlockLowerMachineList.TryAdd(hotelcode, USA);
}
CSRedisCacheHelper.Forever<ConcurrentDictionary<string, ConcurrentBag<string>>>(MvcApplication.BlockLowerMachineKey, DataTongJi.BlockLowerMachineList);
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost()]
public ActionResult BlockLWRemove(string hotelcode)
{
try
{
ConcurrentBag<string> L = null;
bool bl = DataTongJi.BlockLowerMachineList.TryGetValue(hotelcode, out L);
if (bl && L != null)
{
DataTongJi.BlockLowerMachineList.TryRemove(hotelcode, out L);
}
CSRedisCacheHelper.Forever<ConcurrentDictionary<string, ConcurrentBag<string>>>(MvcApplication.BlockLowerMachineKey, DataTongJi.BlockLowerMachineList);
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 日志系统采集数据
/// 由外界来调用
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult CaiJiData(string key, string mission_key)
{
try
{
long LC1 = Interlocked.Read(ref YUANZI_TongJi.TotalErrorPackageReceiveCount);
var TotalKey1 = "TotalErrorPackageReceiveCount";
UDPPackageCount LLL_T1 = null;
DataTongJi.TotalCount.TryGetValue(TotalKey1, out LLL_T1);
if (LLL_T1 != null)
{
LLL_T1.Count = LC1;
}
else
{
UDPPackageCount u = new UDPPackageCount();
u.Count = LC1;
DataTongJi.TotalCount.TryAdd(TotalKey1, u);
}
long LC = Interlocked.Read(ref YUANZI_TongJi.TotalReceiveCount);
if (LC <= 60000)
{
Interlocked.Increment(ref MvcApplication.UDPServerErrorCount);
}
else
{
Interlocked.Exchange(ref MvcApplication.UDPServerErrorCount, 0);
}
long jishu_error = Interlocked.Read(ref MvcApplication.UDPServerErrorCount);
if (jishu_error >= 3)
{
Interlocked.Exchange(ref MvcApplication.UDPServerErrorCount, 0);
var hostServer = (IHostServer)MvcApplication.cxt.GetObject("RCUHost.HostServer");
hostServer.Start();
}
var TotalKey = "UDPPackage_TotalRecvPackage";
UDPPackageCount LLL_T = null;
DataTongJi.TotalCount.TryGetValue(TotalKey, out LLL_T);
if (LLL_T != null)
{
LLL_T.Count = LC;
}
else
{
UDPPackageCount u = new UDPPackageCount();
u.Count = LC;
DataTongJi.TotalCount.TryAdd(TotalKey, u);
}
var DDD = DataTongJi.TotalCount;
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var Y = DDD.ToArray();
for (int i = 0; i < Y.Length; i++)
{
var item = Y[i];
UDPPackageCount t = item.Value;
Common.UDPPackage u = new Common.UDPPackage();
u.CommandType = item.Key;
u.TotalCount = t.Count;
u.FenLei = t.FenLei;
u.RemoveTime = ti;
string mns = Newtonsoft.Json.JsonConvert.SerializeObject(u);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns);
//logger.Error("推送的数据:" + mns);
}
var FFF = DataTongJi.CPU_Data;
if (FFF.Count > 0)
{
var FFF1 = FFF.ToArray();
double max_d = FFF1.Max();
double min_d = FFF1.Min();
double avg_d = FFF1.Average();
NewMethod("UDPPackage_CPUMax", ti, max_d);
NewMethod("UDPPackage_CPUMin", ti, min_d);
NewMethod("UDPPackage_CPUAvg", ti, avg_d);
}
var V = DataTongJi.ONLINERCU.ToArray();
Common.UDPPackage ux = new Common.UDPPackage();
ux.CommandType = "RCUOnLine";
ux.TotalCount = V.Length;
ux.RemoveTime = ti;
var W = V.GroupBy(A => A.Value.HotelCode);
var dic = new ConcurrentDictionary<string, long>();
foreach (var item in W)
{
dic.TryAdd(item.Key, item.Count());
}
ux.FenLei = dic;
string mns1 = Newtonsoft.Json.JsonConvert.SerializeObject(ux);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns1);
var V0 = DataTongJi.TakeCardOnLine.ToArray();
var V1 = V0.Where(A => A.Value.Status == 0x01).ToList();
Common.UDPPackage ux1 = new Common.UDPPackage();
ux1.CommandType = "TakeCardIn";
ux1.TotalCount = V1.Count;
ux1.RemoveTime = ti;
var W1 = V1.GroupBy(A => A.Value.HotelCode);
var dic1 = new ConcurrentDictionary<string, long>();
foreach (var item in W1)
{
dic1.TryAdd(item.Key, item.Count());
}
ux1.FenLei = dic1;
string mns2 = Newtonsoft.Json.JsonConvert.SerializeObject(ux1);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns2);
//在线用户
var V3 = DataTongJi.OnLineUserList_IP.ToArray();
DateTime dtn = DateTime.Now;
var span = new TimeSpan(0, 1, 0);
var V4 = V3.Where(A =>
{
if (dtn - A.Value.LastUpdateTime <= span)
{
return true;
}
return false;
}).ToList();
Common.UDPPackage ux2 = new Common.UDPPackage();
ux2.CommandType = "在线用户";
ux2.TotalCount = V4.Count;
ux2.RemoveTime = ti;
var dic2 = new ConcurrentDictionary<string, long>();
foreach (var item in V4)
{
dic2.TryAdd(item.Key, 1);
}
ux2.FenLei = dic2;
var dic3 = new ConcurrentDictionary<string, string>();
foreach (var item in V4)
{
//string Key = IP + "_" + Account + "_" + code;
string[] nnn = item.Key.Split('@');
string ip = nnn[0];
dic3.TryAdd(ip, "0");
}
ux2.ExtraData = dic3;
string mns3 = Newtonsoft.Json.JsonConvert.SerializeObject(ux2);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns3);
//logger.Error("推送的走到这里了");
//DataTongJi.TotalCount.Clear();
Interlocked.Exchange(ref YUANZI_TongJi.TotalReceiveCount, 0);
Interlocked.Exchange(ref YUANZI_TongJi.TotalErrorPackageReceiveCount, 0);
YUANZI_TongJi.TotalReceiveCount = 0;
DataTongJi.OnLineUserList_IP = new ConcurrentDictionary<string, OnLineUser>();
DataTongJi.TotalCount = new System.Collections.Concurrent.ConcurrentDictionary<string, UDPPackageCount>();
DataTongJi.CPU_Data = new System.Collections.Concurrent.ConcurrentBag<double>();
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("RCU 数量统计出错了:" + ex.Message + ex.StackTrace);
return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost()]
public ActionResult CaiJiDataNew(string key, string mission_key)
{
try
{
if (string.IsNullOrEmpty(MvcApplication.JianKong_TxtData))
{
string ns = Server.MapPath("~\\grafana\\" + MvcApplication.WanBuJianKongSourceFileName);
string getdata = System.IO.File.ReadAllText(ns, Encoding.UTF8);
MvcApplication.JianKong_TxtData = getdata;
}
string New_Txt = MvcApplication.JianKong_TxtData;
long LC = Interlocked.Read(ref YUANZI_TongJi.TotalReceiveCount);
New_Txt = New_Txt.Replace("{0}", LC.ToString());
var TotalKey = "UDPPackage_TotalRecvPackage";
UDPPackageCount LLL_T = null;
DataTongJi.TotalCount.TryGetValue(TotalKey, out LLL_T);
if (LLL_T != null)
{
LLL_T.Count = LC;
}
else
{
UDPPackageCount u = new UDPPackageCount();
u.Count = LC;
DataTongJi.TotalCount.TryAdd(TotalKey, u);
}
UDPPackageCount us1 = new UDPPackageCount();
us1.Count = 1;
DataTongJi.TotalCount.TryAdd(TotalKey, us1);
UDPPackageCount us2 = new UDPPackageCount();
us2.Count = 1;
DataTongJi.TotalCount.TryAdd("UDPPackage_Heart", us1);
var DDD = DataTongJi.TotalCount;
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//UDP_Sent UDPPackage_TotalSendPackage
New_Txt = NewMethod(New_Txt, DDD, TotalKey, "{1}");
//RCU_Heart
New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_Heart", "{5}");
//RCU_SearchHost
New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_SearchHost", "{6}");
//Intercept
New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_Intercept", "{7}");
//Energy
New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_能耗", "{9}");
//RCU_OE StatusPass
New_Txt = NewMethod(New_Txt, DDD, "UDPPackage_StatusPass", "{10}");
//TCL_Ctr
UDPPackageCount t_d7 = null;
DDD.TryGetValue("UDPPackage_TianMaoQueryAll", out t_d7);
UDPPackageCount t_d8 = null;
DDD.TryGetValue("UDPPackage_TianMaoCONTROL", out t_d8);
long eee = 0;
if (t_d7 != null)
{
eee = eee + t_d7.Count;
}
if (t_d8 != null)
{
eee = eee + t_d8.Count;
}
New_Txt = New_Txt.Replace("{11}", eee.ToString());
//TianMaoQueryAll
//TianMaoCONTROL
UDPPackageCount t_d2 = null;
DDD.TryGetValue("UDPPackage_TianMaoQueryAll", out t_d2);
UDPPackageCount t_d3 = null;
DDD.TryGetValue("UDPPackage_TianMaoCONTROL", out t_d3);
long ccc = 0;
if (t_d2 != null)
{
ccc = ccc + t_d2.Count;
}
if (t_d3 != null)
{
ccc = ccc + t_d3.Count;
}
//TM_Ctr
New_Txt = New_Txt.Replace("{12}", ccc.ToString());
//小度精灵统计
//string KKK = platformName + "Discovery";
//string KKK = platformName + "Control";
//XD_Ctr
UDPPackageCount t_d5 = null;
DDD.TryGetValue("UDPPackage_小度音箱Discovery", out t_d5);
UDPPackageCount t_d6 = null;
DDD.TryGetValue("UDPPackage_小度音箱Control", out t_d6);
long ddd = 0;
if (t_d5 != null)
{
ddd = ddd + t_d5.Count;
}
if (t_d6 != null)
{
ddd = ddd + t_d6.Count;
}
New_Txt = New_Txt.Replace("{13}", ddd.ToString());
//Hivi_Ctr
New_Txt = New_Txt.Replace("{14}", "0");
var Y = DDD.ToArray();
for (int i = 0; i < Y.Length; i++)
{
var item = Y[i];
UDPPackageCount t = item.Value;
Common.UDPPackage u = new Common.UDPPackage();
u.CommandType = item.Key;
u.TotalCount = t.Count;
u.FenLei = t.FenLei;
u.RemoveTime = ti;
string mns = Newtonsoft.Json.JsonConvert.SerializeObject(u);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns);
//logger.Error("推送的数据:" + mns);
}
var FFF = DataTongJi.CPU_Data;
if (FFF.Count > 0)
{
var FFF1 = FFF.ToArray();
double max_d = FFF1.Max();
double min_d = FFF1.Min();
double avg_d = FFF1.Average();
NewMethod("UDPPackage_CPUMax", ti, max_d);
NewMethod("UDPPackage_CPUMin", ti, min_d);
NewMethod("UDPPackage_CPUAvg", ti, avg_d);
}
var V = DataTongJi.ONLINERCU.ToArray();
//RCU_Online
New_Txt = New_Txt.Replace("{3}", V.Length.ToString());
Common.UDPPackage ux = new Common.UDPPackage();
ux.CommandType = "RCUOnLine";
ux.TotalCount = V.Length;
ux.RemoveTime = ti;
var W = V.GroupBy(A => A.Value.HotelCode);
var dic = new ConcurrentDictionary<string, long>();
foreach (var item in W)
{
dic.TryAdd(item.Key, item.Count());
}
ux.FenLei = dic;
string mns1 = Newtonsoft.Json.JsonConvert.SerializeObject(ux);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns1);
var V0 = DataTongJi.TakeCardOnLine.ToArray();
var V1 = V0.Where(A => A.Value.Status == 0x01).ToList();
//RCU_TakeCard
New_Txt = New_Txt.Replace("{4}", V1.Count.ToString());
Common.UDPPackage ux1 = new Common.UDPPackage();
ux1.CommandType = "TakeCardIn";
ux1.TotalCount = V1.Count;
ux1.RemoveTime = ti;
var W1 = V1.GroupBy(A => A.Value.HotelCode);
var dic1 = new ConcurrentDictionary<string, long>();
foreach (var item in W1)
{
dic1.TryAdd(item.Key, item.Count());
}
ux1.FenLei = dic1;
string mns2 = Newtonsoft.Json.JsonConvert.SerializeObject(ux1);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns2);
//在线用户
var V3 = DataTongJi.OnLineUserList_IP.ToArray();
DateTime dtn = DateTime.Now;
var span = new TimeSpan(0, 1, 0);
var V4 = V3.Where(A =>
{
if (dtn - A.Value.LastUpdateTime <= span)
{
return true;
}
return false;
}).ToList();
//WebUser
New_Txt = New_Txt.Replace("{8}", V4.Count.ToString());
Common.UDPPackage ux2 = new Common.UDPPackage();
ux2.CommandType = "在线用户";
ux2.TotalCount = V4.Count;
ux2.RemoveTime = ti;
var dic2 = new ConcurrentDictionary<string, long>();
foreach (var item in V4)
{
dic2.TryAdd(item.Key, 1);
}
ux2.FenLei = dic2;
var dic3 = new ConcurrentDictionary<string, string>();
foreach (var item in V4)
{
//string Key = IP + "_" + Account + "_" + code;
string[] nnn = item.Key.Split('@');
string ip = nnn[0];
dic3.TryAdd(ip, "0");
}
ux2.ExtraData = dic3;
string mns3 = Newtonsoft.Json.JsonConvert.SerializeObject(ux2);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns3);
//logger.Error("推送的走到这里了");
//DataTongJi.TotalCount.Clear();
Interlocked.Exchange(ref YUANZI_TongJi.TotalReceiveCount, 0);
YUANZI_TongJi.TotalReceiveCount = 0;
DataTongJi.OnLineUserList_IP = new ConcurrentDictionary<string, OnLineUser>();
DataTongJi.TotalCount = new System.Collections.Concurrent.ConcurrentDictionary<string, UDPPackageCount>();
DataTongJi.CPU_Data = new System.Collections.Concurrent.ConcurrentBag<double>();
//WanBuJianKong(New_Txt);
string nth = Server.MapPath("~\\grafana\\1.txt");
//System.IO.File.WriteAllText(nth, New_Txt, Encoding.UTF8);
WanBuJianKong(New_Txt, nth);
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("RCU 数量统计出错了:" + ex.Message + ex.StackTrace);
return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost()]
public ActionResult tgs()
{
WanBuJianKong("fdfdfdf", "");
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
public static void WanBuJianKong(string Data, string SourceTxt)
{
System.IO.File.WriteAllText(SourceTxt, Data, Encoding.UTF8);
// 如果目标文件存在,先删除
if (System.IO.File.Exists(MvcApplication.WanBuJianKongTargetFileName))
{
System.IO.File.Delete(MvcApplication.WanBuJianKongTargetFileName);
}
// 重命名/移动文件
System.IO.File.Move(SourceTxt, MvcApplication.WanBuJianKongTargetFileName);
}
private static string NewMethod(string New_Txt, ConcurrentDictionary<string, UDPPackageCount> DDD, string Key, string ReplaceKey)
{
UDPPackageCount t_d1 = null;
//DDD.TryGetValue("UDPPackage_TotalSendPackage", out t_d1);
if (DDD.TryGetValue(Key, out t_d1))
{
//New_Txt = New_Txt.Replace("{1}", t_d1.Count.ToString());
New_Txt = New_Txt.Replace(ReplaceKey, t_d1.Count.ToString());
}
else
{
New_Txt = New_Txt.Replace(ReplaceKey, "0");
}
return New_Txt;
}
[HttpPost()]
public ActionResult GetRCUOnLineStatus(string key, string mission_key)
{
try
{
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error("RCU 数量统计出错了:" + ex.Message + ex.StackTrace);
return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// RCU在线情况
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult ClearRCUInfo()
{
try
{
var Q = DataTongJi.ONLINERCU;
var DT = DateTime.Now;
var V = Q.Where(A =>
{
var DT_E = A.Value.CurrentDateTime;
TimeSpan timespan = DT - DT_E;
if (timespan.TotalSeconds > 300)
{
return true;
}
return false;
});
foreach (var item in V)
{
var IF = item.Key;
RCUOnLineExtra N;
Q.TryRemove(IF, out N);
}
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Result = "fault" }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost()]
public ActionResult TimerTest()
{
return null;
}
[HttpPost()]
public ActionResult SendData()
{
//HostModalManager.SendData(null,new byte[]{});
return null;
}
private static void NewMethod(string Key, string ti, double data)
{
Common.UDPPackage v = new Common.UDPPackage();
v.CommandType = Key;
long CPU_MAX = (long)Math.Round(data);
v.TotalCount = CPU_MAX;
v.RemoveTime = ti;
string f1 = Newtonsoft.Json.JsonConvert.SerializeObject(v);
CSRedisCacheHelper.redis3.Publish("redis-udppackage", f1);
}
public class MMM
{
public int ID { get; set; }
public string ModalAddress { get; set; }
public string Name { get; set; }
public string EnglistName { get; set; }
public string TWName { get; set; }
public string TypeName { get; set; }
public int SourceType { get; set; }
public bool ActiveIndicator { get; set; }
}
private List<TempDataA> GetData(int groupId, string UserName)
{
IList<SysHotel> hotels = new List<SysHotel>();
switch (UserName)
{
case "admin":
case "leo":
case "blw":
hotels = SysHotelManager.LoadAll().Where(r => !r.IsDeleted).ToList();
break;
default:
hotels = SysHotelManager.LoadAll().Where(r => r.IsApprove && !r.IsDeleted).ToList();//装载已审核的酒店
break;
}
if (groupId != 1)//过滤分组
{
hotels = hotels.Where(r => r.SysHotelGroup.ID == groupId ||
(r.SysHotelGroup.Parent != null && r.SysHotelGroup.Parent.ID == groupId) ||
(r.SysHotelGroup.Parent != null && r.SysHotelGroup.Parent.Parent != null
&& r.SysHotelGroup.Parent.Parent.ID == groupId)).ToList();
}
hotels = hotels.OrderByDescending(o => o.ID).ThenBy(o => o.SysHotelGroup.Sort).ToList();
//DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var hotelData = hotels.Select(r => new TempDataA
{
ID = r.ID,
Code = r.Code,
CreateDate = r.CreatedDate.ToString("yyyy-MM-dd"),
GroupName = SysHotelGroupManager.BuildGroupName(r.SysHotelGroup),
Name = ReturnNameByLanguage(r.Name, r.EName, r.TWName)
}).ToList();
return hotelData;
}
private ActionResult LoadSysHotelGroupTree()
{
SysUsers user = SysUserManager.Get(User.Identity.Name);
if (user.SysHotelGroup == null)
{
return Json(new List<object>(), JsonRequestBehavior.AllowGet);
}
//IList<SysHotelGroup> groups = SysHotelGroupManager.LoadAll();
//return Json(BuildGroupTree(groups, null), JsonRequestBehavior.AllowGet);
IList<object> result = new List<object>();
result.Add(SysHotelGroupManager.CreateGroupTree2(user.SysHotelGroup));
return Json(result, JsonRequestBehavior.AllowGet);
}
[HttpPost()]
public ActionResult GetRCUStatus(string host_number, string mac)
{
bool is_online = CSRedisCacheHelper.Contains(host_number, mac);
return Json(is_online, JsonRequestBehavior.AllowGet);
}
#endregion
public ActionResult PMS_CheckIn()
{
try
{
var _client = new syncstatus.syncstatusSoapClient();
return Json("", JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
throw;
}
}
#region
/// <summary>
/// 上面有接口 可以获取 房型及其回路信息
/// </summary>
/// <param name="roomTypeID"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult LoadRoomTypeModalsWithPage(int roomTypeID)
{
var roomType = RoomTypeManager.Get(roomTypeID);
var roomTypeModals = RoomTypeModalManager.LoadAll(roomType, 0).OrderBy(r => r.ModalAddress).ToList();//, deviceType);//获取该房型所有回路
var roomModals = RoomModalManager.LoadAll().OrderBy(r => r.ModalAddress).ToList();//.Where(r => r.Type == deviceType).ToList();//获取所有默认回路
foreach (RoomModal rm in roomModals)
{
if (roomTypeModals.Where(r => r.ModalAddress == rm.ModalAddress).ToList().Count == 0)//不存在,则新增新的默认回路
{
roomTypeModals.Add(new RoomTypeModal()
{
ID = 0,
RoomType = roomType,
ModalAddress = rm.ModalAddress,
Outlet = rm.Outlet,
Name = rm.Name,
EnglishName = "",
TWName = "",
AliasName = "",
Power = rm.Power,
LowPower = 0,
Default = true,
Type = rm.Type,
Subtype = null,
Sort = rm.Sort,
ActiveIndicator = false,
OfflineDisplay = false,
LowPowerDisplay = false,
Beep = false,
Abnormal = false,
Color = rm.Color,
TCLDeviceName = "",
MultipleTCLName = "",
MultipleGroupID = 0,
IsUploadBaoJing = false
});
}
}
var result = roomTypeModals//.AsQueryable().OrderBy(sort + " " + order).Skip((page - 1) * rows).Take(rows)
.Select(r => new
{
r.ID,
RoomTypeID = roomTypeID,
r.ModalAddress,
r.Outlet,
r.Name,
r.EnglishName,
r.TWName,
r.AliasName,
r.Power,
r.LowPower,
r.Default,
r.Type,
TypeName = HttpContext.InnerLanguage(r.Type.ToString()),
//Subtype = r.Subtype.HasValue ? HttpContext.InnerLanguage(r.Subtype.ToString()) : "",
r.Sort,
r.ActiveIndicator,
r.OfflineDisplay,
r.LowPowerDisplay,
r.Beep,
r.Abnormal,
r.Color,
r.TCLDeviceName,
r.MultipleTCLName,
r.MultipleGroupID,
r.IsUploadBaoJing
});
//var UUU= JsonConvert.SerializeObject(result);
var NNN = result.Where(A => A.ActiveIndicator == true).ToList();
return Json(new { total = result.Count(), rows = NNN });
}
/// <summary>
/// 添加回路
/// </summary>
/// <param name="id"></param>
/// <param name="roomTypeID"></param>
/// <param name="modalAddress"></param>
/// <param name="outlet"></param>
/// <param name="name"></param>
/// <param name="englishName"></param>
/// <param name="power"></param>
/// <param name="twName"></param>
/// <param name="aliasName"></param>
/// <param name="type"></param>
/// <param name="sort"></param>
/// <param name="color"></param>
/// <param name="MultipleGroupID"></param>
/// <param name="MultipleTCLName"></param>
/// <param name="TCLDeviceName"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult SaveRoomTypeModal()
{
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string jsonData = System.Text.Encoding.UTF8.GetString(byts);
var userlist = JsonConvert.DeserializeObject<List<BaoYiModel>>(jsonData);
var QQQ = userlist.GroupBy(A => A.roomTypeID).Select(A => A.Key);
int roomTypeID = 0;
foreach (var item in QQQ)
{
RoomTypeModalManager.DeleteByRoomTypeID(item, 0);
}
var roomType = RoomTypeManager.Get(roomTypeID);
foreach (var item in userlist)
{
var id = item.id;
//var roomTypeID = item.roomTypeID;
var modalAddress = item.modalAddress; ;
var outlet = item.outlet;
var name = item.name;
var englishName = item.englishName;
var power = item.power;
var twName = item.twName;
var aliasName = item.aliasName;
var type = item.type;
var sort = item.sort;
var color = item.color;
var OfflineDisplay = item.OfflineDisplay;
var LowPower = item.LowPower;
//低电保存显示
var LowPowerDisplay = item.LowPowerDisplay;
//是否声音报警
var Beep = item.Beep;
//是否异常判断
var Abnormal = item.Abnormal;
var MultipleGroupID = item.MultipleGroupID;
var MultipleTCLName = item.MultipleTCLName;
var TCLDeviceName = item.TCLDeviceName;
var WXActiveIndicator = item.WXActiveIndicator;
var ActiveIndicator = item.ActiveIndicator;
var isuploadbaojing = item.IsUploadBaoJing;
var roomTypeModal = new RoomTypeModal();
if (id == 0)
{
//if (roomType == null)
//{
// throw new ApplicationException(HttpContext.InnerLanguage("InvalidRoomType"));
//}
//var modall = RoomTypeModalManager.LoadAll().Where(r => r.RoomType.ID == roomTypeID && r.ModalAddress == modalAddress).ToList();
//if (modall != null && modall.Count > 0)
//{
// return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("LoopAddressExists") });
//}
roomTypeModal.RoomType = roomType;
roomTypeModal.ModalAddress = modalAddress;
roomTypeModal.Outlet = outlet;
roomTypeModal.Name = name;
roomTypeModal.EnglishName = englishName;
roomTypeModal.TWName = twName;
roomTypeModal.AliasName = aliasName;
roomTypeModal.Power = power;
roomTypeModal.Default = false;
roomTypeModal.Type = type;
roomTypeModal.Subtype = null;
roomTypeModal.Sort = sort;
roomTypeModal.Color = color;
roomTypeModal.ActiveIndicator = ActiveIndicator;//新增时默认显示
//roomTypeModal.WXActiveIndicator = WXActiveIndicator;//只要显示,微信默认允许控制
roomTypeModal.WXActiveIndicator = true;//只要显示,微信默认允许控制
roomTypeModal.OfflineDisplay = OfflineDisplay;
roomTypeModal.LowPowerDisplay = LowPowerDisplay;
roomTypeModal.Beep = Beep;
roomTypeModal.Abnormal = Abnormal;
roomTypeModal.SourceType = 0;
roomTypeModal.MultipleTCLName = MultipleTCLName;
roomTypeModal.TCLDeviceName = TCLDeviceName;
roomTypeModal.IsUploadBaoJing = isuploadbaojing;
int a = 0;
int.TryParse(MultipleGroupID, out a);
roomTypeModal.MultipleGroupID = a;
RoomTypeModalManager.Save(roomTypeModal);//新增房型下单个回路
}
System.Threading.Tasks.Task.Factory.StartNew<bool>(() => UpdateHostModals(roomTypeModal));//更新主机回路
}
return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("SaveSuccess") });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("SaveFailedBecause") + ex.Message });
}
}
public class BaoYiModel
{
public int id { get; set; }
public int roomTypeID { get; set; }
public string modalAddress { get; set; }
public string outlet { get; set; }
public string name { get; set; }
public string englishName { get; set; }
public int power { get; set; }
public string twName { get; set; }
public string aliasName { get; set; }
public DeviceType type { get; set; }
public int sort { get; set; }
public string color { get; set; }
public int LowPower { get; set; }
//离线保存显示
public bool OfflineDisplay { get; set; }
/// <summary>
/// 是否低电显示
/// </summary>
public bool LowPowerDisplay { get; set; }
public bool Beep { get; set; }
/// <summary>
/// 是否异常判断
/// </summary>
public virtual bool Abnormal { get; set; }
public bool WXActiveIndicator { get; set; }
public bool ActiveIndicator { get; set; }
public string MultipleGroupID { get; set; }
public string MultipleTCLName { get; set; }
public string TCLDeviceName { get; set; }
public bool IsUploadBaoJing { get; set; }
}
[HttpGet()]
public ActionResult GetAllModelName()
{
var t = Enum.GetNames(typeof(Domain.DeviceType));
return Json(new { IsSuccess = true, Result = t }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 删除回路
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult RemoveRoomModal()
{
try
{
string idsstr = Request.Form["ids"];
int[] ids = Newtonsoft.Json.JsonConvert.DeserializeObject<int[]>(idsstr);
IList<string> modalList = new List<string>();
foreach (var id in ids)
{
var modal = RoomTypeModalManager.Get(id);
if (modal != null)
{
List<Host> hosts = HostManager.LoadAll().Where(t => t.RoomType == modal.RoomType).ToList();
foreach (Host host in hosts)
{
HostModalManager.DeteleByRoomTypeModal(host.ID, modal.ID);//先删除主机关联回路
}
RoomTypeModalManager.Delete(modal);//再删除房型关联回路
modalList.Add(Language == Language.CN ? modal.Name : modal.EnglishName);
}
}
return Json(new { IsSuccess = true, Message = HttpContext.InnerLanguage("DeleteSuccess") });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = HttpContext.InnerLanguage("DeleteFailedBecause") + ex.Message });
}
}
/// <summary>
/// 更新主机回路
/// </summary>
/// <param name="roomTypeModal"></param>
/// <returns></returns>
private bool UpdateHostModals(RoomTypeModal roomTypeModal)
{
List<Host> hosts = HostManager.LoadAll().Where(t => t.RoomType.ID == roomTypeModal.RoomType.ID).ToList();
foreach (Host host in hosts)//该房型下所有主机关联回路
{
var hostModal = HostModalManager.GetByModalAddress(host.ID, roomTypeModal.ModalAddress);
if (null == hostModal)
{
HostModalManager.Save(new HostModal { HostID = host.ID, Modal = roomTypeModal, Status = 2, Time = 0, UpdateTime = DateTime.Now });
}
}
return true;
}
#endregion
public ITFTP_SettingMananger TFTPManager { get; set; }
[HttpPost()]
public ActionResult TFTPReadSet()
{
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string body = System.Text.Encoding.UTF8.GetString(byts);
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(122, 111);
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = ex.Message });
}
return Json(new { IsSuccess = true, Message = "Success" });
}
[HttpPost()]
public ActionResult TFTPSet_Execute()
{
try
{
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string body = System.Text.Encoding.UTF8.GetString(byts);
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 = "Success" });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = ex.Message });
}
}
#region
/// <summary>
/// 发送透传数据
/// </summary>
/// <param name="hostnumber"></param>
/// <param name="mac"></param>
/// <param name="bytelist"></param>
/// <param name="cmdtype"></param>
/// <param name="isoriginal"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult SendUDPPackage(string hostnumber, string mac, string bytelist, string cmdtype, bool isoriginal = false)
{
try
{
//Host hh = HostManager.GetByRoomNumber("1001", "1001");
bytelist = Tools.DeleteSpaceChar(bytelist);
byte[] data = Tools.GetBytesFromString(bytelist);
byte byteValue2 = Byte.Parse(cmdtype, System.Globalization.NumberStyles.HexNumber);
HostManager.PublishUDPData(hostnumber, mac, data, byteValue2);
return Json(new { IsSuccess = true, Message = "Success" });
}
catch (Exception)
{
return Json(new { IsSuccess = true, Message = "Success" });
}
}
/// <summary>
/// 设置UDP透传房间
/// </summary>
/// <param name="hostnumber"></param>
/// <param name="mac"></param>
/// <param name="add_or_remove"></param>
/// <returns></returns>
[HttpPost()]
public ActionResult SetTouChuanData(string hostnumber, string mac, string add_or_remove)
{
try
{
if (add_or_remove.Equals("add"))
{
//加入透传列表
CSRedisCacheHelper.HMSet(1, CacheKey.TouChuanKey, hostnumber, hostnumber);
}
else if (add_or_remove.Equals("remove"))
{
CSRedisCacheHelper.HDel(1, CacheKey.TouChuanKey, hostnumber);
}
else
{
}
return Json(new { IsSuccess = true, Message = "Success" });
}
catch (Exception)
{
return Json(new { IsSuccess = true, Message = "Success" });
}
}
#endregion
#region
/// <summary>
/// ID和编号的对应关系
/// </summary>
/// <returns></returns>
[HttpPost()]
public ActionResult HostID_HostNumber()
{
try
{
var qqq = HostManager.LoadAllID_HostNumberMapping();
var qqq1 = qqq.Select(a => new { a.HostNumber, a.Id }).ToList();
if (qqq1.Count > 0)
{
foreach (var item in qqq1)
{
if (!string.IsNullOrEmpty(item.HostNumber))
{
//CSRedisCacheHelper.HMSet(5, CacheKey.RoomNumber_HostNumber, item.HostNumber, item.RoomNumber);
CSRedisCacheHelper.HMSet(5, CacheKey.HostId_HostNumber, item.HostNumber, item.Id);
}
}
}
return Json(new { IsSuccess = true, Message = "Success" });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = "Fault" + ex.Message });
}
}
[HttpPost()]
public ActionResult RoomNumber_HostNumber()
{
try
{
var qqq = HostManager.LoadAll_RoomNumberMapping();
//var qqq1 = qqq.SelectMany(a => new string[] { a.HostNumber, a.RoomNumber }).ToList();
var qqq2 = qqq.Select(A => new { HostNumber = A.HostNumber, RoomNumber = A.RoomNumber }).ToList();
foreach (var item in qqq2)
{
if (!string.IsNullOrEmpty(item.HostNumber) && !string.IsNullOrEmpty(item.RoomNumber))
{
CSRedisCacheHelper.HMSet(5, CacheKey.RoomNumber_HostNumber, item.HostNumber, item.RoomNumber);
}
}
//if (qqq1.Count > 0)
//{
// CSRedisCacheHelper.HMSet(5, CacheKey.RoomNumber_HostNumber, qqq1);
//}
return Json(new { IsSuccess = true, Message = "Success" });
}
catch (Exception ex)
{
return Json(new { IsSuccess = false, Message = "Fault" + ex.Message });
}
}
[HttpPost()]
public ActionResult MQTTHeartBeat()
{
try
{
if (BLWMQTT.MqttClientGlobal.IsConnected)
{
BLWMQTT.MqttClientGlobal.Publish("blw/mqtt/heartbeat", Encoding.UTF8.GetBytes("hello beat"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
}
else
{
BLWMQTT.StartMqtt();
}
return Json(new { IsSuccess = true, Message = "Success" });
}
catch (Exception)
{
return Json(new { IsSuccess = false, Message = "Fault" });
}
}
#endregion
private void SyncRoomStatus(int hotelID, DataRow dr, RoomStatus roomStatus, int flag)
{
Task.Factory.StartNew(() =>
{
Host host = HostManager.GetByRoomNumber(dr["RoomNumber"].ToString(), hotelID);
if (host != null)
{
HostManager.ChangeRoomStatus(host, roomStatus);
string Key = CacheKey.SyncRoomStatus + "_" + host.HostNumber;
RoomStatusRequest ddd = new RoomStatusRequest();
ddd.HostNumber = host.HostNumber;
ddd.MAC = host.MAC;
ddd.Status = roomStatus;
CSRedisCacheHelper.Set_PartitionWithForever<RoomStatusRequest>(Key, ddd);
}
var _client = new syncstatus.syncstatusSoapClient();
_client.UpdateCheckInOrOutRecord(dr["Code"].ToString(), Convert.ToInt64(dr["ID"]), flag);//更新已同步状态
}, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
}
[HttpPost()]
public ActionResult syncRoomStatusCallback()
{
try
{
var _client = new syncstatus.syncstatusSoapClient();
RCUHost.TimingHelper.HostTimingControlHelper.HostTimingControl(DeviceControlReceiver);//定时控制
DateTime now = DateTime.Now;
DataSet dsHotel = _client.GetHotelCode();
foreach (DataRow row in dsHotel.Tables[0].Rows)
{
if (Convert.ToInt16(row["HotelID"]) > 0)
{
DataSet ds = _client.GetCheckInOrOutRecord(row["Code"].ToString());
if (ds != null && ds.Tables.Count > 2 && ds.Tables[3].Rows.Count > 0)
{
int hotelID = Convert.ToInt16(ds.Tables[3].Rows[0]["HotelID"].ToString());//与PMS同步接口所配置的HotelID
if (hotelID > 0)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
var q = RoomStatusManager.Get(2);
SyncRoomStatus(hotelID, dr, q, 0);//更新出租房态
}
foreach (DataRow dr in ds.Tables[1].Rows)
{
var q = RoomStatusManager.Get(8);
SyncRoomStatus(hotelID, dr, q, 1);//更新退房房态
}
foreach (DataRow dr in ds.Tables[2].Rows)
{
var q = RoomStatusManager.Get(4);
SyncRoomStatus(hotelID, dr, q, 2);//更新待租房态
}
}
}
}
}
return Json(new { IsSuccess = true, Message = "Success" });
}
catch (Exception ex)
{
logger.Error("定时同步房态异常。原因:" + ex.ToString());
return Json(new { IsSuccess = false, Message = ex.Message });
}
}
/// <summary>
/// 凌晨定时
/// </summary>
/// <param name="interval_Minutes"></param>
/// key=123456789&mission_key=#{mission_key}
/// <returns></returns>
[HttpPost()]
public ActionResult LingChenECO(string key, string mission_key)
{
try
{
string[] data = mission_key.Split('_');
string code = data[1];
string time = data[2];
string[] wendu = CSRedisCacheHelper.HMGet<string>(5, MvcApplication.LingChenECO_IntervalKey, code + "#" + time);
HostManager.TimerECO(code, int.Parse(wendu[0]));
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost()]
public ActionResult RestartUDPServer(string key)
{
try
{
if (key.Equals("blw^_^wlb"))
{
var hostServer = (IHostServer)MvcApplication.cxt.GetObject("RCUHost.HostServer");
hostServer.Start();
}
return Json(new { IsSuccess = true, Result = "success" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
logger.Error(ex.Message);
return Json(new { IsSuccess = false, Result = "操作异常:" + ex.Message }, JsonRequestBehavior.AllowGet);
}
}
}
public class NReturnInfo
{
public bool isok { set; get; } // 是否成功true成功
public string message { set; get; } // 传递接口信息or报错信息
public int status { set; get; } // 服务器报错信息正确为200错误404/500等
public object response { set; get; } // 获取到的信息本体若报错则为null
}
public class chuangweilogin
{
public string username { get; set; }
public string password { get; set; }
}
public class TongJiApiInvokeInfo
{
public Dictionary<string, int> DataList { get; set; }
}
public class TimeSplitData
{
public string ShiJianDuan_Key { get; set; }
public int Count { get; set; }
}
}