wjc
2023-03-28 a9d1161b1df96e7ddad566335989a1444e433ef5
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -32,6 +32,24 @@
        /// 输入条件列表索引值
        /// </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)
        {
@@ -199,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);
@@ -212,9 +264,10 @@
                    break;
                //毫米波传感器(自研北邮)
                case SPK.SenesorMegahealth:
                    case SPK.SensorMmvPose:
                    {
                        LogicView.FunTypeView view1= new LogicView.FunTypeView();
                        LogicView.FunTypeView view1 = new LogicView.FunTypeView();
                        view1.btnText.TextID = StringId.diedaobaojing;
                        view1.btnState.Name = Language.StringByID(StringId.diedaobaojing);
                        fLayout.AddChidren(view1.FLayoutView());
@@ -222,12 +275,45 @@
                        {
                            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);
@@ -256,7 +342,7 @@
                    }
                    break;
                //环境检测传感器
                case SPK.SensorEnvironment:
                case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
                case SPK.SensorEnvironment2:
                case SPK.SensorEnvironment3:
                    {
@@ -288,7 +374,7 @@
                        {
                            fLayout.AddChidren(tvocView.FLayoutView());
                        }
                        #endregion
                        #region 点击事件
                        ///温度点击事件
@@ -296,7 +382,7 @@
                        {
                            new PublicInterface { }.ViewZuHe(this, StringId.wendugaoyu, StringId.wendudiyu, (intText, view) =>
                            {
                                InputBoxAction(device,intText, index, edit);
                                InputBoxAction(device, intText, index, edit);
                            });
                        };
                        ///湿度点击事件
@@ -304,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:
                    {
                        ///温度
@@ -380,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:
                    {
@@ -398,7 +499,7 @@
                //tvoc
                case SPK.SensorTVOC:
                    {
                        ///tvoc
                        LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
                        tvocView.btnText.TextID = StringId.tvoc;
@@ -436,7 +537,7 @@
                        fLayout.AddChidren(view.FLayoutView());
                        view.btnClick.MouseUpEventHandler += (sender, e) =>
                        {
                            DeviceView(device, view.btnState, StringId.shi, StringId.offLogic,1);
                            DeviceView(device, view.btnState, StringId.shi, StringId.offLogic, 1);
                        };
                        if (edit)
                        {
@@ -444,6 +545,98 @@
                        }
                    }
                    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
@@ -453,7 +646,7 @@
            this.AddChidren(saveView.FLayoutView());
            saveView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                Save(device,index, edit);
                this.SaveInput(device,index, edit);
            };
            #endregion
@@ -464,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")
@@ -472,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)
                {
                    //移除旧数据
@@ -496,7 +718,7 @@
                this.RemoveFromParent();
                return;
            }
            LogicMethod.CurrLogicMethod.RemoveAllView();
            LogicMethod.Current.RemoveAllView();
            if (MainView.IsGatewayType)
            { //A网关
                var addLogic = new AddLogic();
@@ -698,11 +920,16 @@
                if (button != null)
                {
                    if (button.Name == Language.StringByID(StringId.yourenbaojing)
                    || (button.Name == Language.StringByID(StringId.diedaobaojing)))
                    {
                        //只有毫米波传感器(自研)
                        Save(device, mIndex, mEdit);
                        SaveInput(device, mIndex, mEdit);
                    }
                    else if (button.Name == Language.StringByID(StringId.shipintonghuahujiao)) {
                        //只有毫米波传感器(自研)
                        SaveInput(device, mIndex, mEdit);
                    }
                }
            
@@ -725,7 +952,7 @@
                if (inputs.condition.Count != 0)
                {
                    //有数据重新赋值
                    dicSateteList = inputs.condition;
                    dicSateteList.AddRange(inputs.condition);
                }
            }
            new LogicView.TipPopView { }.InputBox(textInt, stateValue, (value) =>
@@ -764,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设置值
@@ -787,12 +1014,17 @@
                if (inputs.condition.Count != 0)
                {
                    //有数据重新赋值
                    dicSateteList = inputs.condition;
                    dicSateteList.AddRange(inputs.condition);
                }
            }
            PublicInterface view = new PublicInterface();
            //var listStr = view.GetViewList(key);
            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) =>
               {
@@ -808,6 +1040,7 @@
                       case SPK.SensorPm25:
                       case SPK.SensorTVOC:
                       case SPK.SensorHcho:
                       case SPK.SensorPm10:
                           {
                               if (!Is_SpkAttribute(key))
                               {
@@ -817,9 +1050,54 @@
                           break;
                   }
                   AddDictionary(key, values, "integer", "in");
                   Save(device, index, edit);
                   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>
@@ -838,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>
        /// 添加选中数据
@@ -853,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>