设备运行绩效分析
This commit is contained in:
parent
a9e65de470
commit
97b6bcfe9a
@ -0,0 +1,111 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using DOAN.Service.MES.dev.IService;
|
||||
using DOAN.Model.MES.dev.Dto;
|
||||
using DOAN.Admin.WebApi.Filters;
|
||||
using DOAN.Model.MES.dev.Dto;
|
||||
using DOAN.Model.MES.dev;
|
||||
using Infrastructure.Converter;
|
||||
|
||||
//创建时间:2024-05-27
|
||||
namespace DOAN.Admin.WebApi.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析
|
||||
/// </summary>
|
||||
[Verify]
|
||||
[Route("mes/deviceManagement/DevicePerformance")]
|
||||
public class DevicePerformanceController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析接口
|
||||
/// </summary>
|
||||
private readonly IDevicePerformanceService _DevicePerformanceService;
|
||||
|
||||
public DevicePerformanceController(IDevicePerformanceService DevicePerformanceService)
|
||||
{
|
||||
_DevicePerformanceService = DevicePerformanceService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询设备运行绩效分析列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("list")]
|
||||
[ActionPermissionFilter(Permission = "business:deviceperformance:list")]
|
||||
public IActionResult QueryDevicePerformance([FromQuery] DevicePerformanceQueryDto parm)
|
||||
{
|
||||
parm.FillDate = DOANConvertDateTime.ConvertLocalDateTime(parm.FillDate.Value);
|
||||
var response = _DevicePerformanceService.GetList(parm);
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询设备运行绩效分析详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{Id}")]
|
||||
[ActionPermissionFilter(Permission = "business:deviceperformance:query")]
|
||||
public IActionResult GetDevicePerformance(string Id)
|
||||
{
|
||||
var response = _DevicePerformanceService.GetInfo(Id);
|
||||
|
||||
var info = response.Adapt<DevicePerformance>();
|
||||
return SUCCESS(info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加设备运行绩效分析
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "business:deviceperformance:add")]
|
||||
[Log(Title = "设备运行绩效分析", BusinessType = BusinessType.INSERT)]
|
||||
public IActionResult AddDevicePerformance([FromBody] DevicePerformanceDto parm)
|
||||
{
|
||||
var modal = parm.Adapt<DevicePerformance>().ToCreate(HttpContext);
|
||||
|
||||
var response = _DevicePerformanceService.AddDevicePerformance(modal);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新设备运行绩效分析
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[ActionPermissionFilter(Permission = "business:deviceperformance:edit")]
|
||||
[Log(Title = "设备运行绩效分析", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult UpdateDevicePerformance([FromBody] DevicePerformanceDto parm)
|
||||
{
|
||||
var modal = parm.Adapt<DevicePerformance>().ToUpdate(HttpContext);
|
||||
var response = _DevicePerformanceService.UpdateDevicePerformance(modal);
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除设备运行绩效分析
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{ids}")]
|
||||
[ActionPermissionFilter(Permission = "business:deviceperformance:delete")]
|
||||
[Log(Title = "设备运行绩效分析", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult DeleteDevicePerformance(string ids)
|
||||
{
|
||||
int[] idsArr = Tools.SpitIntArrary(ids);
|
||||
if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
|
||||
|
||||
var response = _DevicePerformanceService.Delete(idsArr);
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Binary file not shown.
193
DOAN.Model/MES/dev/DevicePerformance.cs
Normal file
193
DOAN.Model/MES/dev/DevicePerformance.cs
Normal file
@ -0,0 +1,193 @@
|
||||
|
||||
namespace DOAN.Model.MES.dev
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析
|
||||
/// </summary>
|
||||
[SugarTable("device_performance")]
|
||||
public class DevicePerformance
|
||||
{
|
||||
/// <summary>
|
||||
/// 雪花
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 可用时间
|
||||
/// </summary>
|
||||
public decimal Usabletime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 节假日
|
||||
/// </summary>
|
||||
public int? Holiday { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备计划运行时间:(分钟)
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "plan_runtime")]
|
||||
public decimal PlanRuntime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-无生产计划
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_no_production_time")]
|
||||
public decimal PlanningNoProductionTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-用餐时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_eat_time")]
|
||||
public decimal PlanningEatTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-班组会议
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_team_time")]
|
||||
public decimal PlanningTeamTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-培训
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_training")]
|
||||
public decimal PlanningTraining { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-员工休息时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_rest")]
|
||||
public decimal PlanningRest { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-周期性维护保养
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_maintenance")]
|
||||
public decimal PlanningMaintenance { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划内停机损失-停水/电/气
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "planning_stop_energy")]
|
||||
public decimal PlanningStopEnergy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备实际可用时间:(分钟) Actual usable time of equipment
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "actual_usabletime")]
|
||||
public decimal ActualUsableTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机损失-设备故障停机时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_device_failure_time")]
|
||||
public decimal AccidentDeviceFailureTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机损失-生产准备/调整时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_product_prepare")]
|
||||
public decimal AccidentProductPrepare { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机损失-产线缺料停机
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_line_lack_material")]
|
||||
public decimal AccidentLineLackMaterial { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机损失-产线换型时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_line_replace_model")]
|
||||
public decimal AccidentLineReplaceModel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机损失-质量问题停机
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_quality_problem")]
|
||||
public decimal AccidentQualityProblem { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机损失-其他制造/工程问题
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_others")]
|
||||
public decimal AccidentOthers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备实际运行时间:(分钟)
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "device_actual_runtime")]
|
||||
public decimal DeviceActualRuntime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 故障停机总次数
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "fault_shutdown_quantity")]
|
||||
public int? FaultShutdownQuantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 故障停机率
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "fault_shutdown_rate")]
|
||||
public decimal FaultShutdownRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备完好率
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "good_condition_rate")]
|
||||
public decimal GoodConditionRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划外停机率
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "accident_shutdown_rate")]
|
||||
public decimal AccidentShutdownRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 综合设备开机率
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "comprehensive_equipment_operating_rate")]
|
||||
public decimal ComprehensiveEquipmentOperatingRate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MTBF(设备实际运行时间/故障总次数/20)
|
||||
/// </summary>
|
||||
public decimal Mtbf { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MTTR(设备故障停机时间/故障总次数)
|
||||
/// </summary>
|
||||
public decimal Mttr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 填写日期
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "fill_date")]
|
||||
public DateTime? FillDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "cREATED_BY")]
|
||||
public string CreatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "cREATED_TIME")]
|
||||
public DateTime? CreatedTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新人
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "uPDATED_BY")]
|
||||
public string UpdatedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "uPDATED_TIME")]
|
||||
public DateTime? UpdatedTime { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
84
DOAN.Model/MES/dev/Dto/DevicePerformanceDto.cs
Normal file
84
DOAN.Model/MES/dev/Dto/DevicePerformanceDto.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace DOAN.Model.MES.dev.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析查询对象
|
||||
/// </summary>
|
||||
public class DevicePerformanceQueryDto : PagerInfo
|
||||
{
|
||||
public DateTime? FillDate { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析输入输出对象
|
||||
/// </summary>
|
||||
public class DevicePerformanceDto
|
||||
{
|
||||
|
||||
public string Id { get; set; }
|
||||
|
||||
public decimal Usabletime { get; set; }
|
||||
|
||||
public int? Holiday { get; set; }
|
||||
|
||||
public decimal PlanRuntime { get; set; }
|
||||
|
||||
public decimal PlanningNoProductionTime { get; set; }
|
||||
|
||||
public decimal PlanningEatTime { get; set; }
|
||||
|
||||
public decimal PlanningTeamTime { get; set; }
|
||||
|
||||
public decimal PlanningTraining { get; set; }
|
||||
|
||||
public decimal PlanningRest { get; set; }
|
||||
|
||||
public decimal PlanningMaintenance { get; set; }
|
||||
|
||||
public decimal PlanningStopEnergy { get; set; }
|
||||
|
||||
public decimal ActualUsableTime { get; set; }
|
||||
|
||||
public decimal AccidentDeviceFailureTime { get; set; }
|
||||
|
||||
public decimal AccidentProductPrepare { get; set; }
|
||||
|
||||
public decimal AccidentLineLackMaterial { get; set; }
|
||||
|
||||
public decimal AccidentLineReplaceModel { get; set; }
|
||||
|
||||
public decimal AccidentQualityProblem { get; set; }
|
||||
|
||||
public decimal AccidentOthers { get; set; }
|
||||
|
||||
public decimal DeviceActualRuntime { get; set; }
|
||||
|
||||
public int? FaultShutdownQuantity { get; set; }
|
||||
|
||||
public decimal FaultShutdownRate { get; set; }
|
||||
|
||||
public decimal GoodConditionRate { get; set; }
|
||||
|
||||
public decimal AccidentShutdownRate { get; set; }
|
||||
|
||||
public decimal ComprehensiveEquipmentOperatingRate { get; set; }
|
||||
|
||||
public decimal Mtbf { get; set; }
|
||||
|
||||
public decimal Mttr { get; set; }
|
||||
|
||||
public DateTime? FillDate { get; set; }
|
||||
|
||||
public string CreatedBy { get; set; }
|
||||
|
||||
public DateTime? CreatedTime { get; set; }
|
||||
|
||||
public string UpdatedBy { get; set; }
|
||||
|
||||
public DateTime? UpdatedTime { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -106,7 +106,7 @@ namespace DOAN.Service.MES.BI
|
||||
public EchartsOptions ShutdownBar()
|
||||
{
|
||||
EchartsOptions echartsOptions = new EchartsOptions();
|
||||
echartsOptions.Title = new EchartsTitle { Text = "本月停机时间统计", SubText = "本月停机时间统计" };
|
||||
echartsOptions.Title = new EchartsTitle { Text = "本月异常停机时间统计", SubText = "本月异常停机时间统计" };
|
||||
// 获取当前日期和时间
|
||||
DateTime now = DateTime.Now;
|
||||
// 获取本月的最开始时间(本月的第一天的午夜时间)
|
||||
|
||||
143
DOAN.Service/MES/dev/DevicePerformanceService.cs
Normal file
143
DOAN.Service/MES/dev/DevicePerformanceService.cs
Normal file
@ -0,0 +1,143 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析Service业务层处理
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IDevicePerformanceService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class DevicePerformanceService : BaseService<DevicePerformance>, IDevicePerformanceService
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询设备运行绩效分析列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<DevicePerformanceDto> GetList(DevicePerformanceQueryDto parm)
|
||||
{
|
||||
var predicate = Expressionable.Create<DevicePerformance>()
|
||||
.AndIF(parm.FillDate>DateTime.MinValue,it=>it.FillDate==parm.FillDate)
|
||||
;
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.ToPage<DevicePerformance, DevicePerformanceDto>(parm);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
public DevicePerformance GetInfo(string Id)
|
||||
{
|
||||
var response = Queryable()
|
||||
.Where(x => x.Id == Id)
|
||||
.First();
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加设备运行绩效分析
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public DevicePerformance AddDevicePerformance(DevicePerformance model)
|
||||
{
|
||||
model.Id = XueHua;
|
||||
AutoCalculation(ref model);
|
||||
return Context.Insertable(model).ExecuteReturnEntity();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改设备运行绩效分析
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
24
DOAN.Service/MES/dev/IService/IDevicePerformanceService.cs
Normal file
24
DOAN.Service/MES/dev/IService/IDevicePerformanceService.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using DOAN.Model;
|
||||
using DOAN.Model.Dto;
|
||||
using DOAN.Model.MES.dev.Dto;
|
||||
using DOAN.Model.MES.dev;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DOAN.Service.MES.dev.IService
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备运行绩效分析service接口
|
||||
/// </summary>
|
||||
public interface IDevicePerformanceService : IBaseService<DevicePerformance>
|
||||
{
|
||||
PagedInfo<DevicePerformanceDto> GetList(DevicePerformanceQueryDto parm);
|
||||
|
||||
DevicePerformance GetInfo(string Id);
|
||||
|
||||
DevicePerformance AddDevicePerformance(DevicePerformance parm);
|
||||
|
||||
int UpdateDevicePerformance(DevicePerformance parm);
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user