From fdc47d950498e088260a3b04028703adc0f878e0 Mon Sep 17 00:00:00 2001
From: WJC <wjc@hdlchina.com.cn>
Date: 星期一, 30 三月 2020 10:54:27 +0800
Subject: [PATCH] 2020-03-30-1
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs | 232 ++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 145 insertions(+), 87 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
index 59676ec..3f1200f 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -117,10 +117,20 @@
{
return;
}
+
+ List<string> listBackupGwId = new List<string>();
+ var fileData = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.BackupGatewayIdFile);
+ if (fileData != null)
+ {
+ //鏂板锛氳櫧鐒舵鐜囦綆锛屼絾鏄‘瀹炲彂鐢熶簡銆傚鏋滄湁缃戠粶鏃讹紝App閲嶆柊缁戝畾璁板綍鐨勭綉鍏冲け璐ョ殑璇�
+ //涓嶅簲璇ュ垹闄ゅ畠
+ listBackupGwId = JsonConvert.DeserializeObject<List<string>>(System.Text.Encoding.UTF8.GetString(fileData));
+ }
+
List<string> listDelete = new List<string>();
foreach (var gatewayId in this.dicGateway.Keys)
{
- if (result.ContainsKey(gatewayId) == false)
+ if (result.ContainsKey(gatewayId) == false && listBackupGwId.Contains(gatewayId) == false)
{
//鏈湴瀛樺湪浜戠涓嶅瓨鍦ㄧ殑缃戝叧锛屽垯鍒犻櫎
listDelete.Add(gatewayId);
@@ -132,8 +142,10 @@
List<CommonDevice> list = Common.LocalDevice.Current.GetDeviceByGatewayID(gatewayId);
foreach (var device in list)
{
- //鍒犻櫎璁惧锛屼笉鍒犻櫎鎴块棿淇℃伅
- Common.LocalDevice.Current.DeleteMemmoryDevice(device, false);
+ //鍒犻櫎涓�鑸澶�
+ Common.LocalDevice.Current.DeleteMemmoryDevice(device, true);
+ //鍒犻櫎Ota璁惧
+ Common.LocalDevice.Current.DeleteMemmoryOtaDevice(device.DeviceAddr);
}
//鍒犻櫎缃戝叧鏂囦欢
this.DeleteGatewayFile(gatewayId);
@@ -168,10 +180,18 @@
/// <returns></returns>
private ZbGateway GetGatewayFromFile(string file)
{
- byte[] filebyte = Global.ReadFileByHomeId(file);
- string strvalue = System.Text.Encoding.UTF8.GetString(filebyte);
- var gateway = JsonConvert.DeserializeObject<ZbGateway>(strvalue);
- return gateway;
+ try
+ {
+ byte[] filebyte = Global.ReadFileByHomeId(file);
+ string strvalue = System.Text.Encoding.UTF8.GetString(filebyte);
+ var gateway = JsonConvert.DeserializeObject<ZbGateway>(strvalue);
+ return gateway;
+ }
+ catch (Exception ex)
+ {
+ HdlLogLogic.Current.WriteLog(ex);
+ return null;
+ }
}
#endregion
@@ -184,7 +204,13 @@
/// <param name="zbGateway">缃戝叧</param>
/// <param name="mode">鏄惁鏄剧ず閿欒</param>
public async Task<bool> AddNewGateway(ZbGateway zbGateway, ShowErrorMode mode)
- {
+ {
+ //璁剧疆缃戝叧鐨勭粡绾害
+ bool falge = this.SetGatewaySite(zbGateway, Common.Config.Instance.Home.Longitude, Common.Config.Instance.Home.Latitude, ShowErrorMode.NO);
+ if (falge == false)
+ {
+ return falge;
+ }
//鎵ц娣诲姞缃戝叧鍒板唴瀛�
var result = await this.DoAddGatewayToMemory(zbGateway, mode);
//鍓嶇殑缃戝叧缁戝畾鍦ㄤ簡褰撳墠璐﹀彿涓嬬殑涓嶅悓浣忓畢閲岄潰
@@ -202,7 +228,7 @@
}
return false;
}
- if (result != 1)
+ if (result == -1)
{
return false;
}
@@ -405,6 +431,7 @@
/// 閲嶆柊缁戝畾缃戝叧(1:姝e父 -1:寮傚父 0:褰撳墠鐨勭綉鍏崇粦瀹氬湪浜嗗綋鍓嶈处鍙蜂笅鐨勪笉鍚屼綇瀹呴噷闈�)
/// </summary>
/// <param name="zbGateway">缃戝叧</param>
+ /// <param name="btnMsg">娑堟伅鎺т欢</param>
public async Task<int> ReBindNewGateway(ZbGateway zbGateway, NormalViewControl btnMsg = null)
{
if (zbGateway == null)
@@ -412,6 +439,12 @@
//閿欒:缃戝叧瀵硅薄涓㈠け
string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
this.ShowTipMsg(msg);
+ return -1;
+ }
+ //璁剧疆缃戝叧鐨勭粡绾害
+ bool falge = this.SetGatewaySite(zbGateway, Common.Config.Instance.Home.Longitude, Common.Config.Instance.Home.Latitude, ShowErrorMode.YES);
+ if (falge == false)
+ {
return -1;
}
@@ -451,7 +484,7 @@
btnMsg.TextID = R.MyInternationalizationString.uGatewayDataIsChangingPleaseWhait;
});
}
- await System.Threading.Tasks.Task.Delay(8000);
+ await Task.Delay(8000);
//鑾峰彇缃戝叧鐨勪俊鎭�
var result = await zbGateway.GetZbGwInfoAsync();
@@ -463,15 +496,7 @@
return -1;
}
- if (result == null)
- {
- //鑾峰彇缃戝叧淇℃伅澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayInfoFail);
- this.ShowTipMsg(msg);
- return -1;
- }
-
- if (result.getGwData == null)
+ if (result == null || result.getGwData == null)
{
//鑾峰彇缃戝叧淇℃伅澶辫触
string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayInfoFail);
@@ -639,10 +664,10 @@
}
//鑾峰彇鍏ㄩ儴璁惧
- bool result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay);
+ int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay);
//鍏抽棴杩涘害鏉�
ProgressBar.Close();
- if (result == false)
+ if (result == -1)
{
return false;
}
@@ -691,15 +716,15 @@
bool result = await this.SetHomeIdToGateway(realWay, string.Empty);
if (result == false)
{
- //缃戝叧瑙g粦澶辫触
+ //缃戝叧瑙g粦澶辫触 涓嶇悊瀹�,鍥犱负缃戝叧鍙互鎸夋寜閿己鍒舵悳绱㈠緱鍒�
string msg = Language.StringByID(R.MyInternationalizationString.uGatewayUnBindFail);
- this.ShowErrorMsg(msg);
- return false;
+ //this.ShowErrorMsg(msg);
+ //return false;
}
}
//鍒犻櫎浜戠鐨勭綉鍏�
- await Phone.UserCenter.HdlGatewayLogic.Current.DeleteDataBaseGateway(zbGatewayID);
+ await this.DeleteDataBaseGateway(zbGatewayID);
//鍒犻櫎缃戝叧鏂囦欢
this.DeleteGatewayFile(zbGatewayID);
@@ -707,7 +732,7 @@
//绉婚櫎
ZbGateway.GateWayList.RemoveAll((obj) => this.GetGatewayId(obj) == zbGatewayID);
//鏂紑mqtt杩炴帴
- realWay.DisConnect("GD");
+ realWay.DisConnectLocalMqttClient("GD");
return true;
}
@@ -740,18 +765,21 @@
{
//鍒犻櫎璁惧鏂囦欢
Common.LocalDevice.Current.DeleteMemmoryDevice(device, true);
+ //鍒犻櫎Ota璁惧
+ Common.LocalDevice.Current.DeleteMemmoryOtaDevice(device.DeviceAddr);
}
//濡傛灉鏄富缃戝叧
if (this.IsMainGateway(zbGatewayID) == 1)
{
- foreach (var room in Shared.Common.Room.Lists)
+ var listAllRoom = UserCenter.HdlRoomLogic.Current.GetAllListRooms();
+ foreach (var room in listAllRoom)
{
//鍒犻櫎鍦烘櫙鏂囦欢
- foreach (var scene in room.SceneUIFilePathList)
+ foreach (var sceneId in room.ListSceneId)
{
- if (Global.IsExistsByHomeId(scene) == true)
+ if (Global.IsExistsByHomeId($"Scene_{sceneId}.json") == true)
{
- Global.DeleteFilebyHomeId(scene);
+ Global.DeleteFilebyHomeId($"Scene_{sceneId}.json");
}
}
}
@@ -1556,7 +1584,7 @@
//鏈�鍚庡啀鏂紑mqtt杩炴帴
for (int i = 0; i < list.Count; i++)
{
- list[i].DisConnect("G");
+ list[i].DisConnectLocalMqttClient("G");
}
list.Clear();
}
@@ -1609,8 +1637,11 @@
this.GetGwInfoAttribute(localWay, "ZbImageType").ToString(),
Convert.ToInt32(this.GetGwInfoAttribute(localWay, "ZbFWVersion")));
+ var list = new List<FirmwareVersionInfo>();
+ list.Add(gatewayFirmware);
+ list.Add(coordinatorFirmware);
+
//杩欎釜缃戝叧闇�瑕佹湁铏氭嫙椹卞姩杩欎釜涓滆タ鎵嶈
- FirmwareVersionInfo virtualFirmware = null;
string linImage = this.GetGwInfoAttribute(localWay, "LinuxImageType").ToString();
if (linImage != "6")
{
@@ -1618,28 +1649,32 @@
var listvVode = await HdlGatewayLogic.Current.GetListVDDriveCode(localWay);
if (listvVode != null && listvVode.Count > 0)
{
- //娣诲姞铏氭嫙椹卞姩鐨勫崌绾у浐浠�(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
- flage = await HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice,
- listvVode[0].DriveHwVersion.ToString(),
- listvVode[0].DriveImageType.ToString());
-
- //铏氭嫙椹卞姩
- virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.VirtualDevice,
- listvVode[0].DriveHwVersion.ToString(),
- listvVode[0].DriveImageType.ToString(),
- listvVode[0].DriveFwVersion);
-
- if (virtualFirmware != null)
+ foreach (var data in listvVode)
{
- virtualFirmware.VirtualCode = listvVode[0].DriveCode;
+ //娣诲姞铏氭嫙椹卞姩鐨勫崌绾у浐浠�(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
+ flage = await HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice,
+ data.DriveHwVersion.ToString(),
+ data.DriveImageType.ToString());
+
+ //铏氭嫙椹卞姩
+ var virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.VirtualDevice,
+ data.DriveHwVersion.ToString(),
+ data.DriveImageType.ToString(),
+ data.DriveFwVersion);
+
+ if (virtualFirmware != null)
+ {
+ virtualFirmware.VirtualCode = data.DriveCode;
+ list.Add(virtualFirmware);
+ }
}
}
}
- var list = new List<FirmwareVersionInfo>();
- list.Add(gatewayFirmware);
- list.Add(coordinatorFirmware);
- list.Add(virtualFirmware);
-
+ if (list.Count == 2)
+ {
+ //铏氭嫙椹卞姩濡傛灉娌℃湁鏂扮増鏈殑璇濓紝鍥哄畾娣诲姞涓�涓┖鐨�
+ list.Add(null);
+ }
return list;
}
@@ -1830,7 +1865,15 @@
return;
}
var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 85 } };
- realWay.Send("GwLinuxLocate_Respon", jObject.ToString());
+ if (this.IsGatewayExist(zbGateway) == true)
+ {
+ realWay.Send("GwLinuxLocate_Respon", jObject.ToString());
+ }
+ else
+ {
+ //濡傛灉杩欎釜缃戝叧杩樻病鏈夌粦瀹氱殑璇濓紝鍒欏己鍒朵娇鐢ㄦ湰鍦拌繛鎺�
+ realWay.SendLocation("GwLinuxLocate_Respon", System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+ }
}
#endregion
@@ -2119,7 +2162,7 @@
bool canBreak = false;
HdlThreadLogic.Current.RunThread(async () =>
{
- List<string> list = new List<string>() { "NotSetAgain" };
+ List<string> list = new List<string>() { "NotSetAgain", "NotCheck" };
//璁剧疆璁块棶鎺ュ彛鐨勫弬鏁�
var pra = new GetGatewayPra();
@@ -2170,15 +2213,19 @@
/// <param name="gateway">缃戝叧瀵硅薄</param>
/// <param name="Longitude">缁忓害</param>
/// <param name="Latitude">缁村害</param>
+ /// <param name="mode">鏄剧ず閿欒</param>
/// <returns></returns>
- public bool SetGatewaySite(ZbGateway gateway, double Longitude, double Latitude)
+ public bool SetGatewaySite(ZbGateway gateway, double Longitude, double Latitude, ShowErrorMode mode)
{
ZbGateway realWay = null;
if (this.GetRealGateway(ref realWay, gateway) == false)
{
- //閿欒:缃戝叧瀵硅薄涓㈠け
- string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
- this.ShowTipMsg(msg);
+ if (mode == ShowErrorMode.YES)
+ {
+ //閿欒:缃戝叧瀵硅薄涓㈠け
+ string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
+ this.ShowTipMsg(msg);
+ }
return false;
}
@@ -2203,7 +2250,15 @@
var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 2013 } };
var data = new Newtonsoft.Json.Linq.JObject { { "Longitude", intLongitude }, { "Latitude", intLatitude } };
jObject.Add("Data", data);
- realWay.Send("Logic/SetSite", jObject.ToString());
+ if (this.IsGatewayExist(gateway) == true)
+ {
+ realWay.Send("Logic/SetSite", jObject.ToString());
+ }
+ else
+ {
+ //濡傛灉杩欎釜缃戝叧杩樻病鏈夌粦瀹氱殑璇濓紝鍒欏己鍒朵娇鐢ㄦ湰鍦拌繛鎺�
+ realWay.SendLocation("Logic/SetSite", System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+ }
int TimeOut = 0;
while (result == -1 && TimeOut < 30)
@@ -2215,13 +2270,16 @@
realWay.Actions -= action;
if (result != 0)
{
- //璁剧疆缃戝叧缁忕含搴﹀け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uSetGatewaySiteFail);
- if (result == -1)
+ if (mode == ShowErrorMode.YES)
{
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
+ //璁剧疆缃戝叧缁忕含搴﹀け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uSetGatewaySiteFail);
+ if (result == -1)
+ {
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
+ }
+ this.ShowTipMsg(msg);
}
- this.ShowTipMsg(msg);
return false;
}
@@ -2243,7 +2301,7 @@
//鑾峰彇鎺у埗涓讳汉璐﹀彿鐨凾oken
Pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
- List<string> listNotShowError = new List<string>() { "NoExist", "NoBind", "NoRecord" };
+ List<string> listNotShowError = new List<string>() { "NoExist", "NoBind", "NoRecord", "NotSetAgain" };
bool result = await UserCenterLogic.GetResultStatuByRequestHttps("App/ReleaseGatewayToHome", true, Pra, listNotShowError);
if (result == false)
@@ -2345,27 +2403,27 @@
/// <returns></returns>
public async Task<bool> UpLoadDeviceBackupDataToGateway(CommonDevice device, GatewayBackupEnum backupEnum, object upLaodData)
{
- //ZbGateway realWay = null;
- //if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
- //{
- // //娌℃湁鎵惧埌鐪熷疄鐗╃悊缃戝叧
- // return false;
- //}
- //string fileName = device.FilePath + ((int)backupEnum).ToString().PadLeft(5, '0');
- ////鍒涘缓鏂囦欢瀵硅薄
- //var result = await realWay.CreateFileAsync(fileName);
- //if (result == null || result.Result != 0)
- //{
- // return false;
- //}
- ////鍙戦�佹暟鎹祦
- //var data = Newtonsoft.Json.JsonConvert.SerializeObject(upLaodData);
- //var byteData = System.Text.Encoding.UTF8.GetBytes(data);
- //var result2 = await realWay.SendFileAsync(byteData);
- //if (result2 == null || result2.Result != 0)
- //{
- // return false;
- //}
+ ZbGateway realWay = null;
+ if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
+ {
+ //娌℃湁鎵惧埌鐪熷疄鐗╃悊缃戝叧
+ return false;
+ }
+ string fileName = device.FilePath + ((int)backupEnum).ToString().PadLeft(5, '0');
+ //鍒涘缓鏂囦欢瀵硅薄
+ var result = await realWay.CreateFileAsync(fileName);
+ if (result == null || result.Result != 0)
+ {
+ return false;
+ }
+ //鍙戦�佹暟鎹祦
+ var data = Newtonsoft.Json.JsonConvert.SerializeObject(upLaodData);
+ var byteData = System.Text.Encoding.UTF8.GetBytes(data);
+ var result2 = await realWay.SendFileAsync(byteData);
+ if (result2 == null || result2.Result != 0)
+ {
+ return false;
+ }
return true;
}
@@ -2512,7 +2570,7 @@
else if (backType == GatewayBackupEnum.APir鐏厜閰嶇疆)
{
var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone.ConfigureParamates>(System.Text.Encoding.UTF8.GetString(byteData));
- result = await HdlDevicePirSensorLogic.Current.SetPirSensorLightSettion((IASZone)device, recoverData);
+ result = await HdlDevicePirSensorLogic.Current.SetPirSensorSettion((IASZone)device, recoverData);
}
else if (backType == GatewayBackupEnum.A骞叉帴鐐归鑹茶皟鑺�)
{
@@ -2534,10 +2592,10 @@
int level = Convert.ToInt32(recoverData["level"]);
result = await HdlDevicePanelLogic.Current.SetDeviceEnergyConservationMode((Panel)device, modeEnable, modeTime, level);
}
- else if (backType == GatewayBackupEnum.A骞叉帴鐐圭鏈夊睘鎬�)
+ else if (backType == GatewayBackupEnum.A骞叉帴鐐圭涓夌骇鍒鏈夊睘鎬�)
{
var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(System.Text.Encoding.UTF8.GetString(byteData));
- result = await HdlDevicePanelLogic.Current.EditorDryContactFunction((Panel)device, recoverData);
+ result = await HdlDevicePanelLogic.Current.EditorDryContactThirdFunction((Panel)device, recoverData);
}
else if (backType == GatewayBackupEnum.A绐楀笜鏂瑰悜)
{
--
Gitblit v1.8.0