using System;
using System.Collections.Generic;
using HDL_ON.Common;
using HDL_ON.DAL.Server;
using HDL_ON.UI;
using Shared;
namespace HDL_ON.Entity
{
public class SceneApiPack
{
static SceneApiPack _ScenePack;
public static SceneApiPack ScenePack
{
get
{
if(_ScenePack == null)
{
_ScenePack = new SceneApiPack();
}
return _ScenePack;
}
}
}
public class Scene
{
public Scene()
{
sid = NewSid();
if (!DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
{
gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId;
}
}
///
/// 云端唯一ID
///
public string userSceneId = null;
///
/// 场景sid
///
public string sid = "";
///
/// 场景名称
///
public string name = "";
///
/// 网关ID
///
public string gatewayId = "";
///
/// 云端oss存储图片的路径
///
public string image = "";
///
/// 所属房间列表
///
public List roomIds = new List();
/////
///// 所属房间列表
/////
//public List uids = new List();
///
/// 延时
///
public string delay = "0";
///
/// 场景的最后一次执行时间
///
public string LastExecutionTime = "";
///
/// 场景分组
///
public string group = "1";
///
/// 场景类型
///
public SceneType sceneType = SceneType.OrdinaryScenes;
///
/// 收藏标记
///
public bool collect = false;
///
/// 创建该场景的用户ID
///
public string userId = "";
/////
///// 场景背景
/////
public string ImagePath
{
get
{
if (string.IsNullOrEmpty(image))
{
return "Intelligence/Gallery/scenebg1.png";
}
else
{
return image;
}
}
set
{
image = value;
}
}
///
/// 场景功能列表
///
public List functions = new List();
///
/// 场景推送配置列表
///
public List pushConfigs = new List();
///
/// 生成逻辑sid方法
///
public string NewSid()
{
string sceneId = "";
try
{
string sOidBeginsWith = "000101";//厂商 + 通讯方式
DateTime dt = DateTime.Now;
DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
long m = (long)((dt - startTime).TotalMilliseconds / 10);
string sTimeSpan = "00000000";
byte[] arry = new byte[4];
arry[0] = (byte)(m & 0xFF);
arry[1] = (byte)((m & 0xFF00) >> 8);
arry[2] = (byte)((m & 0xFF0000) >> 16);
arry[3] = (byte)((m >> 24) & 0xFF);
sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2");
if (sTimeSpan.Length >= 8)
{
sTimeSpan = sTimeSpan.Substring(0, 8);
}
else
{
sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8);
//sTimeSpan = "00000000";
}
sceneId = sOidBeginsWith + sTimeSpan;
sceneId += "0A";
sceneId += "0A01";
int maxId = 1;
for (int i = 0; i < FunctionList.List.scenes.Count; i++)
{
string s = FunctionList.List.scenes[i].sid.Substring(20, 4);
int iThisSceneId = Convert.ToInt16(s, 16);
if (iThisSceneId > maxId)
maxId = iThisSceneId;
}
sceneId += (maxId + 1).ToString("X4");
sceneId += "0000";
}
catch
{
return sceneId;
}
return sceneId;
}
///
/// 获取设备添加到房间的房间名称
///
///
public string GetRoomListName()
{
string roomNameList = "";
foreach (var roomId in roomIds)
{
var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId);
if (findRoom == null)
{
continue;
}
if (roomNameList != "")
{
roomNameList += ",";
}
roomNameList += findRoom.floorName + findRoom.roomName;
}
if (roomNameList == "" )
{
roomNameList = Shared.Language.StringByID(StringId.WholeZone);
}
return roomNameList;
}
///
/// 数据存储文件名
///
[Newtonsoft.Json.JsonIgnore]
public string savePath
{
get
{
return "SceneData_" + sid;
}
}
///
/// 场景执行\倒计时
///
///
public void SceneCountDown(Button btnShowDelay)
{
//场景正在倒计时执行中
if (LastExecutionTime != "" && Convert.ToDouble(LastExecutionTime) + Convert.ToDouble(delay) > Convert.ToDouble(Utlis.GetTimestamp(false)))
{
int time = 0;
int.TryParse(Convert.ToInt32(
Convert.ToDouble(LastExecutionTime) + Convert.ToDouble(delay) - Convert.ToDouble(Utlis.GetTimestamp(false))
).ToString(), out time);
if (time > 0)
{
new System.Threading.Thread(() =>
{
if (time > 0)
{
while (time > 0)
{
Application.RunOnMainThread(() =>
{
if (time > 60)
{
btnShowDelay.Text = (time / 60).ToString() + "min" + time % 60 + "s";
}
else
{
btnShowDelay.Text = time.ToString() + "s";
}
});
System.Threading.Thread.Sleep(1000);
time--;
}
Application.RunOnMainThread(() =>
{
btnShowDelay.Text = "";
});
}
})
{ IsBackground = true, Priority = System.Threading.ThreadPriority.BelowNormal }.Start();
}
}
}
///
/// 保存场景数据文件
///
public void SaveSceneFile()
{
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
FileUtlis.Files.WriteFileByBytes(savePath, ssd);
MainPage.Log($"Save Scene Data : {savePath}");
}
///
/// 收藏场景
///
///
public void CollectScene()
{
var result = StateCode.SUCCESS;
new System.Threading.Thread(() =>
{
if (collect)
{
result = ApiUtlis.Ins.HttpRequest.CollectScene(userSceneId);
}
else
{
result = ApiUtlis.Ins.HttpRequest.CancelCollectScene(userSceneId);
}
//提示错误
if (result != StateCode.SUCCESS)
{
Application.RunOnMainThread(() =>
{
collect = !collect;
IMessageCommon.Current.ShowErrorInfoAlter(result);
});
}
})
{ IsBackground = true }.Start();
}
///
/// 编辑场景
///
public string EditScene()
{
var pm = new HttpServerRequest();
var revPack = pm.EditScene(this);
if (revPack.Code == StateCode.SUCCESS)
{
var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString());
var tempScene = scenes.Find((obj) => obj.sid == sid);
if (tempScene != null)
{
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
}
}
return revPack.Code;
}
///
/// 修改场景
///
public string UpdateScene()
{
var pm = new HttpServerRequest();
var revPack = pm.EditScene(this);
if (revPack.Code == StateCode.SUCCESS)
{
var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString());
var tempScene = scenes.Find((obj) => obj.sid == sid);
if (tempScene != null)
{
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
}
}
return revPack.Code;
}
///
/// 延时显示的文本
///
public string GetDelayText()
{
var delayInt = 0;
int.TryParse(delay,out delayInt);
if(delayInt == 0)
{
return Language.StringByID(StringId.NoDelay);
}
string text = "";
if (delayInt > 60)
{
text = (delayInt / 60) + Language.StringByID(StringId.m) + (delayInt % 60) + Language.StringByID(StringId.s);
}else
{
text = delayInt + Language.StringByID(StringId.s);
}
return 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;
}
///
/// 云端数据创建的时间
///
public string createTime = "";
///
/// 云端数据修改的最后时间
///
public string modifyTime = "";
}
///
/// 场景功能对象
///
public class SceneFunction
{
public string sid = "";
public List status = new List();
///
/// 功能延时
///
public string delay = "0";
Function _localFunction;
///
/// 本地对应的功能
///
[Newtonsoft.Json.JsonIgnore]
public Function localFunction
{
get
{
if (_localFunction == null)
{
_localFunction = ConvertFunctionObject();
}
return _localFunction;
}
}
///
/// 转换成功能对象
///
///
Function ConvertFunctionObject()
{
var localFunction = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.sid == sid);
return localFunction;
}
///
/// 解析场景功能数据
///
///
public string GetFunctionScnenInfo()
{
var sceneFunctionInfo = "";
foreach (var sfs in status)
{
if (sfs.key == FunctionAttributeKey.OnOff)
{
if (sfs.value == "off")
{
return Language.StringByID(StringId.Close);
}
}
}
sceneFunctionInfo += Language.StringByID(StringId.Open) + " ";
var modeState = status.Find((obj) => obj.key == FunctionAttributeKey.Mode);
var tempState = status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp);
var fanState = status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
if (modeState != null)
{
sceneFunctionInfo += modeState.GetValueText() + " ";
}
if (tempState != null)
{
sceneFunctionInfo += tempState.GetValueText() + " ";
sceneFunctionInfo += tempState.GetUintString();
}
if (fanState != null)
{
sceneFunctionInfo += fanState.GetValueText() + " ";
}
var briState = status.Find((obj) => obj.key == FunctionAttributeKey.Brightness);
if (briState != null)
{
sceneFunctionInfo += briState.value + "%";
}
var perState = status.Find((obj) => obj.key == FunctionAttributeKey.Percent);
if (perState != null)
{
sceneFunctionInfo += perState.value + "%";
}
return sceneFunctionInfo;
}
}
///
/// 场景功能属性
///
public class SceneFunctionStatus
{
public string key = "";
public string value = "";
///
/// 属性名称显示文本
/// 中英文显示
///
public string GetNameText()
{
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.RoomTemp:
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()
{
var us = "";
switch (key)
{
case FunctionAttributeKey.SetTemp:
case FunctionAttributeKey.RoomTemp:
us = "°C";
break;
case FunctionAttributeKey.Percent:
case FunctionAttributeKey.Brightness:
us = "%";
break;
}
return us;
}
///
/// 获取指定属性的显示文本
/// 中英文显示
///
public string GetValueText()
{
string text = "";
switch (key)
{
case FunctionAttributeKey.OnOff:
text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF);
break;
case FunctionAttributeKey.SetTemp:
case FunctionAttributeKey.RoomTemp:
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 class ScenePushConfig
{
///
/// 推送方式
///
public string pushMethod = "";
///
/// 推送内容
///
public string pushContent = "";
///
/// 推送目标集合
///
public List pushTarget = new List();
}
}