From 9064c76e6a795ae735cac52d98bed178a27c2a87 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期五, 10 一月 2020 16:38:16 +0800
Subject: [PATCH] 合并代码

---
 ZigbeeApp/Shared/Common/Device.cs |  173 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 130 insertions(+), 43 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs
index 4a805f6..9ca9408 100755
--- a/ZigbeeApp/Shared/Common/Device.cs
+++ b/ZigbeeApp/Shared/Common/Device.cs
@@ -37,7 +37,7 @@
             }
         }
         /// <summary>
-        /// 鏈湴鎵�鏈夎澶囩殑缂撳瓨(鎺掑簭)
+        /// 鏈湴鎵�鏈夎澶囩殑缂撳瓨
         /// </summary>
         public List<CommonDevice> listAllDevice
         {
@@ -241,7 +241,7 @@
 
             //鑾峰彇杩欎釜缃戝叧鐨勬湰鍦版墍鏈夎澶�
             string gwID = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
-            List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID);
+            List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID, true);
             Dictionary<string, CommonDevice> dicExist = new Dictionary<string, CommonDevice>();
             foreach (var device in listLocalDevices)
             {
@@ -273,25 +273,13 @@
             for (int i = 0; i < listDevice.Count; i++)
             {
                 var device = listDevice[i];
-                //瀵规湭鍛藉悕鐨勮澶囬噸鏂板懡鍚�
-                if (this.GetSimpleEpointName(device) == string.Empty)
+                //瀵规湭鍛藉悕鐨勮櫄鎷熻澶囬噸鏂板懡鍚�
+                if (device.DriveCode > 0 && this.GetSimpleEpointName(device) == string.Empty)
                 {
                     //鏍规嵁璁惧绫诲瀷鑾峰彇鍚嶇О
                     var dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
-                    //铏氭嫙璁惧鐨勮瘽锛岄檮鍔犲洖璺彿
-                    if (device.DriveCode > 0)
-                    {
-                        //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍�
-                        dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
-                    }
-                    //澶氬洖璺澶囩殑璇濓紝闄勫姞鍥炶矾鍙�
-                    else if (dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && dicDeviceEpoint[device.DeviceAddr].Count > 1)
-                    {
-                        var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
-                        dName = arry[0].Trim();
-                        //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍�
-                        dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
-                    }
+                    //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍�
+                    dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
 
                     HdlThreadLogic.Current.RunThread(async () =>
                     {
@@ -301,10 +289,19 @@
             }
 
             //鍙湁瀹屽叏鑾峰彇鐨勬椂鍊�,鎵嶄細鍘诲鐞嗗垹闄ょ殑闂
-            if (statu == 1)
+            if (statu != 1)
             {
-                //濡傛灉鏈湴鍜岀綉鍏崇殑璁惧涓嶄竴鑷寸殑鏃跺�欙紝鍒犻櫎鏈湴鐨勮澶�
-                foreach (var device in dicExist.Values)
+                return statu;
+            }
+
+            //濡傛灉鏈湴鍜岀綉鍏崇殑璁惧涓嶄竴鑷寸殑鏃跺�欙紝鍒犻櫎鏈湴鐨勮澶�
+            foreach (var device in dicExist.Values)
+            {
+                if (device is OTADevice)
+                {
+                    this.DeleteMemmoryOtaDevice(device.DeviceAddr);
+                }
+                else
                 {
                     this.DeleteMemmoryDevice(device, true);
                 }
@@ -484,15 +481,25 @@
             lock (dicAllDevice)
             {
                 string mainKeys = this.GetDeviceMainKeys(device);
-                if (this.dicAllDevice.ContainsKey(mainKeys) == false)
+                if (this.dicAllDevice.ContainsKey(mainKeys) == true)
                 {
-                    return;
-                }
-                this.dicAllDevice[mainKeys] = device;
-                device.ReSave();
+                    //涓�鑸澶�
+                    this.dicAllDevice[mainKeys] = device;
+                    device.ReSave();
 
-                //娣诲姞鑷姩澶囦唤
-                HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
+                    //娣诲姞鑷姩澶囦唤
+                    HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
+                }
+                else if (this.dicOTADevice.ContainsKey(mainKeys) == true)
+                {
+                    //Ota璁惧
+                    this.dicOTADevice[mainKeys] = (OTADevice)device;
+                    device.ReSave();
+
+                    //娣诲姞鑷姩澶囦唤
+                    HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
+
+                }
             }
         }
 
@@ -524,11 +531,14 @@
                 return false;
             }
 
-            //鍒犻櫎鏂囦欢
+            //鍒犻櫎缂撳瓨鐨凮ta璁惧
+            this.DeleteMemmoryOtaDevice(listdevice[0].DeviceAddr);
+            //鍒犻櫎涓�鑸澶囨枃浠�
             foreach (CommonDevice device in listdevice)
             {
                 this.DeleteMemmoryDevice(device);
             }
+
             if (this.dicDeviceRoomId.ContainsKey(listdevice[0].DeviceAddr) == true)
             {
                 //绉婚櫎鐪熷疄璁惧鐨勬埧闂寸储寮�
@@ -539,7 +549,7 @@
         }
 
         /// <summary>
-        /// 鍒犻櫎缂撳瓨鐨勮澶�
+        /// 鍒犻櫎缂撳瓨鐨勪竴鑸澶�
         /// </summary>
         /// <param name="device">璁惧瀵硅薄</param>
         /// <param name="deleteRoom">鏄惁浠庢埧闂村垹闄�</param>
@@ -561,6 +571,11 @@
                 {
                     this.dicAllDevice.Remove(mainKeys);
                 }
+                if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true)
+                {
+                    //鍙樻洿绔偣鏁�
+                    this.dicDeviceEpoint[device.DeviceAddr].Remove(device.DeviceEpoint);
+                }
             }
 
             //鍒犻櫎璁惧鏂囦欢
@@ -580,9 +595,17 @@
                     HdlAutoBackupLogic.DeleteFile(device.FilePath);
                 }
             }
+        }
 
+        /// <summary>
+        /// 鍒犻櫎缂撳瓨鐨凮ta璁惧
+        /// </summary>
+        /// <param name="macAdrr"></param>
+        /// <param name="ePoint"></param>
+        public void DeleteMemmoryOtaDevice(string macAdrr, int ePoint = 200)
+        {
             //鍒犻櫎200绔彛鏂囦欢
-            string otaKeys = this.GetDeviceMainKeys(device.DeviceAddr, 200);
+            string otaKeys = this.GetDeviceMainKeys(macAdrr, ePoint);
             if (this.dicOTADevice.ContainsKey(otaKeys) == true)
             {
                 string otaFile = this.dicOTADevice[otaKeys].FilePath;
@@ -591,12 +614,12 @@
                     if (UserCenterResourse.UserInfo.AuthorityNo == 3)
                     {
                         //鎴愬憳鐨勮瘽,鐩存帴鍒犻櫎,娌℃湁鍟嗛噺鐨勪綑鍦�
-                        Global.DeleteFilebyHomeId(filePath);
+                        Global.DeleteFilebyHomeId(otaFile);
                     }
                     else
                     {
                         //鍙樻洿锛氭悶鎺夊畠,涓嶇暀浜�
-                        Global.DeleteFilebyHomeId(filePath);
+                        Global.DeleteFilebyHomeId(otaFile);
                         //鍒犻櫎鑷姩澶囦唤
                         HdlAutoBackupLogic.DeleteFile(otaFile);
                     }
@@ -680,8 +703,9 @@
         /// 鏍规嵁缃戝叧ID鑾峰彇鎵�鏈夌殑璁惧
         /// </summary>
         /// <param name="gwId">缃戝叧ID</param>
+        /// <param name="getOtaDevice">鏄惁鑾峰彇ota璁惧</param>
         /// <returns></returns>
-        public List<CommonDevice> GetDeviceByGatewayID(string gwId)
+        public List<CommonDevice> GetDeviceByGatewayID(string gwId, bool getOtaDevice = false)
         {
             List<CommonDevice> list = new List<CommonDevice>();
             lock (dicAllDevice)
@@ -692,6 +716,17 @@
                     if (gwId == device.CurrentGateWayId)
                     {
                         list.Add(device);
+                    }
+                }
+                if (getOtaDevice == true)
+                {
+                    //鑾峰彇ota璁惧
+                    foreach (var ota in this.dicOTADevice.Values)
+                    {
+                        if (ota.CurrentGateWayId == gwId)
+                        {
+                            list.Add(ota);
+                        }
                     }
                 }
             }
@@ -817,6 +852,30 @@
             return this.dicOTADevice[mainkeys];
         }
 
+        /// <summary>
+        /// 鑾峰彇鐗规畩鐨�,娌℃湁鍏朵粬鍥炶矾,鍗曠函鍙湁200绔偣鐨凮TA璁惧
+        /// </summary>
+        /// <param name="gwId">缃戝叧ID</param>
+        /// <returns></returns>
+        public List<OTADevice> GetSpecialOtaDevice(string gwId)
+        {
+            var list = new List<OTADevice>();
+            foreach (var ota in this.dicOTADevice.Values)
+            {
+                if (ota.CurrentGateWayId != gwId)
+                {
+                    //涓嶆槸鍚屼竴涓綉鍏�
+                    continue;
+                }
+                if (dicDeviceEpoint.ContainsKey(ota.DeviceAddr) == false
+                    || dicDeviceEpoint[ota.DeviceAddr].Count == 0)
+                {
+                    list.Add(ota);
+                }
+            }
+            return list;
+        }
+
         #endregion
 
         #region 鈻� 鑾峰彇璁惧鍚嶇О_______________________
@@ -834,16 +893,39 @@
                 return dName;
             }
             //鏍规嵁璁惧绫诲瀷鑾峰彇鍚嶇О
-            dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
+            var tempValue = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
+            var arry = tempValue.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
+            dName = arry[0].Trim();
+
             //濡傛灉鏄櫄鎷熻澶�
-            if (device.DriveCode > 0
-                || (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1))
+            if (device.DriveCode > 0)
             {
-                var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
-                dName = arry[0].Trim();
                 //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍�
                 dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
+                return dName;
             }
+
+            //鑾峰彇璁惧绫诲瀷
+            var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
+            if (deviceInfoType.BeloneType == Common.DeviceBeloneType.A鎸夐敭闈㈡澘 && device.Type == DeviceType.TemperatureSensor)
+            {
+                //闈㈡澘鐨勬渶鍚庝竴涓洖璺槸娓╁害浼犳劅鍣�
+                dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId11);
+            }
+            else if (deviceInfoType.ConcreteType == Common.DeviceConcreteType.Sensor_Pir)
+            {
+                //pir浼犳劅鍣�,瀹冨張鎼炵壒娈婁笢瑗�,浼犳劅鍣ㄨ嚜韬敤鑷繁鐨勫悕瀛�,缁х數鍣ㄥ洖璺殑璇濃�︹��
+                if (device.Type == DeviceType.OnOffOutput)
+                {
+                    dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2300);
+                }
+            }
+            else if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1)
+            {
+                //XXXXX(N鍥炶矾)
+                dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
+            }
+
             return dName;
         }
 
@@ -1682,6 +1764,11 @@
             //濡傛灉璁惧鍙湁涓�涓洖璺紝濡傛灉鏀瑰彉浜嗙湡瀹炶澶囧尯鍩燂紝鍒欏畠鐨勫洖璺殑鍖哄煙涔熶竴璧锋敼浜�
             if (saveRoadDevice == true && listDevice != null && listDevice.Count == 1)
             {
+                if (listDevice[0] is OTADevice)
+                {
+                    //鍗曠函鍙槸Ota璁惧鍒欎笉澶勭悊
+                    return;
+                }
                 Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId, false);
             }
         }
@@ -2443,19 +2530,19 @@
 
         //=========鈽呪槄鍏朵粬绫�(????-????)鈽呪槄=========
         /// <summary>
-        /// 骞叉帴鐐�
+        /// 骞叉帴鐐�(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷)
         /// </summary>
         DryContact = -10000,
         /// <summary>
-        /// 鐏厜(娉ㄦ剰,瀹冭緭鍏ュ叾浠栫被,涓嶆槸璁惧绫诲瀷)
+        /// 鐏厜(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷)
         /// </summary>
         Light = -10001,
         /// <summary>
-        /// 鎻掑骇
+        /// 鎻掑骇(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷)
         /// </summary>
         Socket1 = -10002,
         /// <summary>
-        /// 寮�鍏�
+        /// 寮�鍏�(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷)
         /// </summary>
         Switch = -10003,
     }

--
Gitblit v1.8.0