using System;
using SqlSugar;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using DOAN.Model;
using DOAN.Model.Dto;
using DOAN.Model.MES.dev.Dto;
using DOAN.Model.MES.dev;
using DOAN.Repository;
using DOAN.Service.MES.dev.IService;
using System.Linq;
namespace DOAN.Service.MES.dev
{
///
/// 设备运行绩效分析Service业务层处理
///
[AppService(ServiceType = typeof(IDevicePerformanceService), ServiceLifetime = LifeTime.Transient)]
public class DevicePerformanceService : BaseService, IDevicePerformanceService
{
///
/// 查询设备运行绩效分析列表
///
///
///
public PagedInfo GetList(DevicePerformanceQueryDto parm)
{
var predicate = Expressionable.Create()
.AndIF(parm.FillDate>DateTime.MinValue,it=>it.FillDate==parm.FillDate)
;
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage(parm);
return response;
}
///
/// 获取详情
///
///
///
public DevicePerformance GetInfo(string Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
///
/// 添加设备运行绩效分析
///
///
///
public DevicePerformance AddDevicePerformance(DevicePerformance model)
{
model.Id = XueHua;
AutoCalculation(ref model);
return Context.Insertable(model).ExecuteReturnEntity();
}
///
/// 修改设备运行绩效分析
///
///
///
public int UpdateDevicePerformance(DevicePerformance model)
{
AutoCalculation(ref model);
//var response = Update(w => w.Id == model.Id, it => new DevicePerformance()
//{
// Usabletime = model.Usabletime,
// PlanRuntime = model.PlanRuntime,
// PlanningNoProductionTime = model.PlanningNoProductionTime,
// PlanningEatTime = model.PlanningEatTime,
// PlanningTeamTime = model.PlanningTeamTime,
// PlanningTraining = model.PlanningTraining,
// PlanningRest = model.PlanningRest,
// PlanningMaintenance = model.PlanningMaintenance,
// PlanningStopEnergy = model.PlanningStopEnergy,
// DeviceActualRuntime = model.DeviceActualRuntime,
// FaultShutdownQuantity = model.FaultShutdownQuantity,
// FaultShutdownRate = model.FaultShutdownRate,
// GoodConditionRate = model.GoodConditionRate,
// ComprehensiveEquipmentOperatingRate = model.ComprehensiveEquipmentOperatingRate,
// Mtbf = model.Mtbf,
// Mttr = model.Mttr,
// FillDate = model.FillDate,
// CreatedBy = model.CreatedBy,
// CreatedTime = model.CreatedTime,
// UpdatedBy = model.UpdatedBy,
// UpdatedTime = model.UpdatedTime,
//});
//return response;
return Update(model, true);
}
private void AutoCalculation(ref DevicePerformance model)
{
// 设备计划运行时间:(分钟)=设备可使用时间:(分钟)-节假日
model.PlanRuntime = model.Usabletime - model.Holiday??0;
//设备实际可用时间:(分钟)
model.ActualUsableTime = model.PlanRuntime - model.PlanningNoProductionTime - model.PlanningEatTime - model.PlanningTeamTime - model.PlanningTraining - model.PlanningRest - model.PlanningMaintenance - model.PlanningStopEnergy;
//设备实际运行时间:(分钟)
model.DeviceActualRuntime = model.ActualUsableTime - model.AccidentDeviceFailureTime - model.AccidentProductPrepare - model.AccidentLineLackMaterial - model.AccidentLineReplaceModel - model.AccidentQualityProblem - model.AccidentOthers;
//故障停机率
if (model.ActualUsableTime > 0)
{
model.FaultShutdownRate = Math.Round(model.AccidentDeviceFailureTime / model.ActualUsableTime, 2);
}
//设备完好率
if (model.ActualUsableTime > 0)
{
model.GoodConditionRate = Math.Round(model.DeviceActualRuntime / model.ActualUsableTime, 2);
}
//计划外停机率
model.AccidentShutdownRate = 1 - model.DeviceActualRuntime;
//综合设备开机率
if(model.PlanRuntime>0)
{
model.ComprehensiveEquipmentOperatingRate = model.DeviceActualRuntime / model.PlanRuntime;
}
//MTBF(设备实际运行时间/故障总次数/60
model.Mtbf = Math.Round(model.DeviceActualRuntime / model.FaultShutdownQuantity??0 / 60,2);
//MTTR(设备故障停机时间/故障总次数)
model.Mttr = Math.Round(model.AccidentDeviceFailureTime / model.FaultShutdownQuantity ?? 0, 2);
}
}
}