using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using HDL_ON.DAL;
|
using HDL_ON.DAL.Server;
|
|
namespace HDL_ON.Entity
|
{
|
public class FunctionList
|
{
|
static FunctionList _FunctionList;
|
public static FunctionList List
|
{
|
get
|
{
|
if(_FunctionList == null)
|
{
|
_FunctionList = new FunctionList();
|
#region 恢复数据
|
var filePathList = FileUtils.ReadFiles();
|
foreach (var filePath in filePathList)
|
{
|
_FunctionList.IniFunctionList(filePath);
|
}
|
#endregion
|
}
|
return _FunctionList;
|
}
|
}
|
|
/// <summary>
|
/// 空调列表
|
/// </summary>
|
public List<AC> aCs = new List<AC>();
|
/// <summary>
|
/// 灯光列表
|
/// </summary>
|
public List<Light> lights = new List<Light>();
|
/// <summary>
|
/// 窗帘列表
|
/// </summary>
|
public List<Curtain> curtains = new List<Curtain>();
|
/// <summary>
|
/// 地热列表
|
/// </summary>
|
public List<FloorHeating> floorHeatings = new List<FloorHeating>();
|
#region 家电列表 electricals
|
/// <summary>
|
/// 家电列表
|
/// </summary>
|
public List<Function> electricals
|
{
|
get
|
{
|
if(fans == null)
|
{
|
fans = new List<Fan>();
|
}
|
if(switchSockets == null)
|
{
|
switchSockets = new List<SwitchSocket>();
|
}
|
if(tVs == null)
|
{
|
tVs = new List<TV>();
|
}
|
var list = new List<Function>();
|
list.AddRange(fans);
|
list.AddRange(switchSockets);
|
list.AddRange(tVs);
|
return list;
|
}
|
}
|
/// <summary>
|
/// 风扇列表
|
/// </summary>
|
public List<Fan> fans = new List<Fan>();
|
/// <summary>
|
/// 电视列表
|
/// </summary>
|
public List<TV> tVs = new List<TV>();
|
/// <summary>
|
/// 家电列表
|
/// </summary>
|
public List<SwitchSocket> switchSockets = new List<SwitchSocket>();
|
#endregion
|
/// <summary>
|
/// 环境传感器列表
|
/// </summary>
|
public List<Sensor> sensorsEnvironmentalScience = new List<Sensor>();
|
|
/// <summary>
|
/// 场景列表
|
/// </summary>
|
public List<Scene> scenes = new List<Scene>();
|
/// <summary>
|
/// 功能列表
|
/// </summary>
|
List<Function> deviceFunctionList;
|
|
|
/// <summary>
|
/// 加载功能列表
|
/// todo 需要优化,后期不能保证能使用sid解析出是什么类型的设备
|
/// </summary>
|
/// <param name="filePath"></param>
|
public void IniFunctionList(string filePath)
|
{
|
if (filePath.StartsWith("FunctionData_"))
|
{
|
//if (filePath.Length == 13 + 28)
|
//{
|
// var _functionTypeString = filePath.Substring(16 + 13, 4);
|
// var ft = (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16));
|
// switch (ft)
|
// {
|
// case FunctionType.AC:
|
// //恢复空调数据
|
// var acDataBytes = FileUtils.ReadFile(filePath);
|
// var acString = System.Text.Encoding.UTF8.GetString(acDataBytes);
|
// List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(acString));
|
// break;
|
// case FunctionType.Relay:
|
// case FunctionType.Dimmer:
|
// case FunctionType.RGB:
|
// //恢复灯光数据
|
// var lightsDataBytes = FileUtils.ReadFile(filePath);
|
// var lightsString = System.Text.Encoding.UTF8.GetString(lightsDataBytes);
|
// List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(lightsString));
|
// break;
|
// case FunctionType.Curtain:
|
// case FunctionType.MotorCurtain:
|
// case FunctionType.RollingShutter:
|
// //恢复窗帘数据
|
// var curtainsDataBytes = FileUtils.ReadFile(filePath);
|
// var curtainsString = System.Text.Encoding.UTF8.GetString(curtainsDataBytes);
|
// List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(curtainsString));
|
// break;
|
// case FunctionType.FloorHeating:
|
// //恢复地热数据
|
// var fhDataBytes = FileUtils.ReadFile(filePath);
|
// var fhString = System.Text.Encoding.UTF8.GetString(fhDataBytes);
|
// List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(fhString));
|
// break;
|
// case FunctionType.PM25:
|
// case FunctionType.CO2:
|
// case FunctionType.TVOC:
|
// case FunctionType.Temp:
|
// case FunctionType.Humidity:
|
// //恢复环境数据
|
// var sesDataBytes = FileUtils.ReadFile(filePath);
|
// var sesString = System.Text.Encoding.UTF8.GetString(sesDataBytes);
|
// List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(sesString));
|
// break;
|
// case FunctionType.Socket:
|
// //恢复插座数据
|
// var eleDataBytes = FileUtils.ReadFile(filePath);
|
// var eleString = System.Text.Encoding.UTF8.GetString(eleDataBytes);
|
// List.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(eleString));
|
// break;
|
// case FunctionType.TV:
|
// //恢复电视数据
|
// var eleDataBytes1 = FileUtils.ReadFile(filePath);
|
// var eleString1 = System.Text.Encoding.UTF8.GetString(eleDataBytes1);
|
// List.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(eleString1));
|
// break;
|
// case FunctionType.Fan:
|
// //恢复风扇数据
|
// var eleDataBytes2 = FileUtils.ReadFile(filePath);
|
// var eleString2 = System.Text.Encoding.UTF8.GetString(eleDataBytes2);
|
// List.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(eleString2));
|
// break;
|
// }
|
//}
|
//else//sid非标准情况下,通过spk加载设备
|
{
|
var functionDataBytes = FileUtils.ReadFile(filePath);
|
var functionDataString = System.Text.Encoding.UTF8.GetString(functionDataBytes);
|
var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
|
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:
|
List.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(functionDataString));
|
break;
|
case SPK.CurtainRoller:
|
case SPK.CurtainShades:
|
case SPK.CurtainSwitch:
|
case SPK.CurtainTrietex:
|
List.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(functionDataString));
|
break;
|
case SPK.AcStandard:
|
List.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(functionDataString));
|
break;
|
case SPK.FloorHeatStandard:
|
//恢复地热数据
|
List.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(functionDataString));
|
break;
|
case SPK.SensorPm25:
|
case SPK.SensorCO2:
|
case SPK.SensorTVOC:
|
case SPK.SensorTemperature:
|
case SPK.SensorHumidity:
|
//恢复环境数据
|
List.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(functionDataString));
|
break;
|
case SPK.ElectricSocket:
|
//恢复插座数据
|
List.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(functionDataString));
|
break;
|
case SPK.ElectricTV:
|
//恢复电视数据
|
List.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(functionDataString));
|
break;
|
case SPK.ElectricFan:
|
//恢复风扇数据
|
List.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString));
|
break;
|
}
|
}
|
}
|
}
|
if (filePath.StartsWith("SceneData_"))
|
{
|
var sceneDataBytes = FileUtils.ReadFile(filePath);
|
var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes);
|
var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene>(sceneDataString);
|
if (tempScene.DeleteSign)
|
{
|
var pm = new HttpServerRequest();
|
pm.DeleteScene(tempScene.userSceneId);
|
}
|
else
|
{
|
List.scenes.Add(tempScene);
|
}
|
}
|
}
|
|
|
/// <summary>
|
/// 获取所有功能列表
|
/// </summary>
|
public List<Function> GetAllFunction()
|
{
|
var fs = new List<Function>();
|
fs.AddRange(GetAllDeviceFunctionList());
|
return fs;
|
}
|
|
/// <summary>
|
/// 获取设备功能列表
|
/// </summary>
|
public List<Function> GetAllDeviceFunctionList()
|
{
|
deviceFunctionList = new List<Function>();
|
deviceFunctionList.AddRange(aCs);
|
deviceFunctionList.AddRange(lights);
|
deviceFunctionList.AddRange(curtains);
|
deviceFunctionList.AddRange(floorHeatings);
|
deviceFunctionList.AddRange(electricals);
|
deviceFunctionList.AddRange(sensorsEnvironmentalScience);
|
deviceFunctionList.AddRange(UI.Music.A31MusicModel.A31MusicModelList);
|
try
|
{
|
deviceFunctionList.OrderByDescending(o => o.usageCount).ToList();
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"设备功能排序异常:{ex.Message}");
|
}
|
return deviceFunctionList;
|
}
|
/// <summary>
|
/// 清空设备功能列表
|
/// </summary>
|
public void ClearAllDeviceFunctionList()
|
{
|
aCs = new List<AC>();
|
lights = new List<Light>();
|
curtains = new List<Curtain>();
|
floorHeatings = new List<FloorHeating>();
|
tVs = new List<TV>();
|
switchSockets = new List<SwitchSocket>();
|
fans = new List<Fan>();
|
sensorsEnvironmentalScience = new List<Sensor>();
|
scenes = new List<Scene>();
|
deviceFunctionList = null;
|
}
|
|
/// <summary>
|
/// 接收bus软件上传的功能
|
/// tcp方式
|
/// </summary>
|
/// <param name="sidObj"></param>
|
public void AddDeviceFunction(Function sidObj0)
|
{
|
switch (sidObj0.functionType)
|
{
|
case FunctionType.AC:
|
var sidObj = Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.aCs.Add(sidObj);
|
sidObj.SaveFunctionData();
|
break;
|
case FunctionType.FloorHeating:
|
var sidObj1 = Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.floorHeatings.Add(sidObj1);
|
sidObj1.SaveFunctionData();
|
break;
|
case FunctionType.Dimmer:
|
case FunctionType.RGB:
|
case FunctionType.Relay:
|
var sidObj2 = Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.lights.Add(sidObj2);
|
sidObj2.SaveFunctionData();
|
break;
|
case FunctionType.Curtain:
|
case FunctionType.RollingShutter:
|
case FunctionType.MotorCurtain:
|
var sidObj3 = Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.curtains.Add(sidObj3 );
|
sidObj3.SaveFunctionData();
|
break;
|
case FunctionType.TV:
|
var sidObj4 = Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.tVs.Add(sidObj4);
|
sidObj4.SaveFunctionData();
|
break;
|
case FunctionType.Socket:
|
var sidObj5 = Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.switchSockets.Add(sidObj5);
|
sidObj5.SaveFunctionData();
|
break;
|
case FunctionType.Fan:
|
var sidObj6 = Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.fans.Add(sidObj6);
|
sidObj6.SaveFunctionData();
|
break;
|
case FunctionType.CO2:
|
case FunctionType.TVOC:
|
case FunctionType.PM25:
|
case FunctionType.Temp:
|
case FunctionType.Humidity:
|
var sidObj7 = Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(Newtonsoft.Json.JsonConvert.SerializeObject(sidObj0));
|
DB_ResidenceData.functionList.sensorsEnvironmentalScience.Add(sidObj7);
|
sidObj7.SaveFunctionData();
|
break;
|
}
|
}
|
/// <summary>
|
/// 接收bus软件上传的功能
|
/// http udp
|
/// </summary>
|
/// <param name="obj"></param>
|
public void AddFunction(object obj)
|
{
|
var f = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(obj.ToString());
|
if (f == null)
|
return;
|
switch (f.functionCategory)
|
{
|
case FunctionCategory.Thermostat:
|
switch (f.functionType)
|
{
|
case FunctionType.AC:
|
aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(obj.ToString()));
|
break;
|
case FunctionType.FloorHeating:
|
floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(obj.ToString()));
|
break;
|
}
|
break;
|
case FunctionCategory.Light:
|
lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(obj.ToString()));
|
break;
|
case FunctionCategory.Curtain:
|
curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(obj.ToString()));
|
break;
|
case FunctionCategory.Electrical:
|
switch(f.functionType)
|
{
|
case FunctionType.TV:
|
electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(obj.ToString()));
|
break;
|
case FunctionType.Socket:
|
electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(obj.ToString()));
|
break;
|
case FunctionType.Fan:
|
electricals.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(obj.ToString()));
|
break;
|
}
|
break;
|
case FunctionCategory.Sensor:
|
switch(f.functionType)
|
{
|
case FunctionType.TVOC:
|
case FunctionType.CO2:
|
case FunctionType.PM25:
|
case FunctionType.Humidity:
|
//case FunctionType.Noise:
|
sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(obj.ToString()));
|
break;
|
}
|
break;
|
}
|
}
|
|
/// <summary>
|
/// 下来云端设备数据
|
/// </summary>
|
public void DownloadFunctionList()
|
{
|
new System.Threading.Thread(() =>
|
{
|
var pm = new HttpServerRequest();
|
var pack = pm.GetDeviceList();
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(pack.Data.ToString());
|
if (deviceList != null)
|
{
|
foreach (var function in deviceList.list)
|
{
|
var localFunction = DB_ResidenceData.functionList.GetAllDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId);
|
if (localFunction != null)
|
{
|
if (localFunction.modifyTime != function.modifyTime)
|
{
|
localFunction.name = function.name;
|
localFunction.collect = function.collect;
|
localFunction.modifyTime = function.modifyTime;
|
localFunction.createTime = function.createTime;
|
localFunction.roomIds = function.roomIds;
|
localFunction.bus_Data = function.bus_Data;
|
}
|
localFunction.SaveFunctionData();
|
}
|
else
|
{
|
function.SaveFunctionData();
|
List.IniFunctionList(function.savePath);
|
}
|
|
var funcitonInfoPack = pm.GetDeviceInfoList(new List<string>() { function.deviceId });
|
var funcitonInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(funcitonInfoPack.Data.ToString());
|
if (funcitonInfo != null)
|
{
|
|
}
|
}
|
}
|
MainPage.Log($"读取云端设备数据:\r\n{ pack.Data.ToString()}");
|
}else
|
{
|
MainPage.Log($"读取云端设备数据失败:\r\nCode:{pack.Code}; Msg:{pack.message}");
|
}
|
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
/// <summary>
|
/// 下载云端场景数据
|
/// </summary>
|
public void DownloadSceneList()
|
{
|
new System.Threading.Thread(() =>
|
{
|
var pm = new HttpServerRequest();
|
var pack = pm.GetSceneList();
|
if(pack.Code == StateCode.SUCCESS)
|
{
|
|
MainPage.Log($"读取云端场景数据:\r\n{pack.Data.ToString()}");
|
}
|
else
|
{
|
|
MainPage.Log($"读取云端场景数据失败:\r\nCode:{pack.Code}; Msg:{pack.message}");
|
}
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
|
/// <summary>
|
/// 删除手机存储都所有缓存功能数据
|
/// </summary>
|
public void DelAllFunctionData()
|
{
|
var filePathList = FileUtils.ReadFiles();
|
foreach (var filePath in filePathList)
|
{
|
if (filePath.StartsWith("FunctionData_") && filePath.Length == 13 + 28)
|
{
|
FileUtils.DeleteFile(filePath);
|
}
|
}
|
_FunctionList = new FunctionList();
|
}
|
/// <summary>
|
/// 删除场景
|
/// </summary>
|
public void DeleteScene(Scene scene)
|
{
|
scene.DeleteSign = true;
|
List.scenes.Remove(scene);
|
}
|
|
}
|
|
}
|