From ea0b1e8e5f43c5fd0a7d479e25ede3b8cbea464a Mon Sep 17 00:00:00 2001 From: wxr <wxr@hdlchina.com.cn> Date: 星期一, 02 十二月 2024 17:17:19 +0800 Subject: [PATCH] tcp;可视对讲; --- HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs | 513 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 480 insertions(+), 33 deletions(-) diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs index 6094f4a..7d2996e 100644 --- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs +++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs @@ -2,6 +2,7 @@ using Shared; using System.Collections.Generic; using HDL_ON.Entity; +using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock; namespace HDL_ON.UI.UI2.Intelligence.Automation @@ -36,6 +37,16 @@ /// 鍙瀵硅涓撶敤 /// </summary> private string identifier; + /// <summary> + /// 浜轰綋浼犳劅鍣ㄦ寔缁椂闂翠笓鐢� + /// </summary> + private string hold_time=string.Empty; + /// <summary> + /// 妫�娴嬬被鍨� 閰嶅悎condition_type=3鏃朵娇鐢�,娌℃湁璇ュ瓧娈点�佽鍊兼垨0: 鐘舵�佹娴�(姣忔鏀跺埌鐘舵�佸氨鎴愮珛),1:鍔ㄤ綔妫�娴�(闇�瑕佸垏鎹㈢姸鎬佹墠鎴愮珛) + /// </summary> + private string detect_type = "0"; + + private static ConditionDeviceFunList m_Current = null; @@ -53,6 +64,7 @@ public void Show(Entity.Function device, int index, bool edit) { + this.function = device; this.mEdit = edit; this.mIndex = index; @@ -89,6 +101,7 @@ //绌鸿皟 case SPK.AcStandard: case SPK.HvacAC: + case SPK.AcIr: //鍦扮儹 case SPK.FloorHeatStandard: case SPK.HvacFloorHeat: @@ -186,6 +199,96 @@ } } break; + //浜轰綋瀛樺湪浼犳劅鍣� + case SPK.SensorPirHold: + { + + + LogicView.FunTypeView view1 = new LogicView.FunTypeView(); + view1.btnText.TextID = StringId.rentijiance; + view1.btnText.Name = Language.StringByID(StringId.rentijiance); + fLayout.AddChidren(view1.FLayoutView()); + view1.btnClick.MouseUpEventHandler += (sender, e) => + { + DeviceView(device, view1.btnState, StringId.youren, StringId.wuren); + + }; + + LogicView.FunTypeView view2 = new LogicView.FunTypeView(); + view2.frameLayout.Y = view1.frameLayout.Bottom; + view2.btnText.TextID = StringId.chixushijian; + fLayout.AddChidren(view2.FLayoutView()); + view2.btnClick.MouseUpEventHandler += (sender, e) => + { + //涓荤晫闈㈡帶浠� + FrameLayout fLayout2 = new FrameLayout + { + BackgroundColor = CSS.CSS_Color.viewTrans60lucence, + }; + this.AddChidren(fLayout2); + TimeView(fLayout2, device, view2.btnState); + + }; + + LogicView.FunTypeView view3 = new LogicView.FunTypeView(); + view3.frameLayout.Y = view2.frameLayout.Bottom; + view3.btnText.TextID = StringId.zhixingmoshi; + view3.btnState.TextID = StringId.shoudaojiuzhixing; + fLayout.AddChidren(view3.FLayoutView()); + view3.btnClick.MouseUpEventHandler += (sender, e) => + { + FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence }; + this.AddChidren(frame); + LogicView.SwitchView switchView = new LogicView.SwitchView(); + switchView.FLayoutView(frame, StringId.gaibiancaizhixing, StringId.shoudaojiuzhixing, view3.btnState.Text, 2, (intValue) => + { + if (StringId.gaibiancaizhixing == intValue) + { + this.detect_type = "1"; + } + else + { + this.detect_type = "0"; + } + view3.btnState.TextID = intValue; + selectedState = device.spk + "_" + this.detect_type; + }); + }; + + + if (edit) + { + try + { + Input inputs = Logic.currlogic.input[index]; + if (!string.IsNullOrEmpty(inputs.hold_time) && int.Parse(inputs.hold_time) > 0) + { + int time = int.Parse(inputs.hold_time); + int h = time / (60 * 60); + int m = time % (60 * 60) / 60; + int s = (time % (60 * 60) % 60); + view2.btnState.Text = LogicMethod.Current.getTimeStr(inputs.hold_time); + view2.btnState.Name = h + ":" + m + ":" + s; + this.hold_time = inputs.hold_time; + } + if (!string.IsNullOrEmpty(inputs.detect_type)) + { + this.detect_type = inputs.detect_type; + if (inputs.detect_type == "1") + { + view3.btnState.TextID = StringId.gaibiancaizhixing; + } + else + { + view3.btnState.TextID = StringId.shoudaojiuzhixing; + } + } + } + catch { } + GetEditState(device, index, view1.btnState, view2.btnState, null, null); + } + } + break; //闂ㄧ獥浼犳劅鍣� case SPK.SensorDoorWindow: { @@ -195,6 +298,22 @@ 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.SensorHelp: + { + LogicView.FunTypeView view = new LogicView.FunTypeView(); + view.btnText.TextID = StringId.qiujiu; + fLayout.AddChidren(view.FLayoutView()); + view.btnClick.MouseUpEventHandler += (sender, e) => + { + DeviceView(device, view.btnState, StringId.qiujiu, StringId.zhengchang,1); }; if (edit) { @@ -342,7 +461,7 @@ } break; //鐜妫�娴嬩紶鎰熷櫒 - case SPK.SensorEnvironment: + case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin: case SPK.SensorEnvironment2: case SPK.SensorEnvironment3: { @@ -513,6 +632,26 @@ }; } break; + //鐓у害浼犳劅鍣� + case SPK.SensorLight: + { + + ///鐓у害浼犳劅鍣� + LogicView.FunTypeView illuminanceView = new LogicView.FunTypeView(); + illuminanceView.btnText.TextID = StringId.zhaomingdu; + fLayout.AddChidren(illuminanceView.FLayoutView()); + + ///鐐瑰嚮浜嬩欢 + illuminanceView.btnClick.MouseUpEventHandler += (sender, e) => + { + new PublicInterface { }.ViewZuHe(this, StringId.zhaomingdugaoyu, StringId.zhaomingdudiyu, (intText, view) => + { + InputBoxAction(device, intText, index, edit); + }); + + }; + } + break; //鐢查啗 case SPK.SensorHcho: { @@ -618,7 +757,59 @@ } } break; - + //钀ょ煶瑙嗛闂ㄩ攣 + case SPK.VideoDoorLock: + { + LogicView.FunTypeView view1 = new LogicView.FunTypeView(); + view1.btnText.TextID=StringId.kaimenrenyuan; + 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; + //鐚溂 + case SPK.Peephole: + LogicView.FunTypeView viewPeephole = new LogicView.FunTypeView(); + viewPeephole.btnText.TextID = StringId.ActivityDetection; + //viewPeephole.btnText.Name = Language.StringByID(StringId.shipinmensuo); + fLayout.AddChidren(viewPeephole.FLayoutView()); + viewPeephole.btnClick.MouseUpEventHandler += (sender, e) => + { + this.identifier = "pir_event";//浜轰綋鎰熷簲鍛婅 + this.DeviceView(device, viewPeephole.btnState, StringId.shi, StringId.offLogic, 1); + + }; + if (edit) + { + this.GetEditState(device, index, viewPeephole.btnState, null, null, null); + } + break; + //钀ょ煶鎽勫儚澶� + case SPK.Ev_Ipcam: + LogicView.FunTypeView viewEzIpcam = new LogicView.FunTypeView(); + viewEzIpcam.btnText.TextID = StringId.ActivityDetection; + //viewEzIpcam.btnText.Name = Language.StringByID(StringId.shipinmensuo); + fLayout.AddChidren(viewEzIpcam.FLayoutView()); + viewEzIpcam.btnClick.MouseUpEventHandler += (sender, e) => + { + this.identifier = Constant.intelligentDetection_event;//浜轰綋鎰熷簲鍛婅 + this.DeviceView(device, viewEzIpcam.btnState, StringId.shi, StringId.offLogic, 1); + + }; + if (edit) + { + this.GetEditState(device, index, viewEzIpcam.btnState, null, null, null); + } + break; + } #region 淇濆瓨 ///淇濆瓨View @@ -669,6 +860,33 @@ inputDevice.condition = new List<Dictionary<string, string>>(); } } + else if(device.spk == SPK.Peephole) + { + //鐚溂-浜轰綋鎰熷簲鍛婅 + inputDevice.condition_type = "9"; + inputDevice.identifier = this.identifier; + inputDevice.condition = new List<Dictionary<string, string>>(); + } + else if(device.spk == SPK.Ev_Ipcam) + { + //钀ょ煶鎽勫儚澶�-绉诲姩鐩戞祴鍛婅 + inputDevice.condition_type = "9"; + inputDevice.identifier = this.identifier; + inputDevice.condition = new List<Dictionary<string, string>>(); + } + else if (device.spk == SPK.VideoDoorLock) + { + ////钀ょ煶瑙嗛闂ㄩ攣 + inputDevice.condition_type = "9"; + inputDevice.identifier = this.identifier; + //inputDevice.condition = new List<Dictionary<string, string>>(); + } + else if (device.spk == SPK.SensorPirHold) + { + //浜轰綋瀛樺湪浼犳劅鍣� + inputDevice.hold_time = this.hold_time; + inputDevice.detect_type = this.detect_type; + } if (edit) @@ -712,6 +930,7 @@ } } + /// <summary> /// 璁惧閫夋嫨鏉′欢鐣岄潰 /// </summary> @@ -719,7 +938,7 @@ /// <param name="button">閫変腑鐘舵�佹樉绀烘枃鏈珺tn鎺т欢</param> /// <param name="btnText1">灞炴�х姸鎬佸�兼枃鏈�1</param> /// <param name="btnText2">灞炴�х姸鎬佸�兼枃鏈�2</param> - /// <param name="viewCount">view鏁伴噺</param> + /// <param name="viewCount">view鏁伴噺,榛樿2涓獀iew</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 }; @@ -736,6 +955,7 @@ case SPK.SensorGas: case SPK.SensorWater: case SPK.SensorSmoke: + case SPK.SensorHelp: { keyVlaue = "status"; if (!Is_SpkAttribute(keyVlaue)) { @@ -754,6 +974,7 @@ } } break; + case SPK.SensorPirHold: case SPK.SensorDuiShe: case SPK.SensorShanLan: case SPK.SensorPir: @@ -805,12 +1026,14 @@ { case StringId.xieluo: case StringId.luoshui: + case StringId.qiujiu: { value = "alarm"; } break; case StringId.wuxieluo: case StringId.wuluoshui: + case StringId.zhengchang: { value = "normal"; } @@ -818,11 +1041,19 @@ case StringId.onLogic: { value = "on"; + if (device.spk== SPK.SensorDryContact) { + value = "open"; + } + } break; case StringId.offLogic: { value = "off"; + if (device.spk == SPK.SensorDryContact) + { + value = "close"; + } } break; case StringId.youren: @@ -922,6 +1153,7 @@ { if (edit) { + this.function = device; Input inputs = Logic.currlogic.input[index]; //娓呴櫎涔嬪墠鏃ф暟鎹� dicSateteList.Clear(); @@ -931,44 +1163,65 @@ dicSateteList.AddRange(inputs.condition); } } + int max = 100; + int min = 1; + if (device.spk == SPK.SensorLight) + { + //鐓ф槑浼犳劅鍣� + min = 0; + max =1200; + } + new LogicView.TipPopView { }.InputBox(textInt, stateValue, (value) => { - string keyValue = "20"; + string key = "20"; string data_type = "integer"; string comparator = "="; switch (textInt) { case StringId.wendugaoyu: { - keyValue = "temperature"; + key = "temperature"; comparator = ">"; data_type = "float"; } break; case StringId.wendudiyu: { - keyValue = "temperature"; + key = "temperature"; comparator = "<"; data_type = "float"; } break; case StringId.shidugaoyu: { - keyValue = "humidity"; + key = "humidity"; comparator = ">"; } break; case StringId.shidudiyu: { - keyValue = "humidity"; + key = "humidity"; comparator = "<"; } break; + case StringId.zhaomingdugaoyu: + { + key = "illuminance"; + comparator = ">"; + } + break; + case StringId.zhaomingdudiyu: + { + key = "illuminance"; + comparator = "<"; + } + break ; } selectedState = device.spk + "_" + value; - AddDictionary(keyValue, value, data_type, comparator); + AddDictionary(key, value, data_type, comparator); SaveInput(device,index, edit); - }); + },min,max); } /// PM2.5,Co2,Tvoc璁剧疆鍊� /// </summary> @@ -1035,38 +1288,171 @@ /// <param name="frame">褰撳墠鐣岄潰</param> /// <param name="device">褰撳墠璁惧</param> /// <param name="btnState">鏃х姸鎬�</param> - public void FaceAction(FrameLayout frame, Entity.Function device,Button btnState) { + 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(() => + + CommonMethod.Current.SunThread(() => { try { - var faceIDList = Send.Current.GetListHomeFace(device.deviceId,true); - List<string> faceNameList = new List<string>(); - for (int i = 0; i < faceIDList.Count; i++) + var faceIdList = Send.Current.GetListHomeFace(device.deviceId, true); + + CommonMethod.Current.MainThread(() => { - var face = faceIDList[i]; - faceNameList.Add(face.userName); - } + loading.Hide(); + string stateValue = btnState.Tag == null ? "" : btnState.Tag.ToString(); + PublicInterface publicInterface = new PublicInterface(); + publicInterface.MultiSelectShow(this, faceIdList, device.name, stateValue, (indexeList) => + { + if (indexeList.Count > 0) + { + dicSateteList.Clear(); + string userNameStr = string.Empty; + string seleUsrIdStr = string.Empty; + string tag = string.Empty; + string[] arrayUserIds = new string[indexeList.Count]; + //寮�闂ㄧ被鍨� + AddDictionary("open_type", "1", "integer"); + for (int i = 0; i < indexeList.Count; i++) + { + if (i > faceIdList.Count) + { + continue; + } + var indexe = indexeList[i]; + var face = faceIdList[indexe]; + tag += face.userId; + tag += "_"; + userNameStr += face.userName; + userNameStr += ","; + arrayUserIds[i] = face.userId; + } + seleUsrIdStr = Newtonsoft.Json.JsonConvert.SerializeObject(arrayUserIds); + AddDictionary("user_id", seleUsrIdStr, "string", "[]"); + //鐣岄潰鏄剧ず閫変腑鍊� + btnState.Text = InpOrOutLogicMethod.Current.RemoveLastStr(userNameStr); + btnState.Tag = tag; + } + + }); + }); + } + catch { } + finally + { 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); + }); + + } + + /// <summary> + /// 钀ょ煶瑙嗛闂ㄩ攣涓撶敤 + /// </summary> + /// <param name="frame">褰撳墠鐣岄潰</param> + /// <param name="device">褰撳墠璁惧</param> + /// <param name="btnState">鏃х姸鎬�</param> + public void VideoDoorLockAction(FrameLayout frame, Entity.Function device, Button btnState) + { + selectedState = device.spk + "_"; + Loading loading = new Loading(); + frame.AddChidren(loading); + loading.Start(); + CommonMethod.Current.SunThread(() => + { + try + { + var faceIdList = Send.Current.GetVideoDoorLockUserListInfo(device); + CommonMethod.Current.MainThread(() => + { + + loading.Hide(); + string stateValue = btnState.Text == null ? "" : btnState.Text.ToString(); + PublicInterface publicInterface = new PublicInterface(); + publicInterface.MultiSelectShow(this, faceIdList, device.name, stateValue, (indexeList) => + { + if (indexeList.Count > 0) + { + dicSateteList.Clear(); + string seleTxet = string.Empty; + string tag = string.Empty; + string[] array = new string[indexeList.Count]; + + for (int i = 0; i < indexeList.Count; i++) + { + if (i > faceIdList.Count) + { + continue; + } + var indexe = indexeList[i]; + var face = faceIdList[indexe]; + tag += face.userId; + tag += "_"; + array[i] = face.userName; + } + seleTxet = Newtonsoft.Json.JsonConvert.SerializeObject(array); + //鏁版嵁灏佽<楂樿儨璇磋悿鐭抽偅杈规槸鎺ㄩ�佺敤鎴峰悕> + AddDictionary("open_user",seleTxet, "string", "[]"); + //鐣岄潰鏄剧ず閫変腑鍊� + btnState.Text = InpOrOutLogicMethod.Current.RemoveLastStr(seleTxet); + btnState.Tag = tag; + } + + }); }); + } + catch { } + finally + { + Application.RunOnMainThread(() => + { + loading.Hide(); + }); + } + + }); + + } + + /// <summary> + /// 鏃堕棿鏂规硶 + /// </summary> + /// <param name="fLayout">鍦ㄥ摢涓晫闈㈡樉绀�</param> + /// <param name="edit">锛坱rue=缂栬緫锛沠alse=鏂板缓锛�</param> + /// <param name="index">缂栬緫鏉′欢鐨勭储寮�</param> + private void TimeView(FrameLayout fLayout,Function device, Button button) + { + + LogicView.TimeView timePointView = new LogicView.TimeView(); + timePointView.FLayoutView(fLayout); + timePointView.Time(fLayout, button.Name, (timeValue) => + { + try + { + if (timeValue.Contains(":")) + { + string[] ary = timeValue.Split(':'); + + int h = int.Parse(ary[0]) * 60 * 60; + int m = int.Parse(ary[1]) * 60; + int s = int.Parse(ary[2]); + this.hold_time = (h + m + s).ToString(); + if (button != null) + { + button.Text = LogicMethod.Current.getTimeStr(this.hold_time); + button.Name = timeValue; + } + selectedState = device.spk + "_" + timeValue; + } } catch { } @@ -1094,7 +1480,32 @@ //鏈夋暟鎹噸鏂拌祴鍊� dicSateteList.AddRange(dicList); } - InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4); + //浜嬩欢涓撶敤 + switch (device.spk) + { + case SPK.IpCam_Imou: + { + if (inputs.identifier == "ipcam_region_alram_event") + { + button1.Text = Language.StringByID(StringId.shi); + } + + } + break; + case SPK.Peephole: + if (inputs.identifier == "pir_event") + { + button1.Text = Language.StringByID(StringId.shi ); + } + break; + case SPK.Ev_Ipcam: + if (inputs.identifier == Constant.intelligentDetection_event) + { + button1.Text = Language.StringByID(StringId.shi); + } + break; + } + InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4, ""); } /// <summary> /// 娣诲姞閫変腑鏁版嵁 @@ -1183,14 +1594,47 @@ var dic = dictionaryB[i]; string key = dic["key"]; string comparatorValue = dic["comparator"]; + string value = dic["value"]; if (dictionaryA["key"] == key && dictionaryA["comparator"] == comparatorValue) { - //鍒ゆ柇鏄惁瀛樺湪 - valueInt = i; - break; + if (this.CheckSpk()) + { + //鏈変簺璁惧闇�瑕佸鍔犺繖涓垽鏂� + if (dictionaryA["value"] == value) + { + //鍒ゆ柇鏄惁瀛樺湪 + valueInt = i; + break; + } + } + else + { + //鍒ゆ柇鏄惁瀛樺湪 + valueInt = i; + break; + } } } return valueInt; + } + /// <summary> + /// 妫�鏌ユ槸鍚︽敮鎸� + /// </summary> + /// <returns></returns> + private bool CheckSpk() + { + if (this.function == null) + { + return false; + } + if (this.function.spk == SPK.VideoDoorLock || + this.function.spk == SPK.doorgate + ) + { + return true; + } + return false; + } /// <summary> /// 鍒ゆ柇dictionaryB鏄惁瀹屾暣鍖呭惈鍙︿竴涓猟ictionaryA @@ -1200,7 +1644,10 @@ /// <returns></returns> public bool IsContainsAll(List<Dictionary<string, string>> dictionaryA, List<Dictionary<string, string>> dictionaryB) { - + if (dictionaryA.Count == 0 || dictionaryB.Count == 0) { + //钀ょ煶鐚溂锛屾憚鍍忓ご锛屽ぇ鍗庢憚鍍忓ご鍙湁浜嬩欢锛屾病鏈夎緭鍏ユ潯浠� + return true; + } for (int i = 0; i < dictionaryA.Count; i++) { var dic = dictionaryA[i]; -- Gitblit v1.8.0