liuhr 2 years ago
commit 80744d746f

Binary file not shown.

@ -39,6 +39,28 @@
public const String CemeCon = "CemeCon";
}
/// <summary>
/// 设备类型补偿
/// </summary>
public sealed class EquipmentTypeOffset
{
/// <summary>
/// Ionbond补偿时间
/// </summary>
public const String IonbondOffset = "IonbondOffset";
/// <summary>
/// Balzers补偿时间
/// </summary>
public const String BalzersOffset = "BalzersOffset";
/// <summary>
/// Cemecon补偿时间
/// </summary>
public const String CemeConOffset = "CemeConOffset";
}
/// <summary>
/// 设备状态
/// </summary>

@ -196,6 +196,20 @@ namespace PVDEMCS.Controllers
return result;
}
/// <summary>
/// 获取设备OEE信息
/// </summary>
/// <param name="equipmentId">设备Id</param>
/// <param name="begDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <returns></returns>
[HttpGet]
public Result<EquipmentOEETotal> GetEquipmentOEEMonthTotal(string equipmentId, DateTime begDate, DateTime endDate)
{
var result = _equipmentRecordService.GetEquipmentOEEMonthTotal(equipmentId, begDate, endDate);
return result;
}
/// <summary>
/// 获取设备总览
/// </summary>
@ -308,6 +322,16 @@ namespace PVDEMCS.Controllers
return result;
}
/// <summary>
/// 获取设备记录OEE月统计
/// </summary>
/// <returns></returns>
[HttpGet]
public Result<List<EquipmentOEEMonthTotal>> GetEquipmentRecordOEEMonthTotal()
{
var result = _equipmentRecordService.GetEquipmentRecordOEEMonthTotal();
return result;
}
#endregion
}

@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project>
<PropertyGroup>
<_PublishTargetUrl>D:\Source\PVDEMCS\PVDEMCS\PVDEMCS\bin\Release\net6.0\publish\</_PublishTargetUrl>
<History>True|2023-11-07T09:29:34.5426043Z;True|2023-11-07T14:03:31.4977185+08:00;True|2023-11-06T20:18:02.9796262+08:00;True|2023-11-06T17:16:40.7384677+08:00;True|2023-11-06T17:10:54.2886424+08:00;True|2023-11-06T15:15:13.8945359+08:00;True|2023-11-06T14:37:56.4570851+08:00;True|2023-11-04T09:50:29.5867049+08:00;</History>
<History>True|2023-11-14T08:47:26.4184708Z;True|2023-11-07T17:29:34.5426043+08:00;True|2023-11-07T14:03:31.4977185+08:00;True|2023-11-06T20:18:02.9796262+08:00;True|2023-11-06T17:16:40.7384677+08:00;True|2023-11-06T17:10:54.2886424+08:00;True|2023-11-06T15:15:13.8945359+08:00;True|2023-11-06T14:37:56.4570851+08:00;True|2023-11-04T09:50:29.5867049+08:00;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

@ -130,6 +130,21 @@ namespace PVDEMCS.Services
/// <returns></returns>
Result<List<EquipmentRecordFurnaceMonthTotal>> GetEquipmentRecordFurnaceMonthTotal();
/// <summary>
/// 获取设备记录OEE月统计
/// </summary>
/// <returns></returns>
Result<List<EquipmentOEEMonthTotal>> GetEquipmentRecordOEEMonthTotal();
/// <summary>
/// 获取设备OEE信息
/// </summary>
/// <param name="equipmentId">设备Id</param>
/// <param name="begDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <returns></returns>
Result<EquipmentOEETotal> GetEquipmentOEEMonthTotal(string equipmentId, DateTime begDate, DateTime endDate);
#endregion
}
}

@ -198,6 +198,29 @@ namespace PVDEMCS.Services.Impl
return result;
}
/// <summary>
/// 获取设备记录OEE月统计
/// </summary>
/// <returns></returns>
public Result<List<EquipmentOEEMonthTotal>> GetEquipmentRecordOEEMonthTotal()
{
var result = this._equipmentRecordRepository.GetEquipmentRecordOEEMonthTotal();
return result;
}
/// <summary>
/// 获取设备OEE信息
/// </summary>
/// <param name="equipmentId">设备Id</param>
/// <param name="begDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <returns></returns>
public Result<EquipmentOEETotal> GetEquipmentOEEMonthTotal(string equipmentId, DateTime begDate, DateTime endDate)
{
var result = this._equipmentRecordRepository.GetEquipmentOEEMonthTotal(equipmentId, begDate, endDate);
return result;
}
#endregion
}
}

@ -84,14 +84,15 @@ namespace PVDEMCS.Services.Impl
!startStop.ObjectValue.IsNullOrEmpty() &&
!fault.ObjectValue.IsNullOrEmpty())
{
var state = EquipmentState.Run;
if (fault.GetValue<bool>())
var state = EquipmentState.Stop;
//如果运行状态比警告状态高这里先判断运行状态如果运行状态为false在判断警告状态
if (startStop.GetValue<bool>())
{
state = EquipmentState.Alarm;
state = EquipmentState.Run;
}
else if (!startStop.GetValue<bool>())
else if (fault.GetValue<bool>())
{
state = EquipmentState.Stop;
state = EquipmentState.Alarm;
}
equipmentInfo.State = state;
}

@ -0,0 +1,18 @@
namespace PVDEMCS.Services.Models
{
/// <summary>
/// 设备OEE月统计
/// </summary>
public class EquipmentOEEMonthTotal
{
/// <summary>
/// 日期
/// </summary>
public int TotalMonth { get; set; }
/// <summary>
/// OEE值
/// </summary>
public decimal OEE { get; set; }
}
}

@ -0,0 +1,38 @@
namespace PVDEMCS.Services.Models
{
/// <summary>
/// 设备OEE月统计
/// </summary>
public class EquipmentOEETotal
{
/// <summary>
/// 设备Id
/// </summary>
public string EquipmentId { get; set; }
/// <summary>
/// 设备类型IonbondBalzersCemecon
/// </summary>
public string EquipmentType { get; set; }
/// <summary>
/// 总运行时长
/// </summary>
public decimal TotalRunningTime { get; set; }
/// <summary>
/// 总报警时长
/// </summary>
public decimal TotalAlarmTime { get; set; }
/// <summary>
/// 总待机时长
/// </summary>
public decimal TotalStopTime { get; set; }
/// <summary>
/// OEE值
/// </summary>
public decimal OEE { get; set; }
}
}

@ -0,0 +1,47 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
namespace PVDEMCS.Services.Models
{
/// <summary>
/// 设备状态记录OEE月统计
/// </summary>
public class EquipmentRecordStateOEEMonthTotal
{
/// <summary>
/// 设备Id
/// </summary>
public string EquipmentId { get; set; }
/// <summary>
/// 设备类型IonbondBalzersCemecon
/// </summary>
public string EquipmentType { get; set; }
/// <summary>
/// 总运行时长
/// </summary>
public decimal TotalRunningTime { get; set; }
/// <summary>
/// 总报警时长
/// </summary>
public decimal TotalAlarmTime { get; set; }
/// <summary>
/// 总待机时长
/// </summary>
public decimal TotalStopTime { get; set; }
/// <summary>
/// 日期
/// </summary>
public int TotalMonth { get; set; }
/// <summary>
/// OEE值
/// </summary>
public decimal OEE { get; set; }
}
}

@ -133,6 +133,21 @@ namespace PVDEMCS.Services.Repositories
/// <returns></returns>
Result<List<EquipmentRecordFurnaceMonthTotal>> GetEquipmentRecordFurnaceMonthTotal();
/// <summary>
/// 获取设备记录OEE月统计
/// </summary>
/// <returns></returns>
Result<List<EquipmentOEEMonthTotal>> GetEquipmentRecordOEEMonthTotal();
/// <summary>
/// 获取设备OEE信息
/// </summary>
/// <param name="equipmentId">设备Id</param>
/// <param name="begDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <returns></returns>
Result<EquipmentOEETotal> GetEquipmentOEEMonthTotal(string equipmentId, DateTime begDate, DateTime endDate);
#endregion
}
}

@ -1,12 +1,15 @@
using AngleSharp.Css.Values;
using AngleSharp.Dom;
using Masuit.Tools;
using Masuit.Tools.DateTimeExt;
using Masuit.Tools.Models;
using Microsoft.EntityFrameworkCore;
using NLog.LayoutRenderers.Wrappers;
using PVDEMCS.Common;
using PVDEMCS.Common.Constant;
using PVDEMCS.Common.DI;
using PVDEMCS.Common.EF;
using PVDEMCS.Common.Tools;
using PVDEMCS.Services.Models;
using PVDEMCS.Services.Repositories.Entities;
using SixLabors.ImageSharp.Processing.Processors.Transforms;
@ -192,15 +195,15 @@ namespace PVDEMCS.Services.Repositories.Impl
return result;
}
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();
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();
//获取配置的设备的阈值
@ -240,7 +243,7 @@ namespace PVDEMCS.Services.Repositories.Impl
value.Create();
context.EquipmentRecordDayTotals.Add(value);
}
else
else
{
value.Update();
}
@ -264,7 +267,7 @@ namespace PVDEMCS.Services.Repositories.Impl
}
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();
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)
{
//计算开炉次数
@ -618,6 +621,215 @@ namespace PVDEMCS.Services.Repositories.Impl
}
}
/// <summary>
/// 获取设备记录OEE月统计
/// </summary>
/// <returns></returns>
public Result<List<EquipmentOEEMonthTotal>> GetEquipmentRecordOEEMonthTotal()
{
//获取今年第一天和最后一天
var begDate = DateTime.Now.ToString("yyyy-01-01");
var endDate = DateTime.Parse(begDate).AddYears(1).AddSeconds(-1).ToString("yyyy-MM-dd");
using (var context = new EFContext())
{
var sql = $@"SELECT
info.id AS EquipmentId,
info.equipment_type AS EquipmentType,
SUM( total_running_time ) AS TotalRunningTime,
MONTH ( total_day ) AS TotalMonth
FROM
equipment_record_day_total a
JOIN equipment_info info ON a.equipment_id = info.id
WHERE
total_day >= '{begDate}'
AND total_day <= '{endDate}'
GROUP BY
TotalMonth,
EquipmentId,
EquipmentType";
var list = EFSqlHelper.FromSqlQuery<EquipmentRecordStateOEEMonthTotal>(context, sql).ToArray();
//计算OEE
//获取配置的设备的初尝值
var balzersConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentTypeOffset.BalzersOffset).Content;
var cemeconConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentTypeOffset.CemeConOffset).Content;
var ionbondConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentTypeOffset.IonbondOffset).Content;
var balzers = 0m;
var cemecon = 0m;
var ionbond = 0m;
if (balzersConfig != null && !balzersConfig.ConfigValue.IsNullOrEmpty())
{
decimal.TryParse(balzersConfig.ConfigValue, out balzers);
}
if (cemeconConfig != null && !cemeconConfig.ConfigValue.IsNullOrEmpty())
{
decimal.TryParse(cemeconConfig.ConfigValue, out cemecon);
}
if (ionbondConfig != null && !ionbondConfig.ConfigValue.IsNullOrEmpty())
{
decimal.TryParse(ionbondConfig.ConfigValue, out ionbond);
}
foreach (var item in list)
{
var days = 0;
var minutes = 0;
var now = DateTime.Now;
//如果在本月
if (item.TotalMonth == DateTime.Now.Month)
{
//初尝值不包括今天
days = now.Day - 1;
//获取当月到当前的分钟
minutes = days * 60 * 24 + (now.Hour - 1) * 60 + now.Minute;
}
else
{
days = new DateTime(now.Year, item.TotalMonth, 1).GetDaysOfMonth();
minutes = days * 60 * 24;
}
var value = 0m;
switch (item.EquipmentType)
{
case EquipmentType.Balzers:
value = days * balzers;
break;
case EquipmentType.Ionbond:
value = days * ionbond;
break;
case EquipmentType.CemeCon:
value = days * cemecon;
break;
default:
break;
}
if (minutes > 0)
{
item.OEE = (item.TotalRunningTime + value) / minutes;
}
}
var result = list.GroupBy(f => f.TotalMonth).Select(f => new EquipmentOEEMonthTotal
{
TotalMonth = f.Key,
OEE = Math.Round(f.Sum(f => f.OEE) / f.Count(), 2)
}).ToList();
return new Result<List<EquipmentOEEMonthTotal>>(result);
}
}
/// <summary>
/// 获取设备OEE信息
/// </summary>
/// <param name="equipmentId">设备Id</param>
/// <param name="begDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <returns></returns>
public Result<EquipmentOEETotal> GetEquipmentOEEMonthTotal(string equipmentId, DateTime begDate, DateTime endDate)
{
//获取今年第一天和最后一天
var beg = begDate.ToString("yyyy-MM-dd");
var end = endDate.AddDays(1).ToString("yyyy-MM-dd");
EquipmentOEETotal ret = null;
using (var context = new EFContext())
{
var sql = $@"SELECT
info.id AS EquipmentId,
info.equipment_type AS EquipmentType,
SUM( total_running_time ) AS TotalRunningTime,
SUM( total_alarm_time ) AS TotalAlarmTime,
SUM( total_stop_time ) AS TotalStopTime
FROM
equipment_record_day_total a
JOIN equipment_info info ON a.equipment_id = info.id
WHERE
info.id = '{equipmentId}'
AND total_day >= '{beg}'
AND total_day <= '{endDate}'
GROUP BY
EquipmentId,
EquipmentType";
var list = EFSqlHelper.FromSqlQuery<EquipmentRecordStateOEEMonthTotal>(context, sql).ToArray();
if (list.Length > 0)
{
var detail = list[0];
//获取配置的设备的初尝值
var balzersConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentTypeOffset.BalzersOffset).Content;
var cemeconConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentTypeOffset.CemeConOffset).Content;
var ionbondConfig = _configRepository.GetSysConfigDetailNameOrKey("", EquipmentTypeOffset.IonbondOffset).Content;
var balzers = 0m;
var cemecon = 0m;
var ionbond = 0m;
if (balzersConfig != null && !balzersConfig.ConfigValue.IsNullOrEmpty())
{
decimal.TryParse(balzersConfig.ConfigValue, out balzers);
}
if (cemeconConfig != null && !cemeconConfig.ConfigValue.IsNullOrEmpty())
{
decimal.TryParse(cemeconConfig.ConfigValue, out cemecon);
}
if (ionbondConfig != null && !ionbondConfig.ConfigValue.IsNullOrEmpty())
{
decimal.TryParse(ionbondConfig.ConfigValue, out ionbond);
}
var now = DateTime.Now;
var minutes = 0m;
var days = 0m;
if (endDate >= now)
{
days = Convert.ToDecimal((now - begDate).TotalDays);
}
else
{
days = Convert.ToDecimal((endDate - begDate).TotalDays);
}
if (end == DateTime.Now.ToString("yyyy-MM-dd"))
{
days = days - 1;
minutes = days * 60 * 24 + (now.Hour - 1) * 60 + now.Minute;
}
else
{
minutes = days * 60 * 24;
}
var value = 0m;
switch (detail.EquipmentType)
{
case EquipmentType.Balzers:
value = days * balzers;
break;
case EquipmentType.Ionbond:
value = days * ionbond;
break;
case EquipmentType.CemeCon:
value = days * cemecon;
break;
default:
break;
}
if (minutes > 0)
{
detail.OEE = Math.Round((detail.TotalRunningTime + value) / minutes,2);
}
ret = ModelTools.PubClone<EquipmentRecordStateOEEMonthTotal, EquipmentOEETotal>.Trans(detail);
}
return new Result<EquipmentOEETotal>(ret);
}
}
#endregion
}
}

Loading…
Cancel
Save