From acb2b278663952ce555b06a2e821f359225f15e0 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期五, 10 七月 2020 09:41:15 +0800
Subject: [PATCH] 备份

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs |  361 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 361 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs
new file mode 100755
index 0000000..d98fca7
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs
@@ -0,0 +1,361 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 鍥轰欢鍗囩骇鐨勯�昏緫绫�
+    /// </summary>
+    public class HdlFirmwareUpdateLogic
+    {
+        #region 鈻� 鎵ц鍥轰欢鏇存柊_______________________
+
+        /// <summary>
+        /// 鎵ц涓嬩竴涓浐浠剁殑鏇存柊
+        /// </summary>
+        public static void DoUpdateNextFirmware()
+        {
+            //涓嬩竴涓鎵ц鏇存柊鐨勭綉鍏�
+            HdlDeviceUpdateCommonLogic gwControl = null;
+            //涓嬩竴涓鎵ц鏇存柊鐨勮澶�
+            HdlDeviceUpdateCommonLogic deviceControl = null;
+            foreach (var contr in FirmwareUpdateResourse.dicUpdateList.Values)
+            {
+                //濡傛灉鍒殑杩樺湪鍗囩骇涓�,鍒欎笉鍐嶅鐞�
+                if (contr.IsFinishUpdate == false)
+                {
+                    return;
+                }
+                //濡傛灉杩欎釜鍦ㄧ瓑寰呭垪琛ㄧ殑璇�
+                if (contr.UpdateStatu == UpdateStatuMode.Wait && gwControl == null)
+                {
+                    if (contr.ClassDiv == 1 && gwControl == null)
+                    {
+                        //涓嬩竴涓崌绾х殑灏辨槸瀹冧簡
+                        gwControl = contr;
+                    }
+                    else if (contr.ClassDiv == 2 && deviceControl == null)
+                    {
+                        //涓嬩竴涓崌绾х殑灏辨槸瀹冧簡
+                        deviceControl = contr;
+                    }
+                }
+            }
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                if (gwControl != null)
+                {
+                    //寮�濮嬫墽琛屾洿鏂版搷浣�
+                    gwControl.DoStartUpdate();
+                    return;
+                }
+
+                if (deviceControl != null)
+                {
+                    //寮�濮嬫墽琛屾洿鏂版搷浣�
+                    deviceControl.DoStartUpdate();
+                }
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鍗囩骇鍥轰欢淇℃伅___________________
+
+        /// <summary>
+        /// 娣诲姞鍗囩骇鍥轰欢淇℃伅
+        /// </summary>
+        /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param>
+        /// <param name="HardwareVersion">纭欢鐗堟湰</param>
+        /// <param name="imgType">闀滃儚绫诲瀷</param>
+        /// <returns></returns>
+        public async static Task<bool> AddFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType)
+        {
+            //妫�娴嬫湰鍦版槸鍚﹀凡缁忔湁杩欎釜缂撳瓨浜�
+            if (IsEsixtFirmwareVersionInfo(levelType, HardwareVersion, imgType) == true)
+            {
+                return true;
+            }
+            var Pra = new GetFirmwareVersionPra();
+            Pra.PageSetting.Page = 1;
+            Pra.PageSetting.PageSize = 9999;
+
+            if (levelType == FirmwareLevelType.Linux)
+            {
+                //鑾峰彇缃戝叧Linux妯″潡鍗囩骇淇℃伅
+                Pra.FirmwareManaFirstType = 1;
+                Pra.FirmwareManaSecondType = 0;
+                Pra.HardwareVersion = HardwareVersion;
+                Pra.DeviceType = imgType;
+                var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Linux, Pra);
+                return result;
+            }
+            else if (levelType == FirmwareLevelType.Coordinator)
+            {
+                //鍗忚皟鍣ㄦā鍧�
+                Pra.FirmwareManaFirstType = 1;
+                Pra.FirmwareManaSecondType = 1;
+                Pra.HardwareVersion = HardwareVersion;
+                Pra.DeviceType = imgType;
+                var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Coordinator, Pra);
+                return result;
+            }
+            else if (levelType == FirmwareLevelType.VirtualDevice)
+            {
+                //铏氭嫙璁惧妯″潡
+                Pra.FirmwareManaFirstType = 1;
+                Pra.FirmwareManaSecondType = 2;
+                Pra.HardwareVersion = HardwareVersion;
+                Pra.DeviceType = imgType;
+                var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.VirtualDevice, Pra);
+                return result;
+            }
+            else
+            {
+                //涓�鑸澶�
+                Pra.FirmwareManaFirstType = 2;
+                Pra.FirmwareManaSecondType = null;
+                Pra.HardwareVersion = HardwareVersion;
+                Pra.DeviceType = imgType;
+                var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.ZigbeeDevice, Pra);
+                return result;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇浜戠鐨勫浐浠讹紝鐒跺悗瀛樺叆缂撳瓨涓�
+        /// </summary>
+        /// <param name="levelType"></param>
+        /// <param name="pra"></param>
+        /// <returns></returns>
+        private async static Task<bool> GetFirmwareVersionAndSetToMemmory(FirmwareLevelType levelType, GetFirmwareVersionPra pra)
+        {
+            var listNotShow = new List<string>() { "NotSetAgain" };
+            string resultValue = await UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra, listNotShow);
+            if (string.IsNullOrEmpty(resultValue) == true)
+            {
+                return false;
+            }
+            var verResult = Newtonsoft.Json.JsonConvert.DeserializeObject<FirmwareVersionResult>(resultValue);
+            if (verResult.PageData.Count == 0)
+            {
+                return true;
+            }
+
+            //纭欢鐗堟湰
+            Dictionary<string, FirmwareHardInfo> dicHardData = new Dictionary<string, FirmwareHardInfo>();
+            FirmwareUpdateResourse.dicFirmwareInfo[levelType] = dicHardData;
+
+            foreach (var data in verResult.PageData)
+            {
+                //鍥轰欢鐗堟湰鏄剧ず锛�
+                //10101 3涓猙yte 鏄剧ず涓猴細ver.1.01.01
+                if (data.FirmwareVersion.Length != 6 && data.FirmwareVersion.Length != 5)
+                {
+                    //闈炴瑙勭殑鍥轰欢鐗堟湰,涓嶅啀鑰冭檻鑼冨洿鍐�
+                    continue;
+                }
+                //纭欢鍒嗙被
+                FirmwareHardInfo hardInfo = null;
+                string hardCode = data.HardwareVersion;
+                if (dicHardData.ContainsKey(hardCode) == false)
+                {
+                    //娣诲姞
+                    hardInfo = new FirmwareHardInfo();
+                    dicHardData[hardCode] = hardInfo;
+                }
+                hardInfo = dicHardData[hardCode];
+
+                //闀滃儚鍒嗙被
+                string imgType = data.DeviceType;
+                Dictionary<string, FirmwareImgTypeInfo> dicimgType = hardInfo.dicImgType;
+                FirmwareImgTypeInfo imgTypeInfo = null;
+                if (dicimgType.ContainsKey(imgType) == false)
+                {
+                    //娣诲姞
+                    imgTypeInfo = new FirmwareImgTypeInfo();
+                    dicimgType[imgType] = imgTypeInfo;
+                }
+                imgTypeInfo = dicimgType[imgType];
+
+                try
+                {
+                    //鍥轰欢鐗堟湰
+                    var info = new FirmwareVersionInfo();
+                    info.DistributedMark = data.DistributedMark;
+                    info.FirmwareVersion = Convert.ToInt32(data.FirmwareVersion);
+                    info.ShowName = data.Name;
+                    info.Name = data.Name;
+                    info.HardwareVersion = hardCode;
+                    info.ImagType = imgType;
+                    info.CreatedOnUtc = data.CreatedOnUtc;
+                    imgTypeInfo.listVeison.Add(info);
+                    //鍥轰欢鐨勪俊鎭鐞�
+                    DoAdjustFirmwareInformation(info, data.Remarks);
+                }
+                catch { continue; }
+            }
+
+            return true;
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇鏈�鏂板浐浠剁増鏈俊鎭痏______________
+
+        /// <summary>
+        /// 鑾峰彇鍥轰欢鐨勬渶鏂扮増鏈俊鎭�(濡傛灉杩斿洖Null,鍒欒〃绀烘病鏈夋渶鏂扮増鏈�,鎴栬�呭綋鍓嶅凡缁忔槸鏈�鏂扮増鏈�)
+        /// </summary>
+        /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param>
+        /// <param name="HardwareVersion">纭欢鐗堟湰</param>
+        /// <param name="imgType">闀滃儚绫诲瀷</param>
+        /// <param name="nowVersion">鐜板湪鐨勭増鏈�</param>
+        /// <returns></returns>
+        public static FirmwareVersionInfo GetFirmwareMostVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion)
+        {
+            //闀滃儚绫诲瀷
+            var listdata = GetFirmwareVersionListInfo(levelType, HardwareVersion, imgType);
+            FirmwareVersionInfo newFirInfo = null;
+            foreach (var verInfo in listdata)
+            {
+                if (verInfo.Name.EndsWith(".bin") == true)
+                {
+                    //瀹冧笉鏄崌绾у浐浠�,  .bin鏄壒娈婄殑
+                    continue;
+                }
+                int testVersion = Convert.ToInt32(verInfo.FirmwareVersion.ToString().PadLeft(6, '0').Substring(2, 2));
+                if (testVersion % 2 != 0)
+                {
+                    //涓棿閭d釜byte涓哄鏁版椂锛屼唬琛ㄦ槸娴嬭瘯鐗堟湰,鍦ㄦ樉绀烘渶鏂扮増鏈椂,涓嶉渶瑕佹樉绀猴紝浣嗘槸鍦ㄥ巻鍙茬増鏈偅閲屽彲浠ユ樉绀�
+                    //涓棿閭d釜byte涓哄伓鏁版椂,浠h〃鏄寮忕増鏈�
+                    continue;
+                }
+
+                if (verInfo.FirmwareVersion > nowVersion)
+                {
+                    nowVersion = verInfo.FirmwareVersion;
+                    newFirInfo = verInfo;
+                }
+            }
+            return newFirInfo;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍥轰欢鍒楄〃鐨勫浐浠剁増鏈俊鎭�
+        /// </summary>
+        /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param>
+        /// <param name="HardwareVersion">纭欢鐗堟湰</param>
+        /// <param name="imgType">闀滃儚绫诲瀷</param>
+        /// <returns></returns>
+        public static List<FirmwareVersionInfo> GetFirmwareVersionListInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType)
+        {
+            if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false)
+            {
+                return new List<FirmwareVersionInfo>();
+            }
+            //纭欢鐗堟湰鍙风骇鍒�
+            var dicHard = FirmwareUpdateResourse.dicFirmwareInfo[levelType];
+
+            //纭欢鐗堟湰
+            if (dicHard.ContainsKey(HardwareVersion) == false)
+            {
+                return new List<FirmwareVersionInfo>();
+            }
+            //闀滃儚绫诲瀷
+            var dicImgInfo = GetImageVersionListInfo(levelType, HardwareVersion);
+            if (dicImgInfo.ContainsKey(imgType) == false)
+            {
+                return new List<FirmwareVersionInfo>();
+            }
+
+            var listData = new List<FirmwareVersionInfo>();
+            var imgInfo = dicImgInfo[imgType];
+            foreach (var verInfo in imgInfo.listVeison)
+            {
+                listData.Add(verInfo);
+            }
+
+            return listData;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍥轰欢鍒楄〃鐨勯暅鍍忕増鏈俊鎭�
+        /// </summary>
+        /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param>
+        /// <param name="HardwareVersion">纭欢鐗堟湰</param>
+        /// <returns></returns>
+        public static Dictionary<string, FirmwareImgTypeInfo> GetImageVersionListInfo(FirmwareLevelType levelType, string HardwareVersion)
+        {
+            if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false)
+            {
+                return new Dictionary<string, FirmwareImgTypeInfo>();
+            }
+            //纭欢鐗堟湰鍙风骇鍒�
+            var dicHard = FirmwareUpdateResourse.dicFirmwareInfo[levelType];
+
+            //纭欢鐗堟湰
+            if (dicHard.ContainsKey(HardwareVersion) == false)
+            {
+                return new Dictionary<string, FirmwareImgTypeInfo>();
+            }
+            //闀滃儚绫诲瀷
+            return dicHard[HardwareVersion].dicImgType;
+        }
+
+        #endregion
+
+        #region 鈻� 鍥轰欢瀛樺湪妫�娴媉______________________
+
+        /// <summary>
+        /// 鍥轰欢缂撳瓨瀛樺湪妫�娴�
+        /// </summary>
+        /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param>
+        /// <param name="HardwareVersion">纭欢鐗堟湰</param>
+        /// <param name="imgType">闀滃儚绫诲瀷</param>
+        /// <returns></returns>
+        private static bool IsEsixtFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType)
+        {
+            //绗竴澶х被
+            if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false)
+            {
+                return false;
+            }
+            //纭欢
+            if (FirmwareUpdateResourse.dicFirmwareInfo[levelType].ContainsKey(HardwareVersion) == false)
+            {
+                return false;
+            }
+            //闀滃儚
+            if (FirmwareUpdateResourse.dicFirmwareInfo[levelType][HardwareVersion].dicImgType.ContainsKey(imgType) == false)
+            {
+                return false;
+            }
+            return true;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍥轰欢鐨勪俊鎭鐞�
+        /// </summary>
+        /// <param name="Info"></param>
+        /// <param name="remark"></param>
+        private static void DoAdjustFirmwareInformation(FirmwareVersionInfo Info, string remark)
+        {
+            if (string.IsNullOrEmpty(remark) == true)
+            {
+                return;
+            }
+            //鏇存柊鍐呭
+            string[] Arry = remark.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
+            Info.UpdateContent.AddRange(Arry);
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0