Files
Web_CRICS_Server_VS2010_Prod/Service/Implement/HostModalManager.cs

215 lines
9.0 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.Text;
using Domain;
using Dao;
using RCUHost;
using RCUHost.Protocols;
using System.Threading.Tasks;
namespace Service.Implement
{
public class HostModalManager : GenericManagerBase<HostModal>, IHostModalManager
{
public IDeviceControlReceiver DeviceControlReceiver { get; set; }
public IHostRegisterReceiver HostRegisterReceiver { get; set; }
public HostModal Get(int hostID, int roomTypeModalId)
{
var QQQ = ((IHostModalRepository)CurrentRepository).Get(hostID, roomTypeModalId);
if (QQQ != null)
{
StatusTran(hostID, QQQ.Modal.ModalAddress, QQQ);
}
return QQQ;
}
public HostModal GetByModalAddress(int hostID, string modalAddress)
{
var QQQ = ((IHostModalRepository)CurrentRepository).Get(hostID, modalAddress);
StatusTran(hostID, modalAddress, QQQ);
return QQQ;
}
public HostModal GetByModalName(int hostID, string name)
{
var QQQ = ((IHostModalRepository)CurrentRepository).LoadAll().Where(r => r.HostID == hostID && r.Modal != null && r.Modal.Name == name).FirstOrDefault();
if (QQQ != null)
{
StatusTran(hostID, QQQ.Modal.ModalAddress, QQQ);
}
return QQQ;
}
public IList<HostModal> Load(int hostID, DeviceType type)
{
var LLL = ((IHostModalRepository)CurrentRepository).LoadAll().Where(r => r.HostID == hostID && r.Modal != null && r.Modal.Type == type).ToList();
foreach (var QQQ in LLL)
{
if (QQQ != null)
{
StatusTran(hostID, QQQ.Modal.ModalAddress, QQQ);
}
}
return LLL;
}
public IList<HostModal> LoadByHostID(int hostID)
{
var LLL = ((IHostModalRepository)CurrentRepository).LoadByHostID(hostID).ToList();
foreach (var QQQ in LLL)
{
if (QQQ != null)
{
StatusTran(hostID, QQQ.Modal.ModalAddress, QQQ);
}
}
return LLL;
}
public IList<HostModal> LoadAllLight(int hostID)
{
var LLL = ((IHostModalRepository)CurrentRepository).LoadAll().Where(r => r.HostID == hostID && r.Modal != null && r.Modal.Name.Contains("灯")).OrderBy(r => r.Modal.Sort).ToList();
foreach (var QQQ in LLL)
{
if (QQQ != null)
{
StatusTran(hostID, QQQ.Modal.ModalAddress, QQQ);
}
}
return LLL;
}
public void DeteleByHostID(int hostID)
{
((IHostModalRepository)CurrentRepository).DeteleByHostID(hostID);
}
public void DeteleByRoomTypeModal(int hostID, int roomTypeModalID)
{
((IHostModalRepository)CurrentRepository).DeteleByRoomTypeModal(hostID, roomTypeModalID);
}
/// <summary>
/// 向某个结点发送数据
/// </summary>
/// <param name="hostnumber"></param>
/// <param name="mac"></param>
/// <param name="Data"></param>
public void SendData(string hostnumber, string mac, byte[] Data)
{
Tuple<string, string> t = new Tuple<string, string>(hostnumber, mac);
System.Threading.Tasks.Task.Factory.StartNew((state) =>
{
Tuple<string, string> t1 = state as Tuple<string, string>;
var host1 = t1.Item1;
var mac1 = t1.Item2;
HostRegisterReceiver.Send(hostnumber, mac);//发送命令
}, t, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
}
public void SetDevice(Host host, HostModal hostModal, int status, int brightness, int temperature, int fanSpeed, int mode, int valve)
{
Device device = new Device();
device.Address = hostModal.Modal.ModalAddress;
device.AddressType = AddressType.DeviceAddress;
device.Type = hostModal.Modal.Type;
device.Status = (byte)status;
device.Brightness = (byte)brightness;
device.Temperature = (byte)temperature;
device.FanSpeed = (byte)fanSpeed;
device.Mode = (byte)mode;
device.Valve = (byte)valve;
device.AirExecMode = (status << 14) + (mode << 12) + (fanSpeed << 10) + (valve << 8) + temperature;//空调执行方式和内容
device.FloorHotExecMode = (status << 12) + (mode << 8) + (valve << 6) + temperature;//地暖执行方式和内容
device.MusicExecMode = status + (brightness << 12) + (mode << 8);//背景音乐执行方式和内容
//device.ColorTempExecMode = status + (brightness << 12) + (temperature << 8);//色温执行方式和内容
var t = new Tuple<Host, Device>(host, device);
System.Threading.Tasks.Task.Factory.StartNew((state) =>
{
var t1 = state as Tuple<Host, Device>;
var host1 = t1.Item1;
var device1 = t1.Item2;
DeviceControlReceiver.Send(host1, device1);//发送命令
}, t, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
}
public void SetDevice_Repeat(string SingleKey, Host host, HostModal hostModal, int status, int brightness, int temperature, int fanSpeed, int mode, int valve)
{
Device device = new Device();
device.Address = hostModal.Modal.ModalAddress;
device.AddressType = AddressType.DeviceAddress;
device.Type = hostModal.Modal.Type;
device.Status = (byte)status;
device.Brightness = (byte)brightness;
device.Temperature = (byte)temperature;
device.FanSpeed = (byte)fanSpeed;
device.Mode = (byte)mode;
device.Valve = (byte)valve;
device.AirExecMode = (status << 14) + (mode << 12) + (fanSpeed << 10) + (valve << 8) + temperature;//空调执行方式和内容
device.FloorHotExecMode = (status << 12) + (mode << 8) + (valve << 6) + temperature;//地暖执行方式和内容
device.MusicExecMode = status + (brightness << 12) + (mode << 8);//背景音乐执行方式和内容
//device.ColorTempExecMode = status + (brightness << 12) + (temperature << 8);//色温执行方式和内容
var t = new Tuple<Host, Device, string>(host, device, SingleKey);
System.Threading.Tasks.Task.Factory.StartNew((state) =>
{
var t1 = state as Tuple<Host, Device, string>;
var host1 = t1.Item1;
var device1 = t1.Item2;
var key = t1.Item3;
DeviceControlReceiver.Send_Repeat(key, host1, device1);//发送命令
}, t);
}
public void UpdateHostModalStatus(Host host1, string modalAddress1, int status1)
{
var t = new Tuple<Host, string, int>(host1, modalAddress1, status1);
System.Threading.Tasks.Task.Factory.StartNew((state) =>
{
var t1 = state as Tuple<Host, string, int>;
var host = t1.Item1;
var modalAddress = t1.Item2;
var status = t1.Item3;
HostModal hostModal = ((IHostModalRepository)CurrentRepository).Get(host.ID, modalAddress);
if (hostModal != null)
{
Device device = new Device();
device.Address = modalAddress;
device.AddressType = AddressType.DeviceAddress;
device.Type = hostModal.Modal.Type;
device.Status = (byte)status;
DeviceControlReceiver.Send(host, device);
}
}, t, System.Threading.CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
}
private static void StatusTran(int hostID, string modalAddress, HostModal QQQ)
{
string KKey = CommonEntity.CacheKey.HostModalStatus_Prefix + "_" + hostID + "_" + modalAddress;
var obj = Common.CSRedisCacheHelper.Get_Partition<CommonEntity.HostModal_Cache>(KKey);
if (obj != null)
{
CommonEntity.HostModal_Cache hhh = obj as CommonEntity.HostModal_Cache;
if (QQQ != null)
{
QQQ.Status = hhh.Status;
QQQ.Brightness = hhh.Brightness;
var H = hhh.AirConditionData;
QQQ.CurrentTemp = H.CurrentTemp;
QQQ.SettingTemp = H.SettingTemp;
QQQ.FanSpeed = H.FanSpeed;
QQQ.Valve = H.Valve;
QQQ.Mode = H.Mode;
QQQ.UpdateTime = H.UpdateTime;
}
}
}
}
}