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 HDL_ON.DriverLayer;
|
using Shared;
|
|
namespace HDL_ON.Entity
|
{
|
public class FunctionList
|
{
|
static FunctionList _FunctionList;
|
|
//public static void ClearData()
|
//{
|
// try
|
// {
|
// _FunctionList._IpCamImou = null;
|
// _FunctionList.ClearDatas();
|
// _FunctionList = null;
|
// }
|
// catch (Exception ex)
|
// {
|
// MainPage.Log($"清理FunctionList异常:{ex.Message}");
|
// _FunctionList = null;
|
// }
|
//}
|
|
public static FunctionList List
|
{
|
get
|
{
|
if (_FunctionList == null)
|
{
|
_FunctionList = new FunctionList();
|
#region 恢复数据
|
var filePathList = FileUtlis.Files.ReadFiles();
|
foreach (var filePath in filePathList)
|
{
|
try
|
{
|
_FunctionList.IniFunctionList(filePath);
|
}
|
catch { }
|
}
|
#endregion
|
}
|
return _FunctionList;
|
}
|
}
|
/// <summary>
|
/// 功能列表
|
/// </summary>
|
public List<Function> Functions = new List<Function>();
|
/// <summary>
|
/// 群控列表
|
/// </summary>
|
public List<GroupControl> groupControls = new List<GroupControl>();
|
|
|
/// <summary>
|
/// 机械臂列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetMechanicalArmList()
|
{
|
return Functions.FindAll((obj) => obj.spk == SPK.MechanicalArm);
|
}
|
|
List<Function> _IpCamImou;
|
/// <summary>
|
/// 获取摄像头列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetIpCamImouList()
|
{
|
if (_IpCamImou == null)
|
{
|
_IpCamImou = Functions.FindAll((obj) => obj.spk == SPK.IpCam_Imou);
|
if (_IpCamImou.Count > 0)
|
{
|
#if __IOS__
|
//初始化大华摄像头sdk
|
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().InitSDKWithAppKey("HDL-HOME-APP-TEST", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", OnAppConfig.Instance.RequestHttpsHost);
|
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().AccessToken = UserInfo.Current.LoginTokenString;
|
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshToken = UserInfo.Current.RefreshToken;
|
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
|
Console.WriteLine("token:" + UserInfo.Current.LoginTokenString);
|
Console.WriteLine("token:" + UserInfo.Current.RefreshToken);
|
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshDeviceList();
|
|
|
|
#else
|
Com.Utils.HdlToLcUtils.Instance.InitData(Shared.Application.Activity, "HDL-HOME-APP-TEST", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", OnAppConfig.Instance.RequestHttpsHost);
|
Com.Utils.HdlToLcUtils.Instance.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
|
Com.Utils.HdlToLcUtils.Instance.Token = UserInfo.Current.AccessToken;
|
#endif
|
}
|
}
|
return _IpCamImou;
|
}
|
|
/// <summary>
|
/// 绿建科技系统
|
/// 总控列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetAcstParentList()
|
{
|
return Functions.FindAll((obj) => obj.spk == SPK.AcstParent);//.OrderByDescending(o=>o.controlCounter).ToList()
|
}
|
|
/// <summary>
|
/// 绿建科技系统
|
/// 子控列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetAcstSubList()
|
{
|
return Functions.FindAll((obj) => obj.spk == SPK.AcstSub);
|
}
|
|
/// <summary>
|
/// 空调列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetAcList()
|
{
|
var spkList = SPK.AcSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
/// <summary>
|
/// 灯光列表
|
/// </summary>
|
public List<Function> GetLightList()
|
{
|
var spkList = SPK.LightSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
/// <summary>
|
/// 窗帘列表
|
/// </summary>
|
public List<Function> GetCurtainList()
|
{
|
var spkList = SPK.CurtainSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
/// <summary>
|
/// 地热列表
|
/// </summary>
|
public List<Function> GetFloorHeatingList()
|
{
|
var spkList = SPK.FhSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
public List<Function> GetDoorLockList()
|
{
|
var spkList = SPK.GetDoorLockSPKList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
/// <summary>
|
/// 获取萤石视频门锁
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetVideoDoorLockList()
|
{
|
var spkList = SPK.GetVideoDoorLockSPKList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
/// <summary>
|
/// 新风列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetAirFreshList()
|
{
|
var spkList = SPK.AirFreshSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
/// <summary>
|
/// 能源列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetEnergyList()
|
{
|
var spkList = SPK.EnergySpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
List<InverterInfo> _inverterList = new List<InverterInfo>();
|
/// <summary>
|
/// 光伏列表
|
/// </summary>
|
public List<Function> InverterList()
|
{
|
return Functions.FindAll((obj) => obj.spk == SPK.Inverter || obj.spk == SPK.InverterRst);
|
}
|
#region 家电列表 electricals
|
/// <summary>
|
/// 家电列表
|
/// </summary>
|
public List<Function> GetElectricals()
|
{
|
var spkList = SPK.ElectricalSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
|
/// <summary>
|
/// 红外宝列表
|
/// </summary>
|
public List<Function> GetIrModuleList()
|
{
|
return Functions.FindAll((obj) => obj.spk == SPK.IrModule);
|
}
|
#endregion
|
|
/// <summary>
|
/// 音乐列表
|
/// </summary>
|
/// <returns></returns>
|
public List<Function> GetMusicList()
|
{
|
var spkList = SPK.MusicSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
|
/// <summary>
|
/// 环境传感器列表
|
/// </summary>
|
public List<Function> GetEnvirSensorsList()
|
{
|
var spkList = SPK.EnvironDeviceSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
/// <summary>
|
/// 安防设备列表
|
/// </summary>
|
public List<Function> GetArmSensorList()
|
{
|
var spkList = SPK.ArmSensorSpkList();
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
/// <summary>
|
/// 安防中心支持的传感器列表
|
/// </summary>
|
public List<Function> GetArmCenterList()
|
{
|
var spkList = new List<string>()
|
{
|
SPK.SensorPir,
|
SPK.SensorPirHold,
|
SPK.SensorDoorWindow,
|
SPK.SensorSmoke,
|
SPK.SensorWater,
|
SPK.SensorGas,
|
};
|
|
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
|
|
/// <summary>
|
/// 可视对讲列表,当为null或size为0则不显示可视对讲icon
|
/// </summary>
|
// public UI.UI2.FuntionControlView.Video.VideoClouds videoIntercom;
|
public List<UI.UI2.FuntionControlView.Video.Video> videoIntercom = new List<UI.UI2.FuntionControlView.Video.Video>();
|
|
List<Function> _OtherBrandFunction;
|
/// <summary>
|
/// 第三方品牌功能
|
/// </summary>
|
public List<Function> OtherBrandFunction
|
{
|
get
|
{
|
if(_OtherBrandFunction == null)
|
{
|
_OtherBrandFunction = new List<Function>();
|
var spkList = SPK.GetAll3tySPK();
|
_OtherBrandFunction = Functions.FindAll((obj) => spkList.Contains(obj.spk));
|
}
|
return _OtherBrandFunction;
|
}
|
}
|
|
|
/// <summary>
|
/// 场景列表
|
/// </summary>
|
public List<Scene> scenes = new List<Scene>();
|
|
/// <summary>
|
/// 安防列表
|
/// </summary>
|
public List<SecurityAlarm> securities = new List<SecurityAlarm>();
|
|
public List<SecurityAlarm> GetOrdinarySecurities()
|
{
|
var ordinarySecurities = new List<SecurityAlarm>();
|
foreach (var mode in securities)
|
{
|
if (mode.type == "all_day" || mode.type == "mute")
|
{
|
continue;
|
}
|
ordinarySecurities.Add(mode);
|
}
|
return ordinarySecurities;
|
}
|
|
/// <summary>
|
/// 加载功能列表
|
/// </summary>
|
/// <param name="filePath"></param>
|
/// <param name="checkRepeat">
|
/// <para>考虑到性能问题追加此变量,是否检测重复,只对function有效</para>
|
/// <para>true:当重复存在时,替换掉</para>
|
/// <para>false:直接无条件添加</para></param>
|
public void IniFunctionList(string filePath, bool checkRepeat = false)
|
{
|
try
|
{
|
// 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<Function>(functionDataString);
|
if (tempFunction == null)
|
{
|
MainPage.Log("null");
|
FileUtlis.Files.DeleteFile(filePath);
|
return;
|
}
|
//音乐部分要修改
|
//if(tempFunction.spk.ToString() == SPK.MusicStandard)
|
//{
|
// UI.Music.A31MusicModel.A31MusicModelList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<UI.Music.A31MusicModel>(functionDataString));
|
//}
|
if (checkRepeat == true)
|
{
|
//检测重复
|
var same = Functions.FindAll((obj) => obj.deviceId == tempFunction.deviceId);
|
if(same!= null)
|
{
|
foreach(var sameTemp in same)
|
{
|
Functions.Remove(sameTemp);
|
}
|
}
|
//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<Scene>(sceneDataString);
|
List.scenes.Add(tempScene);
|
}
|
else if (filePath.StartsWith("SecurityData_"))
|
{
|
var dataBytes = FileUtlis.Files.ReadFile(filePath);
|
var dataString = System.Text.Encoding.UTF8.GetString(dataBytes);
|
var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityAlarm>(dataString);
|
if (temp == null)
|
{
|
MainPage.Log("SecurityData_null");
|
FileUtlis.Files.DeleteFile(filePath);
|
return;
|
}
|
if (checkRepeat == true)
|
{
|
//检测重复
|
for (int i = 0; i < securities.Count; i++)
|
{
|
if (securities[i].sid == temp.sid)
|
{
|
//先移除掉再加
|
securities.RemoveAt(i);
|
securities.Add(temp);
|
return;
|
}
|
}
|
}
|
securities.Add(temp);
|
}
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"IniFunctionList error : {ex.Message}");
|
}
|
finally
|
{
|
}
|
}
|
|
/// <summary>
|
/// 获取设备功能列表
|
/// </summary>
|
public List<Function> GetDeviceFunctionList(SPK.BrandType brandType = SPK.BrandType.All)
|
{
|
List<Function> resultFunctions = new List<Function>();
|
if (brandType == SPK.BrandType.All)
|
{
|
}
|
else
|
{
|
switch (brandType)
|
{
|
case SPK.BrandType.Hdl:
|
try
|
{
|
foreach (var function in Functions)
|
{
|
if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk))
|
{
|
resultFunctions.Add(function);
|
}
|
}
|
}
|
catch { }
|
break;
|
|
case SPK.BrandType.Tuya:
|
lock (Functions)
|
{
|
try
|
{
|
foreach (var function in Functions)
|
{
|
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk))
|
{
|
resultFunctions.Add(function);
|
}
|
}
|
}
|
catch { }
|
}
|
break;
|
}
|
return resultFunctions;
|
}
|
|
return Functions;
|
}
|
|
|
|
|
/// <summary>
|
/// 清空设备功能列表
|
/// </summary>
|
public void ClearDatas()
|
{
|
try
|
{
|
if (_IpCamImou != null)
|
{
|
_IpCamImou.Clear();
|
_IpCamImou = null;
|
}
|
_FunctionList = new FunctionList();
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"清理FunctionList异常:{ex.Message}");
|
_FunctionList = null;
|
}
|
}
|
|
/// <summary>
|
/// 功能绑定房间
|
/// </summary>
|
public string FunctionsBindRooms(List<string> roomIds,List<string> 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;
|
}
|
|
/// <summary>
|
/// 删除场景
|
/// </summary>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 删除本地功能及文件
|
/// </summary>
|
public void DeleteFunction(Function delTemp)
|
{
|
Functions.Remove(Functions.Find((obj) => obj.deviceId == delTemp.deviceId));
|
FileUtlis.Files.DeleteFile(delTemp.savePath);
|
}
|
|
bool lockReadFunctionStatus = false;
|
|
/// <summary>
|
/// 读取第三方设备状态
|
/// </summary>
|
public void Read3tyFunctionStatus()
|
{
|
//读取涂鸦设备状态
|
if (GetDeviceFunctionList(SPK.BrandType.Tuya).Count > 0)
|
{
|
var page = new List<string>();
|
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);
|
}
|
|
}
|
|
/// <summary>
|
/// 读取全部功能的状态
|
/// </summary>
|
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)
|
{
|
|
//List<Function> functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
|
//var sss = functions.OrderBy((obj) => obj.collect);
|
|
List<Function> readList = new List<Function>();
|
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
|
{
|
readList.Add(function);
|
MainPage.Log($"读取功能状态:{function.name} : {function.sid} ");
|
if (readList.Count > 9)
|
{
|
Control.Ins.SendReadCommand(readList);
|
readList.Clear();
|
}
|
}
|
if (readList.Count > 0)
|
{
|
Control.Ins.SendReadCommand(readList);
|
}
|
if (DB_ResidenceData.Instance.GatewayType == 1)
|
{
|
Dictionary<string, string> pairs = new Dictionary<string, string>();
|
string sendId = Control.Ins.msg_id.ToString();
|
pairs.Add("id", sendId);
|
pairs.Add("time_stamp", Utlis.GetTimestamp());
|
var readSecurityStatusJson = Newtonsoft.Json.JsonConvert.SerializeObject(pairs);
|
var sendBytes = Control.Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadSecurityStatus, readSecurityStatusJson);
|
MainPage.Log($"本地通讯 读取安防状态:{readSecurityStatusJson}");
|
new Control_Udp().SendLocalHdlLinkData(sendBytes, sendId);
|
}
|
}
|
else
|
{
|
var page = new List<string>();
|
int count = 0;
|
|
//List<Function> functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
|
//var sss = functions.OrderBy((obj) => obj.collect);
|
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 场景相关
|
/// <summary>
|
/// 添加场景
|
/// </summary>
|
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)
|
{
|
if (MainPage.NoLoginMode)
|
{
|
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(scene));
|
FileUtlis.Files.WriteFileByBytes(scene.savePath, ssd);
|
result = scene;
|
}
|
else
|
{
|
var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(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 收藏功能
|
|
/// <summary>
|
/// 收藏场景
|
/// </summary>
|
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
|
}
|
|
}
|