using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using HDL_ON.Common;
using HDL_ON.DAL;
using HDL_ON.DAL.Server;
using Shared;
namespace HDL_ON.Entity
{
public class FunctionList
{
static FunctionList _FunctionList;
public static FunctionList List
{
get
{
if(_FunctionList == null)
{
_FunctionList = new FunctionList();
#region 恢复数据
var filePathList = FileUtlis.Files.ReadFiles();
foreach (var filePath in filePathList)
{
_FunctionList.IniFunctionList(filePath);
}
#endregion
}
return _FunctionList;
}
}
///
/// 功能列表
///
public List Functions = new List();
///
/// 空调列表
///
public List aCs = new List();
///
/// 灯光列表
///
public List lights = new List();
///
/// 窗帘列表
///
public List curtains = new List();
///
/// 地热列表
///
public List floorHeatings = new List();
#region 家电列表 electricals
///
/// 家电列表
///
public List electricals
{
get
{
if(fans == null)
{
fans = new List();
}
if(switchSockets == null)
{
switchSockets = new List();
}
if(tVs == null)
{
tVs = new List();
}
if (airCleaners == null)
{
airCleaners = new List();
}
if (weepRobots == null)
{
weepRobots = new List();
}
if(waterValveList == null)
{
waterValveList = new List();
}
if(clothesHangerList == null)
{
clothesHangerList = new List();
}
var list = new List();
list.AddRange(fans);
list.AddRange(switchSockets);
list.AddRange(tVs);
list.AddRange(airCleaners);
list.AddRange(weepRobots);
list.AddRange(waterValveList);
list.AddRange(clothesHangerList);
return list;
}
}
///
/// 风扇列表
///
public List fans = new List();
///
/// 电视列表
///
public List tVs = new List();
///
/// 家电列表
///
public List switchSockets = new List();
///
/// 空气净化器列表
///
public List airCleaners = new List();
///
/// 扫地机器人列表
///
public List weepRobots = new List();
///
/// 水阀列表
///
public List waterValveList = new List();
///
/// 凉霸列表
///
public List clothesHangerList = new List();
///
/// 红外宝列表
///
public List irModule = new List();
#endregion
///
/// 环境传感器列表
///
public List sensorsEnvironmentalScience = new List();
///
/// 安防设备列表
///
public List sensorsArm = new List();
public List scenes = new List();
///
/// 功能列表
///
List deviceFunctionList = new List();
///
/// 加载功能列表
/// todo 需要优化,后期不能保证能使用sid解析出是什么类型的设备
///
///
public void IniFunctionList(string filePath)
{
// todo 增加设备,增加功能进功能列表
if (filePath.StartsWith("FunctionData_"))
{
var functionDataBytes = Common.FileUtlis.Files.ReadFile(filePath);
var functionDataString = System.Text.Encoding.UTF8.GetString(functionDataBytes);
var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
if (tempFunction == null)
{
FileUtlis.Files.DeleteFile(filePath);
return;
}
{
switch (tempFunction.spk)
{
case SPK.LightSwitch:
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
var light = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.lights.Add(light);
deviceFunctionList.Add(light);
break;
case SPK.CurtainRoller:
case SPK.CurtainShades:
case SPK.CurtainSwitch:
case SPK.CurtainTrietex:
var curtain = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.curtains.Add(curtain);
deviceFunctionList.Add(curtain);
break;
case SPK.AcStandard:
var ac = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.aCs.Add(ac);
deviceFunctionList.Add(ac);
break;
case SPK.FloorHeatStandard:
var fh = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.floorHeatings.Add(fh);
deviceFunctionList.Add(fh);
break;
case SPK.SensorPm25:
case SPK.SensorCO2:
case SPK.SensorTVOC:
case SPK.SensorTemperature:
case SPK.SensorHumidity:
var sensor = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.sensorsEnvironmentalScience.Add(sensor);
deviceFunctionList.Add(sensor);
break;
case SPK.ElectricSocket:
var ele = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.switchSockets.Add(ele);
deviceFunctionList.Add(ele);
break;
case SPK.ElectricTV:
var tv = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.tVs.Add(tv);
deviceFunctionList.Add(tv);
break;
case SPK.ElectricFan:
var fan = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.fans.Add(fan);
deviceFunctionList.Add(fan);
break;
case SPK.ElectricTuyaAirCleaner:
var airCleaner = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.airCleaners.Add(airCleaner);
deviceFunctionList.Add(airCleaner);
break;
case SPK.ElectricTuyaFan:
var tuyaFan = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.fans.Add(tuyaFan);
deviceFunctionList.Add(tuyaFan);
break;
case SPK.ElectricTuyaWeepRobot:
var tuyaWeepRobot = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.weepRobots.Add(tuyaWeepRobot);
deviceFunctionList.Add(tuyaWeepRobot);
break;
case SPK.ElectricTuyaWaterValve:
var tuyaWaterValve = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.waterValveList.Add(tuyaWaterValve);
deviceFunctionList.Add(tuyaWaterValve);
break;
case SPK.SensorSmoke:
case SPK.SensorWater:
case SPK.SensorDoorWindow:
case SPK.SensorPir:
var ser = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.sensorsArm.Add(ser);
deviceFunctionList.Add(ser);
break;
case SPK.ClothesHanger:
var ch = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.clothesHangerList.Add(ch);
deviceFunctionList.Add(ch);
break;
case SPK.IrModule:
var irm = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.irModule.Add(irm);
deviceFunctionList.Add(irm);
break;
}
}
}
if (filePath.StartsWith("SceneData_"))
{
var sceneDataBytes = FileUtlis.Files.ReadFile(filePath);
var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes);
var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject(sceneDataString);
List.scenes.Add(tempScene);
}
}
///
/// 获取设备功能列表
///
public List GetDeviceFunctionList(SPK.BrandType brandType = SPK.BrandType.All)
{
if (deviceFunctionList == null || deviceFunctionList.Count == 0)
{
deviceFunctionList = new List();
deviceFunctionList.AddRange(aCs);
deviceFunctionList.AddRange(lights);
deviceFunctionList.AddRange(curtains);
deviceFunctionList.AddRange(floorHeatings);
deviceFunctionList.AddRange(electricals);
deviceFunctionList.AddRange(sensorsEnvironmentalScience);
deviceFunctionList.AddRange(sensorsArm);
deviceFunctionList.AddRange(UI.Music.A31MusicModel.A31MusicModelList);
try
{
deviceFunctionList = deviceFunctionList.OrderByDescending(o => o.controlCounter).ToList();
}
catch (Exception ex)
{
MainPage.Log($"设备功能排序异常:{ex.Message}");
}
}
List resultFunctions = new List();
if (brandType == SPK.BrandType.All)
{
}
else
{
switch (brandType)
{
case SPK.BrandType.Hdl:
foreach (var function in deviceFunctionList)
{
if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
break;
case SPK.BrandType.Tuya:
foreach (var function in deviceFunctionList)
{
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
break;
}
return resultFunctions;
}
return deviceFunctionList;
}
///
/// 清空设备功能列表
///
public void Clear()
{
List.aCs = new List();
List.lights = new List();
List.curtains = new List();
List.floorHeatings = new List();
List.sensorsEnvironmentalScience = new List();
#region 家电
List.fans = new List();
List.switchSockets = new List();
List.tVs = new List();
List.airCleaners = new List();
List.weepRobots = new List();
List.waterValveList = new List();
List.clothesHangerList = new List();
#endregion
List.scenes = new List();
List.deviceFunctionList = new List();
_FunctionList = null;
}
///
/// 功能绑定房间
///
public string FunctionsBindRooms(List roomIds,List deviceIds)
{
var pm = new HttpServerRequest();
var pack = pm.BindDeviceToRoom(deviceIds, roomIds);
if(pack.Code == StateCode.SUCCESS)
{
}
else
{
IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
}
return pack.Code;
}
///
/// 删除场景
/// todo
///
public void DeleteScene(Scene scene,bool upSevser)
{
if (upSevser)
{
var pm = new HttpServerRequest();
var packCode = pm.DeleteScene(scene.userSceneId);
if (packCode == StateCode.SUCCESS)
{
FileUtlis.Files.DeleteFile(scene.savePath);
List.scenes.Remove(scene);
}
else
{
IMessageCommon.Current.ShowErrorInfoAlter(packCode);
}
}
else
{
FileUtlis.Files.DeleteFile(scene.savePath);
List.scenes.Remove(scene);
}
}
///
/// 删除本地功能及文件
///
public void DeleteFunction(Function delTemp)
{
switch (delTemp.spk)
{
case SPK.LightSwitch:
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
List.lights.Remove(List.lights.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.CurtainRoller:
case SPK.CurtainShades:
case SPK.CurtainSwitch:
case SPK.CurtainTrietex:
List.curtains.Remove(List.curtains.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.AcStandard:
List.aCs.Remove(List.aCs.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.FloorHeatStandard:
List.floorHeatings.Remove(List.floorHeatings.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.SensorPm25:
case SPK.SensorCO2:
case SPK.SensorTVOC:
case SPK.SensorTemperature:
case SPK.SensorHumidity:
List.sensorsEnvironmentalScience.Remove(List.sensorsEnvironmentalScience.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ElectricSocket:
List.switchSockets.Remove(List.switchSockets.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ElectricTV:
List.tVs.Remove(List.tVs.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ElectricFan:
case SPK.ElectricTuyaFan:
List.fans.Remove(List.fans.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ElectricTuyaAirCleaner:
List.airCleaners.Remove(List.airCleaners.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ElectricTuyaWaterValve:
List.waterValveList.Remove(List.waterValveList.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ElectricTuyaWeepRobot:
List.weepRobots.Remove(List.weepRobots.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.ClothesHanger:
List.clothesHangerList.Remove(List.clothesHangerList.Find((obj) => obj.deviceId == delTemp.deviceId));
break;
case SPK.SensorSmoke:
case SPK.SensorWater:
case SPK.SensorDoorWindow:
case SPK.SensorPir:
List.sensorsArm.Remove(List.sensorsArm.Find((obj)=>obj.deviceId == delTemp.deviceId));
break;
}
var removeTemp = deviceFunctionList.Find((obj) => obj.deviceId == delTemp.deviceId);
if(removeTemp!= null)
{
deviceFunctionList.Remove(removeTemp);
}
Common.FileUtlis.Files.DeleteFile(delTemp.savePath);
}
bool lockReadFunctionStatus = false;
///
/// 读取第三方设备状态
///
public void Read3tyFunctionStatus()
{
//读取涂鸦设备状态
if (GetDeviceFunctionList(SPK.BrandType.Tuya).Count > 0)
{
var page = new List();
int count = 0;
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Tuya))
{
page.Add(function.deviceId);
count++;
if (count > 9)
{
DriverLayer.Control.Ins.ReadFunctionsInfo(page);
page.Clear();
count = 0;
}
}
DriverLayer.Control.Ins.ReadFunctionsInfo(page);
}
}
///
/// 读取全部功能的状态
///
public void ReadAllFunctionStatus()
{
if (lockReadFunctionStatus)
{
MainPage.Log($"多次进入--返回");
return;
}
new Thread(() =>
{
if (lockReadFunctionStatus)
{
MainPage.Log($"多次进入--返回");
return;
}
MainPage.Log($"进入--读取");
lockReadFunctionStatus = true;
try
{
Read3tyFunctionStatus();
if(DriverLayer.Control.Ins.GatewayOnline_Local)
{
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
{
switch (function.Spk_Prefix)
{
case FunctionCategory.Music:
case FunctionCategory.DryContact:
continue;
}
DriverLayer.Control.Ins.SendReadCommand(function);
//switch (function.Spk_Prefix)
//{
// case FunctionCategory.Light:
// case FunctionCategory.Electric:
// case FunctionCategory.Curtain:
// case FunctionCategory.AC:
// case FunctionCategory.FloorHeat:
// case FunctionCategory.Sensor:
// DriverLayer.Control.Ins.SendReadCommand(function);
// break;
//}
}
}
else
{
var page = new List();
int count = 0;
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
{
page.Add(function.deviceId);
count++;
if (count > 9)
{
DriverLayer.Control.Ins.SendApiReadCommand(page);
page.Clear();
count = 0;
}
}
DriverLayer.Control.Ins.SendApiReadCommand(page);
}
}
catch (Exception ex)
{
MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}");
}
finally
{
lockReadFunctionStatus = false;
MainPage.Log($"结束--读取");
}
})
{ IsBackground = true }.Start();
}
#region 场景相关
///
/// 添加场景
///
public string AddScene(Scene scene, out Scene result)
{
Scene tempScene = null;
var pm = new HttpServerRequest();
var revPack = pm.AddScene(scene);
if (revPack.Code == StateCode.SUCCESS)
{
var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString());
tempScene = sceneList.Find((obj) => obj.sid == scene.sid);
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
FileUtlis.Files.WriteFileByBytes(scene.savePath, ssd);
result = tempScene;
}
else
{
result = tempScene;
}
return revPack.Code;
}
#endregion
#region 收藏功能
///
/// 收藏场景
///
public string CollectScene(Scene scene)
{
var result = "";
if (scene.collect)
{
result = ApiUtlis.Ins.HttpRequest.CollectDevice(scene.userSceneId).Code;
}
else
{
result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(scene.userSceneId).Code;
}
//提示错误
if (result != StateCode.SUCCESS)
{
IMessageCommon.Current.ShowErrorInfoAlter(result);
}
return result;
}
#endregion
#region
#endregion
}
}