| | |
| | | using System.Collections.Generic; |
| | | using HDL_ON.Entity; |
| | | |
| | | |
| | | namespace HDL_ON.UI.UI2.Intelligence.Automation |
| | | { |
| | | public class ConditionDeviceFunList : FrameLayout |
| | |
| | | /// 定义一个变量,记录选中状态 |
| | | /// </summary> |
| | | private string selectedState = "unknown"; |
| | | |
| | | public void Show(Entity.Function device, int index, bool edit) |
| | | { |
| | | #region 界面布局 |
| | |
| | | } |
| | | } |
| | | break; |
| | | //水浸传感器 |
| | | case SPK.SensorWater: |
| | | { |
| | | LogicView.FunTypeView view = new LogicView.FunTypeView(); |
| | |
| | | |
| | | } |
| | | break; |
| | | //烟雾传感器 |
| | | case SPK.SensorSmoke: |
| | | //燃气传感器 |
| | | case SPK.SensorGas: |
| | | { |
| | | LogicView.FunTypeView view = new LogicView.FunTypeView(); |
| | |
| | | |
| | | } |
| | | break; |
| | | //干接点 |
| | | case SPK.SensorDryContact: |
| | | { |
| | | LogicView.FunTypeView view = new LogicView.FunTypeView(); |
| | |
| | | |
| | | } |
| | | break; |
| | | //红外珊栏传感器 |
| | | case SPK.SensorShanLan: |
| | | //红外对射传感器 |
| | | case SPK.SensorDuiShe: |
| | | //红外移动传感器 |
| | | case SPK.SensorPir: |
| | | { |
| | | LogicView.FunTypeView view = new LogicView.FunTypeView(); |
| | |
| | | } |
| | | } |
| | | break; |
| | | //门窗传感器 |
| | | case SPK.SensorDoorWindow: |
| | | { |
| | | LogicView.FunTypeView view = new LogicView.FunTypeView(); |
| | |
| | | } |
| | | } |
| | | break; |
| | | //超声波传感器 |
| | | case SPK.SensoruUtrasonic: |
| | | { |
| | | |
| | |
| | | } |
| | | } |
| | | break; |
| | | //毫米波传感器 |
| | | case SPK.SenesorMegahealth: |
| | | { |
| | | LogicView.FunTypeView view = new LogicView.FunTypeView(); |
| | | view.btnText.TextID = StringId.mubiaozhuangtai;//目标状态 |
| | | view.btnText.TextID = StringId.mubiaozhuangtai ;//目标状态 |
| | | fLayout.AddChidren(view.FLayoutView()); |
| | | view.btnClick.MouseUpEventHandler += (sender, e) => |
| | | { |
| | |
| | | } |
| | | } |
| | | break; |
| | | //环境检测传感器 |
| | | case SPK.SenesorEnvironment: |
| | | { |
| | | #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; |
| | | 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; |
| | | } |
| | | #region 保存 |
| | | ///保存View |
| | |
| | | this.AddChidren(saveView.FLayoutView()); |
| | | saveView.btnClick.MouseUpEventHandler += (sen, e) => |
| | | { |
| | | Save(device,index, edit); |
| | | }; |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 保存输入条件 |
| | | /// </summary> |
| | | /// <param name="index">索引值</param> |
| | | /// <param name="edit"></param> |
| | | private void Save(Entity.Function device,int index, bool edit) |
| | | { |
| | | |
| | | if (selectedState != "unknown") |
| | | { |
| | | Input inputDevice = new Input(); |
| | | inputDevice.condition_type = "3"; |
| | | inputDevice.sid = device.sid; |
| | | inputDevice.condition = dicSateteList; |
| | | if (edit) |
| | | if (selectedState != "unknown") |
| | | { |
| | | //移除旧数据 |
| | | Logic.currlogic.input.RemoveAt(index); |
| | | //新数据插入旧数据的位置; |
| | | Logic.currlogic.input.Insert(index, inputDevice); |
| | | Input inputDevice = new Input(); |
| | | inputDevice.condition_type = "3"; |
| | | inputDevice.sid = device.sid; |
| | | inputDevice.condition = dicSateteList; |
| | | if (edit) |
| | | { |
| | | //移除旧数据 |
| | | Logic.currlogic.input.RemoveAt(index); |
| | | //新数据插入旧数据的位置; |
| | | Logic.currlogic.input.Insert(index, inputDevice); |
| | | } |
| | | else |
| | | { |
| | | //添加一个条件 |
| | | AddCondition(inputDevice); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //添加一个条件 |
| | | AddCondition(inputDevice); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (!edit) |
| | | { |
| | | //提示用户 |
| | | if (!edit) |
| | | { |
| | | //提示用户 |
| | | return; |
| | | } |
| | | this.RemoveFromParent(); |
| | | return; |
| | | } |
| | | this.RemoveFromParent(); |
| | | return; |
| | | } |
| | | LogicMethod.CurrLogicMethod.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; |
| | | } |
| | | LogicMethod.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; |
| | | } |
| | | }; |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | /// <summary> |
| | |
| | | /// <param name="button">选中状态显示文本Btn控件</param> |
| | | /// <param name="btnText1">属性状态值文本1</param> |
| | | /// <param name="btnText2">属性状态值文本2</param> |
| | | private void DeviceView(Entity.Function device, Button button, int btnText1, int btnText2) |
| | | { |
| | | private void DeviceView(Entity.Function device,Button button,int btnText1,int btnText2) { |
| | | FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence }; |
| | | this.AddChidren(frame); |
| | | LogicView.SwitchView switchView = new LogicView.SwitchView(); |
| | |
| | | //显示文本 |
| | | button.TextID = intValue; |
| | | selectedState = device.spk + "_" + value; |
| | | AddDictionary(keyVlaue, value, "string"); |
| | | AddDictionary(keyVlaue, value); |
| | | |
| | | }); |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 温度,湿度弹框设置值 |
| | | /// </summary> |
| | | /// <param name="textInt">文本</param> |
| | | /// <param name="stateValue">编辑之前的状态值,默认为20</param> |
| | | 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 = 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); |
| | | Save(device,index, edit); |
| | | }); |
| | | } |
| | | /// PM2.5,Co2,Tvoc设置值 |
| | | /// </summary> |
| | | /// <param name="frame">当前界面</param> |
| | | /// <param name="key">属性值,云雀上定义好的<</param> |
| | | /// <param name="title">标题文本</param> |
| | | /// <param name="index"></param> |
| | | /// <param name="edit"></param> |
| | | /// <param name="stateValue">编辑之前的状态值,默认为""</param> |
| | | public void PmCo2TvocAction(FrameLayout frame, Entity.Function device,string key,int title, int index, bool edit, string stateValue = "") |
| | | { |
| | | if (edit) |
| | | { |
| | | Input inputs = Logic.currlogic.input[index]; |
| | | //清除之前旧数据 |
| | | dicSateteList.Clear(); |
| | | if (inputs.condition.Count != 0) |
| | | { |
| | | //有数据重新赋值 |
| | | dicSateteList = inputs.condition; |
| | | } |
| | | } |
| | | PublicInterface view = new PublicInterface(); |
| | | var listStr = view.GetViewList(key); |
| | | view.SingleSelectionShow(frame, listStr, Language.StringByID(title), view.GetString(key, stateValue) |
| | | , (text) => |
| | | { |
| | | var value = view.GetValue(key, text); |
| | | selectedState = device.spk + "_"+ key; |
| | | AddDictionary(key, value, "integer"); |
| | | Save(device,index, edit); |
| | | }); |
| | | } |
| | | /// <summary> |
| | | /// 显示编辑之前的设备状态 |
| | |
| | | /// </summary> |
| | | /// <param name="KeyValue">设备属性值,云雀上定义好的</param> |
| | | /// <param name="selectedValue">状态值</param> |
| | | /// <param name="data_type">类型</param> |
| | | /// <param name="comparator">比较关系</param> |
| | | private void AddDictionary(string KeyValue, string selectedValue, string data_type, string comparator = "=") |
| | | private void AddDictionary(string KeyValue, string selectedValue) |
| | | { |
| | | //数据封装 |
| | | Dictionary<string, string> dic = new Dictionary<string, string>(); |
| | | LogicMethod.CurrLogicMethod.dictionary(dic, "key", KeyValue); |
| | | LogicMethod.CurrLogicMethod.dictionary(dic, "comparator", comparator); |
| | | LogicMethod.CurrLogicMethod.dictionary(dic, "data_type", data_type); |
| | | LogicMethod.CurrLogicMethod.dictionary(dic, "value", selectedValue); |
| | | AddDictionaryList(dic); |
| | | LogicMethod.dictionary(dic, "key", KeyValue); |
| | | LogicMethod.dictionary(dic, "comparator", "="); |
| | | LogicMethod.dictionary(dic, "data_type", "string"); |
| | | LogicMethod.dictionary(dic, "value", selectedValue); |
| | | AddDictionaryList(KeyValue, dic); |
| | | } |
| | | /// <summary> |
| | | /// 更新数据列表 |
| | | /// </summary> |
| | | /// <param name="keyValue">设备属性值,云雀上定义好的</param> |
| | | /// <param name="comparator">比较关系</param> |
| | | /// <param name="keyValue">设备属性值,云雀上定义好的</param> |
| | | /// <param name="dictionary">添加选中数据</param> |
| | | /// <returns></returns> |
| | | private void AddDictionaryList(Dictionary<string, string> dictionary) |
| | | private void AddDictionaryList(string keyValue, Dictionary<string, string> dictionary) |
| | | { |
| | | var indexValue = IsContainsAll(dictionary, dicSateteList); |
| | | int indexValue = -1; |
| | | for (int i = 0; i < dicSateteList.Count; i++) |
| | | { |
| | | var dic = dicSateteList[i]; |
| | | if (dic.ContainsValue(keyValue)) |
| | | { |
| | | //判断是否存在 |
| | | indexValue = i; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (indexValue != -1) |
| | | { |
| | | //存在移除 |
| | |
| | | { |
| | | if (Logic.currlogic.input[i].sid == input.sid) |
| | | { |
| | | //有些设备比较特殊(例如:海林传感器还是要判断属性值,温湿度属性还要判断比较关系,才能确认是否已经存在该条件,其他设备条件直接用sid判断即可) |
| | | //加一级判断是为兼容特殊设备 |
| | | if (IsContainsAll(input.condition, Logic.currlogic.input[i].condition)) |
| | | { |
| | | indexValue = i; |
| | | break; |
| | | } |
| | | indexValue = i; |
| | | break; |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 判断dictionaryB列表是否完整包含另一个dictionaryA |
| | | /// </summary> |
| | | /// <param name="dictionaryA">对象</param> |
| | | /// <param name="dictionaryB">列表</param> |
| | | /// <returns>返回列表的索引值</returns> |
| | | public int IsContainsAll(Dictionary<string, string> dictionaryA, List<Dictionary<string, string>> 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; |
| | | } |
| | | /// <summary> |
| | | /// 判断dictionaryB是否完整包含另一个dictionaryA |
| | | /// </summary> |
| | | /// <param name="dictionaryA"></param> |
| | | /// <param name="dictionaryB"></param> |
| | | /// <returns></returns> |
| | | public bool IsContainsAll(List<Dictionary<string, string>> dictionaryA, List<Dictionary<string, string>> 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; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |