Files
Web_CRICS_Server_VS2010_Prod/Service/Implement/HostManager.cs

1621 lines
69 KiB
C#
Raw Normal View History

2025-12-11 09:17:16 +08:00
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Data;
using System.Linq;
using System.Linq.Dynamic;
using System.Text;
using System.Threading.Tasks;
using Dao;
using Domain;
using RCUHost;
using System.Xml;
using Common;
using System.IO;
using Dao.Implement;
using RestSharp;
using CommonEntity;
using System.Configuration;
namespace Service.Implement
{
public class HostManager : GenericManagerBase<Host>, IHostManager
{
#region Properties
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(HostManager));
public IUpdateHostReceiver UpdateHostReceiver { get; set; }
public IUpdateHostFTPReceiver UpdateHostFTPReceiver { get; set; }
public IUpdateRCUFileReceiver UpdateRCUFileReceiver { get; set; }
public IAuthorizationReceiver AuthorizationReceiver { get; set; }
//public IUpdateConfigReceiver UpdateConfigReceiver { get; set; }
//public IConnectingRoomReceiver ConnectingRoomReceiver { get; set; }
//public IHeartReceiver HeartReceiver { get; set; }
//public IRoomTypeRepository RoomTypeRepository { get; set; }
public IAlarmSettingRepository AlarmSettingRepository { get; set; }
public IGroupRepository GroupRepository { get; set; }
public IRoomTypeModalRepository RoomTypeModalRepository { get; set; }
public IRoomTypeAirRepository RoomTypeAirRepository { get; set; }
public IHostAirRepository HostAirRepository { get; set; }
public IHostModalRepository HostModalRepository { get; set; }
public INetworkSettingReceiver NetworkSettingReceiver { get; set; }
public IRoomStatusRepository RoomStatusRepository { get; set; }
public IRoomStatusChangedReceiver RoomStatusChangedReceiver { get; set; }
public IRoomServiceRepository RoomServiceRepository { get; set; }
public ISysHotelRepository SysHotelRepository { get; set; }
public IDeviceSecretReceiver DeviceSecretReceiver { get; set; }
public IHostSecretReceiver HostSecretReceiver { get; set; }
public IHostWordsReportRepository HostWordsReportRepository { get; set; }
public IHostFaultsRepository HostFaultsRepository { get; set; }
public IHostFaultRecordsRepository HostFaultRecordsRepository { get; set; }
public IHostSceneRepository HostSceneRepository { get; set; }
public IHostRoomCardRepository HostRoomCardRepository { get; set; }
public IHostRegisterReceiver HostRegisterReceiver { get; set; }
public IHostRegisterSetReceiver HostRegisterSetReceiver { get; set; }
public ISysOauth2Repository SysOauth2Repository { get; set; }
public IHotelSeasonRepository HotelSeasonRepository { get; set; }
public IHotelAirControlRepository HotelAirControlRepository { get; set; }
public IHostModalManager HostModalManager { get; set; }
public IHostRepository HostRepository { get; set; }
/// <summary>
/// 阿宝添加的功能
/// </summary>
public IKongTiaoTimerManager KongTiaoManager { get; set; }
public IRoomNoBodyMananger RoomNoBodyMananger { get; set; }
public IRoomNoBodyLogMananger RoomNoBodyLogMananger { get; set; }
public IECO_DetailRepository ECO_DetailRepository { get; set; }
public IECO_SettingRepository ECO_SettingRepository { get; set; }
public IT_FTPReceiver TFTP_LogReceiver { get; set; }
public IT_FTPSettingReceiver TFTP_LogSettingReceiver { get; set; }
/// <summary>
/// 透传功能
/// </summary>
public IHostTouChuan HostUDPTouChuan { get; set; }
#endregion
//private bool GetHostStatus(string hostNumber)
//{
// return Common.MemoryCacheHelper.Contains(hostNumber);
//}
#region Public Methods
public override Host Get(object id)
{
var host = base.Get(id);
if (host != null)
{
host.Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC);
}
return host;
}
public override IList<Host> LoadAll()
{
IList<Host> list = base.LoadAll();
foreach (var host in list)
{
host.Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC);
}
return list;
}
public IList<Host> LoadAll(string order, string sort, Group group, string roomNumber)
{
IList<Group> groups = GroupRepository.GetGroupList(group);
IList<Host> hosts = ((IHostRepository)CurrentRepository).LoadAll(order, sort, groups, roomNumber);
foreach (var host in hosts)
{
host.Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC);
var table = RoomServiceRepository.LoadAll().Where(r => r.HostID == host.ID && r.AlarmType == 'B').ToList();
//foreach (var roomService in table)
//{
// if (roomService.AlarmCode == "B01")
// {
// host.SOS = roomService.Status;
// }
// else if (roomService.AlarmCode == "B02")
// {
// host.RequestDNDST = roomService.Status;
// }
// else if (roomService.AlarmCode == "B03")
// {
// host.RequestClear = roomService.Status;
// }
// else if (roomService.AlarmCode == "B04")
// {
// host.RequestService = roomService.Status;
// }
// else if (roomService.AlarmCode == "B05")
// {
// host.RequestCheckOut = roomService.Status;
// }
//}
}
return hosts;
}
public IList<Host> LoadAll(Group group)
{
IList<Group> groups = GroupRepository.GetGroupList(group);
IList<Host> hosts = ((IHostRepository)CurrentRepository).LoadAll(groups);
foreach (var host in hosts)
{
host.Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC);
}
return hosts;
}
public IList<Host> LoadAll(string hotelCode)
{
var hotel = SysHotelRepository.GetByCode(hotelCode);
return ((IHostRepository)CurrentRepository).LoadAll(hotel.ID, "");
}
public IList<Host> LoadAll(int hotelID, string roomNumber = "")
{
IList<Host> hosts = ((IHostRepository)CurrentRepository).LoadAll(hotelID, roomNumber);
foreach (var host in hosts)
{
host.Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC);
}
return hosts;
}
public IList<Host> LoadAll(IList<Group> groupList, RoomStatus roomStatus, RoomType roomType)
{
var hostList = ((IHostRepository)CurrentRepository).LoadAll(groupList, roomStatus, roomType);
foreach (var host in hostList)
{
host.Status = Common.CSRedisCacheHelper.Contains(host.HostNumber, host.MAC);
}
return hostList;
}
public IList<Host> LoadAllByPage(out long total, int page, int rows, string order, string sort, int groupId, int hotelID, string roomNumber, string mac, string roomType, int isSyncRoomNumber)
{
return ((IHostRepository)CurrentRepository).LoadAllByPage(out total, page, rows, order, sort, groupId, hotelID, roomNumber, mac, roomType, isSyncRoomNumber).ToList();
//var list = CurrentRepository.LoadAll();
//if (groupId.HasValue && groupId != 1)
//{
// list = list.Where(r => r.Group != null && r.Group.ID == groupId);
//}
//total = list.LongCount();
//list = list.OrderBy(sort + " " + order);
//list = list.Skip((page - 1) * rows).Take(rows);
//return list.ToList();
}
public DataTable LoadHostWithPage(out long total, int page, int rows, string order, string sort, int groupId, int hotelID, string roomNumber, string mac, string roomType)
{
return ((IHostRepository)CurrentRepository).LoadHostWithPage(out total, page, rows, order, sort, groupId, hotelID, roomNumber, mac, roomType);
}
public IList<Room> LoadRooms(out long total, int page, int rows, int? groupId, int lang, int hotelID)
{
return ((IHostRepository)CurrentRepository).LoadRooms(out total, page, rows, groupId, lang, hotelID);
}
public IList<string> LoadRoomNumbers()
{
return ((IHostRepository)CurrentRepository).LoadAll().Select(r => r.RoomNumber).ToList<string>();
}
public DataTable LoadRoomNumbers(Group group, int hotelID)
{
return ((IHostRepository)CurrentRepository).LoadRoomNumbers(group, hotelID);
}
public override object Save(Host entity)
{
try
{
//SysHotel sysHotel = SysHotelRepository.Get(entity.SysHotel.ID);
//if (sysHotel == null) { throw new ApplicationException("无效的酒店!"); }
//RoomType roomType = RoomTypeRepository.Get(entity.RoomType.ID);
//if (roomType == null) { throw new ApplicationException("无效的房型!"); }
if (entity.ID == 0)//新增
{
entity.RegisterDate = DateTime.Now;
entity.RoomStatus = new RoomStatus { ID = 16 };
entity.SafeStatus = 2;
entity.Version = "C";//界面上新增的主机都属于C系列主机
entity.ExpireTime = Convert.ToDateTime("2100-12-31");//默认有效期永久
entity.Last_Modified_Time = DateTime.Now;//标识有更新
base.Save(entity);
Task.Factory.StartNew((state) =>
{
var entity1 = state as Host;
UpdateHostModals(entity1);
}, entity);
//更新回路
return entity;
}
else
{
var host = CurrentRepository.Get(entity.ID);
Host host_take = null;
string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
{
host_take = obj as Host;
}
int oldRoomTypeID = host.RoomType.ID;
bool isChanged = false;
if (host.RoomNumber != entity.RoomNumber)
{
host.RoomNumber = entity.RoomNumber;
isChanged = true;
}
if (host.MAC != entity.MAC)
{
host.MAC = entity.MAC;
isChanged = true;
}
if (host.SysHotel.ID != entity.SysHotel.ID)
{
host.SysHotel = entity.SysHotel;
isChanged = true;
}
if (host.RoomType.ID != entity.RoomType.ID)
{
host.RoomType = entity.RoomType;
isChanged = true;
}
if (host.Remark != entity.Remark.Trim())
{
host.Remark = entity.Remark.Trim();
isChanged = true;
}
if (host.ServerIP != entity.ServerIP.Trim())
{
host.ServerIP = entity.ServerIP.Trim();
isChanged = true;
}
if (host.ServerPort != entity.ServerPort)
{
host.ServerPort = entity.ServerPort;
isChanged = true;
}
if (host.FCS_locationUUID != entity.FCS_locationUUID)
{
host.FCS_locationUUID = entity.FCS_locationUUID;
isChanged = true;
}
if (isChanged) { host.Last_Modified_Time = DateTime.Now; }
host.HostNumber = entity.HostNumber;
host.Group = entity.Group;
if (string.IsNullOrEmpty(host.Version)) { host.Version = "C"; }
host.IsSyncRoomNumber = entity.IsSyncRoomNumber;
host.IsAutoUpdate = entity.IsAutoUpdate;
host.IPType = entity.IPType;
if (host.IPType == 2)
{
host.LanIP = entity.LanIP.Trim();
host.LanPort = entity.LanPort;
host.SubnetMask = entity.SubnetMask.Trim();
host.Gateway = entity.Gateway.Trim();
host.DNS = entity.DNS.Trim();
}
base.Update(host);
if (host_take != null)
{
host_take.ServerPort = host.ServerPort;
host_take.ServerIP = host.ServerIP;
host_take.FCS_locationUUID = host.FCS_locationUUID;
host.RoomType = host.RoomType;
host_take.MAC = host.MAC;
host_take.Version = host.Version;
host_take.LanIP = host.LanIP;
host_take.LanPort = host.LanPort;
host_take.SubnetMask = host.SubnetMask;
host_take.Gateway = host.Gateway;
host_take.DNS = host.DNS;
}
if (HostModalRepository.LoadByHostID(entity.ID).ToList().Count == 0 || host.RoomType == null || host.RoomType.ID != oldRoomTypeID)
{
Task.Factory.StartNew((state) =>
{
var entity1 = state as Host;
UpdateHostModals(entity1);
}, entity);//更新回路
}
return host;
}
}
catch (Exception ex)
{
throw new ApplicationException(ex.ToString());
}
}
public void SaveSmartVoiceBinding(Host entity)
{
var host = CurrentRepository.Get(entity.ID);
host.XiaoDuCUID = entity.XiaoDuCUID;
host.TCLCUID = entity.TCLCUID;
host.TCLSkillID = entity.TCLSkillID;
host.HuaWeiCUID = entity.HuaWeiCUID;
host.TianMaoCUID = entity.TianMaoCUID;
host.HiWeiCUID = entity.HiWeiCUID;
host.RokidWebhookUrl = entity.RokidWebhookUrl;
host.IsWelcomeDisableTime = entity.IsWelcomeDisableTime;
host.DisableStartTime = entity.DisableStartTime;
host.DisableEndTime = entity.DisableEndTime;
//string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber;
//object obj = MemoryCacheHelper.Get(Key);
//if (obj != null)
//{
// host = obj as Host;
// host.XiaoDuCUID;
//}
((IHostRepository)CurrentRepository).Update(host);
}
public Host GetByMAC(string mac, int hotelID)
{
return (CurrentRepository as Dao.IHostRepository).GetByMAC(mac, hotelID);
}
public IList<Host> LoadByMac(string mac)
{
return (CurrentRepository as Dao.IHostRepository).LoadByMac(mac);
}
public Host GetByXiaoDuCUID(string cuid)
{
return (CurrentRepository as Dao.IHostRepository).GetByXiaoDuCUID(cuid);
}
public Host GetByTianMaoCUID(string cuid)
{
return (CurrentRepository as Dao.IHostRepository).GetByTianMaoCUID(cuid);
}
public Host GetByHuaWeiCUID(string cuid)
{
return (CurrentRepository as Dao.IHostRepository).GetByHuaWeiCUID(cuid);
}
public Host GetByTCLCUID(string cuid)
{
return (CurrentRepository as Dao.IHostRepository).GetByTCLCUID(cuid);
}
public Host GetByRoomNumber(string roomNumber, int hotelID)
{
if (String.IsNullOrEmpty(roomNumber))
{
return null;
}
return CurrentRepository.LoadAll().FirstOrDefault(r => r.RoomNumber == roomNumber && r.SysHotel.ID == hotelID && !r.IsDeleted);
}
public Host GetByRoomNumber(string roomNumber, string hotelCode)
{
if (String.IsNullOrEmpty(roomNumber))
{
return null;
}
return CurrentRepository.LoadAll().FirstOrDefault(r => r.RoomNumber == roomNumber && r.SysHotel.Code == hotelCode && !r.IsDeleted);
}
public Host GetByRoomNumberSupply(string roomNumber)
{
if (String.IsNullOrEmpty(roomNumber))
{
return null;
}
return CurrentRepository.LoadAll().FirstOrDefault(r => r.RoomNumber == roomNumber && !r.IsDeleted);
}
//public IList<Host> GetConnectRoomHosts(Host host)
//{
// return ((IHostRepository)CurrentRepository).GetConnectRoomHosts(host);
//}
public string GetRoomNumber(int hostID)
{
return CurrentRepository.LoadAll().Where(r => r.ID == hostID && !r.IsDeleted).Select(r => r.RoomNumber).FirstOrDefault();
}
public IList<Host> GetByGroup(Group group)
{
return LoadAll().Where(r => r.Group == group).ToList();
}
/// <summary>
/// 删除主机的同时,删除其关联的数据
/// </summary>
/// <param name="idList"></param>
public override void Delete(IList<object> idList)
{
foreach (int id in idList)
{
HostModalRepository.DeteleByHostID(id);//删除 HostModal
HostWordsReportRepository.DeteleByHostID(id);
HostFaultsRepository.DeteleByHostID(id);
//HostFaultRecordsRepository.DeteleByHostID(id);
HostSceneRepository.DeteleByHostID(id);
HostRoomCardRepository.DeteleByHostID(id);
}
((IHostRepository)(this.CurrentRepository)).Delete(idList);
}
public void UpdateHost(HostUpdate hostUpdate, FileType fileType, string fileHref, string fileMd5, IList<Host> hosts, bool isTFTP)
{
switch (hostUpdate.FileType)
{
case FileType.RCUValidate:
UpdateRCUFileReceiver.Update(hostUpdate, hosts);
break;
default:
if (isTFTP)
{
UpdateHostReceiver.Update(hostUpdate, fileType, fileHref, fileMd5, hosts);
}
else
{
UpdateHostFTPReceiver.Update(hostUpdate, fileType, fileHref, fileMd5, hosts);
}
break;
}
}
/// <summary>
/// 针对C主机升级
/// </summary>
/// <param name="hostUpdate"></param>
/// <param name="fileType"></param>
/// <param name="fileHref"></param>
/// <param name="fileMd5"></param>
/// <param name="hosts"></param>
public void UpdateHostC(HostUpdate hostUpdate, FileType fileType, string fileHref, string fileMd5, IList<Host> hosts)
{
UpdateHostReceiver.Update(hostUpdate, fileType, fileHref, fileMd5, hosts);
}
/// <summary>
/// 修改房态
/// </summary>
/// <param name="host"></param>
/// <param name="roomStatusID">2出租4待租8退房16空房</param>
public void ChangeRoomStatus(Host host, int roomStatusID, string wxValidate)
{
RoomStatus NNN = NewMethod(host, roomStatusID);
ChangeRoomStatus(host, NNN, wxValidate);
}
private RoomStatus NewMethod(Host host, int roomStatusID)
{
//目前房态信息有一下4种
//0x01:入住 - 用户插卡取电后RCU主机上报入住服务
//0x02:退房 - 服务器通过协议下发房态
//0x03:待租 - 服务器通过协议下发房态
//0x04:空房 - 服务器通过协议下发房态
RoomStatus NNN = RoomStatusRepository.Get(roomStatusID);
string host_number = host.HostNumber;
//string CKey = CacheKey.RoomStatus_Prefix + "_" + host_number;
//var q = CSRedisCacheHelper.Get_Partition<SomeDeviceExistsData>(CKey);
Host host_takeout = null;
string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host_number;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
{
//q.RoomStatus = NNN;
//CSRedisCacheHelper.Set_Partition<SomeDeviceExistsData>(CKey,q);
host_takeout = (Host)obj;
host_takeout.RoomStatus = NNN;
}
return NNN;
}
/// <summary>
/// 阿宝要修改的,
/// PMS 有房态变化,这里就要产生一个任务
/// </summary>
/// <param name="host"></param>
/// <param name="roomStatus"></param>
/// <param name="wxValidate"></param>
public void ChangeRoomStatus(Host host, RoomStatus roomStatus, string wxValidate)
{
try
2025-12-11 09:17:16 +08:00
{
logger.Error("触发状态ID" + roomStatus.ID);
RoomStatusChangedReceiver.SendRoomStatus(host, roomStatus);
host.RoomStatus = roomStatus;
Host host_takeout = null;
string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
{
host_takeout = (Host)obj;
host_takeout.RoomStatus = roomStatus;
}
2025-12-11 09:17:16 +08:00
if (!string.IsNullOrEmpty(wxValidate))
{
host.WXValidate = wxValidate;
}
CurrentRepository.Update(host);
2025-12-11 09:17:16 +08:00
#region
2025-12-11 09:17:16 +08:00
if (roomStatus.ID == 2 || roomStatus.ID == 8)//开房和退房时重置
2025-12-11 09:17:16 +08:00
{
if (!string.IsNullOrEmpty(host.XiaoDuCUID))
{
string accessToken = SysOauth2Repository.GetXiaoDuToken();
if (!string.IsNullOrEmpty(accessToken) && host.SysHotel.IsPowerOffResetXiaoDu)
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开
{
XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度
}
});
}
}
if (!string.IsNullOrEmpty(host.TianMaoCUID))
2025-12-11 09:17:16 +08:00
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开
2025-12-11 09:17:16 +08:00
{
TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK",
Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵
2025-12-11 09:17:16 +08:00
}
});
}
}
#endregion
2025-12-11 09:17:16 +08:00
if (roomStatus.ID == 8)
2025-12-11 09:17:16 +08:00
{
#region 退
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
2025-12-11 09:17:16 +08:00
{
//条件1出租后2取电后3断电后
List<HotelAirControl> list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 4, true);
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路
if (list.Count > 0 && hostModals.Count > 0)
2025-12-11 09:17:16 +08:00
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
2025-12-11 09:17:16 +08:00
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
2025-12-11 09:17:16 +08:00
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
2025-12-11 09:17:16 +08:00
{
#region
//var TTT = new Tuple<Host, HotelAirControl, List<HostModal>>(host, item, hostModals);
//Task.Factory.StartNew((state) =>
// {
// System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行
// Tuple<Host, HotelAirControl, List<HostModal>> NNN = state as Tuple<Host, HotelAirControl, List<HostModal>>;
// var QQ0 = NNN.Item1;
// var QQ1 = NNN.Item2;
// var QQ2 = NNN.Item3;
// foreach (HostModal hostModal in QQ2)
// {
// HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变
// }
// }, TTT);
#endregion
try
2025-12-11 09:17:16 +08:00
{
//这段代码在生产环境中不管用,很奇怪
string KeyMission = System.Guid.NewGuid().ToString("N");
MissonData m = new MissonData()
{
hostnumber = host.HostNumber,
mac = host.MAC,
};
2025-12-11 09:17:16 +08:00
m.HostModalList = new List<Tuple<string, DeviceType>>();
foreach (HostModal hostModal in hostModals)
{
var t = new Tuple<string, DeviceType>(hostModal.Modal.ModalAddress, hostModal.Modal.Type);
m.HostModalList.Add(t);
}
m.Status = item.Status;
m.SettingTemp = item.SettingTemp;
m.FanSpeed = item.FanSpeed;
m.Mode = item.Mode;
string MKey = "TuiFang_" + KeyMission;
CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
DelayExe_Task(host, item.DelayTime, MKey);
break;
2025-12-11 09:17:16 +08:00
}
catch (Exception)
{
2025-12-11 09:17:16 +08:00
}
2025-12-11 09:17:16 +08:00
}
}
}
}
}
#endregion
2025-12-11 09:17:16 +08:00
}
if (roomStatus.ID == 2)
2025-12-11 09:17:16 +08:00
{
#region
//阿宝
//空调 在10分钟无人入住的情况之下就关闭
//启动 一个任务
#region
int currenthotelid = host.SysHotel.ID;
RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == currenthotelid);
if (nnn != null)
2025-12-11 09:17:16 +08:00
{
if (!nnn.How.Equals("without"))
{
string Code = host.SysHotel.Code;
string RoomNo = host.RoomNumber;
DateTime CreateDate = host.SysHotel.CreatedDate;
string CD = CreateDate.ToString("yyyy-MM-dd");
int hotel_id = host.SysHotel.ID;
int host_id = host.ID;
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
int delaytime = nnn.DelayTime;
int sustain = 20;
string MissionKey = System.Guid.NewGuid().ToString("N");
DateTime starttime = DateTime.Now.AddMinutes(delaytime);
DateTime endtime = starttime.AddMinutes(sustain);
//创建一条任务 插 入数据库
KongTiaoTimer k = new KongTiaoTimer();
k.HotelID = hotel_id;
k.HostID = host_id;
k.HotelCode = Code;
k.RoomNo = RoomNo;
k.MissonKey = MissionKey;
k.IsCancel = 0;
k.CreateTime = ti;
k.StartTime = starttime.ToString("yyyy-MM-dd HH:mm:ss");
k.EndTime = endtime.ToString("yyyy-MM-dd HH:mm:ss");
k.CreateDate = CD;
//string HotelCode, string RoomNo, int host_id,int hotel_id
MissionRequestData mm = new MissionRequestData();
mm.DelayTimer = delaytime;
mm.KT = k;
//mm.HotelCode = Code;
//mm.RoomNo = RoomNo;
//mm.HotelID = hotel_id;
//mm.HostID = host_id;
//mm.CreateDate = CD;
string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm);
//k.JsonData = jsstr;
k.MissonKey = MissionKey;
KongTiaoManager.Save(k);
//给 任务管理系统 发送消息
var client1 = new RestClient(Missionsys_Address);
var request1 = new RestRequest("api/index", Method.POST);
logger.Error("任务管理系统发送了数据:" + Missionsys_Address + "API/Index");
//GetRequest ggg = new GetRequest() { creatDate = DateTime.Now.ToString("yyyy-mm-dd"), roomNumber = RoomNo, code = Code };
request1.AddParameter("jsonData", jsstr);
client1.ExecuteAsync(request1, (response) => { });
}
2025-12-11 09:17:16 +08:00
}
#endregion
2025-12-11 09:17:16 +08:00
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
2025-12-11 09:17:16 +08:00
{
List<HotelAirControl> list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 1, true);
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路
if (list.Count > 0 && hostModals.Count > 0)
2025-12-11 09:17:16 +08:00
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
2025-12-11 09:17:16 +08:00
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
2025-12-11 09:17:16 +08:00
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
2025-12-11 09:17:16 +08:00
{
var TTT = new Tuple<Host, HotelAirControl, List<HostModal>>(host, item, hostModals);
Task.Factory.StartNew((state) =>
{
System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行
Tuple<Host, HotelAirControl, List<HostModal>> NNN = state as Tuple<Host, HotelAirControl, List<HostModal>>;
var QQ0 = NNN.Item1;
var QQ1 = NNN.Item2;
var QQ2 = NNN.Item3;
foreach (HostModal hostModal in QQ2)
{
//host 只需要hostnumber和mac
//hostmodal只需要 address //和type
//device.Address = hostModal.Modal.ModalAddress;
//device.Type = hostModal.Modal.Type;
HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变
}
}, TTT);
try
{
//这段代码在生产环境中不管用,很奇怪
//string KeyMission = System.Guid.NewGuid().ToString("N");
//MissonData m = new MissonData()
//{
// hostnumber = host.HostNumber,
// mac = host.MAC,
//};
//m.HostModalList = new List<Tuple<string, DeviceType>>();
//foreach (HostModal hostModal in hostModals)
//{
// var t = new Tuple<string, DeviceType>(hostModal.Modal.ModalAddress, hostModal.Modal.Type);
// m.HostModalList.Add(t);
//}
//m.Status = item.Status;
//m.SettingTemp = item.SettingTemp;
//m.FanSpeed = item.FanSpeed;
//m.Mode = item.Mode;
//string MKey = "Mission_" + KeyMission;
//CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
//DelayExe_Task(host, item.DelayTime, KeyMission);
break;
}
catch (Exception)
{
2025-12-11 09:17:16 +08:00
}
2025-12-11 09:17:16 +08:00
}
}
}
}
}
#endregion
2025-12-11 09:17:16 +08:00
}
}
catch (Exception ex)
{
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
2025-12-11 09:17:16 +08:00
}
}
public class MissonData
{
public string hostnumber { get; set; }
public string mac { get; set; }
public List<Tuple<string, DeviceType>> HostModalList { get; set; }
public int Status { get; set; }
public int SettingTemp { get; set; }
public int FanSpeed { get; set; }
public int Mode { get; set; }
}
/// <summary>
/// 任务管理系统是 分钟,这里是秒
/// </summary>
/// <param name="host"></param>
/// <param name="delaytime">秒</param>
/// <param name="MissionKey"></param>
private static void DelayExe_Task(Host host, int delaytime, string MissionKey)
{
string Code = host.SysHotel.Code;
string RoomNo = host.RoomNumber;
DateTime CreateDate = host.SysHotel.CreatedDate;
string CD = CreateDate.ToString("yyyy-MM-dd");
int hotel_id = host.SysHotel.ID;
int host_id = host.ID;
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
int sustain = 20;
DateTime starttime = DateTime.Now.AddSeconds(delaytime);
DateTime endtime = starttime.AddMinutes(sustain);
//创建一条任务 插 入数据库
KongTiaoTimer k = new KongTiaoTimer();
k.HotelID = hotel_id;
k.HotelCode = Code;
k.RoomNo = RoomNo;
k.MissonKey = MissionKey;
k.IsCancel = 0;
k.CreateTime = ti;
k.StartTime = starttime.ToString("yyyy-MM-dd HH:mm:ss");
k.EndTime = endtime.ToString("yyyy-MM-dd HH:mm:ss");
k.CreateDate = CD;
MissionRequestData mm = new MissionRequestData();
mm.DelayTimer = delaytime;
mm.KT = k;
string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm);
logger.Error("任务管理:" + jsstr);
//给 任务管理系统 发送消息
var client1 = new RestClient(Missionsys_Address);
var request1 = new RestRequest("api/index_sec", Method.POST);
request1.AddParameter("jsonData", jsstr);
client1.ExecuteAsync(request1, (response) => { });
}
/// <summary>
/// 批量更改主机网络设置
/// </summary>
/// <param name="hostList">RCU主机列表</param>
/// <param name="ip">IP地址</param>
/// <param name="subnetmask">子网掩码</param>
/// <param name="gateway">默认网关</param>
/// <param name="port">通讯端口</param>
public void ChangeNetworkSetting(IList<Host> hostList, string ip, string subnetmask, string gateway, ushort port)
{
foreach (var host in hostList)
{
string newIP = GetNewIP(host.IP, ip);
if (!NetworkSettingReceiver.SetNetwork(host, newIP, subnetmask, gateway, port))
{
throw new ApplicationException("设置客房【" + host.RoomNumber + "】主机网络参数失败。");
}
host.IP = newIP;
host.SubnetMask = subnetmask;
host.Gateway = gateway;
host.Port = port;
CurrentRepository.Update(host);
}
}
#endregion
#region Private Methods
private bool UpdateHostAirs(Host host)
{
HostAirRepository.DeteleByHostID(host.ID);
var list = RoomTypeAirRepository.LoadAll().Where(r => r.RoomType == host.RoomType);
foreach (var modal in list)
{
var hostAir = new HostAir();
hostAir.HostID = host.ID;
hostAir.Modal = modal;
hostAir.ControlType = host.RoomType.ControlType;
HostAirRepository.SaveOrUpdate(hostAir);
}
return true;
}
private bool UpdateHostModals(Host host)
{
if (host == null)
{
return false;
}
HostModalRepository.DeteleByHostID(host.ID);
var list = RoomTypeModalRepository.LoadAll().Where(r => r.RoomType == host.RoomType);
DateTime now = DateTime.Now;
foreach (var modal in list)
{
HostModalRepository.Save(new HostModal { HostID = host.ID, Modal = modal, Status = 2, Time = 0, UpdateTime = now });
}
return true;
}
/// <summary>
/// 创建服务异常
/// </summary>
/// <param name="host"></param>
/// <returns></returns>
private bool CreateServiceAndAbnormity(Host host)
{
if (host == null)
{
return false;
}
try
{
var services = RoomServiceRepository.LoadAll(host.ID);
foreach (var service in services)
{
RoomServiceRepository.Delete(service.ID);
}
var servicesSetting = AlarmSettingRepository.LoadAll().Where(r => r.HotelID == host.SysHotel.ID && (r.Type == 'B' || r.Type == 'C'));
foreach (var serviceSetting in servicesSetting)
{
var service = new RoomService();
service.HostID = host.ID;
service.AlarmType = serviceSetting.Type;
service.AlarmCode = serviceSetting.Code;
service.Status = false;
RoomServiceRepository.Save(service);
}
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 读取连通房到 connectingRooms 中
/// </summary>
/// <param name="host"></param>
/// <param name="connectingRooms"></param>
//private void ReadConnectRoomsToList(Host host, IList<Host> connectingRooms)
//{
// if (String.IsNullOrEmpty(host.ConnectingRooms))
// {
// return;
// }
// var hosts = host.ConnectingRooms.Split(',').Select(r => Get(int.Parse(r)));
// foreach (var h in hosts)
// {
// if (h != null && !connectingRooms.Contains(h))
// {
// connectingRooms.Add(h);
// }
// }
//}
/// <summary>
/// 复制ip2地址前两段到ip1
/// </summary>
/// <param name="ip1">IP1</param>
/// <param name="ip2">IP2</param>
/// <returns></returns>
private string GetNewIP(string ip1, string ip2)
{
string[] ip1Arr = ip1.Split('.');
string[] ip2Arr = ip2.Split('.');
ip1Arr[0] = ip2Arr[0];
ip1Arr[1] = ip2Arr[1];
return String.Join(".", ip1Arr);
}
/// <summary>
/// 处理“退房保险箱关”异常
/// </summary>
/// <param name="host"></param>
private void ProcessAbnormities(Host host)
{
//如果是退房,并且保险箱是关的状态,报警,否则存在此报警,关掉
var abnormity = RoomServiceRepository.Get(host.ID, "C04");
if (host.RoomStatus.ID == 0x08)
{
if (host.SafeStatus == 0 && abnormity != null && !abnormity.Status)
{
abnormity.Status = true;
abnormity.StartTime = DateTime.Now;
RoomServiceRepository.Update(abnormity);
}
}
else //if (host.SafeStatus != 0)
{
if (abnormity != null && abnormity.Status)
{
abnormity.Status = false;//关掉报警
abnormity.StartTime = DateTime.Now;
RoomServiceRepository.Update(abnormity);
}
}
}
#endregion
public void AccreditForHost(IList<Host> hostList, DateTime expires)
{
AuthorizationReceiver.AccreditForHost(hostList, expires);
}
public void SetDeviceSecret(Host host)
{
DeviceSecretReceiver.Send(host);
}
public void SendForGetHostSecret(Host host)
{
HostSecretReceiver.Send(host);
}
public void SyncHostInfo(Host host)
{
HostRegisterReceiver.Send(host);
}
public void PublishHostInfo(Host host)
{
HostRegisterSetReceiver.Send(host);
}
public void PublishHostInfo(Host host, byte[] sendData)
{
HostRegisterSetReceiver.Send(host, sendData);
}
/// <summary>
/// 根据房型获取主机列表C主机升级使用
/// </summary>
/// <param name="hotelID"></param>
/// <param name="roomTypeID"></param>
/// <returns></returns>
public IList<Object> LoadHostByRoomType(int hotelID, int roomTypeID)
{
return (CurrentRepository as Dao.IHostRepository).LoadHostByRoomType(hotelID, roomTypeID);
}
public IList<Object> LoadHostByRoomTypeChengZiHao(int hotelID, int roomTypeID, string roomNumber)
{
return (CurrentRepository as Dao.IHostRepository).LoadHostByRoomTypeChengZiHao(hotelID, roomTypeID, roomNumber);
}
/// <summary>
/// 根据房型获取所有主机列表
/// </summary>
/// <param name="hotelID"></param>
/// <param name="roomTypeID"></param>
/// <returns></returns>
public IList<Object> LoadAllHostByRoomType(int hotelID, int roomTypeID)
{
return (CurrentRepository as Dao.IHostRepository).LoadAllHostByRoomType(hotelID, roomTypeID);
}
/// <summary>
/// 阿宝
/// </summary>
public List<KongTiaoTimer> GetInitializeKTMission()
{
return KongTiaoManager.Select();
}
public static readonly string Missionsys_Address = ConfigurationManager.AppSettings["missionsys_address"];
public static readonly string Currentsys_address = ConfigurationManager.AppSettings["currentsys_address"];
public void TimerECO(string hotelcode, int sheng_jiang_value)
2025-12-11 09:17:16 +08:00
{
try
{
int finallytemp = 0;
//模式1制冷2制热3送风
var hostlist = HostRepository.GetByHotelCode(hotelcode);
foreach (var item in hostlist)
{
List<HostModal> hostModals = HostModalRepository.LoadByHostID(item.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();
foreach (HostModal hostModal in hostModals)
{
string KKey = CacheKey.HostModalStatus_Prefix + "_" + item.ID + "_" + hostModal.Modal.ModalAddress;
var mm = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(KKey);
if (mm != null)
{
int s = mm.Status;
int sss = mm.AirConditionData.SettingTemp;
int model = mm.AirConditionData.Mode;
if (s == 1)
{
if (model == 1)
{
finallytemp = sss + sheng_jiang_value;
}
if (model == 2)
{
finallytemp = sss - sheng_jiang_value;
}
//获取 触发的 酒店
//循环这些 酒店,获取每个房间,获取每个房间的 空调,如何开的话 ,就触发
Host host111 = new Host();
host111.HostNumber = item.HostNumber;
host111.MAC = item.MAC;
//host 只需要hostnumber和mac
//hostmodal只需要 address 和type
//device.Address = hostModal.Modal.ModalAddress;
//device.Type = hostModal.Modal.Type;
HostModal hm = new HostModal();
hm.Modal = new RoomTypeModal();
hm.Modal.Type = DeviceType.AirConditioner;
hm.Modal.ModalAddress = hostModal.Modal.ModalAddress;
logger.Error("ECO系统要开始执行了:" + host111.RoomNumber + " air_condition stattus: " + finallytemp);
//HostModalManager.SetDevice(host111, hm, 1, 0, GenericData.SetTemperatureValue, GenericData.FanSpeed, GenericData.Mode, 0);//0表示不变
HostModalManager.SetDevice(host111, hm, 0, 0, finallytemp, 0, 0, 0);//0表示不变
}
}
}
}
}
catch (Exception ex)
{
logger.Error("ECO 系统出异常了" + ex.Message);
}
}
/// <summary>
/// 任务控制
/// </summary>
/// <param name="hotel_id"></param>
/// <param name="HotelCode"></param>
/// <param name="host_id"></param>
/// <param name="RoomNo"></param>
/// <param name="k"></param>
public void AirConditionTimer_Controller(int hotel_id, string HotelCode, string HotelCreateDate, int host_id, string RoomNo, KongTiaoTimer k)
{
try
{
string LieECOTaskKey = CacheKey.LieECOTask;
string MKey = k.MissonKey;
bool OldOrNew0 = MKey.StartsWith("TuiFang");
bool OldOrNew1 = MKey.StartsWith("Mission");
bool OldOrNew2 = MKey.StartsWith(LieECOTaskKey);
if (OldOrNew0)
{
NewMission(MKey);
return;
}
else if (OldOrNew1)
{
NewMission(MKey);
return;
}
else if (OldOrNew2)
{
var GenericData = CSRedisCacheHelper.Get_Partition<LieECOTaskExtra>(MKey, 1);
if (GenericData != null)
{
try
{
Host host111 = new Host();
host111.HostNumber = GenericData.HostNUMBER;
host111.MAC = GenericData.MAC;
//host 只需要hostnumber和mac
//hostmodal只需要 address 和type
//device.Address = hostModal.Modal.ModalAddress;
//device.Type = hostModal.Modal.Type;
HostModal hm = new HostModal();
hm.Modal = new RoomTypeModal();
hm.Modal.Type = DeviceType.AirConditioner;
hm.Modal.ModalAddress = GenericData.ModalAddress;
logger.Error("ECO系统要开始执行了:" + host111.RoomNumber + " air_condition stattus: " + GenericData.SetTemperatureValue);
//HostModalManager.SetDevice(host111, hm, 1, 0, GenericData.SetTemperatureValue, GenericData.FanSpeed, GenericData.Mode, 0);//0表示不变
HostModalManager.SetDevice(host111, hm, 0, 0, GenericData.SetTemperatureValue, 0, 0, 0);//0表示不变
}
catch (Exception ex)
{
logger.Error("ECO 系统出异常了" + ex.Message);
}
}
}
else
{
string ct = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
RoomNobodyHowToLog n = new RoomNobodyHowToLog() { MissionKey = MKey, CreateTime = ct };
Host host = GetByRoomNumber(RoomNo, hotel_id);
if (host == null)
{
return;
}
//查询 现在有没有补取电
//string KKey = CacheKey.HostModalStatus_Prefix + "_" +host_id + "_" + device.Value.Address;
//var client = new RestClient("https://pms.boonlive-rcu.com/");
//var client = new RestClient(Currentsys_address);
//var request = new RestRequest("api/GetRoomServiceList", Method.GET);
//GetRequest ggg = new GetRequest() { creatDate = HotelCreateDate, roomNumber = RoomNo, code = HotelCode };
//string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(ggg);
//request.AddParameter("jsonData", jsstr);
//var response = client.Execute(request);
//string str = response.Content;
logger.Error("222:");
//logger.Error("333333:" + str);
string KKey = CacheKey.HostModalStatus_Prefix + "_" + host.ID + "_" + "004000001";
var mm = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(KKey);
//333333:{"IsSuccess":true,"Result":[{"ModalAddress":"004000002","Name":"勿扰","Status":2,"Brightness":0},{"ModalAddress":"004000003","Name":"清理","Status":2,"Brightness":0}]}
//{"IsSuccess":true,"Result":[{"ModalAddress":"004000001",
// "Name":"取电","Status":2,"Brightness":0},
//{"ModalAddress":"004000003","Name":"清理","Status":2,"Brightness":0}]}
if (mm != null)
{
var Nstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm);
logger.Error("222:" + Nstr);
logger.Error("takecard:" + mm.Status);
//超过了30分钟还没有取电
//如果没有取电就关了空调
//1 为取电2为没有取电
if (mm.Status != 1)
{
//获取启用的空调回路
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host_id).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();
RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == hotel_id);
if (nnn != null)
{
foreach (HostModal hostModal in hostModals)
2025-12-11 09:17:16 +08:00
{
logger.Error("nnn.how " + nnn.How);
//close or monitor
if (nnn.How.Equals("close"))
{
//0表示不变
HostModalManager.SetDevice(host, hostModal, 2, 0);
RoomNoBodyLogMananger.Save(n);
}
else if (nnn.How.Equals("monitor"))
{
//状态1开2关6停
//0表示不变
//如果只调温的话所有的数据都要设置为0
HostModalManager.SetDevice(host, hostModal, 0, 0, nnn.Temperature);
RoomNoBodyLogMananger.Save(n);
logger.Error("monitor is !!!!" + nnn.Temperature);
}
else
{
}
}
}
logger.Error("Air Condition Controller");
//空调关闭后,就将任务设置成已经完成了
k.IsCancel = 1;
KongTiaoManager.Update(k);
}
}
}
}
catch (Exception ex)
2025-12-11 09:17:16 +08:00
{
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
2025-12-11 09:17:16 +08:00
}
}
private void NewMission(string MKey)
{
var MMK = CSRedisCacheHelper.Get_Partition<MissonData>(MKey, 1);
if (MMK != null)
{
Host host111 = new Host();
host111.HostNumber = MMK.hostnumber;
host111.MAC = MMK.mac;
var L = MMK.HostModalList;
foreach (var hostModal in L)
{
//host 只需要hostnumber和mac
//hostmodal只需要 address 和type
//device.Address = hostModal.Modal.ModalAddress;
//device.Type = hostModal.Modal.Type;
HostModal hm = new HostModal();
hm.Modal = new RoomTypeModal();
hm.Modal.Type = hostModal.Item2;
hm.Modal.ModalAddress = hostModal.Item1;
logger.Error("delay Mission start:" + host111.RoomNumber + " air_condition stattus: " + MMK.Status);
HostModalManager.SetDevice(host111, hm, MMK.Status, 0, MMK.SettingTemp, MMK.FanSpeed, MMK.Mode, 0);//0表示不变
}
}
return;
}
public void LoggerTest()
{
string MKey = "aaaaaaaaa";
string ct = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
RoomNobodyHowToLog n = new RoomNobodyHowToLog() { MissionKey = MKey, CreateTime = ct };
RoomNoBodyLogMananger.Save(n);
}
/// <summary>
/// ECO模式执行
/// </summary>
public void ECO_Execute(string hotelid_api)
{
try
{
logger.Error("ECO_Execute here");
//取出ECO配置的酒店 的房间号
List<ECO_Setting> ECOList = ECO_SettingRepository.LoadAll().ToList();
if (ECOList.Count > 0)
{
foreach (var ECO in ECOList)
{
int hotelid = ECO.HotelID;
bool isenable = ECO.IsEnable;
string st_time = ECO.StartTime;
string[] h_m = st_time.Split(':');
int a1 = 0;
int.TryParse(h_m[0], out a1);
int b1 = 0;
int.TryParse(h_m[1], out b1);
string et_time = ECO.EndTime;
string[] h_m_1 = et_time.Split(':');
int a2 = 0;
int.TryParse(h_m_1[0], out a2);
int b2 = 0;
int.TryParse(h_m_1[1], out b2);
var ccc = DateTime.Now;
var start_time = new DateTime(ccc.Year, ccc.Month, ccc.Day, a1, b1, 0);
var end_time = new DateTime(ccc.Year, ccc.Month, ccc.Day, a2, b2, 0);
//节能模式开启了
if (isenable)
{
//当前时间在两个时间 区间内
if (ccc > start_time && ccc < end_time)
{
//获取当前酒店的主机
//IList<Host> hosts = LoadAll(hotelid).Where(r => r.Status == true).ToList();
IList<Host> hosts = LoadAll(hotelid).ToList();
foreach (Host host in hosts)
{
int host_id = host.ID;
//查看是否执行过了
ECO_Detail detail = ECO_DetailRepository.GetDetail(hotelid, host_id);
if (detail == null)
{
AirConditionECO_Execute(ECO, host);
ECO_Detail e = new ECO_Detail();
e.HotelID = hotelid;
e.HostID = host_id;
e.IsTrigger = true;
e.RoomNo = host.RoomNumber;
string ct = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
e.TriggerTime = ct;
e.ECO_ID = ECO.ID;
ECO_DetailRepository.Add(e);
}
if (detail != null && !detail.IsTrigger)
{
//获取启用的空调回路
AirConditionECO_Execute(ECO, host);
detail.IsTrigger = true;
string ct = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
detail.TriggerTime = ct;
ECO_DetailRepository.Update(detail);
}
}
}
}
}
}
}
catch (Exception ex)
{
logger.Error("ECO execute error: " + ex.Message);
}
}
/// <summary>
/// 重置
/// </summary>
public void Zero_Refresh()
{
ECO_DetailRepository.ZeroRefresh();
}
private void AirConditionECO_Execute(ECO_Setting ECO, Host host)
{
int host_id = host.ID;
//根据主机编号,获取所有的空调
//获取所有空调的数据
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host_id).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();
foreach (HostModal hostModal in hostModals)
{
string KKey = CacheKey.HostModalStatus_Prefix + "_" + host_id + "_" + hostModal.Modal.ModalAddress;
var obj = CSRedisCacheHelper.Get_Partition<HostModal_Cache>(KKey);
if (obj != null)
{
HostModal_Cache hhh = obj as HostModal_Cache;
if (hhh.AirConditionData.AirStatus == 1 && hhh.Status == 1)
{
int settemp = 0;
//0x01:制冷
//0x02:制热
//0x03:送风
int moshi = hhh.AirConditionData.Mode;
if (moshi == 1)
{
//如果是制冷 ,那就将温度调高一些
settemp = hhh.AirConditionData.CurrentTemp + ECO.ActValue;
}
else if (moshi == 2)
{
settemp = hhh.AirConditionData.CurrentTemp - ECO.ActValue;
}
else
{
}
hostModal.Brightness = hhh.Brightness;
hostModal.Status = hhh.Status;
hostModal.SettingTemp = hhh.AirConditionData.SettingTemp;
hostModal.CurrentTemp = hhh.AirConditionData.CurrentTemp;
hostModal.Mode = hhh.AirConditionData.Mode;
hostModal.FanSpeed = hhh.AirConditionData.FanSpeed;
hostModal.Valve = hhh.AirConditionData.Valve;
//状态1开2关6停
//0表示不变
//如果只调温的话所有的数据都要设置为0
HostModalManager.SetDevice(host, hostModal, 0, 0, settemp);
}
}
}
}
public List<ECO_Setting> Get_ECOList()
{
return ECO_SettingRepository.LoadAll().Where(A => A.IsEnable == true).ToList();
}
/// <summary>
/// 查询
/// </summary>
/// <param name="data"></param>
/// <param name="host_number"></param>
/// <param name="mac"></param>
public void Send_Query_Data(byte[] data, string host_number, string mac)
{
TFTP_LogReceiver.Send_QueryData(data, host_number, mac);
}
/// <summary>
/// 发送设置
/// </summary>
/// <param name="data"></param>
/// <param name="host_number"></param>
/// <param name="mac"></param>
public void Send_Setting_Data(byte[] data, string host_number, string mac)
{
TFTP_LogSettingReceiver.Send_Setting_Data(data, host_number, mac);
}
/// <summary>
///
/// </summary>
/// <param name="roomid"></param>
/// <param name="hotelID"></param>
/// <returns></returns>
public Host GetByRoomNumber(int roomid, int hotelID)
{
return CurrentRepository.LoadAll().FirstOrDefault(r => r.ID == roomid && r.SysHotel.ID == hotelID && !r.IsDeleted);
}
public Host GetByHiWeiCUID(string cuid)
{
return (CurrentRepository as Dao.IHostRepository).GetByHiWeiCUID(cuid);
}
public void PublishUDPData(string hostnumber, string mac, byte[] data, byte cmdtype, bool isoriginal)
{
HostUDPTouChuan.Send(hostnumber, mac, data, cmdtype, isoriginal);
}
public IList<HostMappingData> LoadAllID_HostNumberMapping()
{
return (CurrentRepository as Dao.IHostRepository).LoadAllID_HostNumberMapping();
}
public IList<HostRoomNumberMapping> LoadAll_RoomNumberMapping()
{
return (CurrentRepository as Dao.IHostRepository).LoadAll_RoomNumberMapping();
}
}
//
//{"IsSuccess":true,"Result":[{"ModalAddress":"004000001",
// "Name":"取电","Status":2,"Brightness":0},
//{"ModalAddress":"004000003","Name":"清理","Status":2,"Brightness":0}]}
public class ResultData
{
public bool IsSuccess { get; set; }
public List<MySheBei> Result { get; set; }
}
public class MySheBei
{
public string ModalAddress { get; set; }
public string Name { get; set; }
public int Status { get; set; }
public int Brightness { get; set; }
}
//"{\"creatDate\":\"2023-11-16\",\"roomNumber\":\"2206\",\"code\":\"1762\"}"
public class GetRequest
{
public string creatDate { get; set; }
public string roomNumber { get; set; }
public string code { get; set; }
}
}