| | |
| | | using IStation.Application; |
| | | using IStation.ChEr.Application; |
| | | using IStation.ChEr.Model; |
| | | using IStation.Service; |
| | | using Quartz; |
| | | using System.Data; |
| | | using Yw; |
| | | using Yw.Dto; |
| | | using static IStation.Service.SSAPredictHelper; |
| | | |
| | | namespace IStation.ChEr.WebApi |
| | |
| | | /// <returns></returns> |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | 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)).Where(x => x.DateTime.Hour <= DateTime.Now.Hour).ToList(); //è·åå½åæ¥æåä»å¤©çææå¼ |
| | | 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(); |
| | | if (TodayRealdataList.Last().DateTime.Hour == DateTime.Now.Hour && select != null) |
| | | // 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(600); |
| | | // LogHelper.Info("æ°æ®åºååº" + JsonHelper.Object2Json(twoDaysList)); |
| | | //éä¸å½åæ¶é´å¯¹åºçæ°æ®åºæ°æ® |
| | | var select = twoDaysList.Find(x => x.DayHour == dayHour); |
| | | //å½åçä¸ä¸ä¸ªå°æ¶çæ°æ® |
| | | var lastValue = twoDaysList.Find(x => x.DayHour == lastHour); |
| | | try |
| | | { |
| | | try |
| | | var allRealData = ConnectHelper.GetLatelyOneHourValue("120s", out string error); |
| | | if (error != string.Empty) |
| | | { |
| | | select.RealValue = TodayRealdataList.Last().Total; |
| | | select.LastPredictTime = DateTime.Now; |
| | | _bll.Update(select); |
| | | LogHelper.Info(error); |
| | | } |
| | | catch |
| | | var line1 = PredictHelper.GetAccWater(allRealData, 0, out string line1error); |
| | | select.States = 1; |
| | | if (line1error != string.Empty) |
| | | { |
| | | select.RealValue = -1; |
| | | _bll.Update(select); |
| | | LogHelper.Info("æªè½ä»ä¼æ¯
åå°ç宿°æ®,æ¶é´:" + DateTime.Now.ToString()); |
| | | select.BakData += JsonHelper.Object2Json(allRealData[0]); |
| | | select.Description += "åå®ä¸çº¿æ°æ®æè¯¯" + line1error; |
| | | select.States = 0; |
| | | } |
| | | var line2 = PredictHelper.GetAccWater(allRealData, 1, out string line2error); |
| | | if (line2error != string.Empty) |
| | | { |
| | | select.BakData += JsonHelper.Object2Json(allRealData[1]); |
| | | select.Description += "åå®äºçº¿æ°æ®æè¯¯" + line2error; |
| | | select.States = 0; |
| | | } |
| | | |
| | | var line3 = PredictHelper.GetAccWater(allRealData, 2, out string line3error); |
| | | if (line3error != string.Empty) |
| | | { |
| | | select.BakData += JsonHelper.Object2Json(allRealData[2]); |
| | | select.Description += "åå®ä¸çº¿æ°æ®æè¯¯" + line3error; |
| | | select.States = 0; |
| | | } |
| | | |
| | | var pipe2400 = PredictHelper.GetAccWater(allRealData, 3, out string pipe2400error); |
| | | if (pipe2400error != string.Empty) |
| | | { |
| | | select.BakData += JsonHelper.Object2Json(allRealData[3]); |
| | | select.Description += "2400æ»ç®¡æ°æ®æè¯¯" + pipe2400error; |
| | | select.States = 0; |
| | | } |
| | | |
| | | var pipe2700 = PredictHelper.GetAccWater(allRealData, 4, out string pipe2700error); |
| | | if (pipe2700error != string.Empty) |
| | | { |
| | | select.BakData += JsonHelper.Object2Json(allRealData[4]); |
| | | select.Description += "2600æ»ç®¡æ°æ®æè¯¯" + pipe2700error; |
| | | select.States = 0; |
| | | } |
| | | |
| | | if (line1 != 0 || line2 != 0 || line3 != 0 || pipe2400 != 0 || pipe2700 != 0) |
| | | { |
| | | select.RealDifferenceValue = line1 + line2 + line3 + pipe2400 + pipe2700; |
| | | if (select.RealDifferenceValue < 20000 || select.RealDifferenceValue > 90000) |
| | | { |
| | | select.Description += "ç宿°æ®åå·®è¿å¤§,è¯·æ£æµæ°æ®"; |
| | | select.States = 0; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | select.RealDifferenceValue = lastValue.RealDifferenceValue; |
| | | LogHelper.Info(">>>>äºæ¡ç®¡å
æ°æ®æå¼å¸¸"); |
| | | }; |
| | | // select.RealDifferenceValue = select.RealTotalValue - lastValue.RealTotalValue; |
| | | LogHelper.Info("æ¿æ¢æ°æ®"); |
| | | _bll.Update(select); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info("åºç°é误,è¿å
¥catch" + ex.Message); |
| | | |
| | | select.RealTotalValue = 0; |
| | | select.States = 0; |
| | | select.Description += ",æ¶é´:" + DateTime.Now.ToString("HH:mm") + "æªè½ä»ä¼æ¯
åå°ç宿°æ®"; |
| | | select.RealDifferenceValue = lastValue.RealDifferenceValue; ; |
| | | var ErrorBakData = ConnectHelper.GetLatelyOneHourValue("120s", out string error); |
| | | select.BakData = JsonHelper.Object2Json(ErrorBakData); |
| | | LogHelper.Info("åå¤ä¿®æ¹æ°æ®åº"); |
| | | |
| | | _bll.Update(select); |
| | | LogHelper.Info("伿¯
è·åæ°æ®åºç°é®é¢>>>>" + JsonHelper.Object2Json(ErrorBakData)); |
| | | } |
| | | LogHelper.Info("å¼å§è·åå岿°æ®"); |
| | | //å¼å§è¿è¡é¢æµ |
| | | var beforeTwoDays = _bll.GetEnd2Days(350); |
| | | |
| | | var beforedata = beforeTwoDays.Where(x => x.DayHour <= dayHour).Take(360).ToList(); |
| | | List<Tuple<DateTime, double>> tupleList = beforedata |
| | | .Select(input => |
| | | { |
| | | var dateTime = WaterPredictRecord.ConvertDatatime(input.DayHour); |
| | | return Tuple.Create(dateTime, (double)input.RealDifferenceValue); |
| | | }).ToList(); //转æ¢ä¸ºSSAç®æ³æéå
¥å |
| | | |
| | | tupleList = tupleList.OrderBy(x => x.Item1).ToList(); //æç
§æ¶é´è¿è¡æåº |
| | | var predictdata = _SSAPredictHelper.Predict(tupleList, 3600, 15, 2880, (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).OrderBy(x => x.DayHour).ToList(); |
| | | if (currentdata.Count == 24) |
| | | { |
| | | for (int i = 0; i < currentdata.Count; i++) |
| | | { |
| | | 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 realScadaDatas = ConnectHelper.GetLatelyOneHourValue("120s", out string error); |
| | | currentdata[i].BakData += JsonHelper.Object2Json(realScadaDatas); |
| | | currentdata[i].States = 0; |
| | | } |
| | | else |
| | | { |
| | | if (currentdata[i].States == 0) |
| | | { |
| | | 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 |
| | | { |
| | | select.RealValue = -1; |
| | | select.LastPredictTime = DateTime.Now; |
| | | _bll.Update(select); |
| | | LogHelper.Info("æªè½ä»ä¼æ¯
åå°ç宿°æ®,æ¶é´:" + DateTime.Now.ToString()); |
| | | LogHelper.Info("ä»å¤©ä¸å¤©çæ°æ®å°äº24æ¡ ---ä¸å
¨"); |
| | | } |
| | | var beforedata = TwoDaysList.Where(x => x.DayHour <= dayHour).Take(240).ToList(); |
| | | |
| | | List<Tuple<DateTime, double>> tupleList = beforedata |
| | | .Select(input => |
| | | { |
| | | int month = input.DayHour / 10000; // è·åæ´æ°çä¸ä½æ°è¡¨ç¤ºæä»½ |
| | | 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); |
| | | }).ToList(); //转æ¢ä¸ºSSAç®æ³æéå
¥å |
| | | |
| | | 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(); |
| | | for (int i = 0; i < currentdata.Count; i++) |
| | | { |
| | | currentdata[i].LastPredictValue = Math.Round(predictdata[i].Total, 1); |
| | | currentdata[i].LastPredictTime = DateTime.Now; |
| | | currentdata[i].PredictValueList = currentdata[i].LastPredictValue.ToString() + "," + currentdata[i].PredictValueList; |
| | | } |
| | | LogHelper.Info("å¼å§æ¿æ¢ç宿°æ®"); |
| | | _bll.BatSet(currentdata); |
| | | LogHelper.Info("å·²ç»æ¿æ¢ç宿°æ®"); |
| | | return null; |
| | |
| | | List<WaterPredictRecord> waterPredictRecords = new List<WaterPredictRecord>(); |
| | | List<SSAInput> ssaInput = new List<SSAInput>(); |
| | | |
| | | var alllist = _bll.GetEnd2Days(300); |
| | | var alllist = _bll.GetEnd2Days(500); |
| | | var lastdaystarthour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Today.AddDays(-1).Month, DateTime.Today.AddDays(-1).Day, 0)); |
| | | var lastdayendhour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Today.AddDays(-1).Month, DateTime.Today.AddDays(-1).Day, 23)); |
| | | var selectList = alllist.Where(x => x.DayHour <= lastdayendhour).ToList(); |
| | | var selectList = alllist.Where(x => x.DayHour <= lastdayendhour).ToList().Take(240); |
| | | foreach (var item in selectList) |
| | | { |
| | | // æåæä»½ãæ¥æåå°æ¶é¨å |
| | | int month = item.DayHour / 10000; // è·åæ´æ°çä¸ä½æ°è¡¨ç¤ºæä»½ |
| | | int day = (item.DayHour % 10000) / 100; // è·åæ´æ°çç¾ä½ååä½è¡¨ç¤ºæ¥æ |
| | | int hour = item.DayHour % 100; // è·åæ´æ°çä¸ªä½æ°è¡¨ç¤ºå°æ¶ |
| | | |
| | | // æé DateTime 对象 |
| | | DateTime dateTime = new DateTime(DateTime.Now.Year, month, day, hour, 0, 0); |
| | | ssaInput.Add(new SSAInput { Time = dateTime, Value = (float)item.RealValue }); |
| | | var dateTime = WaterPredictRecord.ConvertDatatime(item.DayHour); |
| | | 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(); |
| | | 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, 1); |
| | | list[i].PredictValueList = list[i].LastPredictValue.ToString() + "," + list[i].PredictValueList; |
| | | } |
| | | 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, 1) }); |
| | | 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 + "---颿µä»æä¸¤å¤©æ°æ®");*/ |
| | | } |
| | | } |
| | | } |