using System;
|
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
|
using Shared;
|
using System.Collections.Generic;
|
using Newtonsoft.Json.Linq;
|
|
namespace HDL_ON.UI.UI2.Intelligence.Automation
|
{
|
public class MainView
|
{
|
/// <summary>
|
/// VerticalRefreshLayout父控件
|
/// </summary>
|
public static FrameLayout automationPage;
|
/// <summary>
|
/// 加载逻辑列表显示界面
|
/// </summary>
|
public static void MainShow()
|
{
|
automationPage.RemoveAll();
|
VerticalRefreshLayout vv = new VerticalRefreshLayout();
|
vv.Height = Application.GetRealHeight(667 - 64 - 49);//模拟高度
|
automationPage.AddChidren(vv);
|
vv.BeginHeaderRefreshingAction += () =>
|
{
|
//清除之前自动化列表;
|
Logic.LogicList.Clear();
|
//获取自动列表
|
GetLogicList();
|
//刷新自动化界面
|
MainShow();
|
//关闭刷新View;
|
vv.EndHeaderRefreshing();
|
};
|
//获取自动化列表
|
GetLogicList();
|
for (int i = Logic.LogicList.Count - 1; i >= 0; i--)//降序排列
|
//for (int i = 0; i < Logic.LogicList.Count; i++)
|
{
|
var currLogic = Logic.LogicList[i];
|
///上下间隔12像素
|
vv.AddChidren(new FrameLayout { Height = Application.GetRealHeight(12) });
|
LogicView.SingleLogicView logicView = new LogicView.SingleLogicView();
|
vv.AddChidren(logicView.FLayoutView());
|
logicView.btnLogicName.Text = currLogic.name;
|
logicView.btnWeekText.Text = GetCyclicText(currLogic);
|
logicView.btnclick.MouseUpEventHandler += (sen, e) =>
|
{
|
//Logic.currlogic = currLogic;
|
//var addLogic = new AddLogic();
|
//MainPage.BasePageView.AddChidren(addLogic);
|
//addLogic.Show();
|
//MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
new MainView { }.SkipAddLogicPage(currLogic);
|
};
|
//开关图标的点击事件
|
logicView.btnSwitchIcon.MouseUpEventHandler += (sender1, e1) =>
|
{
|
logicView.btnSwitchIcon.IsSelected = !logicView.btnSwitchIcon.IsSelected;
|
if (logicView.btnSwitchIcon.IsSelected)
|
{
|
logicView.btnSwitchIcon.IsSelected = true;
|
currLogic.enable = "true";
|
}
|
else
|
{
|
logicView.btnSwitchIcon.IsSelected = false;
|
currLogic.enable = "false";
|
}
|
//Send.switchLogic(currLogic);
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
//逻辑使能的命令
|
Send.SwitchLogic(currLogic);
|
|
}
|
catch { }
|
|
})
|
{ IsBackground = true }.Start();
|
};
|
GetSelectIcon(logicView.frameLayout, currLogic);
|
if (i == 0)//降序排列
|
//if (Logic.LogicList.Count - 1 == i)
|
{
|
///最后一个距离最底部12,界面显示效果作用;
|
vv.AddChidren(new FrameLayout { Height = Application.GetRealHeight(12) });
|
}
|
if (currLogic.enable == "true")
|
{
|
logicView.btnSwitchIcon.IsSelected = true;
|
}
|
else
|
{
|
logicView.btnSwitchIcon.IsSelected = false;
|
}
|
}
|
|
if (Logic.LogicList.Count == 0)
|
{
|
Button btnTipNot = new Button()
|
{
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight(120),
|
Width = Application.GetRealWidth(180),
|
Height = Application.GetRealWidth(180),
|
UnSelectedImagePath = "TipNot.png",
|
};
|
automationPage.AddChidren(btnTipNot);
|
Button btnTipNotText = new Button()
|
{
|
Y = btnTipNot.Bottom + Application.GetRealHeight(16),
|
Height = Application.GetRealHeight(20),
|
TextID = StringId.logicnull,
|
TextAlignment = TextAlignment.Center,
|
TextSize = LogicView.TextSize.text14,
|
TextColor = CSS.CSS_Color.textConfirmColor,
|
};
|
automationPage.AddChidren(btnTipNotText);
|
}
|
}
|
/// <summary>
|
/// 按+跳转到逻辑界面的方法
|
/// </summary>
|
public void SkipAddLogicPage(Logic logic=null)
|
{
|
if (logic == null)
|
{
|
Logic.currlogic = new Logic();
|
}
|
else {
|
Logic.currlogic = logic;
|
}
|
if (IsGatewayType)
|
{
|
var addLogic = new AddLogic();
|
MainPage.BasePageView.AddChidren(addLogic);
|
addLogic.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
}
|
else
|
{
|
|
var onePortAutomation = new OnePortAutomation();
|
MainPage.BasePageView.AddChidren(onePortAutomation);
|
onePortAutomation.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
}
|
}
|
/// <summary>
|
///返回循环描述文本
|
/// </summary>
|
/// <param name="logic"></param>
|
public static string GetCyclicText(Logic logic)
|
{
|
|
string weekName = "";
|
/// (执行一次:once,每天:day,每月:mon,星期:week,日期段:date_to_date)
|
switch (logic.cycle.type)
|
{
|
case "once":
|
{
|
weekName = Language.StringByID(StringId.performA);
|
}
|
break;
|
case "day":
|
{
|
weekName = Language.StringByID(StringId.days);
|
}
|
break;
|
case "week":
|
{
|
|
weekName = GetWeekString(logic.cycle.value);
|
|
}
|
break;
|
case "mon":
|
{
|
weekName = GetMonString(logic.cycle.value);
|
}
|
break;
|
}
|
return weekName;
|
}
|
/// <summary>
|
/// 返回星期描述文本
|
/// </summary>
|
/// <param name="weekList"></param>
|
/// <returns></returns>
|
public static string GetWeekString(List<string> weekList)
|
{
|
string weekTextName = "";
|
if (weekList.Contains("1"))
|
{
|
weekTextName += Language.StringByID(StringId.monday) + ",";
|
}
|
if (weekList.Contains("2"))
|
{
|
weekTextName += Language.StringByID(StringId.tuesday) + ",";
|
}
|
if (weekList.Contains("3"))
|
{
|
weekTextName += Language.StringByID(StringId.wednesday) + ",";
|
}
|
if (weekList.Contains("4"))
|
{
|
weekTextName += Language.StringByID(StringId.thursday) + ",";
|
}
|
if (weekList.Contains("5"))
|
{
|
weekTextName += Language.StringByID(StringId.friday) + ",";
|
}
|
if (weekList.Contains("6"))
|
{
|
weekTextName += Language.StringByID(StringId.saturday) + ",";
|
}
|
if (weekList.Contains("0"))
|
{
|
weekTextName += Language.StringByID(StringId.sunday) + ",";
|
}
|
if (weekTextName == "")
|
{
|
return "";
|
}
|
return weekTextName.TrimEnd(',');
|
}
|
/// <summary>
|
/// 获取每月的字符串
|
/// </summary>
|
/// <param name="monList"></param>
|
/// <returns></returns>
|
public static string GetMonString(List<string> monList)
|
{
|
string monTextName = Language.StringByID(StringId.monthly);
|
|
for (int i = 1; i < 32; i++)
|
{
|
if (monList.Contains(i.ToString()))
|
{
|
monTextName += i.ToString() + ",";
|
}
|
}
|
return monTextName.TrimEnd(',');
|
}
|
/// <summary>
|
/// 获取逻辑列表
|
/// </summary>
|
public static void GetLogicList()
|
{
|
if (Logic.LogicList.Count != 0)
|
{
|
//自动化列表为0才去获取自动化列表;
|
return;
|
}
|
List<string> logicIdList = new List<string>();
|
//获取逻辑ID列表
|
var idStr = Send.GetLogicIdList();
|
if (idStr.Code == "0" && idStr.Data != null && idStr.Data.ToString() != "")
|
{
|
var date = Newtonsoft.Json.JsonConvert.SerializeObject(idStr.Data);
|
var dateList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LogicData>>(date);
|
for (int i = 0; i < dateList.Count; i++)
|
{
|
//添加逻辑ID
|
logicIdList.Add(dateList[i].userLogicId);
|
}
|
}
|
//获取自动化列表
|
var logicStr = Send.GetLogic(logicIdList);
|
if (logicStr.Code == "0" && logicStr.Data != null && logicStr.Data.ToString() != "")
|
{
|
//获取逻辑详细返回是一个数组(object类型转换为数组);
|
var jArray = JArray.Parse(logicStr.Data.ToString());
|
for (int a = 0; a < jArray.Count; a++)
|
{
|
var jay = jArray[a];
|
//数据返序列化为Logic对象
|
var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay);
|
Console.WriteLine("获取逻辑==="+str);
|
var logic = Newtonsoft.Json.JsonConvert.DeserializeObject<Logic>(str);
|
if (logic != null)
|
{
|
//查找是否已经存在该逻辑
|
var if_logic = Logic.LogicList.Find((c) => c.userLogicId == logic.userLogicId);
|
if (if_logic == null)
|
{
|
|
//Logic newlogic = new Logic();
|
//newlogic.name = logic.name;
|
//newlogic.userLogicId = logic.userLogicId;
|
//newlogic.sid = logic.sid;
|
//newlogic.relation = logic.relation;
|
//newlogic.enable = logic.enable;
|
//newlogic.cycle = logic.cycle;
|
//for (int i = 0; i < logic.input.Count; i++)
|
//{
|
// if (logic.input[i] == null || string.IsNullOrEmpty(logic.input[i].condition_type))
|
// {
|
// //防止调试软件乱传东西上来;
|
// //防止有空对象;
|
// //正常情况下不会出现的现象;
|
// continue;
|
// }
|
// newlogic.input.Add(logic.input[i]);
|
//}
|
//for (int i = 0; i < logic.output.Count; i++)
|
//{
|
// if (logic.output[i] == null || string.IsNullOrEmpty(logic.output[i].target_type))
|
// {
|
// //防止调试软件乱传东西上来;
|
// //防止有空对象;
|
// //正常情况下不会该现象;
|
// continue;
|
// }
|
// newlogic.output.Add(logic.output[i]);
|
//}
|
|
//添加逻辑
|
Logic.LogicList.Add(logic);
|
}
|
}
|
|
}
|
}
|
|
}
|
/// <summary>
|
/// 判断JObject对象是存在健值
|
/// </summary>
|
/// <param name="jObject"></param>
|
/// <param name="key"></param>
|
/// <returns></returns>
|
private bool Exist(JObject jObject, string key)
|
{
|
|
if (jObject.Property(key) != null)
|
{
|
return true;
|
}
|
return false;
|
}
|
/// <summary>
|
/// 显示条件或者目标类型图标
|
/// </summary>
|
/// <param name="layouFrame">父控件</param>
|
/// <param name="logic">当前自动化</param>
|
private static void GetSelectIcon(FrameLayout layouFrame, Logic logic)
|
{
|
|
//重新排列图标序号
|
List<int> iconIntValue = new List<int>();
|
iconIntValue.Clear();
|
|
//1-10(表示条件图标)自己局部定义为了显示选中条件类型图标
|
//1-时间图标
|
//2-功能图标
|
for (int i = 0; i < logic.input.Count; i++)
|
{
|
if (logic.input[i] == null)
|
continue;
|
var int1 = int.Parse(logic.input[i].condition_type);
|
int iconInt = 0;
|
switch (int1)
|
{
|
case 1:
|
case 2:
|
{
|
iconInt = 1;
|
|
}
|
break;
|
case 3:
|
{
|
iconInt = 2;
|
|
}
|
break;
|
case 4:
|
case 6:
|
case 9:
|
{
|
iconInt = 3;
|
|
}
|
break;
|
}
|
|
if (!iconIntValue.Contains(iconInt))
|
{
|
iconIntValue.Add(iconInt);
|
}
|
|
}
|
|
//分割条件和目标的图标
|
iconIntValue.Add(11);
|
|
//12-20(表示目标图标)自己局部定义为了显示选中目标类型图标
|
//12-功能图标
|
//13-场景图标
|
//14-延时图标
|
for (int i = 0; i < logic.output.Count; i++)
|
{
|
var int1 = int.Parse(logic.output[i].target_type);
|
int iconInt = 0;
|
switch (int1)
|
{
|
case 1:
|
{
|
iconInt = 12;
|
|
}
|
break;
|
case 2:
|
{
|
iconInt = 13;
|
|
}
|
break;
|
case 3:
|
{
|
iconInt = 14;
|
|
}
|
break;
|
}
|
|
if (!iconIntValue.Contains(iconInt))
|
{
|
iconIntValue.Add(iconInt);
|
}
|
}
|
//图标控件的父控件
|
FrameLayout frame = new FrameLayout
|
{
|
Height = Application.GetRealHeight(40),
|
Width = Application.GetRealWidth(275),
|
Y = Application.GetRealHeight(56),
|
};
|
layouFrame.AddChidren(frame);
|
|
|
for (int i = 0; i < iconIntValue.Count; i++)
|
{
|
//图标控件
|
Button btnIcon = new Button
|
{
|
Width = Application.GetRealWidth(28),
|
Height = Application.GetRealWidth(28),
|
Gravity = Gravity.CenterVertical,
|
};
|
frame.AddChidren(btnIcon);
|
|
if (i == 0)
|
{
|
btnIcon.X = Application.GetRealWidth(12);
|
}
|
else
|
{
|
btnIcon.X = Application.GetRealWidth(12 + (28 + 4) * i);
|
}
|
string strIcon = "";
|
switch (iconIntValue[i])
|
{
|
|
case 1:
|
{
|
strIcon = "LogicIcon/selectTheTime.png";
|
}
|
break;
|
case 2:
|
{
|
|
strIcon = "LogicIcon/selectTheFun.png";
|
}
|
break;
|
case 3:
|
{
|
|
strIcon = "LogicIcon/shiwaitianqi.png";
|
}
|
break;
|
case 11:
|
{
|
//分割条件和目标的图标
|
strIcon = "LogicIcon/link.png";
|
}
|
break;
|
case 12:
|
{
|
|
strIcon = "LogicIcon/selectTheFun.png";
|
}
|
break;
|
case 13:
|
{
|
strIcon = "LogicIcon/selectTheScene.png";
|
}
|
break;
|
case 14:
|
{
|
//strIcon = "LogicIcon/timeicon.png";
|
}
|
break;
|
|
}
|
btnIcon.UnSelectedImagePath = strIcon;
|
}
|
}
|
/// <summary>
|
/// 判断网关类型
|
/// </summary>
|
/// <returns></returns>
|
public static bool IsGatewayType
|
{
|
get
|
{
|
if (Entity.DB_ResidenceData.Instance.GatewayType == 1)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
|
}
|
}
|
}
|
}
|
class LogicData
|
{
|
/// <summary>
|
/// 云端唯一id
|
/// </summary>
|
public string userLogicId = "";
|
/// <summary>
|
/// 网关id
|
/// </summary>
|
public string gatewayId = "";
|
/// <summary>
|
/// 逻辑唯一标识
|
/// </summary>
|
public string sid = "";
|
/// <summary>
|
/// 逻辑名称
|
/// </summary>
|
public string name = "";
|
/// <summary>
|
/// 逻辑使能(开,关)
|
/// </summary>
|
public string enable = "";
|
//public CycleA cycle;
|
//public string modifyTime = "";
|
}
|
|
class CycleA
|
{
|
public string type = "";
|
public string[] value;
|
}
|
}
|