From 03a0d99de9c5fed6bea8bc83b49ce27786bda38c Mon Sep 17 00:00:00 2001
From: tangxu <tangxu76880903>
Date: 星期五, 07 二月 2025 09:29:59 +0800
Subject: [PATCH] 添加OPENAPI接口

---
 WebApi/Controllers/ZyPrjController.cs | 1089 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 1,005 insertions(+), 84 deletions(-)

diff --git a/WebApi/Controllers/ZyPrjController.cs b/WebApi/Controllers/ZyPrjController.cs
index 33995f3..bf39aa0 100644
--- a/WebApi/Controllers/ZyPrjController.cs
+++ b/WebApi/Controllers/ZyPrjController.cs
@@ -1,4 +1,5 @@
-锘縰sing IStation.CalcModel;
+锘縰sing Antlr.Runtime.Tree;
+using IStation.CalcModel;
 using IStation.Common;
 using IStation.Dto;
 using IStation.Model;
@@ -9,27 +10,35 @@
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Runtime.CompilerServices;
 using System.Security.Permissions;
 using System.Text;
 using System.Threading.Tasks;
 using System.Web;
 using System.Web.Http;
-using System.Web.UI.WebControls;
-using System.Web.UI.WebControls.WebParts;
 
 namespace IStation.ZyDto
 {
     public class ZyPrjRequest
     {
-        public ZyPrjRequest() { }
- 
+        public ZyPrjRequest()
+        { }
+
         public string StartTime { get; set; }
         public string EndTime { get; set; }
-        public int StartOpenCount { get; set; } = -1;
-        public double? TotalFlowIn { get; set; }//鍙栨按鎬婚噺 (鍗曚綅 鍚�)
-    }
+        //public int? StartOpenCount { get; set; } = -1;//宸蹭綔搴�
 
+        public string StartReservoirLevel { get; set; }//寮�濮嬫按搴撴按浣�(鍙┖):鍗曚綅m
+        public string StartOpenPumpIndexArray { get; set; }//寮�濮嬫満娉靛紑鏈虹姸鎬�(涓嶅彲绌�)
+
+        public string TotalFlowIn { get; set; }//鍙栨按鎬婚噺 (鍗曚綅 鍚�)
+        public string TotalFlowOut { get; set; }//渚涙按鎬婚噺 (鍗曚綅 鍚�) 涓嶈緭鍏ュ氨鐢ㄩ娴嬪��
+
+        public string MaxReservoirLevel { get; set; }//鏈�楂樻按搴撴按浣嶉檺鍒�(鍙┖):鍗曚綅m
+        public string MaxReservoirLevelTime { get; set; }//鏈�楂樻按搴撴按浣嶉檺鍒舵椂闂�(鍙┖) 鏃堕棿鏍煎紡
+    }
 }
+
 namespace IStation.WebApi.Controllers
 {
     /// <summary>
@@ -39,7 +48,7 @@
     public class ZyPrjController : ApiController
     {
         /// <summary>
-        /// 
+        ///  璁$畻
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
@@ -47,7 +56,7 @@
         [HttpPost]
         public IStation.Dto.ApiResult Calc([FromBody] ZyPrjRequest request)
         {
-            if (request == null  )
+            if (request == null)
             {
                 return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "request is null" };
             }
@@ -59,10 +68,13 @@
             {
                 return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "EndTime is null" };
             }
+            //
+            IStation.LogHelper.Info("--------------------------START-----------------------------------------");
+            IStation.LogHelper.Info(string.Format("Zy Prj Calc Request:  {0}", JsonHelper.Object2Json(request)));
 
             DateTime start_timme = DateTime.Now;
             DateTime end_timme = DateTime.Now;
-            if(!DateTime.TryParse(request.StartTime,out start_timme))
+            if (!DateTime.TryParse(request.StartTime, out start_timme))
             {
                 IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} StartTime is error format", start_timme, end_timme));
                 return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "StartTime is error format" };
@@ -72,92 +84,886 @@
                 IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} EndTime is error format", start_timme, end_timme));
                 return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "EndTime is error format" };
             }
-            if(end_timme< start_timme.AddMinutes(60))
+            if (end_timme < start_timme.AddMinutes(60))
             {
                 IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} 鏃堕棿鑼冨洿閿欒,闂撮殧杩囩煭", start_timme, end_timme));
                 return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏃堕棿鑼冨洿閿欒,闂撮殧杩囩煭" };
             }
-            if(end_timme > start_timme.AddDays(1))
+            if (end_timme > start_timme.AddDays(1))
             {
-                IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} 鏃堕棿鑼冨洿閿欒,涓嶈兘瓒呰繃24灏忔椂", start_timme, end_timme)) ;
-                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏃堕棿鑼冨洿閿欒,涓嶈兘瓒呰繃24灏忔椂" }; 
+                IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} 鏃堕棿鑼冨洿閿欒,涓嶈兘瓒呰繃24灏忔椂", start_timme, end_timme));
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏃堕棿鑼冨洿閿欒,涓嶈兘瓒呰繃24灏忔椂" };
             }
-            if (request.TotalFlowIn == null)
-            {
-                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鍙栨按鎬婚噺閿欒" };
-            }
-            if (request.TotalFlowIn < 10000)
-            {
-                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "娉ㄦ剰鍙栨按鎬婚噺鍗曚綅鏄惃,褰撳墠鍙傛暟鍙傛暟杩囧皬" };
-            }
-              
-            IStation.CalcModel.AnaRequest anaRequest = new  AnaRequest();
-            anaRequest.CalcOptType = eCalcOptType.鐢佃垂;
+   
+            IStation.CalcModel.AnaRequest anaRequest = new AnaRequest();
+            anaRequest.CalcOptType = (eCalcOptType)IStation.AnaGlobalParas.Setting.OptSortType;
             anaRequest.StartTime = start_timme;
             anaRequest.EndTime = end_timme;
-            anaRequest.WaterLevels闀挎睙 = GetTide3Day(start_timme);
-            anaRequest.StartOpenCount = request.StartOpenCount;
-            anaRequest.TotalFlow鍙栨按鎬婚噺 = request.TotalFlowIn;
+            anaRequest.WaterLevels闀挎睙 = GetTide3Day(_tideSouce, start_timme);
+            if(anaRequest.WaterLevels闀挎睙 ==null || anaRequest.WaterLevels闀挎睙.Count()==0)
+            { 
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏃犳硶鑾峰彇闀挎睙姘翠綅鏁版嵁" };
+            }
+
+            #region 鍙栨按鎬婚噺
+            double TotalFlowIn = 0;
+            if (!string.IsNullOrEmpty(request.TotalFlowIn) && !string.IsNullOrWhiteSpace(request.TotalFlowIn))
+            { 
+                if (!double.TryParse(request.TotalFlowIn, out TotalFlowIn))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璇疯緭鍏ユ暟瀛楀瀷鍙栨按鎬婚噺,鎺ュ彈鍒扮殑杈撳叆鍊兼槸:" + request.TotalFlowIn };
+                }
+                if (TotalFlowIn < 10000)
+                {
+                    IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} ,  娉ㄦ剰鍙栨按鎬婚噺鍗曚綅鏄惃,褰撳墠鍙傛暟鍙傛暟杩囧皬",
+                start_timme, end_timme));
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "娉ㄦ剰鍙栨按鎬婚噺鍗曚綅鏄惃,褰撳墠鍙傛暟鍙傛暟杩囧皬" };
+                }
+
+                anaRequest.TotalFlowIn = TotalFlowIn;
+            }
+
+            #endregion 鍙栨按鎬婚噺
        
+            #region 姘翠綅瑕佹眰
+
+            if (!string.IsNullOrEmpty(request.MaxReservoirLevelTime))
+            {
+                anaRequest.MaxReservoirLevelTime = request.MaxReservoirLevelTime;
+            }
+
+            if (!string.IsNullOrEmpty(request.MaxReservoirLevel) && !string.IsNullOrWhiteSpace(request.MaxReservoirLevel))
+            {
+                double MaxReservoirLevel = 0;
+                if (!double.TryParse(request.MaxReservoirLevel, out MaxReservoirLevel))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璇疯緭鍏ュ悎鐞嗙殑姘翠綅瑕佹眰鍊�" };
+                }
+                if (MaxReservoirLevel < 1 || MaxReservoirLevel > 10)
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璇疯緭鍏ュ悎鐞嗙殑姘翠綅瑕佹眰鍊�" };
+                }
+                anaRequest.MaxReservoirLevel = MaxReservoirLevel;
+            }
+            else
+            {
+                if (string.IsNullOrEmpty(request.TotalFlowIn) || string.IsNullOrWhiteSpace(request.TotalFlowIn))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璇疯緭鍏ュ彇姘存�婚噺鎴栨按浣嶈姹�" };
+                }
+              
+                if (TotalFlowIn < 1000)
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璇疯緭鍏ュ彇姘存�婚噺,鎺ュ彈鍒扮殑杈撳叆鍊兼槸:" + request.TotalFlowIn };
+                }
+            }
+
+            #endregion 姘翠綅瑕佹眰
+
+            #region 渚涙按閲�
+
+            double TotalFlowOut鎵嬪姩杈撳叆闇�姹� = 0;//棰勬祴鍊肩殑渚涙按鎬婚噺(鍗曚綅 鍚�)
+            double TotalFlowOut棰勬祴鍊肩殑渚涙按鎬婚噺 = 0;//棰勬祴鍊肩殑渚涙按鎬婚噺 (鍗曚綅 鍚�)
+            double FlowTotalOut闇�姹� = 0;
+            bool isPredictRecord = false; //鏄惁鏄敤鍒版按閲忛娴�
+            if (string.IsNullOrEmpty(request.TotalFlowOut) || string.IsNullOrWhiteSpace(request.TotalFlowOut))
+            {//鐢ㄩ娴嬪��
+                #region 鐢ㄩ娴嬪��
+                anaRequest.PerHourFlowOut = new List<double>();
+                IStation.DAL.WaterPredictRecord dal = new DAL.WaterPredictRecord();
+                var water_records = dal.GetByHourRangle(start_timme, end_timme);
+                //LogHelper.Info(water_records.Count.ToString());
+                if (water_records == null)
+                {
+                    IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} ,  姘翠綅棰勬祴鏁版嵁涓虹┖,璇峰厛淇濇寔姘翠綅棰勬祴鏈嶅姟姝e父杩愯",
+                start_timme, end_timme));
+                    return new IStation.Dto.ApiResult<string>() { Code = ApiResultCode.Error, Data = "姘翠綅棰勬祴鏁版嵁涓虹┖,璇峰厛淇濇寔姘翠綅棰勬祴鏈嶅姟姝e父杩愯" };
+                }
+                var count = (end_timme - start_timme).TotalHours;
+                if (water_records.Count != count)
+                {
+                    IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} ,  棰勬祴鏁版嵁鑾峰彇澶辫触,鏁版嵁鏉℃棤娉曞尮閰�, 妫�鏌ユ槸鍚﹂娴嬫湇鍔′腑鏂�",
+                start_timme, end_timme));
+                    return new IStation.Dto.ApiResult<string>() { Code = ApiResultCode.Error, Data = "棰勬祴鏁版嵁鑾峰彇澶辫触,鏁版嵁鏉℃棤娉曞尮閰�, 妫�鏌ユ槸鍚﹂娴嬫湇鍔′腑鏂�" };
+                }
+
+                foreach (var r in water_records)
+                {
+                    if (r.States == 0)
+                    {
+                        var error_info11 = string.Format("棰勬祴鏁版嵁寮傚父,鏃犳硶杩涜姘翠綅璁$畻:{0} {1},{2}", r.DayHour, r.LastPredictValue, r.Description);
+                        IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} , {2}}",
+                start_timme, end_timme, error_info11));
+                        return new IStation.Dto.ApiResult<string>()
+                        {
+                            Code = ApiResultCode.Error,
+                            Data = error_info11
+                        };
+                    }
+                    TotalFlowOut棰勬祴鍊肩殑渚涙按鎬婚噺 += r.LastPredictValue;
+                    anaRequest.PerHourFlowOut.Add(r.LastPredictValue);//璁$畻涓敤鍚�
+                }
+                IStation.LogHelper.Info(
+                    string.Format("鑾峰彇姘撮噺棰勬祴鍊�:  {0} ,  棰勬祴鍊兼�讳緵姘存�婚噺:{1} ", 
+                    string.Join(",", anaRequest.PerHourFlowOut), TotalFlowOut棰勬祴鍊肩殑渚涙按鎬婚噺));
+                FlowTotalOut闇�姹� = TotalFlowOut棰勬祴鍊肩殑渚涙按鎬婚噺;
+                isPredictRecord = true ;
+                #endregion 鐢ㄩ娴嬪��
+            }
+            else
+            {
+                if (!double.TryParse(request.TotalFlowOut, out TotalFlowOut鎵嬪姩杈撳叆闇�姹�))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "娉ㄦ剰渚涙按鎬婚噺杈撳叆鍙傛暟鏃犳硶璇嗗埆,鍙傛暟鏄�:" + request.TotalFlowOut };
+                }
+                if (TotalFlowOut鎵嬪姩杈撳叆闇�姹� < 10000)
+                {
+                    IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} ,  娉ㄦ剰鍙栨按鎬婚噺鍗曚綅鏄惃,褰撳墠鍙傛暟鍙傛暟杩囧皬",
+                start_timme, end_timme));
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "娉ㄦ剰渚涙按鎬婚噺鍗曚綅鏄惃,褰撳墠鍙傛暟鍙傛暟杩囧皬" };
+                }
+                //TotalFlowOut = TotalFlowOut / 10000;//璁$畻涓敤鍚�
+                List<double> list = new List<double>();
+                var count = (end_timme - start_timme).TotalHours;
+                for (var d = start_timme; d <= end_timme; d = d.AddHours(1))
+                {
+                    list.Add(Math.Round(TotalFlowOut鎵嬪姩杈撳叆闇�姹� / count, 1));
+                }
+                anaRequest.PerHourFlowOut = list;
+
+                FlowTotalOut闇�姹� = TotalFlowOut鎵嬪姩杈撳叆闇�姹�;
+                isPredictRecord = false ;
+            }
+
+            #endregion 渚涙按閲�
+
+            //寮�濮嬫椂鐨勫紑鏈虹姸鎬�
+            List<int> StartOpenPumpIndexArray = new List<int>();
+            if (!string.IsNullOrEmpty(request.StartOpenPumpIndexArray))
+            {
+                var sss = request.StartOpenPumpIndexArray.Split(',');
+                foreach (var item in sss)
+                {
+                    if (int.TryParse(item, out int index))
+                    {
+                        if (index < 0 || index > 4)
+                        {
+                            return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�濮嬫椂鐨勫紑鏈虹姸鎬�,鏈烘车瑙掓爣瑕佹眰涓嶈秴杩�4" };
+                        }
+                        StartOpenPumpIndexArray.Add(index);
+                    }
+                    else
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�濮嬫椂鐨勫紑鏈虹姸鎬�,鍙傛暟涓嶆纭�" };
+                    }
+                }
+            }
+            anaRequest.IsKnownStartOpenPump = true;
+            anaRequest.StartOpenPumpIndexArray = StartOpenPumpIndexArray;
+
+            //闄堣姘村簱姘翠綅
+            if (string.IsNullOrEmpty(request.StartReservoirLevel))
+            {
+                IStation.LogHelper.Info(" 鏈缃紑濮嬫椂姘村簱姘翠綅 (Error: StartReservoirLevel is null)");
+                return new IStation.Dto.ApiResult<string>() { Code = ApiResultCode.Error, Data = "鏈缃紑濮嬫椂姘村簱姘翠綅 (Error: StartReservoirLevel is null) " };
+            }
+            anaRequest.StartReservoirLevel = Convert.ToDouble(request.StartReservoirLevel);
+            if (anaRequest.StartReservoirLevel < 2)
+            {
+                IStation.LogHelper.Info(string.Format("  璁剧疆寮�濮嬫椂姘村簱姘翠綅鐨勬暟鎹繃灏� (Error: StartReservoirLevel is {0}})",
+                    anaRequest.StartReservoirLevel));
+                return new IStation.Dto.ApiResult<string>()
+                {
+                    Code = ApiResultCode.Error,
+                    Data = string.Format("  璁剧疆寮�濮嬫椂姘村簱姘翠綅鐨勬暟鎹繃灏� (Error: StartReservoirLevel is {0}})",
+                    anaRequest.StartReservoirLevel)
+                };
+            }
+
+            IStation.LogHelper.Info("kashi 璁$畻鍙栨按鎬婚噺 ");
+
             var calcHelper = new IStation.CalcPrjHelper();
             AnaPrj defaultPrj = null;
-            string error_info = calcHelper.Calc(anaRequest, out defaultPrj); 
+            string error_info = calcHelper.Calc(anaRequest, out defaultPrj);
+
             if (!string.IsNullOrEmpty(error_info) || defaultPrj == null)
             {
-                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璁$畻閿欒, 鍘熷洜鏄�:"+ error_info };
+                IStation.LogHelper.Info(string.Format("Zy Prj  璁$畻閿欒:  \r\n {0}  ", error_info));
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璁$畻閿欒, 鍘熷洜鏄�:" + error_info };
             }
-
-            var ret = Common.HistoryAnaPrjFileHelper.SavePrj(IStation.AnaGlobalParas.Setting, anaRequest, defaultPrj);
-
-            IStation.ZyDto.SubmitPrj dto_prj = new ZyDto.SubmitPrj();
-
-            if (string.IsNullOrEmpty(defaultPrj.ID))
+            else
             {
-                var time = DateTime.Now;
-                defaultPrj.ID = $"{time.Year}{time.Month}{time.Day}{time.Hour}{time.Minute}{time.Second}";
+                //  IStation.LogHelper.Info(string.Format("Zy Prj  璁$畻鎴愬姛:  \r\n {0}  ",  JsonHelper.Object2Json(defaultPrj)));
             }
-            dto_prj.schemeID = defaultPrj.ID;
-            dto_prj.Day = defaultPrj.StartTime.ToString("yyyy-MM-dd");
-            dto_prj.StartTime = defaultPrj.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
-            dto_prj.EndTime = defaultPrj.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
+            IStation.LogHelper.Info("-----------------------------END--------------------------------------");
 
-            dto_prj.FlowTotal = Math.Round(defaultPrj.SumFlow, 0);
-            dto_prj.PowerTotal = Math.Round(defaultPrj.SumPower, 0);
-            dto_prj.MoneyTotal = Math.Round(defaultPrj.SumMoney, 0);
+            //淇濆瓨鏂规 
+            var ret = Common.HistoryAnaPrjFileHelper.SavePrj(IStation.AnaGlobalParas.Setting, isPredictRecord, anaRequest, defaultPrj);
 
-            dto_prj.Items = new List<ZyDto.SubmitPrjItem>();
-            foreach (var bt in defaultPrj.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_item.OpenPumpIndexs = CalcPrjHelper.GetOpenPumpIndexs(bt.OpenPumpCount);
-                dto_prj.Items.Add(dto_item);
-            }
+            //
+            var dto_prj = ToPrjDto(defaultPrj);
+            dto_prj.FlowTotalOut = FlowTotalOut闇�姹�;
 
-            //if (request.isSubmit)
+
+            //鎺ㄩ��:浠g爜淇濈暀
+            //if (!string.IsNullOrEmpty(request.IsSubmit) && Convert.ToBoolean(request.IsSubmit))
             //{
-            //    string error = await ZyConnectHelper.SubmitPrj(request.prj);//, (id) => { IStation.LogHelper.Info("SavePrj success id=" + id); }, (info) => { IStation.LogHelper.Info("SavePrj failse info:" + info); });//.Result;
-            //    if (!string.IsNullOrEmpty(error))
+            //    Task.Run(() =>
             //    {
-            //        IStation.LogHelper.Info("Submit prj finish (fail) day:" + request.requestBase.StartTime + ",error:" + error);
-            //        return new IStation.Dto.ApiResult<string>(error) { Code = ApiResultCode.Error };
-            //    }
-            //    else
-            //    {
-            //        IStation.LogHelper.Info("Submit prj finish (success) day:" + request.requestBase.StartTime);
-            //    }
+            //        _ = ZyProjectHelper.SubmitPrj(defaultPrj);
+            //    });
             //}
 
 
-            return new IStation.Dto.ApiResult< IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
+            //IStation.LogHelper.Info(string.Format(" 浜х敓璁$畻鏂规:{0}", dto_prj.schemeID));
+            //IStation.LogHelper.Info(string.Format("Zy Prj  璁$畻鎴愬姛:  \r\n {0}  ", JsonHelper.Object2Json(dto_prj)));
+
+
+            return new IStation.Dto.ApiResult<IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
         }
 
-        Model.eTideSouce _tideSouce = Model.eTideSouce.Book;
-        private List<Model.TimeWaterLevel> GetTide3Day(DateTime calc_day )
+        /// <summary>
+        /// 鑾峰彇鍒濆姘翠綅,鍜屽綋鏃剁殑寮�鏈虹姸鎬�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [Route("GetAnaStartPara")]
+        [HttpGet]
+        public IStation.Dto.ApiResult GetAnaStartPara(string AnaStartTime)
+        {
+            if (string.IsNullOrEmpty(AnaStartTime)) { return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day 鏍煎紡涓嶆纭�" }; }
+
+            try
+            {
+                DateTime last_end_time;
+                if (!DateTime.TryParse(AnaStartTime, out last_end_time))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day 鏍煎紡涓嶆纭�" };
+                }
+
+                IStation.CalcModel.AnaRequestBase requestBase;
+                var prj = Common.HistoryAnaPrjFileHelper.GetByEndTime澶т簬(last_end_time, out requestBase);
+                if (prj == null)
+                {
+                    IStation.LogHelper.Info(string.Format("GetAnaStartPara 鏈壘鍒皗0}缁撴潫鐨勫垎鏋愰」鐩�", AnaStartTime));
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = string.Format("鏈壘鍒皗0}缁撴潫鐨勫垎鏋愰」鐩�", AnaStartTime) };
+                }
+
+                IStation.CalcModel.ZyStartInfo zyStartInfo = new IStation.CalcModel.ZyStartInfo();
+                //zyStartInfo.OpenPumpStatus = prj.EndTimeOpenPumpStatus;
+                if (prj.EndTimeOpenPumpStatus != null && prj.EndTimeOpenPumpStatus.Count > 0)
+                {
+                    zyStartInfo.OpenPumpStatus = string.Join(",", prj.EndTimeOpenPumpStatus);
+                }
+
+                var near_pt = prj.NearPointTime(DateTime.Now);
+                if (near_pt == null)
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = string.Format("鍦ㄩ」鐩腑, 鏈壘鍒皗0}鐨勬按搴撴按浣嶆暟鎹�", DateTime.Now) };
+                }
+
+                var new_yuce = near_pt.WaterLevelH;//鏄ㄥぉ棰勬祴姘翠綅
+                double now_level = ZyConnectHelper.GetRealReservoirWaterLevel();//瀹炴椂姘翠綅
+                if (prj.BlockTimes == null || prj.BlockTimes.Count() == 0)
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鍦ㄩ」鐩腑, BlockTimes鍊间负绌�" };
+                }
+                if (prj.BlockTimes.Last().PointTimes == null || prj.BlockTimes.Last().PointTimes.Count() == 0)
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鍦ㄩ」鐩腑, 鏈�鍚庝竴涓� BlockTime鐨� PointTimes 灞炴�у�间负绌�" };
+                }
+                var lz = prj.BlockTimes.Last().PointTimes.Last().WaterLevelH;
+                var lz_pt = prj.FindPointTime(last_end_time);
+                if (lz_pt != null)
+                {
+                    lz = lz_pt.WaterLevelH;
+                }
+
+                double start_yuce = lz + now_level - new_yuce;
+
+                IStation.LogHelper.Info(string.Format("GetAnaStartPara StartTime {0}    Level: {1},{2},{3} ,{4}  ", AnaStartTime, lz, now_level, new_yuce, start_yuce));
+
+                zyStartInfo.ReservoirWaterLevel = Math.Round(start_yuce, 3);
+                return new IStation.Dto.ApiResult<IStation.CalcModel.ZyStartInfo>(zyStartInfo) { Code = ApiResultCode.Success };
+            }
+            catch (Exception ex)
+            {
+                IStation.LogHelper.Error("GetAnaStartPara line 277", ex);
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = string.Format("鍦ㄩ」鐩腑, 鎺ュ彛鎶ラ敊: {0} ", ex.Message) };
+            }
+        }
+
+        /// <summary>
+        /// 纭璋冨害鏂规
+        /// </summary>
+        /// <param name="ana"></param>
+        /// <returns></returns>
+        [Route("ConfirmSchemeByID")]
+        [HttpPost]
+        public IStation.Dto.ApiResult ConfirmSchemeByID(string ID)
+        {
+            if (string.IsNullOrEmpty(ID) || ID == "string")
+            {
+                return new IStation.Dto.ApiResult<bool>(false);
+            }
+            var dal = new IStation.DAL.AnaProject();
+            var info = dal.SetConfirmStatusByID(ID);
+            if (string.IsNullOrEmpty(info))
+                return new IStation.Dto.ApiResult<bool>(true);
+            else
+            {
+                IStation.LogHelper.Info(string.Format(" ConfirmSchemeByID error ID:{0}, reason:{1}", ID, info));
+                return new IStation.Dto.ApiResult<bool>(false);
+            }
+        }
+
+
+
+        /// <summary>
+        ///  鑾峰彇鏌愪竴澶�,鏈�杩戜竴鏉�
+        /// </summary>
+        /// <param name="day"></param>
+        /// <returns></returns>
+        [Route("GetHistoryByDay")]
+        [HttpGet]
+        public IStation.Dto.ApiResult GetHistoryByDay(string day)
+        {
+            if (string.IsNullOrEmpty(day))
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鍏ュ弬day 涓虹┖" };
+            }
+            DateTime d;
+            if (!DateTime.TryParse(day, out d))
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day 鏍煎紡涓嶆纭�" };
+            }
+            
+
+            IStation.CalcModel.AnaRequestBase requestBase = null;
+            var prj = Common.HistoryAnaPrjFileHelper.GetByCreateDay(d, out requestBase);
+            if (prj != null)
+            {
+                //IStation.LogHelper.Info(string.Format(" api GetHistoryByDay {0}    format: {1}  OK", day, d));
+                var dto_prj = ToPrjDto(prj);
+                if (requestBase != null && requestBase.PerHourFlowOut != null)
+                {
+                    var sumFlow = (from x in requestBase.PerHourFlowOut select x).Sum();
+                    dto_prj.FlowTotalOut = sumFlow;
+                }
+                if(dto_prj.Switchs != null)
+                {
+                    var switch2 = from x in dto_prj.Switchs orderby x.Time select x;
+                    int index = 1;
+                    foreach (var sw in switch2)
+                    {
+                        sw.Index = index;
+                        index++;
+                    }
+                    dto_prj.Switchs = switch2.ToList();
+                }
+
+                return new IStation.Dto.ApiResult<IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
+            }
+            else
+            {
+                IStation.LogHelper.Info(string.Format(" api GetHistoryByDay {0}    format: {1} (鏈壘鍒伴」鐩�) ", day, d));
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Alert, Message = "鏈壘鍒伴」鐩�" };
+            }
+        }
+
+        /// <summary>
+        ///  鑾峰彇鏈�杩戜竴鏉�(纭鐨�)
+        /// </summary>
+        /// <param name="day"></param>
+        /// <returns></returns>
+        [Route("GetLastHistoryRecord")]
+        [HttpGet]
+        public IStation.Dto.ApiResult GetLastHistoryRecord()
+        {
+            var dal = new IStation.DAL.AnaProject();
+            var record = dal.GetLastConfirmRecord();
+            if (record == null)
+            {
+                IStation.LogHelper.Info(" api GetLastHistoryRecord is null ");
+                return null;
+            }
+       
+            IStation.CalcModel.AnaRequestBase requestBase = null;
+            var prj = Common.HistoryAnaPrjFileHelper.GetByStartTime(record.StartTime, out requestBase);
+            if (prj != null)
+            { 
+                var dto_prj = ToPrjDto(prj);
+                if (requestBase != null && requestBase.PerHourFlowOut != null)
+                {
+                    var sumFlow = (from x in requestBase.PerHourFlowOut select x).Sum();
+                    dto_prj.FlowTotalOut = sumFlow;
+                }
+                if (dto_prj.Switchs != null)
+                {
+                    var switch2 = from x in dto_prj.Switchs orderby x.Time select x;
+                    int index = 1;
+                    foreach (var sw in switch2)
+                    {
+                        sw.Index = index;
+                        index++;
+                    }
+                    dto_prj.Switchs = switch2.ToList();
+                }
+                return new IStation.Dto.ApiResult<IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
+            }
+            else
+            {
+                IStation.LogHelper.Info(string.Format(
+                    " api GetLastHistoryRecord is null (鏈壘鍒伴」鐩�) LastRecord 淇℃伅: ID:{0}, StartTime:{1}, EndTime:{2}", 
+                    record.ID, 
+                    record.StartTime, record.EndTime));
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Alert, Message = "鏈壘鍒伴」鐩�" };
+            }
+        }
+
+        /// <summary>
+        ///  鑾峰彇鏈�杩戜竴鏉�(鏂板缓)
+        /// </summary>
+        /// <param name="day"></param>
+        /// <returns></returns>
+        [Route("GetLastCreateRecord")]
+        [HttpGet]
+        public IStation.Dto.ApiResult GetLastCreateRecord()
+        {
+            var dal = new IStation.DAL.AnaProject();
+            var record = dal.GetLastRecord();
+            if (record == null)
+            {
+                IStation.LogHelper.Info(" api GetLastHistoryRecord is null ");
+                return null;
+            }
+
+            IStation.CalcModel.AnaRequestBase requestBase = null;
+            var prj = Common.HistoryAnaPrjFileHelper.GetByStartTime(record.StartTime, out requestBase);
+            if (prj != null)
+            { 
+                var dto_prj = ToPrjDto(prj);
+                if (requestBase != null && requestBase.PerHourFlowOut != null )
+                {
+                    var sumFlow = (from x in requestBase.PerHourFlowOut select x).Sum();
+                    dto_prj.FlowTotalOut = sumFlow;
+                }
+                if (dto_prj.Switchs != null)
+                {
+                    var switch2 = from x in dto_prj.Switchs orderby x.Time select x;
+                    int index = 1;
+                    foreach (var sw in switch2)
+                    {
+                        sw.Index = index;
+                        index++;
+                    }
+                    dto_prj.Switchs = switch2.ToList();
+                }
+                return new IStation.Dto.ApiResult<IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
+            }
+            else
+            {
+                IStation.LogHelper.Info(string.Format(
+                    " api GetLastHistoryRecord is null (鏈壘鍒伴」鐩�) GetLastCreateRecord 淇℃伅: ID:{0}, StartTime:{1}, EndTime:{2}",
+                    record.ID,
+                    record.StartTime, record.EndTime));
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Alert, Message = "鏈壘鍒伴」鐩�" };
+            }
+        }
+
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <returns></returns>
+        [Route("GetSetting")]
+        [HttpGet]
+        public IStation.Dto.ApiResult GetSetting()
+        {
+            var model_setting = IStation.AnaGlobalParas.Setting;
+            IStation.Dto.ZyPrjAnaSetting dto_setting = new ZyPrjAnaSetting();
+            dto_setting.MinOpenTimeMinute = model_setting.MinOpenTimeMinute;
+            dto_setting.MinSwitchTimeMinute = model_setting.MinSwitchTimeMinute;
+            dto_setting.MaxPumpSwitchCount = model_setting.MaxPumpSwitchCount;
+            dto_setting.OptSortType = model_setting.OptSortType;
+            dto_setting.SwitchPumpMinuteSpace = model_setting.SwitchPumpMinuteSpace;
+
+            dto_setting.OpenPumpIndexSequence = IStation.Dto.ZyPrjAnaSetting.ListToString(model_setting.OpenPumpIndexSequence);
+            dto_setting.ClosePumpIndexSequence = IStation.Dto.ZyPrjAnaSetting.ListToString(model_setting.ClosePumpIndexSequence);
+            dto_setting.OptimalPumpIndexSequence = IStation.Dto.ZyPrjAnaSetting.ListToString(model_setting.OptimalPumpIndexSequence);
+
+            //dto_setting.OpenPumpIndexSequence = BuildSequenceToDto(model_setting.OpenPumpIndexSequence);
+            //dto_setting.ClosePumpIndexSequence = BuildSequenceToDto(model_setting.ClosePumpIndexSequence);
+            //dto_setting.OptimalPumpIndexSequence = BuildSequenceToDto(model_setting.OptimalPumpIndexSequence);
+
+            //妫�淇车鐨勮鏍�, 0 琛ㄧず1鍙锋车 1 琛ㄧず浜屽彿娉� 涓虹┖,琛ㄧず娌℃湁妫�淇�
+            try
+            {
+                var overhallStatus = ZyConnectHelper.GetOverhaulStatus();
+                if (overhallStatus == null || overhallStatus.Count == 0)
+                {
+                    if (model_setting.UnablePumpIndexArray != null)
+                    {
+                        dto_setting.UnablePumpIndexArray = "";
+                        model_setting.UnablePumpIndexArray = null;
+                        IStation.Common.AnaSetting.SaveSetting(model_setting);
+                    }
+                }
+                else
+                {
+                    model_setting.UnablePumpIndexArray = overhallStatus.ToArray();
+                    dto_setting.UnablePumpIndexArray = string.Join(",", overhallStatus);
+                    IStation.Common.AnaSetting.SaveSetting(model_setting);
+                }
+            }
+            catch (Exception ex)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏃犳硶閾炬帴宸ユ帶鏈嶅姟鍣�,閿欒鍘熷洜:" + ex.Message };
+            }
+
+            if (model_setting.SwitchPumpIgnoreTimes != null)
+            {
+                dto_setting.SwitchPumpIgnoreTimes = new List<ZyPrjAnaSetting.TimeRangeZy>();
+                foreach (var m in model_setting.SwitchPumpIgnoreTimes)
+                {
+                    dto_setting.SwitchPumpIgnoreTimes.Add(new ZyPrjAnaSetting.TimeRangeZy()
+                    {
+                        IsUse = m.IsUse,
+                        StartHour = m.StartHour,
+                        StartMinute = m.StartMinute,
+                        EndHour = m.EndHour,
+                        EndMinute = m.EndMinute,
+                    });
+                }
+            }
+            if (model_setting.OpenPumpTimes != null)
+            {
+                dto_setting.OpenPumpTimes = new List<ZyPrjAnaSetting.TimeRangeZy>();
+                foreach (var m in model_setting.OpenPumpTimes)
+                {
+                    dto_setting.OpenPumpTimes.Add(new ZyPrjAnaSetting.TimeRangeZy()
+                    {
+                        IsUse = m.IsUse,
+                        StartHour = m.StartHour,
+                        StartMinute = m.StartMinute,
+                        EndHour = m.EndHour,
+                        EndMinute = m.EndMinute,
+                    });
+                }
+            }
+
+            IStation.LogHelper.Info("ZyPrj GetSetting : Content: " + JsonHelper.Object2Json(dto_setting));
+
+            return new IStation.Dto.ApiResult<IStation.Dto.ZyPrjAnaSetting>(dto_setting);
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <param name="ana"></param>
+        /// <returns></returns>
+        [Route("SaveSetting")]
+        [HttpPost]
+        public IStation.Dto.ApiResult SaveSetting([FromBody] IStation.Dto.ZyPrjAnaSetting dto)
+        {
+            if (dto == null)
+            {
+                return new IStation.Dto.ApiResult<bool>(false) { Message = "鍏ュ弬涓虹┖" };
+            }
+            var model_setting = IStation.AnaGlobalParas.Setting;
+
+            IStation.LogHelper.Info("ZyPrj SaveSetting : Content: " + JsonHelper.Object2Json(dto));
+
+            if (dto.MinOpenTimeMinute < 5)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏈�灏戝紑娉垫椂闂� 璁剧疆杩囧皯" };
+            }
+            if (dto.MinOpenTimeMinute > 120)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏈�灏戝紑娉垫椂闂� 璁剧疆杩囬暱" };
+            }
+            model_setting.MinOpenTimeMinute = dto.MinOpenTimeMinute;
+
+            if (dto.MinSwitchTimeMinute < 5)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏈�灏戝垏娉垫椂闂� 璁剧疆杩囧皯" };
+            }
+            if (dto.MinSwitchTimeMinute > 120)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏈�灏戝垏娉垫椂闂� 璁剧疆杩囬暱" };
+            }
+            model_setting.MinSwitchTimeMinute = dto.MinSwitchTimeMinute;
+            if (dto.SwitchPumpMinuteSpace < 2 || dto.SwitchPumpMinuteSpace > 30)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鍒囨崲娉垫椂闂撮棿闅� 璁剧疆涓嶅悎鐞�" };
+            }
+            model_setting.SwitchPumpMinuteSpace = dto.SwitchPumpMinuteSpace;
+
+            if (dto.MaxPumpSwitchCount < 1)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏈�澶у垏娉垫鏁� 璁剧疆杩囧皯" };
+            }
+            if (dto.MaxPumpSwitchCount > 10)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鏈�澶у垏娉垫鏁� 璁剧疆杩囬暱" };
+            }
+            model_setting.MaxPumpSwitchCount = dto.MaxPumpSwitchCount;
+            if (dto.OptSortType >= 2)
+            {
+                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "OptSortType 鍙兘璁剧疆 0 鎴栬�� 1,  0浠h〃 鐢ㄧ數閲忔渶灏�  1浠h〃 鐢佃垂鏈�灏�" };
+            }
+            model_setting.OptSortType = dto.OptSortType;
+            if (dto.SwitchPumpIgnoreTimes != null)
+            {
+                model_setting.SwitchPumpIgnoreTimes = new List<CalcModel.AnaSetting.TimeRange>();
+                foreach (var m in dto.SwitchPumpIgnoreTimes)
+                {
+                    if (m.StartHour == 0 && m.EndHour == 0 && m.StartMinute == 0 && m.EndMinute == 0)
+                        continue;
+                    if (m.StartHour < 0 || m.StartHour > 24)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈鍒囨车鏃堕棿 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.EndHour < 0 || m.EndHour > 24)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈鍒囨车鏃堕棿 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.StartMinute < 0 || m.StartMinute > 60)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈鍒囨车鏃堕棿 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.EndMinute < 0 || m.EndMinute > 60)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈鍒囨车鏃堕棿 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.StartHour > m.EndHour)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈鍒囨车鏃堕棿 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.StartHour == m.EndHour)
+                    {
+                        if (m.StartMinute > m.EndMinute)
+                        {
+                            return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "涓嶈鍒囨车鏃堕棿 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                        }
+                    }
+                    model_setting.SwitchPumpIgnoreTimes.Add(new CalcModel.AnaSetting.TimeRange()
+                    {
+                        IsUse = m.IsUse,
+                        StartHour = m.StartHour,
+                        StartMinute = m.StartMinute,
+                        EndHour = m.EndHour,
+                        EndMinute = m.EndMinute,
+                    });
+                }
+            }
+
+            if (dto.OpenPumpTimes != null)
+            {
+                model_setting.OpenPumpTimes = new List<CalcModel.AnaSetting.TimeRange>();
+                foreach (var m in dto.OpenPumpTimes)
+                {
+                    if (m.StartHour < 0 || m.StartHour > 24)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉垫椂闂� 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.EndHour < 0 || m.EndHour > 24)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉垫椂闂� 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.StartMinute < 0 || m.StartMinute > 60)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉垫椂闂� 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.EndMinute < 0 || m.EndMinute > 60)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉垫椂闂� 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.StartHour > m.EndHour)
+                    {
+                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉垫椂闂� 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                    }
+                    if (m.StartHour == m.EndHour)
+                    {
+                        if (m.StartMinute > m.EndMinute)
+                        {
+                            return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉垫椂闂� 鏃堕棿鑼冨洿璁剧疆涓嶅悎鐞�" };
+                        }
+                    }
+                    model_setting.OpenPumpTimes.Add(new CalcModel.AnaSetting.TimeRange()
+                    {
+                        IsUse = m.IsUse,
+                        StartHour = m.StartHour,
+                        StartMinute = m.StartMinute,
+                        EndHour = m.EndHour,
+                        EndMinute = m.EndMinute,
+                    });
+                }
+            }
+
+            if (!string.IsNullOrEmpty(dto.OpenPumpIndexSequence))
+            {
+                int[] new_set_sequence;
+                var error = BuildSequenceFromDto(dto.OpenPumpIndexSequence, out new_set_sequence);
+                if (!string.IsNullOrEmpty(error))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "寮�娉甸『搴� " + error };
+                }
+
+                model_setting.OpenPumpIndexSequence = new_set_sequence;
+            }
+
+            if (!string.IsNullOrEmpty(dto.ClosePumpIndexSequence))// if (dto.ClosePumpIndexSequence != null)
+            {
+                int[] new_set_sequence;
+                var error = BuildSequenceFromDto(dto.ClosePumpIndexSequence, out new_set_sequence);
+                if (!string.IsNullOrEmpty(error))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "鍏虫车椤哄簭 " + error };
+                }
+
+                model_setting.ClosePumpIndexSequence = new_set_sequence;
+            }
+
+            if (!string.IsNullOrEmpty(dto.OptimalPumpIndexSequence))// if (dto.OptimalPumpIndexSequence != null)
+            {
+                int[] new_set_sequence;
+                var error = BuildSequenceFromDto(dto.OptimalPumpIndexSequence, out new_set_sequence);
+                if (!string.IsNullOrEmpty(error))
+                {
+                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "璋冨害娉典紭鍏堝害椤哄簭 " + error };
+                }
+
+                model_setting.OptimalPumpIndexSequence = new_set_sequence;
+            }
+
+            //妫�淇姸鎬�, 鐩存帴璇籗CADA绯荤粺
+            //if (dto.UnablePumpIndexArray != null && dto.UnablePumpIndexArray.Count()>0)
+            //{
+            //    if (dto.UnablePumpIndexArray.Count() > 2)
+            //    {
+            //        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "妫�淇车鏁伴噺涓嶈兘瓒呰繃2鍙� "  };
+            //    }
+            //    if (dto.UnablePumpIndexArray.Contains(5))
+            //    {
+            //        List<int> penPumpIndexs1 = new List<int>();
+            //        foreach (var p in dto.UnablePumpIndexArray)
+            //        {
+            //            penPumpIndexs1.Add(p - 1);
+            //        }
+            //        model_setting.UnablePumpIndexArray = penPumpIndexs1.ToArray();
+            //    }
+            //    else
+            //    {
+            //        model_setting.UnablePumpIndexArray = dto.UnablePumpIndexArray;
+            //    }
+            //    model_setting.Check_Optimal_UnablePumpIndexArray();
+            //}
+            //else
+            //{
+            //    model_setting.UnablePumpIndexArray = null;
+            //}
+
+            return new IStation.Dto.ApiResult<bool>(IStation.Common.AnaSetting.SaveSetting(model_setting));
+        }
+
+        /// <summary>
+        ///鑾峰彇鏈烘车妫�淇姸鎬�
+        /// </summary>
+        /// <returns></returns>
+        [Route("SynOverhaulStatus")]
+        [HttpGet]
+        public IStation.Dto.ApiResult SynOverhaulStatus()
+        {
+            var overhallStatus = ZyConnectHelper.GetOverhaulStatus();//妫�淇车鐨勮鏍�, 0 琛ㄧず1鍙锋车 1 琛ㄧず浜屽彿娉� 涓虹┖,琛ㄧず娌℃湁妫�淇�
+
+            return new IStation.Dto.ApiResult<List<int>>(overhallStatus);
+        }
+
+        private string BuildSequenceFromDto(string sequenceDto, out int[] sequenceDs)
+        {
+            sequenceDs = null;
+            if (string.IsNullOrEmpty(sequenceDto))
+                return null;
+
+            List<int> list = new List<int>();
+            if (!string.IsNullOrEmpty(sequenceDto))
+            {
+                var sss = sequenceDto.Split(',');
+                foreach (var item in sss)
+                {
+                    if (int.TryParse(item, out int index))
+                    {
+                        list.Add(index);
+                    }
+                    else
+                    {
+                        return " 璁剧疆鍙傛暟涓嶅悎鐞�,鏈烘车搴忓彿鏈夐潪鏁板瓧";
+                    }
+                }
+            }
+
+            return BuildSequenceFromDto(list, out sequenceDs);
+        }
+
+        private string BuildSequenceFromDto(List<int> sequenceDto, out int[] sequenceDs)
+        {
+            sequenceDs = null;
+            if (sequenceDto == null || sequenceDto.Count() == 0)
+                return null;
+            List<int> penPumpIndexs = new List<int>();
+            foreach (var ind in sequenceDto)
+            {
+                if (ind < 0)
+                {
+                    return " 璁剧疆鍙傛暟涓嶅悎鐞�,鏈烘车搴忓彿鏈夎礋鏁�";
+                }
+                else if (ind > 5)
+                {
+                    return " 璁剧疆鍙傛暟涓嶅悎鐞�,鏈烘车搴忓彿瓒呰繃5";
+                }
+                else
+                {
+                    penPumpIndexs.Add(ind);
+                }
+            }
+            if (penPumpIndexs.Distinct().Count() != 5)
+            {
+                return " 璁剧疆鍙傛暟涓嶅悎鐞�";
+            }
+
+            if (penPumpIndexs.Contains(5))
+            {//琛ㄧず鐣岄潰浠�1 2 3 4 5
+                List<int> penPumpIndexs1 = new List<int>();
+                foreach (var p in penPumpIndexs)
+                {
+                    penPumpIndexs1.Add(p - 1);
+                }
+                sequenceDs = penPumpIndexs1.ToArray();
+            }
+            else
+            {
+                sequenceDs = penPumpIndexs.ToArray();
+            }
+            return null;
+        }
+
+        private int[] BuildSequenceToDto(int[] sequenceDs)
+        {
+            if (sequenceDs == null || sequenceDs.Length == 0) return null;
+
+            List<int> sequenceDto = new List<int>();
+
+            foreach (var sequence in sequenceDs)
+            {
+                sequenceDto.Add(sequence + 1);
+            }
+            return sequenceDto.ToArray();
+        }
+
+        private Model.eTideSouce _tideSouce = Model.eTideSouce.Book;
+
+        public static List<Model.TimeWaterLevel> GetTide3Day(Model.eTideSouce tideSouce, DateTime calc_day)
         {
             DateTime _rangDay1, _rangDay2, _rangDay3;
             string error1, error2, error3;
@@ -180,34 +986,149 @@
                 _rangDay2 = calc_day;
                 _rangDay3 = calc_day.AddDays(1);
             }
-            waterLevels闀挎睙1 = TideHelper.GetByDay(_tideSouce, _rangDay1, out error1);
-            waterLevels闀挎睙2 =  TideHelper.GetByDay(_tideSouce, _rangDay2, out error2);
-            waterLevels闀挎睙3 = TideHelper.GetByDay(_tideSouce, _rangDay3, out error3);
-
-
-
+            waterLevels闀挎睙1 = TideHelper.GetByDay(tideSouce, _rangDay1, out error1);
+            waterLevels闀挎睙2 = TideHelper.GetByDay(tideSouce, _rangDay2, out error2);
+            waterLevels闀挎睙3 = TideHelper.GetByDay(tideSouce, _rangDay3, out error3);
 
             List<Model.TimeWaterLevel> timeValues = new List<Model.TimeWaterLevel>();
             if (waterLevels闀挎睙1 != null)
             {
                 timeValues.AddRange(waterLevels闀挎睙1);
             }
- 
+
             if (waterLevels闀挎睙2 != null)
             {
                 timeValues.AddRange(waterLevels闀挎睙2);
             }
- 
+
             if (waterLevels闀挎睙3 != null)
             {
                 timeValues.AddRange(waterLevels闀挎睙3);
             }
- 
 
- 
-
- 
             return timeValues;
         }
+
+        #region 鎹㈢畻鎴怐TO
+
+        private IStation.ZyDto.SubmitPrj ToPrjDto(AnaPrj defaultPrj)
+        {
+            IStation.ZyDto.SubmitPrj dto_prj = new ZyDto.SubmitPrj();
+
+            if (string.IsNullOrEmpty(defaultPrj.ID))
+            {
+                var time = DateTime.Now;
+                defaultPrj.ID = $"{time.Year}{time.Month}{time.Day}{time.Hour}{time.Minute}{time.Second}";
+            }
+            dto_prj.schemeID = defaultPrj.ID;
+            dto_prj.schemeName = defaultPrj.Name;
+            dto_prj.Day = defaultPrj.StartTime.ToString("yyyy-MM-dd");
+            dto_prj.StartTime = defaultPrj.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
+            dto_prj.EndTime = defaultPrj.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
+
+            dto_prj.FlowTotalIn = Math.Round(defaultPrj.SumFlow, 0);
+            dto_prj.FlowTotalOut = 0; //澶栭潰璧嬪��
+            dto_prj.PowerTotal = Math.Round(defaultPrj.SumPower, 0);
+            dto_prj.MoneyTotal = Math.Round(defaultPrj.SumMoney, 0);
+
+            dto_prj.BlockTimes = new List<ZyDto.SubmitPrjBlockTime>();
+
+            double startHeight = 0;
+
+            if (defaultPrj.BlockTimes != null)
+            {
+                startHeight = defaultPrj.BlockTimes.First().ReservoirStartHeight;
+                foreach (var bt in defaultPrj.BlockTimes)
+                {
+                    if (bt.OpenPumpIndexs == null)
+                        continue;
+                    ZyDto.SubmitPrjBlockTime dto_item = new ZyDto.SubmitPrjBlockTime();
+                    dto_item.StartTime = bt.StartTime;
+                    dto_item.EndTime = bt.EndTime;
+                    dto_item.OpenPumpCount = bt.OpenPumpIndexs.Count;
+                    dto_item.OpenPumpIndexs = bt.OpenPumpIndexs;
+                    dto_item.StartSwitchGroupID = bt.StartSwitchGroupID;
+
+                    if (bt.PointTimes != null)
+                    {
+                        dto_item.Records = new List<SubmitPrjTime>();
+                        foreach (var bt2 in bt.PointTimes)
+                        {
+                            //if(maxHeight < bt2.WaterLevelH)
+                            //{
+                            //    maxHeight = bt2.WaterLevelH;
+                            //    //maxHeight = Math.Max(maxHeight, bt2.WaterLevelH);
+                            //    maxHeightTime = bt2.Time;
+                            //}
+
+                            dto_item.Records.Add(new SubmitPrjTime(bt2));
+                        }
+                    }
+
+                    dto_prj.BlockTimes.Add(dto_item);
+                }
+            }
+            if (defaultPrj.MaxWaterLevelH <= 0)
+            {        
+                double maxHeight = 0;               
+                DateTime maxHeightTime = defaultPrj.StartTime;
+                if (defaultPrj.BlockTimes != null)
+                {
+                    foreach (var bt in defaultPrj.BlockTimes)
+                    {
+                        if (bt.OpenPumpIndexs == null)
+                            continue;
+
+                        if (bt.PointTimes != null)
+                        {
+                            foreach (var bt2 in bt.PointTimes)
+                            {
+                                if (maxHeight < bt2.WaterLevelH)
+                                {
+                                    maxHeight = bt2.WaterLevelH;
+                                    //maxHeight = Math.Max(maxHeight, bt2.WaterLevelH);
+                                    maxHeightTime = bt2.Time;
+                                }
+                            }
+                        }
+                    }
+                }
+                defaultPrj.MaxWaterLevelH = maxHeight;
+                defaultPrj.MaxWaterLevelTime = maxHeightTime;
+            }
+   
+            if(defaultPrj.MaxWaterLevelTime> defaultPrj.StartTime)
+            dto_prj.MaxWaterLevelH = string.Format("{0:N2}  ({1})",  Math.Round( defaultPrj.MaxWaterLevelH,2) ,
+                defaultPrj.MaxWaterLevelTime.ToString("HH:mm"));
+            else
+                dto_prj.MaxWaterLevelH = string.Format("{0:N2} ", Math.Round(defaultPrj.MaxWaterLevelH, 2));
+
+            //dto_prj.MaxWaterLevelH = defaultPrj.MaxWaterLevelH;
+            //dto_prj.MaxWaterLevelTime = defaultPrj.MaxWaterLevelTime;
+
+            dto_prj.StartWaterLevelH = string.Format("{0:N2}  ({1})", Math.Round(startHeight, 2),
+                defaultPrj.StartTime.ToString("HH:mm")); ;
+            dto_prj.Switchs = new List<SubmitPrjSwitchInfo>();
+            if (defaultPrj.PumpSwitchs != null)
+            {
+                var fi_PumpSwitchs = from x in defaultPrj.PumpSwitchs orderby x.Time select x;
+                foreach (var bt in fi_PumpSwitchs)
+                {
+                    ZyDto.SubmitPrjSwitchInfo dto_item = new ZyDto.SubmitPrjSwitchInfo();
+                    dto_item.Index = bt.Index;
+                    dto_item.GroupID = bt.GroupID;//鍒嗙粍ID
+                    dto_item.PumpIndex = bt.PumpIndex;//娉佃鏍�
+                    dto_item.Time = bt.Time.ToString("yyyy-MM-dd HH:mm:ss");//鏃堕棿
+                    dto_item.SwitchType = bt.SwitchType;///1 寮�鏈� 0 鍏虫満
+
+                    dto_prj.Switchs.Add(dto_item);
+                }
+            }
+
+            return dto_prj;
+        }
+
+        #endregion 鎹㈢畻鎴怐TO
+
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3