216 lines
12 KiB
C#
216 lines
12 KiB
C#
using DataService.api;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Configuration;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Security.Policy;
|
|
using System.ServiceProcess;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Supplement
|
|
{
|
|
partial class ServiceSupplement : ServiceBase
|
|
{
|
|
System.Timers.Timer timer1; //计时器
|
|
|
|
log4net.ILog log;
|
|
|
|
DataService.BLL.device_info device_bll = new DataService.BLL.device_info();
|
|
|
|
DataService.BLL.electricity_data electricity_bll = new DataService.BLL.electricity_data();
|
|
|
|
string date_base;
|
|
|
|
public ServiceSupplement()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void DebugOnStart(string[] args)
|
|
{
|
|
OnStart(args);
|
|
}
|
|
|
|
protected override void OnStart(string[] args)
|
|
{
|
|
// TODO: 在此处添加代码以启动服务。
|
|
log4net.Config.XmlConfigurator.Configure();
|
|
log = log4net.LogManager.GetLogger("loginfo");
|
|
log.Info("启动服务");
|
|
|
|
date_base = ConfigurationManager.AppSettings["changdao_zhanlanguang"];
|
|
|
|
timer1 = new System.Timers.Timer();
|
|
timer1.Interval = 1000; //设置计时器事件间隔执行时间
|
|
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
|
|
timer1.Enabled = true;
|
|
}
|
|
|
|
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
|
{
|
|
int intHour = e.SignalTime.Hour;
|
|
int intMinute = e.SignalTime.Minute;
|
|
int intSecond = e.SignalTime.Second;
|
|
if ((intMinute == 0 && intSecond == 0) || (intMinute == 10 && intSecond == 0) || (intMinute == 20 && intSecond == 0) || (intMinute == 30 && intSecond == 0) || (intMinute == 40 && intSecond == 0) || (intMinute == 50 && intSecond == 0))
|
|
{
|
|
try
|
|
{
|
|
log.Info("开始补录");
|
|
var now = DateTime.Now;
|
|
var start_time = DateTime.Parse(now.AddHours(-14).ToString("yyyy-MM-dd HH:00:00"));
|
|
var end_time = DateTime.Parse(now.ToString("yyyy-MM-dd HH:00:00"));
|
|
var stime = start_time.ToString("yyyyMM");
|
|
var etime = end_time.ToString("yyyyMM");
|
|
if (electricity_bll.IsExistsTable(date_base, "electricity_data_" + stime))
|
|
{
|
|
electricity_bll.CreateTable(stime);
|
|
}
|
|
if (electricity_bll.IsExistsTable(date_base, "electricity_data_" + etime))
|
|
{
|
|
electricity_bll.CreateTable(etime);
|
|
}
|
|
var list = new List<DataService.Model.electricity_data>();
|
|
if (stime == etime)
|
|
{
|
|
list = electricity_bll.GetModelListDate(" EntireTime>='" + start_time + "' and EntireTime<'" + end_time + "' ", stime);
|
|
}
|
|
else
|
|
{
|
|
var list1 = electricity_bll.GetModelListDate(" EntireTime>='" + start_time + "' and EntireTime<'" + end_time + "' ", stime);
|
|
var list2 = electricity_bll.GetModelListDate(" EntireTime>='" + start_time + "' and EntireTime<'" + end_time + "' ", etime);
|
|
if (list1.Count() > 0)
|
|
{
|
|
list.AddRange(list1);
|
|
}
|
|
if (list2.Count() > 0)
|
|
{
|
|
list.AddRange(list2);
|
|
}
|
|
}
|
|
|
|
var date = DateTime.Parse(start_time.AddHours(+1).ToString("yyyy-MM-dd HH:00:00"));
|
|
|
|
var device_list = device_bll.GetModelList("");
|
|
// 查询缺失的小时数据并补充
|
|
foreach (var item in device_list)
|
|
{
|
|
DateTime currentDate = date;
|
|
while (currentDate < end_time)
|
|
{
|
|
var hourlyData = list.Find(x => x.EntireTime == currentDate && x.DeviceName == item.DeviceName && x.Reserve1 == item.FloorName);
|
|
if (hourlyData == null)
|
|
{
|
|
// 如果当前小时数据缺失,则使用上一个小时的数据
|
|
var previousHourlyData = list.Where(x => x.EntireTime < currentDate && x.DeviceName == item.DeviceName && x.Reserve1 == item.FloorName).OrderByDescending(a => a.EntireTime).FirstOrDefault();
|
|
if (previousHourlyData != null)
|
|
{
|
|
var model = new DataService.Model.electricity_data();
|
|
model.ElectricityId = Guid.NewGuid().ToString("N");
|
|
model.DeviceName = item.DeviceName;
|
|
model.EH = previousHourlyData.EH;
|
|
model.P = previousHourlyData.P;
|
|
model.Ia = previousHourlyData.Ia;
|
|
model.Ib = previousHourlyData.Ib;
|
|
model.Ic = previousHourlyData.Ic;
|
|
model.Ua = previousHourlyData.Ua;
|
|
model.Ub = previousHourlyData.Ub;
|
|
model.Uc = previousHourlyData.Uc;
|
|
model.Kvar = previousHourlyData.Kvar;
|
|
model.CreateTime = DateTime.Now;
|
|
model.EntireTime = currentDate;
|
|
model.Reserve1 = previousHourlyData.Reserve1;
|
|
model.Reserve2 = previousHourlyData.Reserve2;
|
|
var date1 = currentDate.ToString("yyyyMM");
|
|
electricity_bll.AddDate(model, date1);
|
|
list.Add(model);
|
|
}
|
|
else
|
|
{
|
|
if (currentDate == date)
|
|
{
|
|
var date_month = date.ToString("yyyyMM");
|
|
if (electricity_bll.IsExistsTable(date_base, "electricity_data_" + date_month))
|
|
{
|
|
electricity_bll.CreateTable(stime);
|
|
}
|
|
|
|
var zero_model = electricity_bll.GetModelListDate(" EntireTime<'" + date + "' and DeviceName='" + item.DeviceName + "' and Reserve1='" + item.FloorName + "' order by EntireTime desc limit 1 ", date_month).FirstOrDefault();
|
|
if (zero_model != null)
|
|
{
|
|
var model = new DataService.Model.electricity_data();
|
|
model.ElectricityId = Guid.NewGuid().ToString("N");
|
|
model.DeviceName = item.DeviceName;
|
|
model.EH = zero_model.EH;
|
|
model.P = zero_model.P;
|
|
model.Ia = zero_model.Ia;
|
|
model.Ib = zero_model.Ib;
|
|
model.Ic = zero_model.Ic;
|
|
model.Ua = zero_model.Ua;
|
|
model.Ub = zero_model.Ub;
|
|
model.Uc = zero_model.Uc;
|
|
model.Kvar = zero_model.Kvar;
|
|
model.CreateTime = DateTime.Now;
|
|
model.EntireTime = currentDate;
|
|
model.Reserve1 = zero_model.Reserve1;
|
|
model.Reserve2 = zero_model.Reserve2;
|
|
var date1 = currentDate.ToString("yyyyMM");
|
|
electricity_bll.AddDate(model, date1);
|
|
list.Add(model);
|
|
}
|
|
else
|
|
{
|
|
var date_month2 = date.AddMonths(-1).ToString("yyyyMM");
|
|
if (electricity_bll.IsExistsTable(date_base, "electricity_data_" + date_month2))
|
|
{
|
|
electricity_bll.CreateTable(stime);
|
|
}
|
|
var zero_model2 = electricity_bll.GetModelListDate(" EntireTime<'" + date + "' and DeviceName='" + item.DeviceName + "' and Reserve1='" + item.FloorName + "' order by EntireTime desc limit 1 ", date_month2).FirstOrDefault();
|
|
if (zero_model2 != null)
|
|
{
|
|
var model = new DataService.Model.electricity_data();
|
|
model.ElectricityId = Guid.NewGuid().ToString("N");
|
|
model.DeviceName = item.DeviceName;
|
|
model.EH = zero_model2.EH;
|
|
model.P = zero_model2.P;
|
|
model.Ia = zero_model2.Ia;
|
|
model.Ib = zero_model2.Ib;
|
|
model.Ic = zero_model2.Ic;
|
|
model.Ua = zero_model2.Ua;
|
|
model.Ub = zero_model2.Ub;
|
|
model.Uc = zero_model2.Uc;
|
|
model.Kvar = zero_model2.Kvar;
|
|
model.CreateTime = DateTime.Now;
|
|
model.EntireTime = currentDate;
|
|
model.Reserve1 = zero_model2.Reserve1;
|
|
model.Reserve2 = zero_model2.Reserve2;
|
|
var date1 = currentDate.ToString("yyyyMM");
|
|
electricity_bll.AddDate(model, date1);
|
|
list.Add(model);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
currentDate = currentDate.AddHours(1);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Info("补录数据失败,失败原因:" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void OnStop()
|
|
{
|
|
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
|
|
}
|
|
}
|
|
}
|