duheng
2024-03-28 6c93aedfeeb66023f9506083517aee1a4e18e24d
WebApi/ÖÚÒãµ÷¶È/ZyConnectHelper.cs
@@ -342,27 +342,11 @@
        /// <param name="endTime">结束时间</param>
        /// <param name="resolution">时间步长,默认300秒</param>
        /// <returns></returns>
        public static async Task<List<ZyDto.PumpIsopen>> GetPumpOpenStatusBySingleDay(DateTime StartTime,   string resolution = "300")
        public static async Task<List<ZyModel.RealScadaData>> GetPumpOpenStatusBySingleDay(DateTime StartTime,   string resolution = "300")
        {
            List<IsOpen> listopen = new List<IsOpen> {
            new IsOpen
            {
                DateTime = DateTime.Now.AddDays(1),
                Isopen = "0"
            }
             };
            List<PumpIsopen> pumpIsopens = new List<PumpIsopen> {
               new PumpIsopen
            {
                Tag = "_0402010204012101001",
                Values = listopen
            }
        };
            if (isDebug)
            {
                return pumpIsopens;
                return null;
            }
            var tagDict = new Dictionary<string, string>
            {
@@ -380,89 +364,11 @@
                Resolution = resolution,
                taglist = tagDict.Select(x => x.Key).ToArray()
            };
            var realScadaDataList = await GetRealScadaResultSate(input);
            var realScadaDataList = await GetRealScadaResult(input);
            return realScadaDataList;
        }
        /// <summary>
        /// èŽ·å–å®žæ—¶æ•°æ®å­—å…¸
        /// èŽ·å–å¼€æœºçŠ¶æ€
        /// </summary>
        /// <returns></returns>
        public static async Task<List<ZyDto.PumpIsopen>> GetRealScadaResultSate(ScadaDispatchInput input)
        {
            if (input == null)
                return default;
            var ws = new ClientWebSocket();
            await ws.ConnectAsync(new Uri(_url_root), CancellationToken.None);
            if (ws.State != WebSocketState.Open)
            {
                return default;
            }
            var realScadaDataList = new List<PumpIsopen>();
            var inputJson = JsonHelper.Object2Json(input);
            var inputBytes = Encoding.UTF8.GetBytes(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 scadaDict = JsonHelper.Json2Object<Dictionary<string, Dictionary<DateTime, string>>>(outputJson);
                            if (scadaDict != null && scadaDict.Any())
                            {
                                foreach (var dict in scadaDict)
                                {
                                    var data = new PumpIsopen();
                                    data.Tag = dict.Key;
                                    foreach (var item in dict.Value)
                                    {
                                        var State = new IsOpen();
                                        State.DateTime = item.Key;
                                        State.Isopen = item.Value;
                                        data.Values.Add(State);
                                    }
                                    realScadaDataList.Add(data);
                                }
                            }
                            break;
                        }
                    }
                    result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//继续监听Socket信息
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                try
                {
                    //关闭WebSocket
                    await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                ws.Abort();
                ws.Dispose();
            }
            return realScadaDataList;
        }
        /// <summary>
@@ -472,7 +378,7 @@
        /// <param name="EndTime"></param>
        /// <param name="resolution"></param>
        /// <returns></returns>
        public static async Task<List<ZyDto.PumpTotalelectricity>> GetPumpTotalElectricity(DateTime StartTime, DateTime EndTime, string resolution = "300")
        public static async Task<List<ZyModel.RealScadaData>> GetPumpTotalElectricity(DateTime StartTime, DateTime EndTime, string resolution = "300")
        {
            var tagDict = new Dictionary<string, string>
            {
@@ -490,85 +396,9 @@
                Resolution = resolution,
                taglist = tagDict.Select(x => x.Key).ToArray()
            };
            var realScadaDataList = await GetRealScadaResultElectricity(input);
            var realScadaDataList = await GetRealScadaResult(input);
            return realScadaDataList;
        }
        /// <summary>
        /// èŽ·å–å®žæ—¶æ•°æ®å­—å…¸
        /// ç”¨ç”µé‡
        /// </summary>
        /// <returns></returns>
        public static async Task<List<ZyDto.PumpTotalelectricity>> GetRealScadaResultElectricity(ScadaDispatchInput input)
        {
            if (input == null)
                return default;
            var ws = new ClientWebSocket();
            await ws.ConnectAsync(new Uri(_url_root), CancellationToken.None);
            if (ws.State != WebSocketState.Open)
            {
                return default;
            }
            var realScadaDataList = new List<PumpTotalelectricity>();
            var inputJson = JsonHelper.Object2Json(input);
            var inputBytes = Encoding.UTF8.GetBytes(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 scadaDict = JsonHelper.Json2Object<Dictionary<DateTime, double>>(outputJson);
                            if (scadaDict != null && scadaDict.Any())
                            {
                                foreach (var dict in scadaDict)
                                {
                                    var data = new PumpTotalelectricity();
                                    data.DateTime = dict.Key;
                                    data.value = dict.Value;
                                    realScadaDataList.Add(data);
                                }
                            }
                            break;
                        }
                    }
                    result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//继续监听Socket信息
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                try
                {
                    //关闭WebSocket
                    await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                ws.Abort();
                ws.Dispose();
            }
            return realScadaDataList;
        }