From 64c0604d9a7d2460f6bf1b6cc7df02d769db3a15 Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期三, 19 六月 2024 09:23:32 +0800
Subject: [PATCH] 优化预测错误日志

---
 WaterPredict/IStation.ChEr.WebApi.Predict/任务/CalcWaterPredictJob.cs |  156 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 112 insertions(+), 44 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 cce8e46..11c17fb 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"
@@ -33,17 +33,17 @@
         /// <returns></returns>
         public Task Execute(IJobExecutionContext context)
         {
-            LogHelper.Info(DateTime.Now.ToString());
-            if (DateTime.Now.Hour == 0 && DateTime.Now.Minute == 5)
+            if (DateTime.Now.Hour == 0 && DateTime.Now.Minute == 15)
             {
                 insert2daysPredictData();
             }
             var TodayRealdataList = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "1h").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();
             //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
             int dayHour = WaterPredictRecord.ConvertIntDay(DateTime.Now);
+            int lastHour = WaterPredictRecord.ConvertIntDay(DateTime.Now.AddHours(-1));
             var TwoDaysList = _bll.GetEnd2Days(300);
-            LogHelper.Info("2");
             var select = TwoDaysList.Where(x => x.DayHour == dayHour).FirstOrDefault();
+            var lastDifferenceValue = TwoDaysList.Where(x => x.DayHour == lastHour).FirstOrDefault();
             if (TodayRealdataList != null)
             {
                 LogHelper.Info("宸叉壘鍒板綋鍓嶆椂闂村墠鎵�鏈夋暟鎹�");
@@ -57,16 +57,36 @@
                             var secondLastElementTotal = TodayRealdataList[TodayRealdataList.Count - 2].Total;
                             select.RealTotalValue = TodayRealdataList.Last().Total;
                             select.RealDifferenceValue = lastElementTotal - secondLastElementTotal;
-                            if (select.RealDifferenceValue == 0 || select.RealDifferenceValue < 0)
+                            if (select.RealDifferenceValue == 0 || select.RealDifferenceValue < 0 || select.RealDifferenceValue > 100000)
                             {
                                 if (PredictHelper.IsOpenState())
                                 {
-                                    select.Description = "鐪熷疄鏁版嵁鍑虹幇寮傚父";
+                                    select.Description += ",鏃堕棿:" + DateTime.Now.ToString("HH:mm") + "浼楁瘏鎻愪緵鐪熷疄鏁版嵁鍑虹幇寮傚父";
                                     var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
                                     select.BakData = JsonHelper.Object2Json(ErrorBakData);
                                     select.States = 0;
+                                    if (lastDifferenceValue.RealDifferenceValue > 0)
+                                    {
+                                        select.RealDifferenceValue = lastDifferenceValue.RealDifferenceValue;
+                                    }
+                                    else
+                                    {
+                                        select.RealDifferenceValue = 60000;
+                                    }
                                     _bll.Update(select);
-                                    return null;
+                                }
+                                else
+                                {
+                                    if (lastDifferenceValue.RealDifferenceValue > 0)
+                                    {
+                                        select.RealDifferenceValue = lastDifferenceValue.RealDifferenceValue;
+                                    }
+                                    else
+                                    {
+                                        select.RealDifferenceValue = 60000;
+                                    }
+                                    select.States = 0;
+                                    _bll.Update(select);
                                 }
                             }
                             else
@@ -79,14 +99,35 @@
                         {
                             select.RealTotalValue = TodayRealdataList.Last().Total;
                             select.RealDifferenceValue = TodayRealdataList.Last().Total - _bll.GetEnd2Days(240).Where(x => x.DayHour == WaterPredictRecord.ConvertIntDay(DateTime.Now.AddHours(-1))).Last().RealTotalValue;
-                            if (select.RealDifferenceValue == 0 || select.RealDifferenceValue < 0)
+                            if (select.RealDifferenceValue == 0 || select.RealDifferenceValue < 0 || select.RealDifferenceValue > 100000)
                             {
                                 if (PredictHelper.IsOpenState())
                                 {
-                                    select.Description = "鐪熷疄鏁版嵁鍑虹幇寮傚父";
+                                    select.Description += ",鏃堕棿:" + DateTime.Now.ToString("HH:mm") + "浼楁瘏鎻愪緵鐪熷疄鏁版嵁鍑虹幇寮傚父";
                                     var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
                                     select.BakData = JsonHelper.Object2Json(ErrorBakData);
                                     select.States = 0;
+                                    if (lastDifferenceValue.RealDifferenceValue > 0)
+                                    {
+                                        select.RealDifferenceValue = lastDifferenceValue.RealDifferenceValue;
+                                    }
+                                    else
+                                    {
+                                        select.RealDifferenceValue = 60000;
+                                    }
+                                    _bll.Update(select);
+                                }
+                                else
+                                {
+                                    if (lastDifferenceValue.RealDifferenceValue > 0)
+                                    {
+                                        select.RealDifferenceValue = lastDifferenceValue.RealDifferenceValue;
+                                    }
+                                    else
+                                    {
+                                        select.RealDifferenceValue = 60000;
+                                    }
+                                    select.States = 1;
                                     _bll.Update(select);
                                 }
                             }
@@ -99,32 +140,35 @@
                     }
                     catch (Exception e)
                     {
-                        select.RealTotalValue = 0;
+                        select.RealTotalValue = TodayRealdataList.Last().Total;
                         select.States = 0;
-                        select.Description = "涓虹湡瀹炴暟鎹祴鍊奸敊璇�!" + "鍘熷洜:" + e;
+                        select.RealDifferenceValue = lastDifferenceValue.RealDifferenceValue; ;
+                        select.Description += ",鏃堕棿:" + DateTime.Now.ToString("HH:mm") + "閬囧埌鏈煡閿欒!" + "鍘熷洜:" + e;
                         var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
                         select.BakData = JsonHelper.Object2Json(ErrorBakData);
                         _bll.Update(select);
-                        // LogHelper.Info("鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�,鏃堕棿:" + DateTime.Now.ToString());
+                        LogHelper.Info("閬囧埌鏈煡閿欒!" + "鍘熷洜:" + e);
                     }
                 }
                 else
                 {
-                    select.RealTotalValue = 0;
-                    select.States = 0;
-                    select.RealDifferenceValue = 60000;
-                    select.Description = "鍙栧埌鐨勬暟鎹笌褰撳墠鏃堕棿涓嶅尮閰�,鎴栨壘涓嶅埌涓庡綋鍓嶆椂闂村尮閰嶇殑棰勬祴鍊�";
-                    var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
-                    select.BakData = JsonHelper.Object2Json(ErrorBakData);
-                    _bll.Update(select);
+                    /*  select.RealTotalValue = 0;
+                      select.States = 0;
+                      select.RealDifferenceValue = 60000;
+                      select.Description += ",鏃堕棿:" + DateTime.Now.ToString("HH:mm") + "鍙栧埌鐨勬暟鎹笌褰撳墠鏃堕棿涓嶅尮閰�,鎴栨壘涓嶅埌涓庡綋鍓嶆椂闂村尮閰嶇殑棰勬祴鍊�";
+                      var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
+                      select.BakData = JsonHelper.Object2Json(ErrorBakData);
+                      _bll.Update(select);*/
+                    LogHelper.Info("鎵句笉鍒板搴斿綋鍓嶆椂闂村搴旀暟鎹� 鏃堕棿:" + DateTime.Now);
+                    return null;
                 }
             }
             else
             {
                 select.RealTotalValue = 0;
                 select.States = 0;
-                select.Description = "鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�";
-                select.RealDifferenceValue = 60000;
+                select.Description += ",鏃堕棿:" + DateTime.Now.ToString("HH:mm") + "鏈兘浠庝紬姣呭彇鍒扮湡瀹炴暟鎹�";
+                select.RealDifferenceValue = lastDifferenceValue.RealDifferenceValue; ;
                 var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
                 select.BakData = JsonHelper.Object2Json(ErrorBakData);
                 _bll.Update(select);
@@ -145,22 +189,29 @@
             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).OrderBy(x => x.DayHour).ToList();
-            for (int i = 0; i < currentdata.Count; i++)
+            if (currentdata.Count == 24)
             {
-                currentdata[i].LastPredictValue = Math.Round(predictdata[i].Total, 0);
-                if (currentdata[i].LastPredictValue > 90000 || currentdata[i].LastPredictValue < 20000)
+                for (int i = 0; i < currentdata.Count; i++)
                 {
-                    currentdata[i].Description = "棰勬祴鏁版嵁鍋忓樊杩囧ぇ";
-                    var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
-                    currentdata[i].BakData = JsonHelper.Object2Json(ErrorBakData);
-                    currentdata[i].States = 0;
+                    currentdata[i].LastPredictValue = Math.Round(predictdata[i].Total, 0);
+                    if (currentdata[i].LastPredictValue > 90000 || currentdata[i].LastPredictValue < 20000)
+                    {
+                        currentdata[i].Description += ",鏃堕棿:" + DateTime.Now.ToString("HH:mm") + "棰勬祴鏁版嵁鍋忓樊杩囧ぇ";
+                        var ErrorBakData = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Today, DateTime.Today.AddDays(1), "300s").Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList();  //鑾峰彇褰撳墠鏃ユ湡鍓嶄粖澶╃殑鎵�鏈夊��
+                        currentdata[i].BakData = JsonHelper.Object2Json(ErrorBakData);
+                        currentdata[i].States = 0;
+                    }
+                    else
+                    {
+                        currentdata[i].States = 1;
+                    }
+                    currentdata[i].LastPredictTime = DateTime.Now;
+                    currentdata[i].PredictValueList = currentdata[i].LastPredictValue.ToString() + "," + currentdata[i].PredictValueList;
                 }
-                else
-                {
-                    currentdata[i].States = 1;
-                }
-                currentdata[i].LastPredictTime = DateTime.Now;
-                currentdata[i].PredictValueList = currentdata[i].LastPredictValue.ToString() + "," + currentdata[i].PredictValueList;
+            }
+            else
+            {
+                LogHelper.Info("浠婂ぉ涓�澶╃殑鏁版嵁灏忎簬24鏉� ---涓嶅叏");
             }
             _bll.BatSet(currentdata);
             LogHelper.Info("宸茬粡鏇挎崲鐪熷疄鏁版嵁");
@@ -189,23 +240,40 @@
             var predictdata = _SSAPredictHelper.Predict(tupleList, 3600, 10, 2880, (float)0.99, 48);
             var list = alllist.Where(x => x.DayHour >= lastdaystarthour + 100 && x.DayHour <= lastdayendhour + 100).OrderBy(x => x.DayHour).ToList();
             //鎵惧埌浠婂ぉ鎵�鏈夌殑棰勬祴鏁版嵁,骞舵浛鎹�
-            for (int i = 0; i < predictdata.Count; i++)
+            if (list.Count == 0 || list.Count < 24)
             {
-                if (i < 24)
-                {
-                    list[i].LastPredictTime = DateTime.Now;
-                    list[i].LastPredictValue = Math.Round(predictdata[i].Total, 0);
-                    list[i].PredictValueList = list[i].LastPredictValue.ToString() + "," + list[i].PredictValueList;
-                    list[i].States = 1;
-                }
-                else
+                LogHelper.Info("鏇挎崲褰撴棩瀹屾暣棰勬祴鏁版嵁鏃舵壘涓嶅埌瀵瑰簲鏃堕棿--");
+                for (int i = 24; i < predictdata.Count; i++)
                 {
                     int dayHour = int.Parse(string.Format("{0:00}{1:00}{2:00}", predictdata[i].DateTime.Month, predictdata[i].DateTime.Day, predictdata[i].DateTime.Hour));
                     list.Add(new WaterPredictRecord { DayHour = dayHour, PredictTime = DateTime.Now, LastPredictValue = Math.Round(predictdata[i].Total, 0), States = 1 });
                 }
+                _bll.BatSet(list);
+                LogHelper.Info("鏃堕棿:" + DateTime.Now + "---棰勬祴浠婃槑涓ゅぉ鏁版嵁");
+                return;
             }
-            _bll.BatSet(list);
-            LogHelper.Info("鏃堕棿:" + DateTime.Now + "---棰勬祴浠婃槑涓ゅぉ鏁版嵁");
+            if (list.Count == 24)
+            {
+                for (int i = 0; i < predictdata.Count; i++)
+                {
+                    if (i < 24)
+                    {
+                        list[i].LastPredictTime = DateTime.Now;
+                        list[i].LastPredictValue = Math.Round(predictdata[i].Total, 0);
+                        list[i].PredictValueList = list[i].LastPredictValue.ToString() + "," + list[i].PredictValueList;
+                        list[i].States = 1;
+                    }
+                    else
+                    {
+                        int dayHour = int.Parse(string.Format("{0:00}{1:00}{2:00}", predictdata[i].DateTime.Month, predictdata[i].DateTime.Day, predictdata[i].DateTime.Hour));
+                        list.Add(new WaterPredictRecord { DayHour = dayHour, PredictTime = DateTime.Now, LastPredictValue = Math.Round(predictdata[i].Total, 0), States = 1 });
+                    }
+                }
+                _bll.BatSet(list);
+                LogHelper.Info("鏃堕棿:" + DateTime.Now + "---棰勬祴浠婃槑涓ゅぉ鏁版嵁");
+            }
+            /*  _bll.BatSet(list);
+              LogHelper.Info("鏃堕棿:" + DateTime.Now + "---棰勬祴浠婃槑涓ゅぉ鏁版嵁");*/
         }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3