|
|
|
@ -1,4 +1,5 @@
|
|
|
|
|
using AngleSharp.Css.Values;
|
|
|
|
|
using AngleSharp.Dom;
|
|
|
|
|
using Masuit.Tools;
|
|
|
|
|
using Masuit.Tools.Models;
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
@ -173,14 +174,16 @@ namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
var result = new Result();
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var query = context.EquipmentRecords.Where(f => f.StartTime >= begDate && f.StartTime <= endDate).ToList();
|
|
|
|
|
var query = context.EquipmentRecords.Where(f => (f.StartTime >= begDate && f.StartTime <= endDate) || (f.EndTime >= begDate && f.EndTime <= endDate)).ToList();
|
|
|
|
|
//获取状态统计时间
|
|
|
|
|
var total = query.GroupBy(f => new { f.EquipmentId, f.State })
|
|
|
|
|
.Select(f => new TotalRecord
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = f.Key.EquipmentId,
|
|
|
|
|
State = f.Key.State,
|
|
|
|
|
Value = f.Sum(ff => (ff.EndTime - ff.StartTime).TotalMinutes)
|
|
|
|
|
Value = Convert.ToDecimal(f.Sum(ff => (ff.EndTime - ff.StartTime).TotalMinutes)),
|
|
|
|
|
Date = DateTime.Parse(f.Min(ff => ff.StartTime).ToString("yyyy-MM-dd")),
|
|
|
|
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
if (total.Count == 0)
|
|
|
|
@ -188,8 +191,18 @@ namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
result.Message = "没有汇总统计数据";
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
//出炉数量统计
|
|
|
|
|
const string furnaceNum = "FurnaceNum";
|
|
|
|
|
var furnaceQuy = (from q in query
|
|
|
|
|
join e in context.EquipmentInfos.Where(f => !f.IsDelete) on q.EquipmentId equals e.Id
|
|
|
|
|
where q.State == EquipmentState.Run
|
|
|
|
|
select new
|
|
|
|
|
{
|
|
|
|
|
q.EquipmentId,
|
|
|
|
|
e.EquipmentType,
|
|
|
|
|
q.StartTime,
|
|
|
|
|
q.EndTime
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获取配置的设备的阈值
|
|
|
|
|
var balzersConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentType.Balzers).Content;
|
|
|
|
|
var cemeconConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentType.CemeCon).Content;
|
|
|
|
@ -209,119 +222,77 @@ namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
{
|
|
|
|
|
int.TryParse(ionbondConfig.ConfigValue, out ionbond);
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
var furnaceList = (from q in query
|
|
|
|
|
join e in context.EquipmentInfos.Where(f => !f.IsDelete) on q.EquipmentId equals e.Id
|
|
|
|
|
where q.State == EquipmentState.Run
|
|
|
|
|
select new
|
|
|
|
|
{
|
|
|
|
|
q.EquipmentId,
|
|
|
|
|
e.EquipmentType,
|
|
|
|
|
q.StartTime,
|
|
|
|
|
q.EndTime
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
foreach (var item in furnaceList)
|
|
|
|
|
var minDate = total.Min(f => f.Date);
|
|
|
|
|
var maxDate = total.Max(f => f.Date);
|
|
|
|
|
|
|
|
|
|
var dayTotals = context.EquipmentRecordDayTotals.Where(f => f.TotalDay >= minDate && f.TotalDay <= maxDate).ToList();
|
|
|
|
|
foreach (var item in total.Select(f => new { f.EquipmentId, f.Date }).Distinct())
|
|
|
|
|
{
|
|
|
|
|
//是否有开炉数据
|
|
|
|
|
var furnaceVal = total.Where(f => f.EquipmentId == item.EquipmentId && f.State == furnaceNum).FirstOrDefault();
|
|
|
|
|
if (furnaceVal == null)
|
|
|
|
|
var value = dayTotals.Where(f => f.EquipmentId == item.EquipmentId && f.TotalDay == item.Date).FirstOrDefault();
|
|
|
|
|
if (value.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
furnaceVal = new TotalRecord
|
|
|
|
|
value = new EquipmentRecordDayTotalEntity
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = item.EquipmentId,
|
|
|
|
|
State = furnaceNum,
|
|
|
|
|
Value = 0
|
|
|
|
|
TotalDay = item.Date,
|
|
|
|
|
};
|
|
|
|
|
total.Add(furnaceVal);
|
|
|
|
|
value.Create();
|
|
|
|
|
context.EquipmentRecordDayTotals.Add(value);
|
|
|
|
|
}
|
|
|
|
|
//计算开炉次数
|
|
|
|
|
var minutes = (item.EndTime - item.StartTime).TotalMinutes;
|
|
|
|
|
switch (item.EquipmentType)
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
case EquipmentType.Balzers:
|
|
|
|
|
if (minutes >= balzers)
|
|
|
|
|
{
|
|
|
|
|
furnaceVal.Value++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentType.Ionbond:
|
|
|
|
|
if (minutes >= ionbond)
|
|
|
|
|
{
|
|
|
|
|
furnaceVal.Value++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentType.CemeCon:
|
|
|
|
|
if (minutes >= cemecon)
|
|
|
|
|
{
|
|
|
|
|
furnaceVal.Value++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
value.Update();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//记录统计时间
|
|
|
|
|
var list = context.EquipmentRecordDayTotals.Where(f => f.TotalDay == begDate).ToList();
|
|
|
|
|
//有记录
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
{
|
|
|
|
|
var records = total.Where(f => f.EquipmentId == item.EquipmentId).ToList();
|
|
|
|
|
foreach (var record in records)
|
|
|
|
|
//运行时间
|
|
|
|
|
var run = total.Where(f => f.EquipmentId == value.EquipmentId && f.Date == value.TotalDay && f.State == EquipmentState.Run).FirstOrDefault();
|
|
|
|
|
if (!run.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
switch (record.State)
|
|
|
|
|
{
|
|
|
|
|
case furnaceNum:
|
|
|
|
|
item.FurnaceNum = Convert.ToInt32(record.Value);
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Run:
|
|
|
|
|
item.TotalRunningTime = Convert.ToDecimal(record.Value);
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Alarm:
|
|
|
|
|
item.TotalAlarmTime = Convert.ToDecimal(record.Value);
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Stop:
|
|
|
|
|
item.TotalStopTime = Convert.ToDecimal(record.Value);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
result.Message = "没有的设备状态:" + record.State.ToString();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
item.Update();
|
|
|
|
|
value.TotalRunningTime = run.Value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//没有记录
|
|
|
|
|
var notRecords = total.Where(f => !list.Select(ff => ff.EquipmentId).ToList().Contains(f.EquipmentId)).ToList();
|
|
|
|
|
foreach (var equipmentId in notRecords.Select(f => f.EquipmentId).Distinct())
|
|
|
|
|
{
|
|
|
|
|
var records = total.Where(f => f.EquipmentId == equipmentId).ToList();
|
|
|
|
|
var item = new EquipmentRecordDayTotalEntity
|
|
|
|
|
//待机时间
|
|
|
|
|
var stop = total.Where(f => f.EquipmentId == value.EquipmentId && f.Date == value.TotalDay && f.State == EquipmentState.Stop).FirstOrDefault();
|
|
|
|
|
if (!stop.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = equipmentId,
|
|
|
|
|
TotalDay = begDate
|
|
|
|
|
};
|
|
|
|
|
foreach (var record in records)
|
|
|
|
|
value.TotalStopTime = stop.Value;
|
|
|
|
|
}
|
|
|
|
|
//报警时间
|
|
|
|
|
var alarm = total.Where(f => f.EquipmentId == value.EquipmentId && f.Date == value.TotalDay && f.State == EquipmentState.Alarm).FirstOrDefault();
|
|
|
|
|
if (!alarm.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
switch (record.State)
|
|
|
|
|
value.TotalAlarmTime = alarm.Value;
|
|
|
|
|
}
|
|
|
|
|
value.FurnaceNum = 0;
|
|
|
|
|
//出炉数量
|
|
|
|
|
var furnaceList = furnaceQuy.Where(f => f.EquipmentId == value.EquipmentId && value.TotalDay.Value.ToString("yyyy-MM-dd")==f.StartTime.ToString("yyyy-MM-dd")).ToList();
|
|
|
|
|
foreach (var furnace in furnaceList)
|
|
|
|
|
{
|
|
|
|
|
//计算开炉次数
|
|
|
|
|
var minutes = (furnace.EndTime - furnace.StartTime).TotalMinutes;
|
|
|
|
|
switch (furnace.EquipmentType)
|
|
|
|
|
{
|
|
|
|
|
case furnaceNum:
|
|
|
|
|
item.FurnaceNum = Convert.ToInt32(record.Value);
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Run:
|
|
|
|
|
item.TotalRunningTime = Convert.ToDecimal(record.Value);
|
|
|
|
|
case EquipmentType.Balzers:
|
|
|
|
|
if (minutes >= balzers)
|
|
|
|
|
{
|
|
|
|
|
value.FurnaceNum++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Alarm:
|
|
|
|
|
item.TotalAlarmTime = Convert.ToDecimal(record.Value);
|
|
|
|
|
case EquipmentType.Ionbond:
|
|
|
|
|
if (minutes >= ionbond)
|
|
|
|
|
{
|
|
|
|
|
value.FurnaceNum++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Stop:
|
|
|
|
|
item.TotalStopTime = Convert.ToDecimal(record.Value);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
result.Message = "没有的设备状态:" + record.State.ToString();
|
|
|
|
|
case EquipmentType.CemeCon:
|
|
|
|
|
if (minutes >= cemecon)
|
|
|
|
|
{
|
|
|
|
|
value.FurnaceNum++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
item.Create();
|
|
|
|
|
}
|
|
|
|
|
context.EquipmentRecordDayTotals.Add(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
context.SaveChanges();
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
@ -339,12 +310,12 @@ namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
var query = context.EquipmentRecordDayTotals.AsQueryable();
|
|
|
|
|
//获取最后更新时间
|
|
|
|
|
var list = context.EquipmentRecordTotals.ToList();
|
|
|
|
|
var maxDate = list.Max(f => f.UpdateAt);
|
|
|
|
|
//如果有记录
|
|
|
|
|
if (maxDate.HasValue)
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.UpdateAt > maxDate);
|
|
|
|
|
}
|
|
|
|
|
//var maxDate = list.Max(f => f.UpdateAt);
|
|
|
|
|
////如果有记录
|
|
|
|
|
//if (maxDate.HasValue)
|
|
|
|
|
//{
|
|
|
|
|
// query = query.Where(f => f.UpdateAt > maxDate);
|
|
|
|
|
//}
|
|
|
|
|
var values = query.GroupBy(f => f.EquipmentId).Select(f => new EquipmentRecordTotalEntity
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = f.Key,
|
|
|
|
@ -378,10 +349,10 @@ namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
item.FurnaceNum += value.FurnaceNum;
|
|
|
|
|
item.TotalAlarmTime += value.TotalAlarmTime;
|
|
|
|
|
item.TotalRunningTime += value.TotalRunningTime;
|
|
|
|
|
item.TotalStopTime += value.TotalStopTime;
|
|
|
|
|
item.FurnaceNum = value.FurnaceNum;
|
|
|
|
|
item.TotalAlarmTime = value.TotalAlarmTime;
|
|
|
|
|
item.TotalRunningTime = value.TotalRunningTime;
|
|
|
|
|
item.TotalStopTime = value.TotalStopTime;
|
|
|
|
|
item.Update();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -397,7 +368,8 @@ namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
{
|
|
|
|
|
public string EquipmentId { get; set; }
|
|
|
|
|
public string State { get; set; }
|
|
|
|
|
public double Value { get; set; }
|
|
|
|
|
public decimal Value { get; set; }
|
|
|
|
|
public DateTime Date { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|