| | |
| | |  |
| | | |
| | | using System; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Web; |
| | | using Microsoft.Extensions.Logging; |
| | | using Quartz; |
| | | using System.Threading.Tasks; |
| | | using static IStation.Service.SSAPredictHelper; |
| | | using SqlSugar.Extensions; |
| | | using IStation.Service; |
| | | using IStation.ChEr.Model; |
| | | using Microsoft.AspNetCore.Components.Forms; |
| | | using IStation.Application; |
| | | using System.Data; |
| | | |
| | | namespace IStation.ChEr.WebApi |
| | | { |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | [DisallowConcurrentExecution] |
| | | public class CalcWaterPredictJob : IJob |
| | | { |
| | | |
| | | /// <summary> |
| | | /// / |
| | | /// </summary> |
| | | public CalcWaterPredictJob( ) |
| | | /// </summary> |
| | | public CalcWaterPredictJob() |
| | | { |
| | | |
| | | } |
| | | |
| | | private SSAPredictHelper _SSAPredictHelper = new SSAPredictHelper(); |
| | | private BLL.WaterPredictRecord _bll = new BLL.WaterPredictRecord(); |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <param name="context"></param> |
| | | /// <returns></returns> |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | IStation.LogHelper.Info("CalcWaterPredict"); |
| | | if (DateTime.Now.Hour == 12 && DateTime.Now.Minute == 2) |
| | | { |
| | | insert2daysData(); |
| | | } |
| | | var realdata = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Now); |
| | | int dayHour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour)); |
| | | var twoDaysList = _bll.GerEnd2Days(300); |
| | | var select = twoDaysList.Where(x => x.DayHour == dayHour).FirstOrDefault(); |
| | | select.RealValue = realdata.Total; |
| | | select.LastPredictTime = DateTime.Now; |
| | | _bll.Update(select); |
| | | var beforedata = twoDaysList.Where(x => x.DayHour <= dayHour).Take(240).ToList(); |
| | | |
| | | return Task.CompletedTask; |
| | | 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(); |
| | | |
| | | 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, 1)); |
| | | var endhour = int.Parse(string.Format("{0:00}{1:00}{2:00}", DateTime.Now.Month, DateTime.Now.Day, 24)); |
| | | var currentdata = twoDaysList.Where(x => x.DayHour >= starthour && x.DayHour <= endhour).ToList(); |
| | | for (int i = 0; i < currentdata.Count; i++) |
| | | { |
| | | currentdata[i].LastPredictValue = predictdata[i].Total; |
| | | currentdata[i].LastPredictTime = DateTime.Now; |
| | | currentdata[i].PredictValueList = currentdata[i].LastPredictValue.ToString() + "," + currentdata[i].PredictValueList; |
| | | } |
| | | _bll.BatSet(currentdata); |
| | | return null; |
| | | } |
| | | |
| | | //颿µä¸¤å¤©æ°æ®(ä»å¤©åæå¤©) |
| | | private void insert2daysData() |
| | | { |
| | | List<WaterPredictRecord> waterPredictRecords = new List<WaterPredictRecord>(); |
| | | List<SSAInput> SSAInput = new List<SSAInput>(); |
| | | var bll = new BLL.WaterPredictRecord(); |
| | | |
| | | var alllist = bll.GetLast(240); |
| | | foreach (var item in alllist) |
| | | { |
| | | // æåæä»½ãæ¥æåå°æ¶é¨å |
| | | 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 }); |
| | | } |
| | | 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 }); |
| | | } |
| | | |
| | | foreach (var item in waterPredictRecords) |
| | | { |
| | | bll.Insert(item); |
| | | } |
| | | // bll.Inserts(waterPredictRecords); |
| | | } |
| | | } |
| | | } |