EquipmentVisualService.cs
4.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using Hh.Mes.POJO.Entity;
using Hh.Mes.POJO.EnumEntitys;
using Hh.Mes.POJO.Response;
using Hh.Mes.POJO.ViewModel.Equipment;
using Hh.Mes.Service.Repository;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Hh.Mes.Service.WebService.Equipment
{
/// <summary>
/// 设备可视化参数
/// </summary>
public class EquipmentVisualService : RepositorySqlSugar<base_equipment>
{
/// <summary>
/// 设备文件、设备报警记录
/// </summary>
public Response GetEquipmentFileList(base_equipment model)
{
var result = new Response();
var stringBuilder = new StringBuilder();
stringBuilder.AppendLine($@" select * from sys_File
where targetId=@targetId and targetTableName='base_equipment'
union all
select * from sys_File
where targetId=@targetId2 and targetTableName='base_equipment_type';
select * from daq_equipment_alarm_record t1 with (nolock)
where t1.IsHandled =0 and t1.EquipmentCode=@EquipmentCode
order by t1.CreateTime desc");
var dt = Context.Ado.GetDataSetAll(stringBuilder.ToString(), new List<SugarParameter>(){
new SugarParameter("@targetId", model.equipmentCode),
new SugarParameter("@targetId2", model.equipmentTypeCode),
new SugarParameter("@EquipmentCode", model.equipmentCode),
});
var records = Context.Queryable<daq_equipment_status_record_history>().Where(x => x.equipmentCode == model.equipmentCode && x.updateTime >= DateTime.Today).Select(x => new
{
x.id,
x.status,
x.createTime,
x.updateTime,
}).ToList();
var currentMonthStartTime = DateTime.Today.AddDays(1 - DateTime.Today.Day);
var alarmTimeTicks = records.Where(x => x.status == EquipmentStatus.Error.ToString()).Sum(x => ConvertToTicks(x.createTime, x.updateTime, DateTime.Today));
var freeTimeTicks = records.Where(x => x.status == EquipmentStatus.Free.ToString()).Sum(x => ConvertToTicks(x.createTime, x.updateTime, DateTime.Today));
var runTimeTicks = records.Where(x => x.status == EquipmentStatus.Running.ToString()).Sum(x => ConvertToTicks(x.createTime, x.updateTime, DateTime.Today));
var currentTotalTicks = (DateTime.Now - DateTime.Today).Ticks;
var offlineTimeTicks = currentTotalTicks - (alarmTimeTicks + freeTimeTicks + runTimeTicks);
if (offlineTimeTicks < 0)
{
offlineTimeTicks = 0;
}
var equipmentHealth = new EquipmentHealthVM
{
EquipmentStatus = new EquipmentStatusDto
{
TodayPowerTime = TimeSpan.FromTicks(records.Sum(x => ConvertToTicks(x.createTime, x.updateTime, DateTime.Today))),
CurrentMonthPowerTime = TimeSpan.FromTicks(Context.Queryable<daq_equipment_status_record_history>().Where(x => x.createTime >= currentMonthStartTime).Select(x => new { x.updateTime, x.createTime }).ToList().Sum(x => (x.updateTime - x.createTime).Ticks)),
AlarmTime = TimeSpan.FromTicks(alarmTimeTicks),
FreeTime = TimeSpan.FromTicks(freeTimeTicks),
OfflineTime = TimeSpan.FromTicks(offlineTimeTicks),
RunTime = TimeSpan.FromTicks(runTimeTicks),
AlarmProportion = Math.Round(alarmTimeTicks * 100d / currentTotalTicks, 1),
FreeProportion = Math.Round(freeTimeTicks * 100d / currentTotalTicks, 1),
RunProportion = Math.Round(runTimeTicks * 100d / currentTotalTicks, 1),
OfflineProportion = Math.Round(offlineTimeTicks * 100d / currentTotalTicks, 1),
}
};
result.Result = new
{
equipmentHealth,
fileList = dt.Tables[0],
alarmList = dt.Tables[1],
};
result.Count = 1;
return result;
}
/// <summary>
///
/// </summary>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <param name="comparisonValue">比较值</param>
/// <returns></returns>
private long ConvertToTicks(DateTime startTime, DateTime endTime, DateTime comparisonValue)
{
//var startTime = startTime;
var tmep = startTime;
if (startTime < comparisonValue)
{
tmep = comparisonValue;
}
return (endTime - tmep).Ticks;
}
}
}