using System;
|
using System.Collections.Generic;
|
using HDL_ON.DAL.Server;
|
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
|
{
|
/// <summary>
|
/// 云端唯一ID
|
/// </summary>
|
public string userSceneId = "";
|
/// <summary>
|
/// 场景sid
|
/// </summary>
|
public string sid = "";
|
/// <summary>
|
/// 场景名称
|
/// </summary>
|
public string name = "";
|
/// <summary>
|
/// 网关ID
|
/// </summary>
|
public string gatewayId = "";
|
/// <summary>
|
/// 云端oss存储图片的路径
|
/// </summary>
|
public string image = "";
|
/// <summary>
|
/// 所属房间列表
|
/// </summary>
|
public List<string> roomIds = new List<string>();
|
/// <summary>
|
/// 所属房间列表
|
/// </summary>
|
public List<string> uids = new List<string>();
|
/// <summary>
|
/// 延时
|
/// </summary>
|
public int delay = 0;
|
/// <summary>
|
/// 延时显示的文本
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public string delayText
|
{
|
get
|
{
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 场景分组
|
/// </summary>
|
public string group = "1";
|
/// <summary>
|
/// 场景类型
|
/// </summary>
|
public SceneType sceneType = SceneType.OrdinaryScenes;
|
/// <summary>
|
/// 收藏标记
|
/// </summary>
|
public bool collect = false;
|
|
///// <summary>
|
///// 场景背景
|
///// </summary>
|
//public string ImagePath = "Intelligence/Gallery/scenebg1.png";//"FunctionIcon/Scene/s1.png";
|
|
///// <summary>
|
///// 场景背景
|
///// </summary>
|
public string ImagePath
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(image))
|
{
|
return "Intelligence/Gallery/scenebg1.png";
|
}
|
else
|
{
|
return image;
|
}
|
}
|
set
|
{
|
image = value;
|
}
|
}
|
|
|
/// <summary>
|
/// 场景功能列表
|
/// </summary>
|
public List<SceneFunction> functions = new List<SceneFunction>();
|
/// <summary>
|
/// 场景推送配置列表
|
/// </summary>
|
public List<ScenePushConfig> pushConfigs = new List<ScenePushConfig>();
|
|
/// <summary>
|
/// 生成逻辑sid方法
|
/// </summary>
|
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 = "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;
|
}
|
|
/// <summary>
|
/// 获取设备添加到房间的房间名称
|
/// </summary>
|
/// <returns></returns>
|
public string GetRoomListName()
|
{
|
string roomNameList = "";
|
foreach (var roomId in roomIds)
|
{
|
var findRoom = DB_ResidenceData.residenceData.Rooms.Find(obj => obj.uid == roomId);
|
if (findRoom == null)
|
{
|
continue;
|
}
|
if (roomNameList != "")
|
{
|
roomNameList += ",";
|
}
|
roomNameList += findRoom.floorName + findRoom.roomName;
|
}
|
if (roomNameList == "" )
|
{
|
roomNameList = Shared.Language.StringByID(StringId.WholeHouseScene);
|
}
|
return roomNameList;
|
}
|
|
/// <summary>
|
/// 数据存储文件名
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public string savePath
|
{
|
get
|
{
|
return "SceneData_" + sid;
|
}
|
}
|
|
/// <summary>
|
/// 保存功能数据
|
/// </summary>
|
public void SaveSceneData(bool upServer)
|
{
|
if (upServer)
|
{
|
UploadScene();
|
}
|
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
|
FileUtils.WriteFileByBytes(savePath, ssd);
|
MainPage.Log($"Save Scene Data : {savePath}");
|
}
|
|
/// <summary>
|
/// 上传数据到云端
|
/// </summary>
|
void UploadScene()
|
{
|
var pm = new HttpServerRequest();
|
ResponsePackNew revPack;
|
if (string.IsNullOrEmpty(createTime) && string.IsNullOrEmpty(modifyTime))
|
{
|
revPack = pm.AddScene(this);
|
if (revPack.Code == StateCode.SUCCESS)
|
{
|
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
|
FileUtils.WriteFileByBytes(savePath, ssd);
|
}
|
}
|
else if (!string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime))
|
{
|
revPack = pm.EditScene(this);
|
if (revPack.Code == StateCode.SUCCESS)
|
{
|
var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(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));
|
FileUtils.WriteFileByBytes(savePath, ssd);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 云端数据创建的时间
|
/// </summary>
|
public string createTime = "";
|
/// <summary>
|
/// 云端数据修改的最后时间
|
/// </summary>
|
public string modifyTime = "";
|
}
|
/// <summary>
|
/// 场景功能对象
|
/// </summary>
|
public class SceneFunction
|
{
|
public string sid = "";
|
|
public List<SceneFunctionStatus> status = new List<SceneFunctionStatus>();
|
/// <summary>
|
/// 功能延时
|
/// </summary>
|
public string delay = "0";
|
|
Function _localFunction;
|
/// <summary>
|
/// 本地对应的功能
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public Function localFunction {
|
get
|
{
|
if(_localFunction == null)
|
{
|
_localFunction = ConvertFunctionObject();
|
}
|
return _localFunction;
|
}
|
}
|
|
/// <summary>
|
/// 转换成功能对象
|
/// </summary>
|
/// <returns></returns>
|
Function ConvertFunctionObject()
|
{
|
var localFunction = DB_ResidenceData.functionList.GetAllDeviceFunctionList().Find((obj) => obj.sid == sid);
|
foreach (var s in status)
|
{
|
localFunction.attributes.Add(new FunctionAttributes() { key = s.key, curValue = s.value, value = new List<string>() { s.value } });
|
}
|
return localFunction;
|
}
|
|
}
|
|
/// <summary>
|
/// 场景功能属性
|
/// </summary>
|
public class SceneFunctionStatus
|
{
|
public string key = "";
|
public string value = "";
|
}
|
/// <summary>
|
/// 场景推送配置
|
/// </summary>
|
public class ScenePushConfig
|
{
|
/// <summary>
|
/// 推送方式
|
/// </summary>
|
public string pushMethod = "";
|
/// <summary>
|
/// 推送内容
|
/// </summary>
|
public string pushContent = "";
|
/// <summary>
|
/// 推送目标集合
|
/// </summary>
|
public List<string> pushTarget = new List<string>();
|
}
|
|
}
|