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