Commit 2103aee4 authored by wanghao's avatar wanghao

1 老化 第一阶段 和 第三阶段 写时间 后 时间比对调整。

parent 2aa9911b
package com.zehong.system.task;
import com.serotonin.modbus4j.ModbusMaster;
import com.sun.org.apache.xpath.internal.operations.Mod;
import com.zehong.system.domain.PalletDeviceBinding;
import com.zehong.system.domain.TEquipmentAlarmData;
import com.zehong.system.domain.TStoreyInfo;
......@@ -170,10 +169,7 @@ public class AgingStageOneProcessJob implements Job {
if (!allSuccess) {
log.warn("设备{}写入时间失败: ip={}, port={}", deviceId, ip, port);
binding.setWriteTimeStatus("0");
palletDeviceBindingMapper.updatePalletDeviceBinding(binding);
errorCount.incrementAndGet();
return false;
}
} else {
binding.setRecordYear(String.valueOf(writeCurrentTimeVo.getYear()));
binding.setRecordMonth(String.valueOf(writeCurrentTimeVo.getMonth()));
binding.setRecordDate(String.valueOf(writeCurrentTimeVo.getDay()));
......@@ -181,6 +177,7 @@ public class AgingStageOneProcessJob implements Job {
binding.setRecordMinute(String.valueOf(writeCurrentTimeVo.getMinute()));
binding.setWriteTimeStatus("1");
}
}
// 5. 写入自检让设备开始自检,跟 上面的状态没关系
writeSelfCheckStatus(master, deviceId, binding);
......@@ -188,16 +185,19 @@ public class AgingStageOneProcessJob implements Job {
palletDeviceBindingMapper.updatePalletDeviceBinding(binding);
log.info("设备{}处理完成: ip={}, port={}, status={}", deviceId, ip, port, result[1]);
if((result[1] == 1 || result[1] == 3 || result[1] == 4) && "0".equals(binding.getWriteTimeStatus())) {
errorCount.incrementAndGet();
return false;
}
return true;
} catch (Exception e) {
log.info("设备{}处理异常: ip={}, port={}", deviceId, ip, port, e);
if(binding == null) {
binding = palletDeviceBindingMapper.selectByTrayIdAndIndex(ip, deviceId);
}
if(binding != null) {
binding.setStatus("5");
binding.setWriteTimeStatus("0");
palletDeviceBindingMapper.updatePalletDeviceBinding(binding);
}
errorCount.incrementAndGet();
return false;
} finally {
......
......@@ -292,7 +292,7 @@ public class AgingStageThreeProcessJob implements Job {
systemYear, systemMonth, systemDay, systemHour, systemMinute);
// 3. 比较时间差异
if (isTimeConsistent(deviceYear, deviceMonth, deviceDay, deviceHour, deviceMinute,
if (Modbus4jUtils.isTimeConsistent(deviceYear, deviceMonth, deviceDay, deviceHour, deviceMinute,
systemYear, systemMonth, systemDay, systemHour, systemMinute)) {
// 时间一致
handleTimeConsistent(deviceId, binding);
......@@ -310,38 +310,12 @@ public class AgingStageThreeProcessJob implements Job {
}
}
/**
* 判断设备时间与系统时间是否一致(差异在2分钟内)
* 考虑跨年、跨月等边界情况
*/
private boolean isTimeConsistent(int deviceYear, int deviceMonth, int deviceDay,
int deviceHour, int deviceMinute,
int systemYear, int systemMonth, int systemDay,
int systemHour, int systemMinute) {
// 1. 首先检查年份差异(考虑跨年)
if (Math.abs(deviceYear - systemYear) > 1) {
log.debug("年份差异超过1年: 设备{}年 vs 系统{}年", deviceYear, systemYear);
return false;
}
// 2. 转换为总分钟数进行比较(考虑跨年、跨月、跨日)
long deviceTotalMinutes = calculateTotalMinutes(deviceYear, deviceMonth, deviceDay, deviceHour, deviceMinute);
long systemTotalMinutes = calculateTotalMinutes(systemYear, systemMonth, systemDay, systemHour, systemMinute);
long minuteDiff = Math.abs(deviceTotalMinutes - systemTotalMinutes);
log.debug("时间差异比较: 设备分钟数={}, 系统分钟数={}, 差异={}分钟",
deviceTotalMinutes, systemTotalMinutes, minuteDiff);
// 3. 差异在2分钟内认为一致
return minuteDiff <= 2;
}
/**
* 处理时间一致的情况
*/
private void handleTimeConsistent(int deviceId, PalletDeviceBinding binding) {
log.info("设备{}时间与系统时间一致,无需更新", deviceId);
binding.setWriteTimeStatus("1");
binding.setRunTimeStatus("1"); // 时间状态正常
log.info("设备{}时间检查完成:时间一致", deviceId);
}
......@@ -383,39 +357,6 @@ public class AgingStageThreeProcessJob implements Job {
recordAlarmByBinding(binding, "设备时间更新异常: " + e.getMessage());
}
}
/**
* 计算从参考时间点(如2000年)开始的总分钟数
* 用于准确比较时间差异,考虑跨年跨月
*/
private long calculateTotalMinutes(int year, int month, int day, int hour, int minute) {
// 使用2000-01-01 00:00:00作为参考点
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2000);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long baseTimeInMillis = cal.getTimeInMillis();
// 设置目标时间
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); // 转换为Calendar月份(0-based)
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long targetTimeInMillis = cal.getTimeInMillis();
// 返回总分钟数
return (targetTimeInMillis - baseTimeInMillis) / (1000 * 60);
}
/**
* 写入当前时间到设备
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment