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();
///
/// 设备spk列表
///
public List DeviceSpk = new List() {
SPK.IrModule
};
///
/// 空调列表
///
///
public List GetAcList()
{
return Functions.FindAll((obj) => obj.spk == SPK.AcStandard || obj.spk == SPK.AcIr);
}
///
///
///
///
public List GetList()
{
List list = new List();
return list;
}
///
/// 灯光列表
///
public List GetLightList()
{
return Functions.FindAll((obj) =>
obj.spk == SPK.LightSwitch
|| obj.spk == SPK.LightDimming
|| obj.spk == SPK.LightRGB
|| obj.spk == SPK.LightRGBW
|| obj.spk == SPK.LightCCT);
}
///
/// 窗帘列表
///
public List GetCurtainList()
{
return Functions.FindAll((obj) =>
obj.spk == SPK.CurtainRoller
|| obj.spk == SPK.CurtainShades
|| obj.spk == SPK.CurtainSwitch
|| obj.spk == SPK.CurtainTrietex
);
}
///
/// 地热列表
///
public List GetFloorHeatingList()
{
return Functions.FindAll((obj) => obj.spk == SPK.FloorHeatStandard);
}
#region 家电列表 electricals
///
/// 家电列表
///
public List GetElectricals()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricFan || obj.spk == SPK.ElectricTuyaFan
|| obj.spk == SPK.ElectricSocket
|| obj.spk == SPK.IrLearn
|| obj.spk == SPK.TvIr
|| obj.spk == SPK.ElectricTV
|| obj.spk == SPK.ElectricTuyaAirCleaner
|| obj.spk == SPK.ElectricTuyaWeepRobot
|| obj.spk == SPK.ElectricTuyaWaterValve
|| obj.spk == SPK.ClothesHanger);
}
///
/// 遥控器列表
///
///
public List GetIrLearinList()
{
return Functions.FindAll((obj) => obj.spk == SPK.IrLearn);
}
///
/// 风扇列表
///
public List GetFanList()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricFan || obj.spk == SPK.ElectricTuyaFan);
}
///
/// 电视列表
///
public List GetTVList()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricTV || obj.spk == SPK.TvIr);
}
///
/// 家电插座列表
///
public List GetElectricSocketList()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricSocket);
}
///
/// 空气净化器列表
///
public List GetAirCleanerList()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricTuyaAirCleaner);
}
///
/// 扫地机器人列表
///
public List GetWeepRobotList()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricTuyaWeepRobot);
}
///
/// 水阀列表
///
public List GetWaterValveList()
{
return Functions.FindAll((obj) => obj.spk == SPK.ElectricTuyaWaterValve);
}
///
/// 凉霸列表
///
public List GetClothesHangerList ()
{
return Functions.FindAll((obj) => obj.spk == SPK.ClothesHanger);
}
///
/// 红外宝列表
///
public List GetIrModuleList()
{
return Functions.FindAll((obj) => obj.spk == SPK.IrModule);
}
#endregion
///
/// 环境传感器列表
///
public List GetEnvirSensorsList()
{
return Functions.FindAll((obj) => obj.spk == SPK.SensorPm25
|| obj.spk == SPK.SensorCO2
|| obj.spk == SPK.SensorTVOC
|| obj.spk == SPK.SensorTemperature
|| obj.spk == SPK.SensorHumidity
);
}
///
/// 安防设备列表
///
public List GetArmSensorList()
{
return Functions.FindAll((obj) => obj.spk == SPK.SensorSmoke
|| obj.spk == SPK.SensorWater
|| obj.spk == SPK.SensorDoorWindow
|| obj.spk == SPK.SensorPir
);
}
public List scenes = new List();
///
/// 加载功能列表
///
///
///
/// 考虑到性能问题追加此变量,是否检测重复,只对function有效
/// true:当重复存在时,替换掉
/// false:直接无条件添加
public void IniFunctionList(string filePath, bool checkRepeat = false)
{
// todo 增加设备,增加功能进功能列表
if (filePath.StartsWith("FunctionData_"))
{
var functionDataBytes = 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;
}
if (checkRepeat == true)
{
//检测重复
for (int i = 0; i < Functions.Count; i++)
{
if (Functions[i].deviceId == tempFunction.deviceId)
{
//先移除掉再加
Functions.RemoveAt(i);
Functions.Add(tempFunction);
return;
}
}
}
Functions.Add(tempFunction);
}
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)
{
List resultFunctions = new List();
if (brandType == SPK.BrandType.All)
{
}
else
{
switch (brandType)
{
case SPK.BrandType.Hdl:
foreach (var function in Functions)
{
if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
break;
case SPK.BrandType.Tuya:
foreach (var function in Functions)
{
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
break;
}
return resultFunctions;
}
return Functions;
}
///
/// 清空设备功能列表
///
public void Clear()
{
Functions = 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)
{
Functions.Remove(Functions.Find((obj) => obj.deviceId == delTemp.deviceId));
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
}
}