wxr
2022-05-26 f75a1ba69f5922cab8d2ab43f4447b74bd9b9ea9
HDL_ON/DAL/DriverLayer/Control.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using HDL_ON.UI;
using Shared;
@@ -25,7 +26,7 @@
    public class Control
    {
        static Control _control;
        public static Control Ins
        {
@@ -93,7 +94,7 @@
            }
            set
            {
                if (_GatewayOnline_Local != value)
                //if (_GatewayOnline_Local != value)
                {
                    _GatewayOnline_Local = value;
                    if (value)
@@ -128,7 +129,7 @@
            }
            set
            {
                if (_GatewayOnline_Cloud != value)
                //if (_GatewayOnline_Cloud != value)
                {
                    _GatewayOnline_Cloud = value;
                    if(GatewayOnline_Local)
@@ -359,10 +360,11 @@
        /// <param name="function"></param>
        /// <param name="useRemote">是否直接使用远程发送</param>
        /// <returns></returns>
        public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
        public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
        {
            function.controlCounter++;
            function.refreshTime = DateTime.Now;
            //如果是控制调光的开时,亮度值不能为0
            if (commandDictionary.Count > 2)
@@ -403,7 +405,7 @@
                upDataObj.objects.Add(asd);
                revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj);
                UpdataFunctionStatus(revString, null, true);
                return;
                return true;
            }
@@ -458,6 +460,7 @@
                        var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
                        new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id,resend);
                        MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}");
                        //Control.Ins.MsgInfoList.Add($"本地通讯 发送HDL-Link数据:{functionControlDataJson}"+"\r\n");
                    }
                }
                //远程通讯
@@ -492,6 +495,8 @@
                }
            }
            return true;
        }
        /// <summary>
        /// 全开全关功能
@@ -651,6 +656,79 @@
        }
        /// <summary>
        /// 发送读取命令
        /// 自动判断是否为A协议设备
        /// </summary>
        public void SendReadCommand(List<Function> functions, bool forceRemote = false)
        {
            List<string> sids = new List<string>();
            foreach (Function function in functions)
            {
                sids.Add(function.sid);
                function.refreshTime = DateTime.Now;
            }
            if (forceRemote)
            {
                var pm = new DAL.Server.HttpServerRequest();
                var pack = pm.RefreshDeviceStatus(sids);
            }
            else
            {
                if (Ins.GatewayOnline_Local)
                {
                    if (DB_ResidenceData.Instance.GatewayType == 0)
                    {
                        try
                        {
                            var busClient = new Control_Udp();
                            foreach (Function function in functions)
                            {
                                busClient.ReadBusData(function);
                            }
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"发送数据异常: {ex.Message}");
                        }
                    }
                    else
                    {
                        var objects = new List<Dictionary<string, string>>();
                        foreach (Function function in functions)
                        {
                            var readKey = new Dictionary<string, string>();
                            readKey.Add("sid", function.sid);
                            objects.Add(readKey);
                        }
                        var readDataObj = new AlinkReadFunctionStatusObj()
                        {
                            id = Ins.msg_id.ToString(),
                            objects = objects,
                            time_stamp = Utlis.GetTimestamp()
                        };
                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
                        var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                        MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}");
                        new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
                    }
                }
                else
                {
                    var pm = new DAL.Server.HttpServerRequest();
                    var pack = pm.RefreshDeviceStatus(sids);
                }
            }
        }
        /// <summary>
        /// 安防控制
        /// </summary>
        public void ControlSecurity(SecurityAlarm securityAlarm,string state)
@@ -662,7 +740,7 @@
                 gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId,
                  sid = securityAlarm.sid, status = state, userSecurityId = securityAlarm.userSecurityId
                } });
                MainPage.Log($"安防控制结果:{result.Code}");
                MainPage.Log($"安防控制结果:code:{result.Code};msg:{result.message}");
            }
            else
            {
@@ -768,8 +846,8 @@
            topicAndLengthBytes.CopyTo(sendDataBytes, 0);
            bodyBytes.CopyTo(sendDataBytes, topicAndLengthBytes.Length);
            //var sendDataString = Encoding.UTF8.GetString(sendDataBytes);
            //MainPage.Log($"转换HDL-Link数据\r\n{sendDataString}\r\n");
            var sendDataString = Encoding.UTF8.GetString(sendDataBytes);
            MainPage.Log($"转换HDL-Link数据\r\n{sendDataString}\r\n");
            //***************************************************************
            return sendDataBytes;
@@ -865,7 +943,7 @@
                if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast)
                {
                    var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]);
                    if (bodyJObj == null)
                    {
@@ -947,6 +1025,7 @@
        /// <summary>
        /// 更新设备状态
        /// A协议数据
        /// Tag Link状态处理
        /// </summary>
        /// <param name="updateBytes"></param>
        public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false)
@@ -979,9 +1058,10 @@
                        var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
                        if (localFunction == null)
                        {
                            Console.WriteLine("找不到音乐播放器添=======" + revString);
                            continue;
                        }
                        MainPage.Log(localFunction.name);
                        if (Ins.GatewayOnline_Local && isCloudData)//本地链接,除了涂鸦设备数据之外的云端数据不处理
                        {
                            if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk) && !SPK.MusicSpkList().Contains( localFunction.spk))
@@ -1006,7 +1086,7 @@
                        {
                            localFunction.time_stamp = temp.time_stamp;
                            localFunction.SetAttrState(attr.key, attr.value);
                            Console.WriteLine("音乐播放器添加缓存数据=======" + revString);
                            //Console.WriteLine("音乐播放器添加缓存数据=======" + revString);
                        }
@@ -1060,6 +1140,10 @@
                                RollingShutterPage.UpdataState(localFunction);
                                break;
                            case SPK.CurtainShades:
                                break;
                            case SPK.HvacCac:
                                Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
                                break;
                            case SPK.AcStandard:
                            case SPK.HvacAC:
@@ -1185,6 +1269,7 @@
                            case SPK.AirFreshStandard:
                            case SPK.HvacAirFresh:
                            case SPK.SensorGas:
                            case SPK.SensorHelp:
                                //设备状态推送
                                //状态更新
                                Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
@@ -1192,7 +1277,7 @@
                            case SPK.AvMusic:
                            case SPK.MusicStandard:
                                //UI.Music.MusicMain.mMusicMain.RefreshView(updateTemp);
                                Console.WriteLine("音乐播放器显示状态======="+ revString);
                                //Console.WriteLine("音乐播放器显示状态======="+ revString);
                                //wjc
                                break;
                        }
@@ -1211,5 +1296,110 @@
            }
        }
        #region 门锁
        /// <summary>
        /// //一键(远程)开锁
        /// </summary>
        public void OneKeyUnlocking(Function doorlock,string extStr)
        {
            if (Ins.GatewayOnline_Local)
            {
                Dictionary<string, string> dic = new Dictionary<string, string>();
                var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID,extStr);
                var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
                var sendBytes = Ins.ConvertSendBodyData($"/base/{Control.Ins.GatewayId}/thing/service/doorRemoteOpen/down", functionControlDataJson);
                new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 0);
            }
            else
            {
                ConfirmUnlocking(doorlock.deviceId, extStr);
            }
        }
        /// <summary>
        /// 确认开锁
        /// </summary>
        /// <param name="functionId"></param>
        /// <param name="pwd"></param>
        public void ConfirmUnlocking(string functionId,string pwd)
        {
            Loading loading = new Loading();
            MainPage.BaseView.AddChidren(loading);
            loading.BackgroundColor = 0x88000000;
            loading.LodingBackgroundColor = UI.CSS.CSS_Color.BackgroundColor;
            loading.Start(Language.StringByID(StringId.PleaseWait));
            new System.Threading.Thread(() =>
            {
                try
                {
                    Dictionary<string, object> d = new Dictionary<string, object>();
                    d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
                    d.Add("deviceId", functionId);
                    d.Add("pwd", pwd);
                    var requestJson = HttpUtil.GetSignRequestJson(d);
                    var pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/pwdConfirm", requestJson);
                    if (pack.Code == StateCode.SUCCESS)
                    {
                        Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(pack.Data.ToString());
                        var scrip = pairs.GetValue("scrip");
                        d = new Dictionary<string, object>();
                        d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
                        d.Add("deviceId", functionId);
                        d.Add("scrip", scrip);
                        requestJson = HttpUtil.GetSignRequestJson(d);
                        pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/remoteOpen", requestJson);
                        //if(pack.Code == StateCode.SUCCESS)
                        //{
                        //    return true;
                        //}
                        //else
                        //{
                        //    return false;
                        //}
                        if (pack.Code != StateCode.SUCCESS) {
                            Application.RunOnMainThread(() => {
                                new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message);
                                UserInfo.Current.doorPasswordString = "";//
                                UserInfo.Current.LastTimeOpenDoor = DateTime.MinValue;
                            });
                        }
                    }
                    if (pack.Code != StateCode.SUCCESS)
                    {
                        Application.RunOnMainThread(() => {
                            if(string.IsNullOrEmpty(pack.message))
                            {
                                new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip),
                                    Language.StringByID(StringId.OperationFailed));
                            }
                            else
                            {
                                new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message);
                            }
                        });
                    }
                }
                catch (Exception ex)
                {
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        loading.Hide();
                        loading.RemoveFromParent();
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        //密码冻结
        //密码验证
        #endregion
    }
}
}