|
|
|
@ -1,15 +1,402 @@
|
|
|
|
|
using Masuit.Tools.Models;
|
|
|
|
|
using AngleSharp.Css.Values;
|
|
|
|
|
using Masuit.Tools;
|
|
|
|
|
using Masuit.Tools.Models;
|
|
|
|
|
using PVDEMCS.Common;
|
|
|
|
|
using PVDEMCS.Common.Constant;
|
|
|
|
|
using PVDEMCS.Common.DI;
|
|
|
|
|
using PVDEMCS.Services.Models;
|
|
|
|
|
using PVDEMCS.Services.Repositories.Entities;
|
|
|
|
|
|
|
|
|
|
namespace PVDEMCS.Services.Repositories.Impl
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 用户操作 数据层 实现
|
|
|
|
|
* 设备数据记录与统计 数据层 实现
|
|
|
|
|
*/
|
|
|
|
|
internal class EquipmentRecordRepository : IEquipmentRecordRepository
|
|
|
|
|
{
|
|
|
|
|
// public Result<PagedList<EquipmentInfoEntity>> GetEquipmentRecordPageList()
|
|
|
|
|
private ISysConfigRepository _configRepository;
|
|
|
|
|
public EquipmentRecordRepository(ISysConfigRepository configRepository)
|
|
|
|
|
{
|
|
|
|
|
_configRepository = configRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 设备状态记录
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取设备状态记录分页列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="equipmentName">设备名称</param>
|
|
|
|
|
/// <param name="equipmentCode">设备编号</param>
|
|
|
|
|
/// <param name="equipmentType">设备类型</param>
|
|
|
|
|
/// <param name="begTime">开始时间</param>
|
|
|
|
|
/// <param name="endTime">结束时间</param>
|
|
|
|
|
/// <param name="page">当前页</param>
|
|
|
|
|
/// <param name="size">页大小</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public Result<PagedList<EquipmentRecord>> GetEquipmentRecordPageList(string equipmentName, string equipmentCode, string equipmentType, DateTime begTime, DateTime endTime, int page, int size)
|
|
|
|
|
{
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var query = QueryEquipmentRecord(equipmentName, equipmentCode, equipmentType, begTime, endTime, context);
|
|
|
|
|
|
|
|
|
|
var pageList = query.OrderByDescending(f => f.StartTime).ToPagedList(page, size);
|
|
|
|
|
|
|
|
|
|
return new Result<PagedList<EquipmentRecord>>(pageList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取设备状态记录列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="equipmentName">设备名称</param>
|
|
|
|
|
/// <param name="equipmentCode">设备编号</param>
|
|
|
|
|
/// <param name="equipmentType">设备类型</param>
|
|
|
|
|
/// <param name="begTime">开始时间</param>
|
|
|
|
|
/// <param name="endTime">结束时间</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public Result<List<EquipmentRecord>> GetEquipmentRecordList(string equipmentName, string equipmentCode, string equipmentType, DateTime begTime, DateTime endTime)
|
|
|
|
|
{
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var query = QueryEquipmentRecord(equipmentName, equipmentCode, equipmentType, begTime, endTime, context);
|
|
|
|
|
|
|
|
|
|
var list = query.OrderByDescending(f => f.StartTime).ToList();
|
|
|
|
|
|
|
|
|
|
return new Result<List<EquipmentRecord>>(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IQueryable<EquipmentRecord> QueryEquipmentRecord(string equipmentName, string equipmentCode, string equipmentType, DateTime begTime, DateTime endTime, EFContext context)
|
|
|
|
|
{
|
|
|
|
|
var query = from record in context.EquipmentRecords
|
|
|
|
|
join equipment in context.EquipmentInfos.Where(f => !f.IsDelete) on record.EquipmentId equals equipment.Id
|
|
|
|
|
select new EquipmentRecord
|
|
|
|
|
{
|
|
|
|
|
Id = record.Id,
|
|
|
|
|
EquipmentId = equipment.Id,
|
|
|
|
|
EquipmentName = equipment.EquipmentName,
|
|
|
|
|
EquipmentCode = equipment.EquipmentCode,
|
|
|
|
|
EquipmentType = equipment.EquipmentType,
|
|
|
|
|
StartTime = record.StartTime,
|
|
|
|
|
EndTime = record.EndTime,
|
|
|
|
|
State = record.State,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!equipmentName.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.EquipmentName.StartsWith(equipmentName));
|
|
|
|
|
}
|
|
|
|
|
if (!equipmentCode.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.EquipmentCode.StartsWith(equipmentCode));
|
|
|
|
|
}
|
|
|
|
|
if (!equipmentType.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.EquipmentType == equipmentType);
|
|
|
|
|
}
|
|
|
|
|
query = query.Where(f => f.StartTime >= begTime && f.EndTime <= endTime);
|
|
|
|
|
return query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 添加或更新设备状态记录
|
|
|
|
|
/// 1.如果设备最新记录状态没有改变则更新结束时间
|
|
|
|
|
/// 2.如果没有记录则添加记录
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="equipmentId">设备Id</param>
|
|
|
|
|
/// <param name="state">设备状态,运行:Run,待机:Stop,报警:Alarm</param>
|
|
|
|
|
/// <param name="equipmentId">设备Id</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public Result AddUpdateEquipmentRecord(string equipmentId, string state, DateTime dateTime)
|
|
|
|
|
{
|
|
|
|
|
if (!EquipmentState.HaveState(state))
|
|
|
|
|
{
|
|
|
|
|
return new Result($"【{state}】状态不正确!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var entity = context.EquipmentRecords.Where(f => f.EquipmentId == equipmentId).OrderByDescending(f => f.StartTime).FirstOrDefault();
|
|
|
|
|
//如果最新记录状态没有改变
|
|
|
|
|
if (entity != null && entity.State == state)
|
|
|
|
|
{
|
|
|
|
|
entity.EndTime = dateTime;
|
|
|
|
|
entity.Update();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//更新最新记录结束时间
|
|
|
|
|
if (entity != null)
|
|
|
|
|
{
|
|
|
|
|
entity.EndTime = dateTime;
|
|
|
|
|
entity.Update();
|
|
|
|
|
}
|
|
|
|
|
//添加设备状态新记录
|
|
|
|
|
var record = new EquipmentRecordEntity
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = equipmentId,
|
|
|
|
|
State = state,
|
|
|
|
|
StartTime = dateTime,
|
|
|
|
|
EndTime = dateTime,
|
|
|
|
|
};
|
|
|
|
|
record.Create();
|
|
|
|
|
context.EquipmentRecords.Add(record);
|
|
|
|
|
}
|
|
|
|
|
context.SaveChanges();
|
|
|
|
|
|
|
|
|
|
return new Result();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 进行设备状态记录统计(日统计)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="date"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public Result RunEquipmentRecordTotal(DateTime date)
|
|
|
|
|
{
|
|
|
|
|
var begDate = DateTime.Parse(date.ToString("yyyy-MM-dd"));
|
|
|
|
|
var endDate = begDate.AddDays(1).AddSeconds(-1);
|
|
|
|
|
|
|
|
|
|
var result = new Result();
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var query = context.EquipmentRecords.Where(f => f.StartTime >= begDate && f.StartTime <= endDate);
|
|
|
|
|
//获取状态统计时间
|
|
|
|
|
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).Minutes)
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
if (total.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
result.Message = "没有汇总统计数据";
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
//出炉数量统计
|
|
|
|
|
var furnaceNum = "FurnaceNum";
|
|
|
|
|
//获取配置的设备的阈值
|
|
|
|
|
var balzersConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentType.Balzers).Content;
|
|
|
|
|
var cemeconConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentType.Cemecon).Content;
|
|
|
|
|
var ionbondConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentType.Ionbond).Content;
|
|
|
|
|
var balzers = 200;
|
|
|
|
|
var cemecon = 300;
|
|
|
|
|
var ionbond = 200;
|
|
|
|
|
if (balzersConfig != null && !balzersConfig.ConfigValue.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
int.TryParse(balzersConfig.ConfigValue, out balzers);
|
|
|
|
|
}
|
|
|
|
|
if (cemeconConfig != null && !cemeconConfig.ConfigValue.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
int.TryParse(cemeconConfig.ConfigValue, out cemecon);
|
|
|
|
|
}
|
|
|
|
|
if (ionbondConfig != null && !ionbondConfig.ConfigValue.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
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 furnaceVal = total.Where(f => f.EquipmentId == item.EquipmentId && f.State == furnaceNum).FirstOrDefault();
|
|
|
|
|
if (furnaceVal == null)
|
|
|
|
|
{
|
|
|
|
|
furnaceVal = new TotalRecord
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = item.EquipmentId,
|
|
|
|
|
State = furnaceNum,
|
|
|
|
|
Value = 0
|
|
|
|
|
};
|
|
|
|
|
total.Add(furnaceVal);
|
|
|
|
|
}
|
|
|
|
|
//计算开炉次数
|
|
|
|
|
var minutes = (item.EndTime - item.StartTime).Minutes;
|
|
|
|
|
switch (item.EquipmentType)
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//记录统计时间
|
|
|
|
|
var list = context.EquipmentRecordTotals.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)
|
|
|
|
|
{
|
|
|
|
|
switch (record.State)
|
|
|
|
|
{
|
|
|
|
|
case EquipmentState.Run:
|
|
|
|
|
item.TotalRunningTime = record.Value;
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Alarm:
|
|
|
|
|
item.TotalAlarmTime = record.Value;
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Stop:
|
|
|
|
|
item.TotalStopTime = record.Value;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
result.Message = "没有的设备状态:" + record.State.ToString();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
item.Update();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//没有记录
|
|
|
|
|
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 EquipmentRecordTotalEntity
|
|
|
|
|
{
|
|
|
|
|
EquipmentId = equipmentId,
|
|
|
|
|
TotalDay = begDate
|
|
|
|
|
};
|
|
|
|
|
foreach (var record in records)
|
|
|
|
|
{
|
|
|
|
|
switch (record.State)
|
|
|
|
|
{
|
|
|
|
|
case EquipmentState.Run:
|
|
|
|
|
item.TotalRunningTime = record.Value;
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Alarm:
|
|
|
|
|
item.TotalAlarmTime = record.Value;
|
|
|
|
|
break;
|
|
|
|
|
case EquipmentState.Stop:
|
|
|
|
|
item.TotalStopTime = record.Value;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
result.Message = "没有的设备状态:" + record.State.ToString();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
item.Create();
|
|
|
|
|
}
|
|
|
|
|
context.EquipmentRecordTotals.Add(item);
|
|
|
|
|
}
|
|
|
|
|
context.SaveChanges();
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TotalRecord
|
|
|
|
|
{
|
|
|
|
|
public string EquipmentId { get; set; }
|
|
|
|
|
public string State { get; set; }
|
|
|
|
|
public int Value { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 设备记录统计
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取设备状态记录统计分页列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="equipmentName">设备名称</param>
|
|
|
|
|
/// <param name="equipmentCode">设备编号</param>
|
|
|
|
|
/// <param name="equipmentType">设备类型</param>
|
|
|
|
|
/// <param name="begTime">开始时间</param>
|
|
|
|
|
/// <param name="endTime">结束时间</param>
|
|
|
|
|
/// <param name="page">当前页</param>
|
|
|
|
|
/// <param name="size">页大小</param>
|
|
|
|
|
public Result<PagedList<EquipmentRecordTotal>> GetEquipmentRecordTotalPageList(string equipmentName, string equipmentCode, string equipmentType, DateTime begTime, DateTime endTime, int page, int size)
|
|
|
|
|
{
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var query = QueryEquipmentRecordTotal(equipmentName, equipmentCode, equipmentType, begTime, endTime, context);
|
|
|
|
|
|
|
|
|
|
var pageList = query.OrderByDescending(f => f.EquipmentCode).ToPagedList(page, size);
|
|
|
|
|
|
|
|
|
|
return new Result<PagedList<EquipmentRecordTotal>>(pageList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取设备状态记录统计列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="equipmentName">设备名称</param>
|
|
|
|
|
/// <param name="equipmentCode">设备编号</param>
|
|
|
|
|
/// <param name="equipmentType">设备类型</param>
|
|
|
|
|
/// <param name="begTime">开始时间</param>
|
|
|
|
|
/// <param name="endTime">结束时间</param>
|
|
|
|
|
public Result<List<EquipmentRecordTotal>> GetEquipmentRecordTotalList(string equipmentName, string equipmentCode, string equipmentType, DateTime begTime, DateTime endTime)
|
|
|
|
|
{
|
|
|
|
|
using (var context = new EFContext())
|
|
|
|
|
{
|
|
|
|
|
var query = QueryEquipmentRecordTotal(equipmentName, equipmentCode, equipmentType, begTime, endTime, context);
|
|
|
|
|
|
|
|
|
|
var pageList = query.OrderByDescending(f => f.EquipmentCode).ToList();
|
|
|
|
|
|
|
|
|
|
return new Result<List<EquipmentRecordTotal>>(pageList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IQueryable<EquipmentRecordTotal> QueryEquipmentRecordTotal(string equipmentName, string equipmentCode, string equipmentType, DateTime begTime, DateTime endTime, EFContext context)
|
|
|
|
|
{
|
|
|
|
|
var query = from recordTotal in context.EquipmentRecordTotals
|
|
|
|
|
join equipment in context.EquipmentInfos.Where(f => !f.IsDelete) on recordTotal.EquipmentId equals equipment.Id
|
|
|
|
|
select new EquipmentRecordTotal
|
|
|
|
|
{
|
|
|
|
|
Id = recordTotal.Id,
|
|
|
|
|
EquipmentName = equipment.EquipmentName,
|
|
|
|
|
EquipmentCode = equipment.EquipmentCode,
|
|
|
|
|
EquipmentType = equipment.EquipmentType,
|
|
|
|
|
FurnaceNum = recordTotal.FurnaceNum,
|
|
|
|
|
TotalAlarmTime = recordTotal.TotalAlarmTime,
|
|
|
|
|
TotalStopTime = recordTotal.TotalStopTime,
|
|
|
|
|
TotalRunningTime = recordTotal.TotalRunningTime,
|
|
|
|
|
TotalDay = recordTotal.TotalDay,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!equipmentName.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.EquipmentName.StartsWith(equipmentName));
|
|
|
|
|
}
|
|
|
|
|
if (!equipmentCode.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.EquipmentCode.StartsWith(equipmentCode));
|
|
|
|
|
}
|
|
|
|
|
if (!equipmentType.IsNullOrEmpty())
|
|
|
|
|
{
|
|
|
|
|
query = query.Where(f => f.EquipmentType == equipmentType);
|
|
|
|
|
}
|
|
|
|
|
query = query.Where(f => f.TotalDay >= begTime && f.TotalDay <= endTime);
|
|
|
|
|
|
|
|
|
|
return query;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|