using System;
using Shared;
using System.Collections.Generic;
using HDL_ON.Entity;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
public class ConditionDeviceFunList : FrameLayout
{
public ConditionDeviceFunList()
{
Tag = "Logic";
}
///
/// 当前选中的功能
///
private Entity.Function function = null;
///
/// 定义一个记录选中设备状态列表;
///
private List> dicSateteList = new List>();
///
/// 定义一个变量,记录选中状态
///
private string selectedState = "unknown";
///
/// 是不是再次编辑
///
private bool mEdit;
///
/// 输入条件列表索引值
///
private int mIndex;
///
/// 可视对讲专用
///
private string identifier;
private static ConditionDeviceFunList m_Current = null;
public static ConditionDeviceFunList Current
{
get
{
if (m_Current == null)
{
m_Current = new ConditionDeviceFunList();
}
return m_Current;
}
}
public void Show(Entity.Function device, int index, bool edit)
{
this.function = device;
this.mEdit = edit;
this.mIndex = index;
#region 界面布局
this.BackgroundColor = CSS.CSS_Color.viewMiddle;
LogicView.TopView topView = new LogicView.TopView();
this.AddChidren(topView.FLayoutView());
topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
{
RemoveFromParent();
};
topView.topNameBtn.Text = device.name;
FrameLayout fLayout = new FrameLayout
{
Y = Application.GetRealHeight(64),
Height = Application.GetRealHeight(667 - 64),
};
this.AddChidren(fLayout);
#endregion
switch (device.spk)
{
//开关灯光 light.Switch
case SPK.AirSwitch:
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
case SPK.LightSwitch:
//窗帘
case SPK.CurtainSwitch:
case SPK.CurtainRoller:
case SPK.CurtainTrietex:
//空调
case SPK.AcStandard:
case SPK.HvacAC:
//地热
case SPK.FloorHeatStandard:
case SPK.HvacFloorHeat:
//新风
case SPK.AirFreshStandard:
case SPK.HvacAirFresh:
//插座
case SPK.PanelSocket:
case SPK.ElectricSocket:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.onLogic, StringId.offLogic);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//水浸传感器
case SPK.SensorWater:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.luoshuiandwuluoshui;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.luoshui, StringId.wuluoshui);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//烟雾传感器
case SPK.SensorSmoke:
//燃气传感器
case SPK.SensorGas:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.xieluoandwuxieluo;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.xieluo, StringId.wuxieluo);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//干接点
case SPK.SensorDryContact:
case SPK.SensorDryContact2:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.onLogic, StringId.offLogic);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//红外珊栏传感器
case SPK.SensorShanLan:
//红外对射传感器
case SPK.SensorDuiShe:
//红外移动传感器
case SPK.SensorPir:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.yourenandwuren;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.youren, StringId.wuren);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//门窗传感器
case SPK.SensorDoorWindow:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.kaiqiandbihe;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.kaiqi, StringId.bihe);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//超声波传感器
case SPK.SensorUtrasonic:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.yourenandwuren;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.youren, StringId.wuren);
};
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
view1.frameLayout.Y = view.frameLayout.Bottom;
view1.btnText.TextID = StringId.fangchaigongneng;
fLayout.AddChidren(view1.FLayoutView());
int intValue = 0;
if (edit)
{
Input inputs = Logic.currlogic.input[index];
var dicList = inputs.condition;
foreach (var dic in dicList)
{
if (dic["key"] == "people_status")
{
//有人/无人
intValue = 1;
}
else
{
//防拆功能
intValue = 2;
}
break;
}
}
if (intValue == 1)
{
//有人/无人
view1.frameLayout.Visible = false;
}
else if (intValue == 2)
{
//防拆功能
view1.frameLayout.Y = Application.GetRealHeight(0);
}
view1.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view1.btnState, StringId.zaixian, StringId.buzaixian);
};
if (edit)
{
GetEditState(device, index, view.btnState, view1.btnState, null, null);
}
}
break;
//毫米波传感器(自研北邮)
case SPK.SenesorMegahealth:
case SPK.SensorMmvPose:
{
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
view1.btnText.TextID = StringId.diedaobaojing;
view1.btnState.Name = Language.StringByID(StringId.diedaobaojing);
fLayout.AddChidren(view1.FLayoutView());
view1.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view1.btnState, StringId.shi, StringId.offLogic, 1);
};
LogicView.FunTypeView view2 = new LogicView.FunTypeView();
view2.frameLayout.Y = view1.frameLayout.Bottom;
view2.btnText.TextID = StringId.yourenbaojing;
view2.btnState.Name = Language.StringByID(StringId.yourenbaojing);
fLayout.AddChidren(view2.FLayoutView());
int intValue = 0;
if (edit)
{
Input inputs = Logic.currlogic.input[index];
var dicList = inputs.condition;
foreach (var dic in dicList)
{
if (dic["key"] == "target_status")
{
//跌倒报警
intValue = 1;
}
else
{
//有人报警
intValue = 2;
}
break;
}
}
if (intValue == 1)
{
//跌倒报警
view2.frameLayout.Visible = false;
}
else if (intValue == 2)
{
//有人报警
view2.frameLayout.Y = Application.GetRealHeight(0);
}
view2.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view2.btnState, StringId.youren, StringId.wuren, 2);
};
if (edit)
{
GetEditState(device, index, view1.btnState, view2.btnState, null, null);
}
}
break;
//毫米波传感器(兆观专用云云对接)
case SPK.SenesorMegahealth2:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.mubiaozhuangtai;//目标状态
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.wuren, StringId.diedao);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//环境检测传感器
case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
case SPK.SensorEnvironment2:
case SPK.SensorEnvironment3:
{
#region 界面
///温度
LogicView.FunTypeView wenuView = new LogicView.FunTypeView();
wenuView.btnText.TextID = StringId.wendu;
fLayout.AddChidren(wenuView.FLayoutView());
///湿度
LogicView.FunTypeView shiduView = new LogicView.FunTypeView();
shiduView.frameLayout.Y = wenuView.frameLayout.Bottom;
shiduView.btnText.TextID = StringId.shidu;
fLayout.AddChidren(shiduView.FLayoutView());
///pm2.5
LogicView.FunTypeView pm25View = new LogicView.FunTypeView();
pm25View.frameLayout.Y = shiduView.frameLayout.Bottom;
pm25View.btnText.TextID = StringId.pm25;
fLayout.AddChidren(pm25View.FLayoutView());
///co2
LogicView.FunTypeView co2View = new LogicView.FunTypeView();
co2View.frameLayout.Y = pm25View.frameLayout.Bottom;
co2View.btnText.TextID = StringId.co2;
fLayout.AddChidren(co2View.FLayoutView());
///tvoc
LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
tvocView.frameLayout.Y = co2View.frameLayout.Bottom;
tvocView.btnText.TextID = StringId.tvoc;
if (SPK.SensorEnvironment3 != device.spk)
{
fLayout.AddChidren(tvocView.FLayoutView());
}
#endregion
#region 点击事件
///温度点击事件
wenuView.btnClick.MouseUpEventHandler += (sender, e) =>
{
new PublicInterface { }.ViewZuHe(this, StringId.wendugaoyu, StringId.wendudiyu, (intText, view) =>
{
InputBoxAction(device, intText, index, edit);
});
};
///湿度点击事件
shiduView.btnClick.MouseUpEventHandler += (sender, e) =>
{
new PublicInterface { }.ViewZuHe(this, StringId.shidugaoyu, StringId.shidudiyu, (intText, view) =>
{
InputBoxAction(device, intText, index, edit);
});
};
///pm2.5点击事件
pm25View.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "pm25", StringId.pm25, index, edit);
};
///co2点击事件
co2View.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "co2", StringId.co2, index, edit);
};
///tvoc点击事件
tvocView.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "tvoc", StringId.tvoc, index, edit);
};
#endregion
}
break;
//温度传感器
case SPK.SensorTemperature:
{
///温度
LogicView.FunTypeView wenuView = new LogicView.FunTypeView();
wenuView.btnText.TextID = StringId.wendu;
fLayout.AddChidren(wenuView.FLayoutView());
///温度点击事件
wenuView.btnClick.MouseUpEventHandler += (sender, e) =>
{
new PublicInterface { }.ViewZuHe(this, StringId.wendugaoyu, StringId.wendudiyu, (intText, view) =>
{
InputBoxAction(device, intText, index, edit);
});
};
}
break;
//湿度传感器
case SPK.SensorHumidity:
{
///湿度
LogicView.FunTypeView shiduView = new LogicView.FunTypeView();
shiduView.btnText.TextID = StringId.shidu;
fLayout.AddChidren(shiduView.FLayoutView());
///湿度点击事件
shiduView.btnClick.MouseUpEventHandler += (sender, e) =>
{
new PublicInterface { }.ViewZuHe(this, StringId.shidugaoyu, StringId.shidudiyu, (intText, view) =>
{
InputBoxAction(device, intText, index, edit);
});
};
}
break;
//co2
case SPK.SensorCO2:
{
///co2
LogicView.FunTypeView co2View = new LogicView.FunTypeView();
co2View.btnText.TextID = StringId.co2;
fLayout.AddChidren(co2View.FLayoutView());
///co2点击事件
co2View.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "co2", StringId.co2, index, edit);
};
}
break;
//pm10
case SPK.SensorPm10:
{
///pm210
LogicView.FunTypeView pm10View = new LogicView.FunTypeView();
pm10View.btnText.TextID = StringId.pm10;
fLayout.AddChidren(pm10View.FLayoutView());
///pm10点击事件
pm10View.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "pm10", StringId.pm10, index, edit);
};
}
break;
//pm2.5
case SPK.SensorPm25:
{
///pm2.5
LogicView.FunTypeView pm25View = new LogicView.FunTypeView();
pm25View.btnText.TextID = StringId.pm25;
fLayout.AddChidren(pm25View.FLayoutView());
///pm2.5点击事件
pm25View.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "pm25", StringId.pm25, index, edit);
};
}
break;
//tvoc
case SPK.SensorTVOC:
{
///tvoc
LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
tvocView.btnText.TextID = StringId.tvoc;
fLayout.AddChidren(tvocView.FLayoutView());
///tvoc点击事件
tvocView.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "tvoc", StringId.tvoc, index, edit);
};
}
break;
//甲醛
case SPK.SensorHcho:
{
///hcho
LogicView.FunTypeView hchoView = new LogicView.FunTypeView();
hchoView.btnText.TextID = StringId.Formaldehyde;
fLayout.AddChidren(hchoView.FLayoutView());
///hcho点击事件
hchoView.btnClick.MouseUpEventHandler += (sender, e) =>
{
PmCo2TvocAction(this, device, "hcho", StringId.Formaldehyde, index, edit);
};
}
break;
//门锁
case SPK.DoorLock:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.shifoukaisuoshi;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.shi, StringId.offLogic, 1);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//可视对讲
case SPK.doorgate:
{
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
view1.btnText.TextID = StringId.shipintonghuahujiao;
view1.btnText.Name = Language.StringByID(StringId.shipintonghuahujiao);
fLayout.AddChidren(view1.FLayoutView());
view1.btnClick.MouseUpEventHandler += (sender, e) =>
{
this.identifier = "door_call_cloud_event";
this.DeviceView(device, view1.btnState, StringId.shi, StringId.offLogic, 1);
};
LogicView.FunTypeView view2 = new LogicView.FunTypeView();
view2.frameLayout.Y = view1.frameLayout.Bottom;
view2.btnText.TextID = StringId.renliankaimen;
fLayout.AddChidren(view2.FLayoutView());
view2.btnClick.MouseUpEventHandler += (sender, e) =>
{
this.identifier = "door_pedestrian_records";
this.FaceAction(this, device, view2.btnState);
};
int intValue = 0;
if (edit)
{
Input inputs = Logic.currlogic.input[index];
if (inputs.identifier == "door_call_cloud_event")
{
intValue = 1;
}
else
{
intValue = 2;
}
}
if (intValue == 1)
{
view2.frameLayout.Visible = false;
}
else if (intValue == 2)
{
view2.frameLayout.Y = Application.GetRealHeight(0);
}
if (edit)
{
this.GetEditState(device, index, view1.btnState, view2.btnState, null, null);
}
}
break;
//大华摄像头
case SPK.IpCam_Imou:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.quyuruqingaojing;
view.btnText.Name = Language.StringByID(StringId.shipintonghuahujiao);
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
this.identifier = "ipcam_region_alram_event";
this.DeviceView(device, view.btnState, StringId.shi, StringId.offLogic, 1);
};
if (edit)
{
this.GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//萤石视频门锁
case SPK.VideoDoorLock:
{
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
view1.btnText.TextID=StringId.yonghurenyuan;
view1.btnText.Name = Language.StringByID(StringId.shipinmensuo);
fLayout.AddChidren(view1.FLayoutView());
view1.btnClick.MouseUpEventHandler += (sender, e) =>
{
this.identifier = "open_door";//开锁事件
this.VideoDoorLockAction(this, device, view1.btnState);
};
if (edit)
{
this.GetEditState(device, index, view1.btnState,null, null, null);
}
}
break;
}
#region 保存
///保存View
LogicView.SaveView saveView = new LogicView.SaveView();
saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
saveView.btnSave.TextID = StringId.completeLogic;
this.AddChidren(saveView.FLayoutView());
saveView.btnClick.MouseUpEventHandler += (sen, e) =>
{
this.SaveInput(device,index, edit);
};
#endregion
}
///
/// 保存输入条件
///
/// 索引值
///
private void SaveInput(Entity.Function device,int index, bool edit)
{
if (selectedState != "unknown")
{
Input inputDevice = new Input();
inputDevice.condition_type = "3";
inputDevice.sid = device.sid;
inputDevice.condition.AddRange(dicSateteList);
if (device.spk == SPK.doorgate)
{
//可视对讲
inputDevice.condition_type = "9";
inputDevice.identifier = this.identifier;
if (this.identifier == "door_call_cloud_event")
{
inputDevice.condition = new List>();
}
}
else if (device.spk == SPK.IpCam_Imou)
{
//大华摄像头
inputDevice.condition_type = "9";
inputDevice.identifier = this.identifier;
if (this.identifier == "ipcam_region_alram_event")
{
//condition默认[]
inputDevice.condition = new List>();
}
}
else if (device.spk == SPK.VideoDoorLock)
{
////萤石视频门锁
inputDevice.condition_type = "9";
inputDevice.identifier = this.identifier;
}
if (edit)
{
//移除旧数据
Logic.currlogic.input.RemoveAt(index);
//新数据插入旧数据的位置;
Logic.currlogic.input.Insert(index, inputDevice);
}
else
{
//添加一个条件
AddCondition(inputDevice);
}
}
else
{
if (!edit)
{
//提示用户
return;
}
this.RemoveFromParent();
return;
}
LogicMethod.Current.RemoveAllView();
if (MainView.IsGatewayType)
{ //A网关
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;
}
}
///
/// 设备选择条件界面
///
/// 设备
/// 选中状态显示文本Btn控件
/// 属性状态值文本1
/// 属性状态值文本2
/// view数量
private void DeviceView(Entity.Function device, Button button, int btnText1, int btnText2,int viewCount=2)
{
FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence };
this.AddChidren(frame);
LogicView.SwitchView switchView = new LogicView.SwitchView();
switchView.FLayoutView(frame, btnText1, btnText2, button.Text, viewCount,(intValue) =>
{
//设备属性值,云雀上定义好的;
string keyVlaue = "on_off";
string value = "";
switch (device.spk)
{
//传感器
case SPK.SensorGas:
case SPK.SensorWater:
case SPK.SensorSmoke:
{
keyVlaue = "status";
if (!Is_SpkAttribute(keyVlaue)) {
keyVlaue = "alarm_status";
}
};
break;
case SPK.SensorDoorWindow:
case SPK.SensorDryContact:
case SPK.SensorDryContact2:
{
keyVlaue = "status";
if (!Is_SpkAttribute(keyVlaue))
{
keyVlaue = "contact_status";
}
}
break;
case SPK.SensorDuiShe:
case SPK.SensorShanLan:
case SPK.SensorPir:
case SPK.SensorUtrasonic:
{
keyVlaue = "status";
if (!Is_SpkAttribute(keyVlaue))
{
keyVlaue = "people_status";
}
}
break;
case SPK.SenesorMegahealth:
{
if (button != null)
{
if (button.Name == Language.StringByID(StringId.yourenbaojing))
{
keyVlaue = "people_status";
}
else
{
keyVlaue = "target_status";
}
}
}
break;
case SPK.SenesorMegahealth2:
{
keyVlaue = "action_state";
if (!Is_SpkAttribute(keyVlaue))
{
keyVlaue = "megahealth_state";
}
}
break;
case SPK.DoorLock:
{
keyVlaue = "door_status";
}
break;
}
switch (intValue)
{
case StringId.xieluo:
case StringId.luoshui:
{
value = "alarm";
}
break;
case StringId.wuxieluo:
case StringId.wuluoshui:
{
value = "normal";
}
break;
case StringId.onLogic:
{
value = "on";
}
break;
case StringId.offLogic:
{
value = "off";
}
break;
case StringId.youren:
{
value = "true";
}
break;
case StringId.wuren:
{
if (device.spk == SPK.SenesorMegahealth2)
{
value = "uninhabited";
}
else
{
value = "false";
}
}
break;
case StringId.shi:
{
value = "open";
if (button != null)
{
if (button.Name == Language.StringByID(StringId.yourenbaojing))
{
//状态(有人)
value = "true";
}
else if(button.Name == Language.StringByID(StringId.diedaobaojing))
{
//跌倒
value = "4";
}
}
}
break;
case StringId.kaiqi:
{
value = "open";
}
break;
case StringId.bihe:
{
value = "close";
}
break;
case StringId.zaixian:
{
keyVlaue = "dismantle";
value = "true";
}; break;
case StringId.buzaixian:
{
keyVlaue = "dismantle";
value = "false";
}; break;
case StringId.diedao:
{
value = "fall";
}; break;
}
//显示文本
button.TextID = intValue;
selectedState = device.spk + "_" + value;
AddDictionary(keyVlaue, value, "string");
if (button != null)
{
if (button.Name == Language.StringByID(StringId.yourenbaojing)
|| (button.Name == Language.StringByID(StringId.diedaobaojing)))
{
//只有毫米波传感器(自研)
SaveInput(device, mIndex, mEdit);
}
else if (button.Name == Language.StringByID(StringId.shipintonghuahujiao)) {
//只有毫米波传感器(自研)
SaveInput(device, mIndex, mEdit);
}
}
});
}
///
/// 温度,湿度弹框设置值
///
/// 文本
/// 编辑之前的状态值,默认为20
public void InputBoxAction(Entity.Function device, int textInt, int index, bool edit, string stateValue = "20")
{
if (edit)
{
Input inputs = Logic.currlogic.input[index];
//清除之前旧数据
dicSateteList.Clear();
if (inputs.condition.Count != 0)
{
//有数据重新赋值
dicSateteList.AddRange(inputs.condition);
}
}
new LogicView.TipPopView { }.InputBox(textInt, stateValue, (value) =>
{
string keyValue = "20";
string data_type = "integer";
string comparator = "=";
switch (textInt)
{
case StringId.wendugaoyu:
{
keyValue = "temperature";
comparator = ">";
data_type = "float";
}
break;
case StringId.wendudiyu:
{
keyValue = "temperature";
comparator = "<";
data_type = "float";
}
break;
case StringId.shidugaoyu:
{
keyValue = "humidity";
comparator = ">";
}
break;
case StringId.shidudiyu:
{
keyValue = "humidity";
comparator = "<";
}
break;
}
selectedState = device.spk + "_" + value;
AddDictionary(keyValue, value, data_type, comparator);
SaveInput(device,index, edit);
});
}
/// PM2.5,Co2,Tvoc设置值
///
/// 当前界面
/// 属性值,云雀上定义好的<
/// 标题文本
///
///
/// 编辑之前的状态值,默认为""
public void PmCo2TvocAction(FrameLayout frame, Entity.Function device, string key, int title, int index, bool edit, string stateValue = "")
{
if (edit)
{
///
this.function = device;
Input inputs = Logic.currlogic.input[index];
//清除之前旧数据
dicSateteList.Clear();
if (inputs.condition.Count != 0)
{
//有数据重新赋值
dicSateteList.AddRange(inputs.condition);
}
}
PublicInterface view = new PublicInterface();
var listStr = view.GetSensorLevelList(device);//2022年05月25日10:01:33 产品经理君煌要求改成动态
//if (listStr.Count == 0)
//{
// //听说是为了兼用很老很老的项目
// listStr = view.GetViewList(key);
//}
view.SingleSelectionShow(frame, listStr, Language.StringByID(title), view.GetSensorLevelText(device, stateValue,true)
, (text) =>
{
//var value = view.GetValue(key, text);
var values = view.GetSensorLevelText(device,text,false);
selectedState = device.spk + "_" + key;
switch (device.spk)
{
case SPK.SensorTemperature:
case SPK.SensorHumidity:
case SPK.SensorCO2:
case SPK.SensorPm25:
case SPK.SensorTVOC:
case SPK.SensorHcho:
case SPK.SensorPm10:
{
if (!Is_SpkAttribute(key))
{
key = "value";
}
}
break;
}
AddDictionary(key, values, "integer", "in");
SaveInput(device, index, edit);
});
}
///
/// 可视对讲专用
///
/// 当前界面
/// 当前设备
/// 旧状态
public void FaceAction(FrameLayout frame, Entity.Function device,Button btnState) {
selectedState = device.spk + "_";
Loading loading = new Loading();
frame.AddChidren(loading);
loading.Start();
System.Threading.Tasks.Task.Run(() =>
{
try
{
var faceIDList = Send.Current.GetListHomeFace(device.deviceId,true);
List faceNameList = new List();
for (int i = 0; i < faceIDList.Count; i++)
{
var face = faceIDList[i];
faceNameList.Add(face.userName);
}
Application.RunOnMainThread(() =>
{
loading.Hide();
PublicInterface publicInterface = new PublicInterface();
publicInterface.FrameOrVv(this, faceNameList, new List { btnState.Text }, device.name, (index) =>
{
var face = faceIDList[index];
//界面显示选中值
btnState.Text = face.userName;
//数据封装
AddDictionary("open_type", "1", "integer");
AddDictionary("user_id", face.userId, "string");
}, false);
});
}
catch { }
});
}
///
/// 显示编辑之前的设备状态
///
/// 编辑设备
/// 编辑数据的索引
/// 显示Btn
/// 显示Btn
/// 显示Btn
/// 显示Btn
private void GetEditState(Entity.Function device, int index, Button button1, Button button2, Button button3, Button button4)
{
Input inputs = Logic.currlogic.input[index];
var dicList = inputs.condition;
//清除之前旧数据
dicSateteList.Clear();
if (dicList.Count != 0)
{
//有数据重新赋值
dicSateteList.AddRange(dicList);
}
InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4);
}
///
/// 添加选中数据
///
/// 设备属性值,云雀上定义好的
/// 状态值
/// 类型
/// 比较关系
private void AddDictionary(string KeyValue, string selectedValue, string data_type, string comparator = "=")
{
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.Current.dictionary(dic, "key", KeyValue);
LogicMethod.Current.dictionary(dic, "comparator", comparator);
LogicMethod.Current.dictionary(dic, "data_type", data_type);
LogicMethod.Current.dictionary(dic, "value", selectedValue);
AddDictionaryList(dic);
}
///
/// 更新数据列表
///
/// 设备属性值,云雀上定义好的
/// 比较关系
/// 添加选中数据
///
private void AddDictionaryList(Dictionary dictionary)
{
var indexValue = IsContainsAll(dictionary, dicSateteList);
if (indexValue != -1)
{
//存在移除
dicSateteList.RemoveAt(indexValue);
//重新添加
dicSateteList.Insert(indexValue, dictionary);
}
else
{
//新添加
dicSateteList.Add(dictionary);
}
}
///
/// 添加条件
///
///
private void AddCondition(Input input)
{
int indexValue = -1;
for (int i = 0; i < Logic.currlogic.input.Count; i++)
{
if (Logic.currlogic.input[i].sid == input.sid)
{
//有些设备比较特殊(例如:海林传感器还是要判断属性值,温湿度属性还要判断比较关系,才能确认是否已经存在该条件,其他设备条件直接用sid判断即可)
//加一级判断是为兼容特殊设备
if (IsContainsAll(input.condition, Logic.currlogic.input[i].condition))
{
indexValue = i;
break;
}
}
}
if (indexValue != -1)
{
Logic.currlogic.input.RemoveAt(indexValue);
Logic.currlogic.input.Insert(indexValue, input);
}
else
{
Logic.currlogic.input.Add(input);
}
}
///
/// 判断dictionaryB列表是否完整包含另一个dictionaryA
///
/// 对象
/// 列表
/// 返回列表的索引值
public int IsContainsAll(Dictionary dictionaryA, List> dictionaryB)
{
int valueInt = -1;
for (int i = 0; i < dictionaryB.Count; i++)
{
var dic = dictionaryB[i];
string key = dic["key"];
string comparatorValue = dic["comparator"];
if (dictionaryA["key"] == key && dictionaryA["comparator"] == comparatorValue)
{
//判断是否存在
valueInt = i;
break;
}
}
return valueInt;
}
///
/// 判断dictionaryB是否完整包含另一个dictionaryA
///
///
///
///
public bool IsContainsAll(List> dictionaryA, List> dictionaryB)
{
for (int i = 0; i < dictionaryA.Count; i++)
{
var dic = dictionaryA[i];
string key = dic["key"];
string comparatorValue = dic["comparator"];
var list = dictionaryB.FindAll((dictionary) => dictionary["key"] == key && dictionary["comparator"] == comparatorValue);
if (list.Count> 0)
{
return true;
}
}
return false;
}
///
/// 识别使用功能是否存在属性
///
/// 设备属性,云雀上定义好的
///
private bool Is_SpkAttribute(string key) {
///修改新属性
///识别使用功能是否存在属性
if (this.function==null) {
return false;
}
var job = this.function.GetAttribute(key);
if (job != null)
{
return true;
}
return false;
}
}
}