wjc
2023-03-28 a9d1161b1df96e7ddad566335989a1444e433ef5
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -24,10 +24,38 @@
        /// 定义一个变量,记录选中状态
        /// </summary>
        private string selectedState = "unknown";
        /// <summary>
        /// 是不是再次编辑
        /// </summary>
        private bool mEdit;
        /// <summary>
        /// 输入条件列表索引值
        /// </summary>
        private int mIndex;
        /// <summary>
        /// 可视对讲专用
        /// </summary>
        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();
@@ -189,6 +217,40 @@
                        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);
@@ -200,8 +262,70 @@
                        }
                    }
                    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();
@@ -218,7 +342,7 @@
                    }
                    break;
                //环境检测传感器
                case SPK.SensorEnvironment:
                case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
                case SPK.SensorEnvironment2:
                case SPK.SensorEnvironment3:
                    {
@@ -250,7 +374,7 @@
                        {
                            fLayout.AddChidren(tvocView.FLayoutView());
                        }
                        #endregion
                        #region 点击事件
                        ///温度点击事件
@@ -258,7 +382,7 @@
                        {
                            new PublicInterface { }.ViewZuHe(this, StringId.wendugaoyu, StringId.wendudiyu, (intText, view) =>
                            {
                                InputBoxAction(device,intText, index, edit);
                                InputBoxAction(device, intText, index, edit);
                            });
                        };
                        ///湿度点击事件
@@ -266,30 +390,30 @@
                        {
                            new PublicInterface { }.ViewZuHe(this, StringId.shidugaoyu, StringId.shidudiyu, (intText, view) =>
                            {
                                InputBoxAction(device,intText, index, edit);
                                InputBoxAction(device, intText, index, edit);
                            });
                        };
                        ///pm2.5点击事件
                        pm25View.btnClick.MouseUpEventHandler += (sender, e) =>
                        {
                            PmCo2TvocAction(this,device, "pm25",StringId.pm25, index,edit);
                            PmCo2TvocAction(this, device, "pm25", StringId.pm25, index, edit);
                        };
                        ///co2点击事件
                        co2View.btnClick.MouseUpEventHandler += (sender, e) =>
                        {
                            PmCo2TvocAction(this,device, "co2", StringId.co2, index, edit);
                            PmCo2TvocAction(this, device, "co2", StringId.co2, index, edit);
                        };
                        ///tvoc点击事件
                        tvocView.btnClick.MouseUpEventHandler += (sender, e) =>
                        {
                            PmCo2TvocAction(this,device, "tvoc", StringId.tvoc, index, edit);
                            PmCo2TvocAction(this, device, "tvoc", StringId.tvoc, index, edit);
                        };
                        #endregion
                    }
                    break;
                    //温度传感器
                //温度传感器
                case SPK.SensorTemperature:
                    {
                        ///温度
@@ -342,6 +466,21 @@
                        };
                    }
                    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:
                    {
@@ -360,6 +499,7 @@
                //tvoc
                case SPK.SensorTVOC:
                    {
                        ///tvoc
                        LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
                        tvocView.btnText.TextID = StringId.tvoc;
@@ -388,6 +528,115 @@
                        };
                    }
                    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
@@ -397,7 +646,7 @@
            this.AddChidren(saveView.FLayoutView());
            saveView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                Save(device,index, edit);
                this.SaveInput(device,index, edit);
            };
            #endregion
@@ -408,7 +657,7 @@
        /// </summary>
        /// <param name="index">索引值</param>
        /// <param name="edit"></param>
        private void Save(Entity.Function device,int index, bool edit)
        private void SaveInput(Entity.Function device,int index, bool edit)
        {
            
            if (selectedState != "unknown")
@@ -416,7 +665,36 @@
                Input inputDevice = new Input();
                inputDevice.condition_type = "3";
                inputDevice.sid = device.sid;
                inputDevice.condition = dicSateteList;
                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<Dictionary<string, string>>();
                    }
                }
                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<Dictionary<string, string>>();
                    }
                }
                else if (device.spk == SPK.VideoDoorLock)
                {
                    ////萤石视频门锁
                    inputDevice.condition_type = "9";
                    inputDevice.identifier = this.identifier;
                }
                if (edit)
                {
                    //移除旧数据
@@ -440,7 +718,7 @@
                this.RemoveFromParent();
                return;
            }
            LogicMethod.CurrLogicMethod.RemoveAllView();
            LogicMethod.Current.RemoveAllView();
            if (MainView.IsGatewayType)
            { //A网关
                var addLogic = new AddLogic();
@@ -465,12 +743,13 @@
        /// <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)
        /// <param name="viewCount">view数量</param>
        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, (intValue) =>
            switchView.FLayoutView(frame, btnText1, btnText2, button.Text, viewCount,(intValue) =>
            {
                //设备属性值,云雀上定义好的;
                string keyVlaue = "on_off";
@@ -513,6 +792,23 @@
                        }
                        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";
@@ -520,6 +816,11 @@
                            {
                                keyVlaue = "megahealth_state";
                            }
                        }
                        break;
                    case SPK.DoorLock:
                        {
                            keyVlaue = "door_status";
                        }
                        break;
@@ -555,13 +856,33 @@
                        break;
                    case StringId.wuren:
                        {
                            if (device.spk == SPK.SenesorMegahealth || device.spk == SPK.SenesorMegahealth2)
                            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;
@@ -589,11 +910,29 @@
                        {
                            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);
                    }
                }
            });
@@ -613,7 +952,7 @@
                if (inputs.condition.Count != 0)
                {
                    //有数据重新赋值
                    dicSateteList = inputs.condition;
                    dicSateteList.AddRange(inputs.condition);
                }
            }
            new LogicView.TipPopView { }.InputBox(textInt, stateValue, (value) =>
@@ -652,7 +991,7 @@
                }
                selectedState = device.spk + "_" + value;
                AddDictionary(keyValue, value, data_type, comparator);
                Save(device,index, edit);
                SaveInput(device,index, edit);
            });
        }
        /// PM2.5,Co2,Tvoc设置值
@@ -665,24 +1004,33 @@
        /// <param name="stateValue">编辑之前的状态值,默认为""</param>
        public void PmCo2TvocAction(FrameLayout frame, Entity.Function device, string key, int title, int index, bool edit, string stateValue = "")
        {
            if (edit)
            if (edit)
            {
                ///
                this.function = device;
                Input inputs = Logic.currlogic.input[index];
                //清除之前旧数据
                dicSateteList.Clear();
                if (inputs.condition.Count != 0)
                {
                    //有数据重新赋值
                    dicSateteList = inputs.condition;
                    dicSateteList.AddRange(inputs.condition);
                }
            }
            PublicInterface view = new PublicInterface();
            var listStr = view.GetViewList(key);
            view.SingleSelectionShow(frame, listStr, Language.StringByID(title), view.GetString(key, stateValue)
            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 value = view.GetValue(key, text);
                   var values = view.GetSensorLevelText(device,text,false);
                   selectedState = device.spk + "_" + key;
                   switch (device.spk)
                   {
@@ -692,6 +1040,7 @@
                       case SPK.SensorPm25:
                       case SPK.SensorTVOC:
                       case SPK.SensorHcho:
                       case SPK.SensorPm10:
                           {
                               if (!Is_SpkAttribute(key))
                               {
@@ -700,10 +1049,55 @@
                           }
                           break;
                   }
                   AddDictionary(key, value, "integer", "in");
                   Save(device, index, edit);
                   AddDictionary(key, values, "integer", "in");
                   SaveInput(device, index, edit);
               });
        }
        /// <summary>
        /// 可视对讲专用
        /// </summary>
        /// <param name="frame">当前界面</param>
        /// <param name="device">当前设备</param>
        /// <param name="btnState">旧状态</param>
        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<string> faceNameList = new List<string>();
                    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<string> { 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 { }
            });
        }
        /// <summary>
        /// 显示编辑之前的设备状态
        /// </summary>
@@ -722,9 +1116,9 @@
            if (dicList.Count != 0)
            {
                //有数据重新赋值
                dicSateteList = dicList;
                dicSateteList.AddRange(dicList);
            }
            InpOrOutLogicMethod.EditState(device, dicList, button1, button2, button3, button4);
            InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4);
        }
        /// <summary>
        /// 添加选中数据
@@ -737,10 +1131,10 @@
        {
            //数据封装
            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);
            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);
        }
        /// <summary>
@@ -854,6 +1248,9 @@
        private bool Is_SpkAttribute(string key) {
            ///修改新属性
            ///识别使用功能是否存在属性
            if (this.function==null) {
                return false;
            }
            var job = this.function.GetAttribute(key);
            if (job != null)
            {