LonglslandExhibitionCenter/Supplement/ServiceSupplement.cs

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: 在此处添加代码以执行停止服务所需的关闭操作。
}
}
}