Files
Web_CRICS_Server_VS2010_Prod/Service/Implement/HostManager.cs
2025-12-11 09:17:16 +08:00

1612 lines
68 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
{
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;
}
if (!string.IsNullOrEmpty(wxValidate))
{
host.WXValidate = wxValidate;
}
CurrentRepository.Update(host);
#region
if (roomStatus.ID == 2 || roomStatus.ID == 8)//开房和退房时重置
{
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))
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开
{
TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK",
Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵
}
});
}
}
#endregion
if (roomStatus.ID == 8)
{
#region 退
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
{
//条件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)
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
{
#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
{
//这段代码在生产环境中不管用,很奇怪
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 = "TuiFang_" + KeyMission;
CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
DelayExe_Task(host, item.DelayTime, MKey);
break;
}
catch (Exception)
{
}
}
}
}
}
}
#endregion
}
if (roomStatus.ID == 2)
{
#region
//阿宝
//空调 在10分钟无人入住的情况之下就关闭
//启动 一个任务
#region
int currenthotelid = host.SysHotel.ID;
RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == currenthotelid);
if (nnn != null)
{
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) => { });
}
}
#endregion
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
{
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)
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
{
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)
{
}
}
}
}
}
}
#endregion
}
}
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)
{
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);
foreach (HostModal hostModal in hostModals)
{
if (nnn != null)
{
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)
{
}
}
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; }
}
}