EquipmentOverviewController.cs
10.9 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
using FreeSql;
using HHECS.Application.Service;
using HHECS.Dal;
using HHECS.Dal.Repository;
using HHECS.Executor.EquipmentHandler.SRMV4;
using HHECS.Model.Entities;
using HHECS.Model.Enums;
using HHECS.Web.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using NPOI.POIFS.FileSystem;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Web;
using static NPOI.HSSF.Util.HSSFColor;
namespace HHECS.Web.Areas.Dashboard.Controllers
{
/// <summary>
/// 设备运行监控页(总览)
/// </summary>
[Area("Dashboard")]
public class EquipmentOverviewController : BaseController
{
private readonly EquipmentService _equipmentService;
private readonly WarehouseService _warehouseService;
private readonly EquipmentStatusRecordService _statusRecordService;
public EquipmentOverviewController(EquipmentService equipmentService, EquipmentStatusRecordService statusRecordService, WarehouseService warehouseService)
{
_equipmentService = equipmentService;
_statusRecordService = statusRecordService;
_warehouseService = warehouseService;
}
[ServiceFilter(typeof(OperLogFilter))]
public IActionResult Index()
{
return View();
}
[HttpPost]
public string Load(PageReq pageRequest, Warehouse entity)
{
//return _equipmentService.LoadEquipmentAndStatus(entity, pageRequest.page, pageRequest.limit);
return _warehouseService.LoadEquipmentCount(entity, pageRequest, _equipmentService);
}
/// <summary>
/// 详情页
/// </summary>
/// <param name="code">仓库编码</param>
/// <param name="name">仓库名称</param>
/// <returns></returns>
public IActionResult Detail(string code, string name)
{
//var equipment = _equipmentService.GetEquipment(x => x.WarehouseCode.Equals(code)).Data;
//if (equipment == null)
//{
// return Redirect("/Error");
//}
ViewBag.WarehouseCode = HttpUtility.UrlEncode(code);
ViewBag.WarehouseName = name;
return View();
}
/// <summary>
/// 获取设备信息
/// </summary>
/// <param name="code">仓库编码</param>
/// <returns></returns>
public IActionResult GetResult(string code)
{
try
{
var tempCode = code.Split("_");
var eqName = "";
if (tempCode.Length > 1)
{
eqName = HttpUtility.UrlDecode(tempCode[tempCode.Length - 1]);
code = tempCode[0];
}
var equipments = _equipmentService.GetEquipments(x => x.WarehouseCode.Equals(code)).Data;
if (!string.IsNullOrEmpty(eqName))
{
equipments = equipments.Where(x => x.Name.Contains(eqName)).ToList();
}
else
{
equipments = equipments.Where(x => !x.Name.Contains("AGV")).ToList();
}
//不显示链条机2、滚筒输送机4、液压升降台5、过渡滚筒机8、称重滚筒输送机(双层)9
equipments = equipments.Where(x => x.EquipmentTypeId != 2 && x.EquipmentTypeId != 4 && x.EquipmentTypeId != 5 && x.EquipmentTypeId != 8 && x.EquipmentTypeId != 9).ToList();
if (equipments == null || equipments.Count == 0)
{
return NotFound();
}
var equipmentCodeList = equipments.Select(t => t.Code).ToList();
List<MonitorViewModel> results = new List<MonitorViewModel>();
var month = DateTime.Now;
//月初
// var monthStatr = month.AddDays(1 - month.Day);
//当天
var monthStart = DateTime.Parse(month.ToString("yyyy-MM-dd 00:00:00"));
var monthStart8 = DateTime.Parse(month.ToString("2023-08-01 00:00:00"));
//var monthStatr =DateTime.Parse( "2023-08-08 12:00:00");
//月末
var monthEnd = month.AddDays(1 - month.Day).Date.AddMonths(1).AddSeconds(-1);
var agvFlag = false;
//设备报警记录
//using EquipmentAlarmRecordRepository alarmRecordRepository = new EquipmentAlarmRecordRepository();
//var alarmRecordDataAll = alarmRecordRepository.Where(x => equipmentCodeList.Contains(x.EquipmentCode)).ToList();
//字典
using DictDetailRepository dictDetailRepository = new DictDetailRepository();
var dictList = dictDetailRepository.Where(x => x.DictId == 39).ToList();
//维护记录 通过设备绑定的保养规则生成保养记录
using EquipmentMaintainRecordRepository maintainRecordRepository = new EquipmentMaintainRecordRepository();
var maintainRecordList = maintainRecordRepository.Where(x => equipmentCodeList.Contains(x.EquipmentCode)).ToList();
//设备运行记录
using EquipmentDataRecordRepository equipmentDataRecordRepository = new EquipmentDataRecordRepository();
var equipmentDataRecordList = equipmentDataRecordRepository.Where(x => equipmentCodeList.Contains(x.Code)).ToList();
//设备状态记录
using EquipmentStatusRecordRepository statusRecordRepository = new EquipmentStatusRecordRepository();
var equipmentStatusList = statusRecordRepository.Where(x => equipmentCodeList.Contains(x.EquipmentCode) && x.Created >= monthStart && x.Updated <= monthEnd).ToList();
//.OrderBy(t => t.IsEnd).ThenByDescending(t => t.Created).FirstOrDefault();
foreach (var equipment in equipments)
{
//通过视图查设备未处理的报警
var alarmRecord = DALHelper.GetFreeSql().Ado.ExecuteDataTable($"select*from equipmentNotFinishedAlarm where EquipmentCode='{equipment.Code}'");
//var alarmRecord = alarmRecordDataAll.Where(x => x.ishandled == false && x.EquipmentCode == equipment.Code && x.Created >= monthStart8 && (Convert.ToDateTime(x.Updated) - Convert.ToDateTime(x.Created)).TotalMinutes > 1).GroupBy(x => new { x.EquipmentCode, x.Alarm }).ToList();
//逾期未处理数
var alarmRecordDataNow = alarmRecord.Rows.Count;
var equipmentStatusRecord = equipmentStatusList.Where(x => x.EquipmentCode == equipment.Code).OrderBy(t => t.IsEnd).ThenByDescending(t => t.Created).FirstOrDefault();
var allStatus = equipmentStatusList.Where(x => x.EquipmentCode == equipment.Code);
var maintainRecord = maintainRecordList.Where(x => x.EquipmentCode.Equals(equipment.Code)).OrderBy(x => x.Status).First();
_ = Enum.TryParse(equipmentStatusRecord?.EquipmentStatus, out EquipmentStatusRecordStatus equipmentStatus);
var online = equipmentDataRecordList.FirstOrDefault(x => x.Code == equipment.Code);
var onlineFlag = online != null ? online.Online : false;
//超过5分钟就算离线
if (online==null||(DateTime.Now - online.Updated) >= TimeSpan.FromMinutes(5)) {
onlineFlag = false;
}
agvFlag = equipment.Name.IndexOf("AGV") > -1;
int agvRunTotal = 0;
if (agvFlag)
{
string sql = $@" select rowCounts= count(id)
from huahengecs5_binchengtaiguang.dbo.agvtask
where AGVCode='{equipment.Code}' and Created>='{monthStart}' and Updated <= '{monthEnd}' --and IsDeleted=0";
var dt = DALHelper.GetFreeSql().Ado.ExecuteDataTable(sql);
agvRunTotal = dt != null ? int.Parse(dt.Rows[0]["rowCounts"].ToString()) : 0;
}
var result = new MonitorViewModel
{
Equipment = equipment,
EquipmentStatus = equipmentStatusRecord == null ? -1 : Convert.ToInt32(equipmentStatus),
MaintainStatus = (maintainRecord != null) ? (EquipmentMaintainStatus)maintainRecord.Status : EquipmentMaintainStatus.MaintainDelay,
RunTotal = agvFlag ? agvRunTotal : allStatus.Count(x => x.EquipmentStatus == EquipmentStatusRecordStatus.Running.ToString()),
//FreeTotal = allStatus.Count(x => x.EquipmentStatus == EquipmentStatusRecordStatus.Free.ToString()),
//测试数据
Online = onlineFlag,
WalkTemperature = online != null ? online.WalkTemperature : 0,//new Random().Next(1, 70),
WalkVibrationVelocity = online != null ? Math.Round(online.WalkVibrationVelocity, 2) : 0,//Math.Round(new Random().Next(0, 10) + new Random().NextDouble(), 2),
LiftTemperature = online != null ? online.LiftTemperature : 0,//new Random().Next(1, 70),
LiftVibrationVelocity = online != null ? Math.Round(online.LiftVibrationVelocity, 2) : 0,//Math.Round(new Random().Next(0, 10) + new Random().NextDouble(), 2),
ConfigPars = dictList
};
//故障信息
List<string> msgList= new List<string>();
foreach(DataRow item in alarmRecord.Rows)
{
msgList.Add(item["Alarm"].ToString());
}
result.AlarmMsg = msgList;
//当日未处理故障数
result.ErrorTotal = int.Parse(alarmRecordDataNow.ToString());
result.runCurrent = "0(A)";
result.liftCurrent = "0(A)";
if (equipment.EquipmentTypeId == 1)
{
result.runCurrent = online != null ? Math.Round(online.runCurrent, 2).ToString() + "(A)" : "0(A)";
result.liftCurrent = online != null ? Math.Round(online.liftCurrent, 2).ToString() + "(A)" : "0(A)";
}
results.Add(result);
}
return Ok(results);
}
catch (Exception ex)
{
return Ok(new
{
code = 200,
count = 0,
data = string.Empty,
msg = ex.Message
});
}
}
}
}