duheng
2024-03-27 d32fea3dd2990d8a10b48cb757439d672893e5c7
WebApi/ÖÚÒãµ÷¶È/ZyConnectHelper.cs
@@ -27,111 +27,7 @@
        /// </summary>
        //static string _url_root = "ws://localhost:40001";
        //static string _url_prj = "ws://localhost:8001";
        static string _url_root = "ws://192.168.201.17:40001";
        // static string _url_prj = "ws://192.168.201.17:8001";
        static string _url_prj = "ws://192.168.3.152:8001";
        /// <summary>
        /// æäº¤è°ƒåº¦é¡¹ç›®
        /// </summary>
        /// <param name="currentViewPrj"></param>
        /// <param name="cbSuccess"></param>
        /// <param name="cbFail"></param>
        /// <returns></returns>
        public static async Task<string> SubmitPrj(IStation.CalcModel.AnaPrj currentViewPrj)
        {
            if (isDebug)
            {
                return "  is isDebug";
            }
            if (currentViewPrj == null)
            {
                return "currentViewPrj is null";
            }
            IStation.ZyDto.SubmitPrj dto_prj = new ZyDto.SubmitPrj();
            if (string.IsNullOrEmpty(currentViewPrj.ID))
            {
                var time = DateTime.Now;
                currentViewPrj.ID = $"{time.Year}{time.Month}{time.Day}{time.Hour}{time.Minute}{time.Second}";
            }
            dto_prj.schemeID = currentViewPrj.ID;
            dto_prj.Day = currentViewPrj.StartTime.ToString("yyyy-MM-dd");
            dto_prj.Items = new List<ZyDto.SubmitPrjItem>();
            foreach (var bt in currentViewPrj.BlockTimes)
            {
                if (bt.OpenPumpCount == 0)
                    continue;
                ZyDto.SubmitPrjItem dto_item = new ZyDto.SubmitPrjItem();
                dto_item.StartTime = bt.StartTime;
                dto_item.EndTime = bt.EndTime;
                dto_item.OpenPumpCount = bt.OpenPumpCount;
                dto_prj.Items.Add(dto_item);
            }
            var ws = new ClientWebSocket();
            await ws.ConnectAsync(new Uri(_url_prj), CancellationToken.None);
            if (ws.State != WebSocketState.Open)
            {
                return "WebSocketState is close";
            }
            var inputJson = JsonHelper.Object2Json(dto_prj);
            var inputBytes = Encoding.UTF8.GetBytes(inputJson);
            IStation.LogHelper.Info(inputJson);
            await ws.SendAsync(new ArraySegment<byte>(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None);
            try
            {
                List<byte> outputBytes = new List<byte>();//全部消息容器
                var buffer = new byte[1024 * 4];//缓冲区
                var result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); //监听Socket信息
                while (!result.CloseStatus.HasValue)  //是否关闭
                {
                    if (result.MessageType == WebSocketMessageType.Text)//文本消息
                    {
                        outputBytes.AddRange(buffer.Take(result.Count));
                        if (result.EndOfMessage)//消息是否已接收完全
                        {
                            //发送过来的消息
                            string outputJson = Encoding.UTF8.GetString(outputBytes.ToArray(), 0, outputBytes.Count);
                            var outPrj = JsonHelper.Json2Object<OutPrj>(outputJson);
                            if (outPrj == null)
                                return "return is null";
                            if (outPrj.result == 1)
                            {
                                //cbSuccess.Invoke(outPrj.schemeID);
                            }
                            else
                            {
                                return "outPrj result:" + outPrj.result;
                            }
                        }
                    }
                    // result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//继续监听Socket信息
                }
            }
            catch (Exception ex)
            {
                IStation.LogHelper.WriteError("Error:101", ex);
                return "ex:" + ex.Message;
            }
            finally
            {
                try
                {
                    //关闭WebSocket
                    await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None);
                }
                catch (Exception ex)
                {
                    IStation.LogHelper.WriteError("Error:111", ex);
                    // return "ex:" + ex.Message;
                }
                ws.Abort();
                ws.Dispose();
            }
            return null;
        }
        public static string _url_root = "ws://192.168.201.17:40001";
        /// <summary>
@@ -417,7 +313,7 @@
        /// <param name="endTime">结束时间</param>
        /// <param name="resolution">时间步长,默认300秒</param>
        /// <returns></returns>
        public static async Task<List<IStation.ZyDto.MonitorRecord>> GetRealRiverWaterLevel(DateTime startTime, DateTime endTime, string resolution = "300")
        public static async Task<List<IStation.ZyModel.MonitorRecord>> GetRealRiverWaterLevel(DateTime startTime, DateTime endTime, string resolution = "300")
        {
            var tag = "_0402010204089903001";
            var input = new ScadaDispatchInput
@@ -681,7 +577,7 @@
        /// èŽ·å–å®žæ—¶æ•°æ®å­—å…¸
        /// </summary> 
        /// <returns></returns>
        public static async Task<List<RealScadaRecord>> GetRealScadaResult(List<string> tags, object input)
        public static async Task<List<ZyModel.RealScadaRecord>> GetRealScadaResult(List<string> tags, object input)
        {
            if (tags == null || !tags.Any())
                return default;
@@ -694,7 +590,7 @@
                return default;
            }
            var realScadaRecordList = new List<RealScadaRecord>();
            var realScadaRecordList = new List<ZyModel.RealScadaRecord>();
            var inputJson = JsonHelper.Object2Json(input);
            var inputBytes = Encoding.UTF8.GetBytes(inputJson);
            await ws.SendAsync(new ArraySegment<byte>(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None);
@@ -720,7 +616,7 @@
                                    var tag = dict.Value.keys.Trim();
                                    if (tags.Contains(tag))
                                    {
                                        var data = new RealScadaRecord();
                                        var data = new ZyModel.RealScadaRecord();
                                        data.TagName = tag;
                                        if (double.TryParse(dict.Value.vals, out double value))
@@ -763,7 +659,7 @@
        /// èŽ·å–å®žæ—¶æ•°æ®å­—å…¸
        /// </summary>  
        /// <returns></returns>
        public static async Task<List<RealScadaData>> GetRealScadaResult(ScadaDispatchInput input)
        public static async Task<List<ZyModel.RealScadaData>> GetRealScadaResult(ScadaDispatchInput input)
        {
            if (input == null)
                return default;
@@ -773,7 +669,7 @@
            {
                return default;
            }
            var realScadaDataList = new List<RealScadaData>();
            var realScadaDataList = new List<ZyModel.RealScadaData>();
            var inputJson = JsonHelper.Object2Json(input);
            var inputBytes = Encoding.UTF8.GetBytes(inputJson);
            await ws.SendAsync(new ArraySegment<byte>(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None);
@@ -796,12 +692,12 @@
                            {
                                foreach (var dict in scadaDict)
                                {
                                    var data = new RealScadaData();
                                    var data = new ZyModel.RealScadaData();
                                    data.TagName = dict.Key;
                                    data.MonitorRecords = new List<IStation.ZyDto.MonitorRecord>();
                                    data.MonitorRecords = new List<IStation.ZyModel.MonitorRecord>();
                                    foreach (var item in dict.Value)
                                    {
                                        var record = new IStation.ZyDto.MonitorRecord();
                                        var record = new IStation.ZyModel.MonitorRecord();
                                        record.Time = item.Key;
                                        if (double.TryParse(item.Value, out double value))
                                        {
@@ -1064,33 +960,6 @@
        }
        /// <summary>
        ///
        /// </summary>
        public class RealScadaData
        {
            /// <summary>
            ///
            /// </summary>
            public string TagName { get; set; }
            /// <summary>
            ///
            /// </summary>
            public List<IStation.ZyDto.MonitorRecord> MonitorRecords { get; set; }
        }
        /// <summary>
        ///
        /// </summary>
        public class RealScadaRecord
        {
            /// <summary>
            ///
            /// </summary>
            public string TagName { get; set; }
            /// <summary>
            ///
            /// </summary>
            public double Value { get; set; }
        }
    }
}