wei
2021-07-05 90fadf3023d54d780154eaa2a839e2106317297f
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using HDL_ON.Entity;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
    public class ConditionDeviceFunList : FrameLayout
@@ -20,7 +19,6 @@
        /// 定义一个变量,记录选中状态
        /// </summary>
        private string selectedState = "unknown";
        public void Show(Entity.Function device, int index, bool edit)
        {
            #region 界面布局
@@ -71,7 +69,6 @@
                        }
                    }
                    break;
                //水浸传感器
                case SPK.SensorWater:
                    {
                        LogicView.FunTypeView view = new LogicView.FunTypeView();
@@ -88,9 +85,7 @@
                    }
                    break;
                //烟雾传感器
                case SPK.SensorSmoke:
                //燃气传感器
                case SPK.SensorGas:
                    {
                        LogicView.FunTypeView view = new LogicView.FunTypeView();
@@ -107,7 +102,6 @@
                    }
                    break;
                //干接点
                case SPK.SensorDryContact:
                    {
                        LogicView.FunTypeView view = new LogicView.FunTypeView();
@@ -124,11 +118,8 @@
                    }
                    break;
                //红外珊栏传感器
                case SPK.SensorShanLan:
                //红外对射传感器
                case SPK.SensorDuiShe:
                //红外移动传感器
                case SPK.SensorPir:
                    {
                        LogicView.FunTypeView view = new LogicView.FunTypeView();
@@ -144,7 +135,6 @@
                        }
                    }
                    break;
                //门窗传感器
                case SPK.SensorDoorWindow:
                    {
                        LogicView.FunTypeView view = new LogicView.FunTypeView();
@@ -160,7 +150,6 @@
                        }
                    }
                    break;
                //超声波传感器
                case SPK.SensoruUtrasonic:
                    {
@@ -186,11 +175,10 @@
                        }
                    }
                    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) =>
                        {
@@ -202,72 +190,7 @@
                        }
                    }
                    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
@@ -277,65 +200,55 @@
            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>
@@ -345,8 +258,7 @@
        /// <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();
@@ -447,99 +359,10 @@
                //显示文本
                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>
        /// 显示编辑之前的设备状态
@@ -568,28 +391,36 @@
        /// </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)
            {
                //存在移除
@@ -615,13 +446,8 @@
            {
                if (Logic.currlogic.input[i].sid == input.sid)
                {
                    //有些设备比较特殊(例如:海林传感器还是要判断属性值,温湿度属性还要判断比较关系,才能确认是否已经存在该条件,其他设备条件直接用sid判断即可)
                    //加一级判断是为兼容特殊设备
                    if (IsContainsAll(input.condition, Logic.currlogic.input[i].condition))
                    {
                        indexValue = i;
                        break;
                    }
                    indexValue = i;
                    break;
                }
            }
@@ -636,53 +462,5 @@
            }
        }
        /// <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;
        }
    }
}