From 5c115de7bf2f1072ea2721fc00e68a53c2b83c2e Mon Sep 17 00:00:00 2001 From: tangxu <tangxu76880903> Date: 星期三, 27 三月 2024 09:57:34 +0800 Subject: [PATCH] 添加众毅计算接口 --- WebApi/Controllers/TotalWaterInController.cs | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 209 insertions(+), 17 deletions(-) diff --git a/WebApi/Controllers/TotalWaterInController.cs b/WebApi/Controllers/TotalWaterInController.cs index f7adf50..842c951 100644 --- a/WebApi/Controllers/TotalWaterInController.cs +++ b/WebApi/Controllers/TotalWaterInController.cs @@ -1,13 +1,20 @@ 锘縰sing IStation.Common; using IStation.Dto; +using IStation.ZyDto; +using Microsoft.Ajax.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; +using System.Net.WebSockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; using System.Web; using System.Web.Http; using System.Web.UI.WebControls; +using static IStation.ZyConnectHelper; namespace IStation.WebApi.Controllers { @@ -18,32 +25,131 @@ public class TotalWaterInController : ApiController { /// <summary> + /// + /// </summary> + /// <param name="day"></param> + /// <returns></returns> + [Route("Test1")] + [HttpGet] + public async Task<IStation.Dto.ApiResult> Test1() + { + var sum = await ZyConnectHelper.async_debug(); + return new IStation.Dto.ApiResult<double>(sum); + } + + /// <summary> + /// + /// </summary> + /// <param name="day"></param> + /// <returns></returns> + [Route("Test2")] + [HttpGet] + public IStation.Dto.ApiResult Test2() + { + var sum = ZyConnectHelper.async_debug().GetAwaiter().GetResult() ; + return new IStation.Dto.ApiResult<double>(sum); + } + + /// <summary> + /// + /// </summary> + /// <param name="day"></param> + /// <returns></returns> + [Route("GetByDayDebug")] + [HttpGet] + public IStation.Dto.ApiResult GetByDayDebug(string day) + { + if (day == null) + { + return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day null" }; + } + if (!DateTime.TryParse(day, out DateTime dayD)) + { + return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day 鏍煎紡涓嶆纭�" }; + } + if (dayD > DateTime.Today) + { + return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈兘鏌ヨ浠婃棩鐨勬暟鎹�" }; + } + + var sum = ZyConnectHelper.GetTotalWaterByDay_In(dayD).Result; + return new IStation.Dto.ApiResult<double>(sum); + } + + /// <summary> /// 鑾峰彇鏌愭棩鐨勫彇姘存�婚噺 /// </summary> /// <param name="day"></param> /// <returns></returns> [Route("GetByDay")] [HttpGet] - public IStation.Dto.ApiResult GetByDay(string day) + public async Task<IStation.Dto.ApiResult> GetByDay(string day) { if (day == null) { return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day null" }; } - DateTime d; - if (!DateTime.TryParse(day, out d)) + if (!DateTime.TryParse(day, out DateTime dayD)) { return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day 鏍煎紡涓嶆纭�" }; } - var sum = TotalWaterInHelper.Read(d); + if (dayD > DateTime.Today) + { + return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈兘鏌ヨ浠婃棩鐨勬暟鎹�" }; + } + double sum = -1; + if (dayD < DateTime.Today) + { + sum = TotalWaterInHelper.Read(dayD); + } + if (sum < 0) { - sum = ZyConnectHelper.GetTotalWaterByDay_In(DateTime.Parse(day)).Result;//.GetAwaiter().GetResult(); + var tagDict = new Dictionary<string, string> + { + { "_0402010204012103002", "浜屽彇姘�1鍙锋车绱娴侀噺" }, + { "_0402010204012203002", "浜屽彇姘�2鍙锋车绱娴侀噺" }, + { "_0402010204012303002", "浜屽彇姘�3鍙锋车绱娴侀噺" }, + { "_0402010204012403002", "浜屽彇姘�4鍙锋车绱娴侀噺" }, + { "_0402010204012503002", "浜屽彇姘�5鍙锋车绱娴侀噺" }, + }; + var input = new ScadaDispatchInput + { + search = "history", + starttime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 0, 0, 0).ToString("G"), + endtime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 23, 59, 59).ToString("G"), + Resolution = "300", + taglist = tagDict.Select(x => x.Key).ToArray() + }; + if (dayD == DateTime.Today) + { + input.endtime = DateTime.Now.AddMinutes(-5).ToString("G"); + } - TotalWaterInHelper.Save(d, sum); + sum = 0; + var realScadaDataList = await GetRealScadaResult(input); + if (realScadaDataList != null && realScadaDataList.Any()) + { + foreach (var r in realScadaDataList) + { + if (r.MonitorRecords == null || !r.MonitorRecords.Any()) + continue; + var rrr = r.MonitorRecords.Where(x => x.Value != null).Select(x => x.Value.Value).ToList(); + if (rrr == null || !rrr.Any()) + continue; + if (double.IsNaN(rrr.Last()) || double.IsNaN(rrr.First())) + { + return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鑾峰彇鐩戞帶鏁版嵁澶辫触" }; + } + sum += (rrr.Last() - rrr.First()); + } + } } - - return new IStation.Dto.ApiResult<double>(sum); + if (dayD < DateTime.Today) + { + TotalWaterInHelper.Save(dayD, sum); + } + return new IStation.Dto.ApiResult<double>(sum / 10000); } @@ -55,13 +161,13 @@ /// <returns></returns> [Route("GetLastDay3")] [HttpGet] - public IStation.Dto.ApiResult GetLastDay3( ) - { - DateTime yest1 = DateTime.Today.AddDays(-1); + public async Task<IStation.Dto.ApiResult> GetLastDay3() + { + DateTime yest1 = DateTime.Today.AddDays(-1); var sum1 = TotalWaterInHelper.Read(yest1); if (sum1 < 0) { - sum1 = ZyConnectHelper.GetTotalWaterByDay_In(yest1).Result;//.GetAwaiter().GetResult(); + sum1 = await ZyConnectHelper.GetTotalWaterByDay_In(yest1);//.GetAwaiter().GetResult(); TotalWaterInHelper.Save(yest1, sum1); } @@ -70,7 +176,7 @@ var sum2 = TotalWaterInHelper.Read(yest2); if (sum2 < 0) { - sum2 = ZyConnectHelper.GetTotalWaterByDay_In(yest2).Result;//.GetAwaiter().GetResult(); + sum2 = await ZyConnectHelper.GetTotalWaterByDay_In(yest2) ;//.GetAwaiter().GetResult(); TotalWaterInHelper.Save(yest2, sum2); } @@ -79,15 +185,13 @@ var sum3 = TotalWaterInHelper.Read(yest3); if (sum3 < 0) { - sum3 = ZyConnectHelper.GetTotalWaterByDay_In(yest3).Result;//.GetAwaiter().GetResult(); + sum3 = await ZyConnectHelper.GetTotalWaterByDay_In(yest3);//.GetAwaiter().GetResult(); TotalWaterInHelper.Save(yest3, sum3); } - return new IStation.Dto.ApiResult<List<double>>(new List<double> { sum1 , sum2, sum3}); + return new IStation.Dto.ApiResult<List<double>>(new List<double> { sum1 / 10000, sum2 / 10000, sum3 / 10000 }); } - - @@ -152,6 +256,94 @@ + private string _url = "ws://192.168.201.17:40001"; + private async Task<List<RealScadaData>> Get(string inputJson) + { + if (string.IsNullOrEmpty(inputJson)) + return default; + var ws = new ClientWebSocket(); + IStation.LogHelper.Info(" var ws = new ClientWebSocket();"); + await ws.ConnectAsync(new Uri(_url), CancellationToken.None); + IStation.LogHelper.Info(" ws.ConnectAsync(new Uri(_url_root), CancellationToken.None);"); + if (ws.State != WebSocketState.Open) + { + return default; + } + IStation.LogHelper.Info("ws.ConnectAsync"); + var realScadaDataList = new List<RealScadaData>(); + var inputBytes = Encoding.UTF8.GetBytes(inputJson); + await ws.SendAsync(new ArraySegment<byte>(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None); + try + { + IStation.LogHelper.Info("ws.SendAsync"); + List<byte> outputBytes = new List<byte>();//鍏ㄩ儴娑堟伅瀹瑰櫒 + var buffer = new byte[1024 * 4];//缂撳啿鍖� + var result = ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None).Result; //鐩戝惉Socket淇℃伅 + while (!result.CloseStatus.HasValue) //鏄惁鍏抽棴 + { + if (result.MessageType == WebSocketMessageType.Text)//鏂囨湰娑堟伅 + { + outputBytes.AddRange(buffer.Take(result.Count)); + if (result.EndOfMessage)//娑堟伅鏄惁宸叉帴鏀跺畬鍏� + { + IStation.LogHelper.Info("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 RealScadaData(); + data.TagName = dict.Key; + data.MonitorRecords = new List<IStation.ZyDto.MonitorRecord>(); + foreach (var item in dict.Value) + { + var record = new IStation.ZyDto.MonitorRecord(); + record.Time = item.Key; + if (double.TryParse(item.Value, out double value)) + { + record.Value = value; + } + data.MonitorRecords.Add(record); + } + realScadaDataList.Add(data); + } + IStation.LogHelper.Info("scadaDict != null && scadaDict.Any()"); + } + break; + } + } + + result = ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None).Result;//缁х画鐩戝惉Socket淇℃伅 + // IStation.LogHelper.Info("ws.ReceiveAsync"); + } + } + catch (Exception ex) + { + IStation.LogHelper.Info(ex.Message); + throw ex; + } + finally + { + try + { //鍏抽棴WebSocket + await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None); + IStation.LogHelper.Info("ws.CloseOutputAsync"); + } + catch (Exception ex) + { + IStation.LogHelper.Info(ex.Message); + throw ex; + } + ws.Abort(); + ws.Dispose(); + } + return realScadaDataList; + } + + + } } -- Gitblit v1.9.3