From b4189107397fb4e2da2bd9343d0eb85d44918932 Mon Sep 17 00:00:00 2001 From: duheng <2784771470@qq.com> Date: 星期三, 29 五月 2024 09:18:10 +0800 Subject: [PATCH] 更新预测方案 --- WaterPredict/IStation.ChEr.WebApi.Predict/任务/CalcWaterPredictJob.cs | 69 +++++++++++++++++++++++++--------- 1 files changed, 51 insertions(+), 18 deletions(-) diff --git "a/WaterPredict/IStation.ChEr.WebApi.Predict/\344\273\273\345\212\241/CalcWaterPredictJob.cs" "b/WaterPredict/IStation.ChEr.WebApi.Predict/\344\273\273\345\212\241/CalcWaterPredictJob.cs" index d01b7f4..5896959 100644 --- "a/WaterPredict/IStation.ChEr.WebApi.Predict/\344\273\273\345\212\241/CalcWaterPredictJob.cs" +++ "b/WaterPredict/IStation.ChEr.WebApi.Predict/\344\273\273\345\212\241/CalcWaterPredictJob.cs" @@ -1,4 +1,5 @@ 锘縰sing IStation.Application; +using IStation.ChEr.Application; using IStation.ChEr.Model; using IStation.Service; using Quartz; @@ -35,7 +36,7 @@ insert2daysPredictData(); } var TodayRealdataList = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1)).Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList(); //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊�� - LogHelper.Info("宸叉壘鍒板綋澶╂椂闂村墠鎵�鏈夋暟鎹�"); + LogHelper.Info("宸叉壘鍒板綋鍓嶆椂闂村墠鎵�鏈夋暟鎹�"); int dayHour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour)); var TwoDaysList = _bll.GetEnd2Days(300); var select = TwoDaysList.Where(x => x.DayHour == dayHour).FirstOrDefault(); @@ -43,21 +44,54 @@ { try { - select.RealValue = TodayRealdataList.Last().Total; - select.LastPredictTime = DateTime.Now; - _bll.Update(select); + if (TodayRealdataList.Count >= 2) + { + var lastElementTotal = TodayRealdataList.Last().Total; + var secondLastElementTotal = TodayRealdataList[TodayRealdataList.Count - 2].Total; + select.RealValue = TodayRealdataList.Last().Total; + select.RealDifferenceValue = lastElementTotal - secondLastElementTotal; + if (select.RealDifferenceValue == 0 || select.RealDifferenceValue < 0) + { + if (PredictHelper.IsOpenState()) + { + select.Description = "鐪熷疄鏁版嵁鍑虹幇寮傚父"; + select.States = 0; + _bll.Update(select); + return null; + } + } + select.States = 1; + _bll.Update(select); + } + else + { + select.RealValue = TodayRealdataList.Last().Total; + select.RealDifferenceValue = TodayRealdataList.Last().Total - _bll.GetEnd2Days(24).Last().RealValue; + if (select.RealDifferenceValue == 0 || select.RealDifferenceValue < 0) + { + if (PredictHelper.IsOpenState()) + { + select.Description = "鐪熷疄鏁版嵁鍑虹幇寮傚父"; + } + } + select.States = 1; + _bll.Update(select); + } } - catch + catch (Exception e) { - select.RealValue = -1; + select.RealValue = 0; + select.States = 0; + select.Description = "涓虹湡瀹炴暟鎹祴鍊奸敊璇�!" + "鍘熷洜:" + e; _bll.Update(select); - LogHelper.Info("鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�,鏃堕棿:" + DateTime.Now.ToString()); + // LogHelper.Info("鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�,鏃堕棿:" + DateTime.Now.ToString()); } } else { - select.RealValue = -1; - select.LastPredictTime = DateTime.Now; + select.RealValue = 0; + select.States = 0; + select.Description = "鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�"; _bll.Update(select); LogHelper.Info("鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�,鏃堕棿:" + DateTime.Now.ToString()); } @@ -70,17 +104,21 @@ int day = (input.DayHour % 10000) / 100; // 鑾峰彇鏁存暟鐨勭櫨浣嶅拰鍗佷綅琛ㄧず鏃ユ湡 int hour = input.DayHour % 100; // 鑾峰彇鏁存暟鐨勪釜浣嶆暟琛ㄧず灏忔椂 DateTime dateTime = new DateTime(DateTime.Now.Year, month, day, hour, 0, 0); - return Tuple.Create(dateTime, (double)input.RealValue); + return Tuple.Create(dateTime, (double)input.RealDifferenceValue); }).ToList(); //杞崲涓篠SA绠楁硶鎵�闇�鍏ュ弬 tupleList = tupleList.OrderBy(x => x.Item1).ToList(); //鎸夌収鏃堕棿杩涜鎺掑簭 var predictdata = _SSAPredictHelper.Predict(tupleList, 3600, 10, 3600, (float)0.99, 24); var starthour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Now.Month, DateTime.Now.Day, 0)); var endhour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Now.Month, DateTime.Now.Day, 23)); - var currentdata = TwoDaysList.Where(x => x.DayHour >= starthour && x.DayHour <= endhour).ToList(); + var currentdata = TwoDaysList.Where(x => x.DayHour >= starthour && x.DayHour <= endhour).OrderBy(x => x.DayHour).ToList(); for (int i = 0; i < currentdata.Count; i++) { - currentdata[i].LastPredictValue = Math.Round(predictdata[i].Total, 1); + currentdata[i].LastPredictValue = Math.Round(predictdata[i].Total, 0); + if (currentdata[i].LastPredictValue > 90000 || currentdata[i].LastPredictValue < 20000) + { + currentdata[i].Description = "棰勬祴鏁版嵁宸紓杩囧ぇ"; + } currentdata[i].LastPredictTime = DateTime.Now; currentdata[i].PredictValueList = currentdata[i].LastPredictValue.ToString() + "," + currentdata[i].PredictValueList; } @@ -108,18 +146,13 @@ // 鏋勯�� DateTime 瀵硅薄 DateTime dateTime = new DateTime(DateTime.Now.Year, month, day, hour, 0, 0); - ssaInput.Add(new SSAInput { Time = dateTime, Value = (float)item.RealValue }); + ssaInput.Add(new SSAInput { Time = dateTime, Value = (float)item.RealDifferenceValue }); } ssaInput = ssaInput.OrderBy(x => x.Time).ToList(); List<Tuple<DateTime, double>> tupleList = ssaInput .Select(input => Tuple.Create(input.Time, (double)input.Value)) .ToList(); var predictdata = _SSAPredictHelper.Predict(tupleList, 3600, 10, 3600, (float)0.99, 48); - /* foreach (var item in predictdata) - { - int dayHour = int.Parse(string.Format("{0:00}{1:00}{2:00}", item.DateTime.Month, item.DateTime.Day, item.DateTime.Hour)); - waterPredictRecords.Add(new WaterPredictRecord { DayHour = dayHour, PredictTime = DateTime.Now, LastPredictValue = item.Total }); - }*/ var list = alllist.Where(x => x.DayHour >= lastdaystarthour + 100 && x.DayHour <= lastdayendhour + 100).ToList(); //鎵惧埌浠婂ぉ鎵�鏈夌殑棰勬祴鏁版嵁,骞舵浛鎹� for (int i = 0; i < predictdata.Count; i++) -- Gitblit v1.9.3