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