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()
|
{
|
}
|
|
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)
|
{
|
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();
|
|
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);
|
}
|
}
|
}
|