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