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 = Common.FileUtlis.Files.ReadFiles();
foreach (var filePath in filePathList)
{
_FunctionList.IniFunctionList(filePath);
}
#endregion
}
return _FunctionList;
}
}
///
/// 空调列表
///
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();
}
var list = new List();
list.AddRange(fans);
list.AddRange(switchSockets);
list.AddRange(tVs);
list.AddRange(airCleaners);
list.AddRange(weepRobots);
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();
#endregion
///
/// 环境传感器列表
///
public List sensorsEnvironmentalScience = new List();
///
/// 安防设备列表
///
public List sensorsArm = new List();
public List scenes = new List();
///
/// 场景列表
///
//public List Scenes
//{
// get
// {
// List.scenes = List.scenes.OrderByDescending(o => o.createTime).ToList();
// return List.scenes;
// }
//}
///
/// 功能列表
///
List deviceFunctionList = new List();
///
/// 加载功能列表
/// todo 需要优化,后期不能保证能使用sid解析出是什么类型的设备
///
///
public void IniFunctionList(string filePath)
{
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)
{
Common.FileUtlis.Files.DeleteFile(filePath);
return;
}
if (tempFunction.DeleteSign)
{
//todo 删除云端数据 20201203--App不能删除功能数据
}
else
{
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.SensorSmoke:
case SPK.SensorWater:
case SPK.SensorGas:
var ser = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
List.sensorsArm.Add(ser);
deviceFunctionList.Add(ser);
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()
{
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}");
}
return deviceFunctionList;
}
///
/// 清空设备功能列表
///
public void Clear()
{
List.aCs = new List();
List.lights = new List();
List.curtains = new List();
List.floorHeatings = new List();
List.tVs = new List();
List.switchSockets = new List();
List.fans = new List();
List.sensorsEnvironmentalScience = new List();
List.scenes = new List();
List.deviceFunctionList = null;
_FunctionList = null;
}
///
/// 接收bus软件上传的功能
/// tcp方式
///
///
public void AddDeviceFunction(Function sidObj0)
{
switch (sidObj0.spk)
{
case SPK.AcStandard:
var sidObj = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.aCs.Add(sidObj);
sidObj.SaveFunctionFile();
break;
case SPK.FloorHeatStandard:
var sidObj1 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.floorHeatings.Add(sidObj1);
sidObj1.SaveFunctionFile();
break;
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightSwitch:
var sidObj2 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.lights.Add(sidObj2);
sidObj2.SaveFunctionFile();
break;
case SPK.CurtainSwitch:
case SPK.CurtainRoller:
case SPK.CurtainTrietex:
var sidObj3 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.curtains.Add(sidObj3 );
sidObj3.SaveFunctionFile();
break;
case SPK.ElectricTV:
var sidObj4 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.tVs.Add(sidObj4);
sidObj4.SaveFunctionFile();
break;
case SPK.ElectricSocket:
var sidObj5 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.switchSockets.Add(sidObj5);
sidObj5.SaveFunctionFile();
break;
case SPK.ElectricFan:
var sidObj6 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.fans.Add(sidObj6);
sidObj6.SaveFunctionFile();
break;
case SPK.SensorCO2:
case SPK.SensorTVOC:
case SPK.SensorPm25:
case SPK.SensorTemperature:
case SPK.SensorHumidity:
var sidObj7 = Newtonsoft.Json.JsonConvert.DeserializeObject(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
List.sensorsEnvironmentalScience.Add(sidObj7);
sidObj7.SaveFunctionFile();
break;
}
}
///
/// 接收bus软件上传的功能
/// http udp
///
///
public void AddFunction(object obj)
{
var f = Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString());
if (f == null)
return;
switch (f.Spk_Prefix)
{
case FunctionCategory.AC:
switch (f.spk)
{
case SPK.AcStandard:
List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
}
break;
case FunctionCategory.FloorHeat:
switch (f.spk)
{
case SPK.FloorHeatStandard:
List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
}
break;
case FunctionCategory.Light:
List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
case FunctionCategory.Curtain:
List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
case FunctionCategory.Electric:
switch(f.spk)
{
case SPK.ElectricTV:
List.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
case SPK.ElectricSocket:
List.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
case SPK.ElectricFan:
List.electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
}
break;
case FunctionCategory.Sensor:
switch (f.spk)
{
case SPK.SensorTVOC:
case SPK.SensorCO2:
case SPK.SensorPm25:
case SPK.SensorHumidity:
case SPK.SensorTemperature:
List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
case SPK.SensorWater:
case SPK.SensorSmoke:
case SPK.SensorGas:
case SPK.SensorDryContact:
case SPK.SensorShanLan:
case SPK.SensorDuiShe:
case SPK.SensorPir:
case SPK.SensorDoorWindow:
case SPK.SensoruUtrasonic:
List.sensorsArm.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString()));
break;
}
break;
}
}
///
/// 功能绑定房间
///
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:
List.fans.Remove(List.fans.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 ReadAllFunctionStatus()
{
if (lockReadFunctionStatus)
{
MainPage.Log($"多次进入--返回");
return;
}
new Thread(() =>
{
if (lockReadFunctionStatus)
{
MainPage.Log($"多次进入--返回");
return;
}
MainPage.Log($"进入--读取");
lockReadFunctionStatus = true;
try
{
if (DriverLayer.Control.Ins.IsRemote)
{
var page = new List();
int count = 0;
foreach (var function in GetDeviceFunctionList())
{
page.Add(function.deviceId);
count++;
if (count > 9)
{
DriverLayer.Control.Ins.SendApiReadCommand(page);
page.Clear();
count = 0;
}
}
DriverLayer.Control.Ins.SendApiReadCommand(page);
}
else
{
foreach (var function in GetDeviceFunctionList())
{
switch (function.Spk_Prefix)
{
case FunctionCategory.Light:
case FunctionCategory.Electric:
case FunctionCategory.Curtain:
case FunctionCategory.AC:
case FunctionCategory.FloorHeat:
DriverLayer.Control.Ins.SendReadCommand(function);
break;
}
}
}
}
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 功能文本相关
///
/// 属性名称显示文本
/// 中英文显示
///
public string GetNameText(string key)
{
string text = "";
switch (key)
{
case FunctionAttributeKey.OnOff:
text = Language.StringByID(StringId.OnOff);
break;
case FunctionAttributeKey.Brightness:
text = Language.StringByID(StringId.Brightness);
break;
case FunctionAttributeKey.RGB:
text = Language.StringByID(StringId.ColorValue);
break;
case FunctionAttributeKey.Mode:
text = Language.StringByID(StringId.Mode);
break;
case FunctionAttributeKey.FanSpeed:
text = Language.StringByID(StringId.FanSpeed);
break;
case FunctionAttributeKey.SetTemp:
text = Language.StringByID(StringId.Temp);
break;
case FunctionAttributeKey.IndoorTemp:
text = Language.StringByID(StringId.IndoorTemp);
break;
case FunctionAttributeKey.Delay:
text = Language.StringByID(StringId.Delay);
break;
case FunctionAttributeKey.CCT:
text = "CCT";
break;
case FunctionAttributeKey.Percent:
text = Language.StringByID(StringId.PercentAdjustment);
break;
case FunctionAttributeKey.FadeTime:
text = Language.StringByID(StringId.FadeSpeed);
break;
}
return text;
}
///
/// 属性值单位
///
public string GetUintString(string key)
{
var us = "";
switch (key)
{
case FunctionAttributeKey.SetTemp:
case FunctionAttributeKey.IndoorTemp:
us = "°C";
break;
case FunctionAttributeKey.Percent:
case FunctionAttributeKey.Brightness:
us = "%";
break;
}
return us;
}
///
/// 获取指定属性的显示文本
/// 中英文显示
///
public string GetValueText(string key, string value)
{
string text = "";
switch (key)
{
case FunctionAttributeKey.OnOff:
text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF);
break;
case FunctionAttributeKey.SetTemp:
case FunctionAttributeKey.IndoorTemp:
case FunctionAttributeKey.Brightness:
case FunctionAttributeKey.Percent:
if (value == "")
{
value = "0";
}
text = value;
break;
case FunctionAttributeKey.Mode:
switch (value)
{
//----空调
case "auto":
text = Language.StringByID(StringId.Auto);
break;
case "cool":
text = Language.StringByID(StringId.Cool);
break;
case "heat":
text = Language.StringByID(StringId.Heat);
break;
case "dry":
text = Language.StringByID(StringId.Dry);
break;
case "fan":
text = Language.StringByID(StringId.AirSupply);
break;
//-----地热
case "day":
text = Language.StringByID(StringId.Day);
break;
case "night":
text = Language.StringByID(StringId.Night);
break;
case "away":
text = Language.StringByID(StringId.Away);
break;
case "normal":
text = Language.StringByID(StringId.Normal);
break;
case "timer":
text = Language.StringByID(StringId.Timer);
break;
}
break;
case FunctionAttributeKey.FanSpeed:
switch (value)
{
case "high":
text = Language.StringByID(StringId.HighWindSpeed);
break;
case "medium":
text = Language.StringByID(StringId.MiddleWindSpeed);
break;
case "low":
text = Language.StringByID(StringId.LowWindSpeed);
break;
case "auto":
text = Language.StringByID(StringId.Auto);
break;
default:
text = "low";
break;
}
break;
case "high":
text = Language.StringByID(StringId.HighWindSpeed);
break;
case "medium":
text = Language.StringByID(StringId.MiddleWindSpeed);
break;
case "low":
text = Language.StringByID(StringId.LowWindSpeed);
break;
case "auto":
text = Language.StringByID(StringId.Auto);
break;
}
return text;
}
///
/// 延时显示的文本
///
public string GetDelayText(string delay)
{
string text = "";
switch (delay)
{
case "0":
text = Language.StringByID(StringId.NoDelay);
break;
case "30":
text = "30s";
break;
case "60":
text = "1min";
break;
case "120":
text = "2min";
break;
case "300":
text = "5min";
break;
}
return text;
}
#endregion
}
}