using IStation.Common; using IStation.Dto; using IStation.Untity; using IStation.ZyModel; 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; namespace IStation.WebApi.Controllers { /// /// 取水总量 /// [RoutePrefix("TotalWaterIn")] public class TotalWaterInController : ApiController { /// /// /// /// /// [Route("Test1")] [HttpGet] public async Task Test1() { var sum = await ZyConnectHelper.async_debug(); return new IStation.Dto.ApiResult(sum); } /// /// /// /// /// [Route("Test2")] [HttpGet] public IStation.Dto.ApiResult Test2() { var sum = ZyConnectHelper.async_debug().GetAwaiter().GetResult(); return new IStation.Dto.ApiResult(sum); } /// /// /// /// /// [Route("GetByDayDebug")] [HttpGet] public IStation.Dto.ApiResult GetByDayDebug(string day) { if (ZyConnectHelper.isDebug) return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "Debug is Unacess " }; 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(sum); } /// /// 获取某日的取水总量 /// /// /// [Route("GetByDay")] [HttpGet] public async Task GetByDay(string day) { if (ZyConnectHelper.isDebug) return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "Debug is Unacess " }; 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 = "不能查询今日的数据" }; } double sum = -1; if (dayD < DateTime.Today) { sum = TotalWaterInHelper.Read(dayD); } if (sum < 0) { var tagDict = new Dictionary { { "1#", "二取水1号主水泵.累计流量" }, { "2#", "二取水2号主水泵.累计流量" }, { "3#", "二取水3号主水泵.累计流量" }, { "4#", "二取水4号主水泵.累计流量" }, { "5#", "二取水5号主水泵.累计流量" }, }; var starttime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 0, 0, 0).ToString("G"); var endtime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 23, 59, 59).ToString("G"); if (dayD == DateTime.Today) { endtime = DateTime.Now.AddMinutes(-5).ToString("G"); } sum = 0; string joinedValues = string.Join(",", tagDict.Values); var result = HttpClientHelper.Get>(ZyConnectHelper.ZyApiUrl, starttime, endtime, "first", "300s", joinedValues); var realScadaDataList = ZyConnectHelper.GetScadaData(result); 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()); } } } if (dayD < DateTime.Today) { TotalWaterInHelper.Save(dayD, sum); } return new IStation.Dto.ApiResult(sum / 10000); } /// /// 获取最近三天的取水总量 /// /// /// [Route("GetLastDay3")] [HttpGet] public async Task GetLastDay3() { if (ZyConnectHelper.isDebug) return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "Debug is Unacess " }; DateTime yest1 = DateTime.Today.AddDays(-1); var sum1 = TotalWaterInHelper.Read(yest1); if (sum1 < 0) { sum1 = await ZyConnectHelper.GetTotalWaterByDay_In(yest1);//.GetAwaiter().GetResult(); TotalWaterInHelper.Save(yest1, sum1); } DateTime yest2 = DateTime.Today.AddDays(-2); var sum2 = TotalWaterInHelper.Read(yest2); if (sum2 < 0) { sum2 = await ZyConnectHelper.GetTotalWaterByDay_In(yest2);//.GetAwaiter().GetResult(); TotalWaterInHelper.Save(yest2, sum2); } DateTime yest3 = DateTime.Today.AddDays(-3); var sum3 = TotalWaterInHelper.Read(yest3); if (sum3 < 0) { sum3 = await ZyConnectHelper.GetTotalWaterByDay_In(yest3);//.GetAwaiter().GetResult(); TotalWaterInHelper.Save(yest3, sum3); } return new IStation.Dto.ApiResult>(new List { sum1 / 10000, sum2 / 10000, sum3 / 10000 }); } /// /// 获取web客户端ip /// /// public static string GetWebClientIp() { string userIP = ""; try { if (System.Web.HttpContext.Current == null || System.Web.HttpContext.Current.Request == null || System.Web.HttpContext.Current.Request.ServerVariables == null) { return ""; } string CustomerIP = ""; //CDN加速后取到的IP simone 090805 CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"]; if (!string.IsNullOrEmpty(CustomerIP)) { return CustomerIP; } CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!String.IsNullOrEmpty(CustomerIP)) { return CustomerIP; } if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) { CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (CustomerIP == null) { CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } } else { CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } if (string.Compare(CustomerIP, "unknown", true) == 0 || String.IsNullOrEmpty(CustomerIP)) { return System.Web.HttpContext.Current.Request.UserHostAddress; } return CustomerIP; } catch { } return userIP; } private string _url = "ws://192.168.201.17:40001"; private async Task> 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(); var inputBytes = Encoding.UTF8.GetBytes(inputJson); await ws.SendAsync(new ArraySegment(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None); try { IStation.LogHelper.Info("ws.SendAsync"); List outputBytes = new List();//全部消息容器 var buffer = new byte[1024 * 4];//缓冲区 var result = ws.ReceiveAsync(new ArraySegment(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>>(outputJson); if (scadaDict != null && scadaDict.Any()) { foreach (var dict in scadaDict) { var data = new ZyModel.RealScadaData(); data.TagName = dict.Key; data.MonitorRecords = new List(); foreach (var item in dict.Value) { var record = new IStation.ZyModel.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(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; } } }