duheng
2024-05-13 204947203275d5190b1a816cb091f368aea79ac1
WaterPredict/IStation.ChEr.WebApi.Predict/ÈÎÎñ/CalcWaterPredictJob.cs
@@ -38,15 +38,23 @@
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            if (DateTime.Now.Hour == 12 && DateTime.Now.Minute == 2)
            if (DateTime.Now.Hour == 0 && DateTime.Now.Minute == 2)
            {
                insert2daysData();
            }
            var realdata = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Now);
            var realdata = ConnectHelper.GetByPumpOneDayWaterData(DateTime.Now, 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;
            if (realdata.Last().DateTime.Hour != DateTime.Now.Hour)
            {
                select.RealValue = realdata.Last().Total;
            }
            else
            {
                select.RealValue = -1;
                LogHelper.Info("未能从中毅取到真实数据,时间:" + DateTime.Now.ToString());
            }
            select.LastPredictTime = DateTime.Now;
            _bll.Update(select);
            var beforedata = twoDaysList.Where(x => x.DayHour <= dayHour).Take(240).ToList();
@@ -63,12 +71,12 @@
    .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 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 = predictdata[i].Total;
                currentdata[i].LastPredictValue = Math.Round(predictdata[i].Total, 1);
                currentdata[i].LastPredictTime = DateTime.Now;
                currentdata[i].PredictValueList = currentdata[i].LastPredictValue.ToString() + "," + currentdata[i].PredictValueList;
            }
@@ -80,10 +88,9 @@
        private void insert2daysData()
        {
            List<WaterPredictRecord> waterPredictRecords = new List<WaterPredictRecord>();
            List<SSAInput> SSAInput = new List<SSAInput>();
            var bll = new BLL.WaterPredictRecord();
            List<SSAInput> ssaInput = new List<SSAInput>();
            var alllist = bll.GetLast(240);
            var alllist = _bll.GerEnd2Days(240);
            foreach (var item in alllist)
            {
                // æå–月份、日期和小时部分
@@ -93,24 +100,19 @@
                // æž„造 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.RealValue });
            }
            List<Tuple<DateTime, double>> tupleList = SSAInput
            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 });
            }
            foreach (var item in waterPredictRecords)
            {
                bll.Insert(item);
            }
            //   bll.Inserts(waterPredictRecords);
            _bll.BatSet(waterPredictRecords);
        }
    }
}