安灯修改中
This commit is contained in:
@@ -71,7 +71,6 @@ namespace ZR.Service.mes.andon
|
||||
//{
|
||||
// LevelName = model.LevelName,
|
||||
// LightColor = model.LightColor,
|
||||
// HandleTimeout = model.HandleTimeout,
|
||||
// ApplyScenario = model.ApplyScenario,
|
||||
// CreatedBy = model.CreatedBy,
|
||||
// CreatedTime = model.CreatedTime,
|
||||
|
||||
@@ -123,63 +123,64 @@ namespace ZR.Service.mes.andon
|
||||
|
||||
public ApiResult AlarmResponse(AndonAlarmRecordDto parm)
|
||||
{
|
||||
try
|
||||
{
|
||||
var response = new ApiResult();
|
||||
if (parm != null)
|
||||
{
|
||||
var record = Queryable()
|
||||
.Where(x => x.Id == parm.Id)
|
||||
.First();
|
||||
if (record != null)
|
||||
{
|
||||
if (record.AlarmLevel != null && record.AlarmLevel.Length > 0)
|
||||
{
|
||||
int minute = 0;
|
||||
var levelInfo = andonAlarmLevelService.Queryable()
|
||||
.Where(x => x.LevelName == record.AlarmLevel).First();
|
||||
if (levelInfo != null && levelInfo.HandleTimeout != null)
|
||||
{
|
||||
minute = (int)levelInfo.HandleTimeout;
|
||||
}
|
||||
// 提前计算超时时间,提高可读性
|
||||
var createdTime = record.CreatedTime.ObjToDate();
|
||||
var timeoutTime = createdTime.AddMinutes(minute);
|
||||
var isTimeout = DateTime.Now > timeoutTime;
|
||||
record.Status = isTimeout ? "超时响应" : "及时响应";
|
||||
}
|
||||
else
|
||||
{
|
||||
record.Status = "及时响应";
|
||||
}
|
||||
record.Remarks = parm.Remarks;
|
||||
record.UpdatedBy = parm.UserId;
|
||||
record.UpdatedTime = DateTime.Now;
|
||||
UpdateAndonAlarmRecord(record);
|
||||
AndonAlarmRecordProcess andonAlarmRecordProcess = new AndonAlarmRecordProcess();
|
||||
andonAlarmRecordProcess.AlarmCode = record.AlarmCode;
|
||||
andonAlarmRecordProcess.Operate = record.Status;
|
||||
andonAlarmRecordProcess.CreatedBy = parm.UserId;
|
||||
andonAlarmRecordProcess.CreatedName = parm.UserName;
|
||||
andonAlarmRecordProcess.CreatedTime = DateTime.Now;
|
||||
andonAlarmRecordProcess.UpdatedBy = parm.UserId;
|
||||
andonAlarmRecordProcess.UpdatedName = parm.UserName;
|
||||
andonAlarmRecordProcess.UpdatedTime = DateTime.Now;
|
||||
int iResult = andonAlarmRecordProcessService.Insert(andonAlarmRecordProcess);
|
||||
return ApiResult.Success("成功",andonAlarmRecordProcess);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
response.Code = 500;
|
||||
response.Msg = "参数不能为空";
|
||||
}
|
||||
return response;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ApiResult.Error(500, ex.Message);
|
||||
}
|
||||
return null;
|
||||
//try
|
||||
//{
|
||||
// var response = new ApiResult();
|
||||
// if (parm != null)
|
||||
// {
|
||||
// var record = Queryable()
|
||||
// .Where(x => x.Id == parm.Id)
|
||||
// .First();
|
||||
// if (record != null)
|
||||
// {
|
||||
// if (record.AlarmLevel != null && record.AlarmLevel.Length > 0)
|
||||
// {
|
||||
// int minute = 0;
|
||||
// var levelInfo = andonAlarmLevelService.Queryable()
|
||||
// .Where(x => x.LevelName == record.AlarmLevel).First();
|
||||
// if (levelInfo != null && levelInfo.HandleTimeout != null)
|
||||
// {
|
||||
// minute = (int)levelInfo.HandleTimeout;
|
||||
// }
|
||||
// // 提前计算超时时间,提高可读性
|
||||
// var createdTime = record.CreatedTime.ObjToDate();
|
||||
// var timeoutTime = createdTime.AddMinutes(minute);
|
||||
// var isTimeout = DateTime.Now > timeoutTime;
|
||||
// record.Status = isTimeout ? "超时响应" : "及时响应";
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// record.Status = "及时响应";
|
||||
// }
|
||||
// record.Remarks = parm.Remarks;
|
||||
// record.UpdatedBy = parm.UserId;
|
||||
// record.UpdatedTime = DateTime.Now;
|
||||
// UpdateAndonAlarmRecord(record);
|
||||
// AndonAlarmRecordProcess andonAlarmRecordProcess = new AndonAlarmRecordProcess();
|
||||
// andonAlarmRecordProcess.AlarmCode = record.AlarmCode;
|
||||
// andonAlarmRecordProcess.Operate = record.Status;
|
||||
// andonAlarmRecordProcess.CreatedBy = parm.UserId;
|
||||
// andonAlarmRecordProcess.CreatedName = parm.UserName;
|
||||
// andonAlarmRecordProcess.CreatedTime = DateTime.Now;
|
||||
// andonAlarmRecordProcess.UpdatedBy = parm.UserId;
|
||||
// andonAlarmRecordProcess.UpdatedName = parm.UserName;
|
||||
// andonAlarmRecordProcess.UpdatedTime = DateTime.Now;
|
||||
// int iResult = andonAlarmRecordProcessService.Insert(andonAlarmRecordProcess);
|
||||
// return ApiResult.Success("成功",andonAlarmRecordProcess);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// response.Code = 500;
|
||||
// response.Msg = "参数不能为空";
|
||||
// }
|
||||
// return response;
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// return ApiResult.Error(500, ex.Message);
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@@ -282,102 +283,103 @@ namespace ZR.Service.mes.andon
|
||||
/// <returns>ApiResult</returns>
|
||||
public ApiResult AlarmReportAuto()
|
||||
{
|
||||
// 定义批次大小,可配置化(便于后续调整)
|
||||
const int BatchSize = 500;
|
||||
var currentTime = DateTime.Now;
|
||||
var startTime = currentTime.AddHours(-1);
|
||||
var endTime = currentTime;
|
||||
return null;
|
||||
//// 定义批次大小,可配置化(便于后续调整)
|
||||
//const int BatchSize = 500;
|
||||
//var currentTime = DateTime.Now;
|
||||
//var startTime = currentTime.AddHours(-1);
|
||||
//var endTime = currentTime;
|
||||
|
||||
try
|
||||
{
|
||||
var alarmLevelMap = andonAlarmLevelService.Queryable()
|
||||
.Where(level => !string.IsNullOrWhiteSpace(level.LevelName) && level.HandleTimeout.HasValue)
|
||||
.ToDictionary(
|
||||
level => (object)level.LevelName.Trim(),
|
||||
level => (object)Convert.ToInt32(level.HandleTimeout.Value)
|
||||
);
|
||||
//try
|
||||
//{
|
||||
// var alarmLevelMap = andonAlarmLevelService.Queryable()
|
||||
// .Where(level => !string.IsNullOrWhiteSpace(level.LevelName) && level.HandleTimeout.HasValue)
|
||||
// .ToDictionary(
|
||||
// level => (object)level.LevelName.Trim(),
|
||||
// level => (object)Convert.ToInt32(level.HandleTimeout.Value)
|
||||
// );
|
||||
|
||||
var queryData = Queryable()
|
||||
.Where(x =>
|
||||
(x.Status == "待响应" || x.Status == "及时响应" || x.Status == "超时响应")
|
||||
&& x.CreatedTime >= startTime
|
||||
&& x.CreatedTime <= endTime)
|
||||
.ToList();
|
||||
// var queryData = Queryable()
|
||||
// .Where(x =>
|
||||
// (x.Status == "待响应" || x.Status == "及时响应" || x.Status == "超时响应")
|
||||
// && x.CreatedTime >= startTime
|
||||
// && x.CreatedTime <= endTime)
|
||||
// .ToList();
|
||||
|
||||
if (!queryData.Any())
|
||||
{
|
||||
return ApiResult.Success("无需要处理的报警数据");
|
||||
}
|
||||
// if (!queryData.Any())
|
||||
// {
|
||||
// return ApiResult.Success("无需要处理的报警数据");
|
||||
// }
|
||||
|
||||
var totalCount = queryData.Count;
|
||||
var batchCount = (int)Math.Ceiling((double)totalCount / BatchSize);
|
||||
var allProcessRecords = new List<AndonAlarmRecordProcess>();
|
||||
var batchUpdateList = new List<AndonAlarmRecord>();
|
||||
// var totalCount = queryData.Count;
|
||||
// var batchCount = (int)Math.Ceiling((double)totalCount / BatchSize);
|
||||
// var allProcessRecords = new List<AndonAlarmRecordProcess>();
|
||||
// var batchUpdateList = new List<AndonAlarmRecord>();
|
||||
|
||||
for (int batchIndex = 0; batchIndex < batchCount; batchIndex++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var currentBatch = queryData.Skip(batchIndex * BatchSize).Take(BatchSize).ToList();
|
||||
batchUpdateList.Clear();
|
||||
// for (int batchIndex = 0; batchIndex < batchCount; batchIndex++)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// var currentBatch = queryData.Skip(batchIndex * BatchSize).Take(BatchSize).ToList();
|
||||
// batchUpdateList.Clear();
|
||||
|
||||
foreach (var item in currentBatch)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(item.AlarmLevel)) continue;
|
||||
var alarmLevelKey = item.AlarmLevel?.Trim() ?? "";
|
||||
int timeoutMinutes = 0;
|
||||
if (alarmLevelMap.TryGetValue(alarmLevelKey, out object value))
|
||||
{
|
||||
timeoutMinutes = (int)value;
|
||||
}
|
||||
// foreach (var item in currentBatch)
|
||||
// {
|
||||
// if (string.IsNullOrWhiteSpace(item.AlarmLevel)) continue;
|
||||
// var alarmLevelKey = item.AlarmLevel?.Trim() ?? "";
|
||||
// int timeoutMinutes = 0;
|
||||
// if (alarmLevelMap.TryGetValue(alarmLevelKey, out object value))
|
||||
// {
|
||||
// timeoutMinutes = (int)value;
|
||||
// }
|
||||
|
||||
if (timeoutMinutes <= 0) continue;
|
||||
var createdTime = item.CreatedTime.ObjToDate();
|
||||
var timeoutTime = createdTime.AddMinutes(timeoutMinutes);
|
||||
var isTimeout = currentTime > timeoutTime;
|
||||
// if (timeoutMinutes <= 0) continue;
|
||||
// var createdTime = item.CreatedTime.ObjToDate();
|
||||
// var timeoutTime = createdTime.AddMinutes(timeoutMinutes);
|
||||
// var isTimeout = currentTime > timeoutTime;
|
||||
|
||||
if (isTimeout)
|
||||
{
|
||||
UpdateAlarmItemStatus(item, currentTime);
|
||||
batchUpdateList.Add(item);
|
||||
// if (isTimeout)
|
||||
// {
|
||||
// UpdateAlarmItemStatus(item, currentTime);
|
||||
// batchUpdateList.Add(item);
|
||||
|
||||
var processRecord = CreateAlarmProcessRecord(item, currentTime);
|
||||
allProcessRecords.Add(processRecord);
|
||||
}
|
||||
}
|
||||
// var processRecord = CreateAlarmProcessRecord(item, currentTime);
|
||||
// allProcessRecords.Add(processRecord);
|
||||
// }
|
||||
// }
|
||||
|
||||
if (batchUpdateList.Any())
|
||||
{
|
||||
UpdateAndonAlarmRecordBatch(batchUpdateList);
|
||||
}
|
||||
// if (batchUpdateList.Any())
|
||||
// {
|
||||
// UpdateAndonAlarmRecordBatch(batchUpdateList);
|
||||
// }
|
||||
|
||||
Console.WriteLine($"批次 {batchIndex + 1}/{batchCount} 处理完成,本批更新 {batchUpdateList.Count} 条报警记录");
|
||||
}
|
||||
catch (Exception batchEx)
|
||||
{
|
||||
Console.WriteLine($"批次 {batchIndex + 1} 处理失败:{batchEx.Message}");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// Console.WriteLine($"批次 {batchIndex + 1}/{batchCount} 处理完成,本批更新 {batchUpdateList.Count} 条报警记录");
|
||||
// }
|
||||
// catch (Exception batchEx)
|
||||
// {
|
||||
// Console.WriteLine($"批次 {batchIndex + 1} 处理失败:{batchEx.Message}");
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
|
||||
if (allProcessRecords.Any())
|
||||
{
|
||||
var processBatchCount = (int)Math.Ceiling((double)allProcessRecords.Count / BatchSize);
|
||||
for (int pBatchIndex = 0; pBatchIndex < processBatchCount; pBatchIndex++)
|
||||
{
|
||||
var processBatch = allProcessRecords.Skip(pBatchIndex * BatchSize).Take(BatchSize).ToList();
|
||||
andonAlarmRecordProcessService.Insert(processBatch);
|
||||
}
|
||||
}
|
||||
// if (allProcessRecords.Any())
|
||||
// {
|
||||
// var processBatchCount = (int)Math.Ceiling((double)allProcessRecords.Count / BatchSize);
|
||||
// for (int pBatchIndex = 0; pBatchIndex < processBatchCount; pBatchIndex++)
|
||||
// {
|
||||
// var processBatch = allProcessRecords.Skip(pBatchIndex * BatchSize).Take(BatchSize).ToList();
|
||||
// andonAlarmRecordProcessService.Insert(processBatch);
|
||||
// }
|
||||
// }
|
||||
|
||||
// 报警给领导,手表
|
||||
return ApiResult.Success($"成功处理 {totalCount} 条报警记录,其中超时上报 {allProcessRecords.Count} 条");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"自动超时报警处理失败:{ex.ToString()}"); // 记录完整异常栈,便于排查
|
||||
return ApiResult.Error(500, "自动超时报警处理异常,请查看日志");
|
||||
}
|
||||
// // 报警给领导,手表
|
||||
// return ApiResult.Success($"成功处理 {totalCount} 条报警记录,其中超时上报 {allProcessRecords.Count} 条");
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// Console.WriteLine($"自动超时报警处理失败:{ex.ToString()}"); // 记录完整异常栈,便于排查
|
||||
// return ApiResult.Error(500, "自动超时报警处理异常,请查看日志");
|
||||
//}
|
||||
}
|
||||
|
||||
#region 辅助方法
|
||||
|
||||
Reference in New Issue
Block a user