|
|
|
@ -17,11 +17,21 @@ import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.core.task.SimpleAsyncTaskExecutor; |
|
|
|
import org.springframework.core.task.TaskExecutor; |
|
|
|
import org.springframework.data.redis.core.RedisTemplate; |
|
|
|
import org.springframework.http.*; |
|
|
|
import org.springframework.web.client.RestClientException; |
|
|
|
import org.springframework.web.client.RestTemplate; |
|
|
|
import org.springframework.web.util.UriComponentsBuilder; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.time.ZoneId; |
|
|
|
import java.time.ZonedDateTime; |
|
|
|
import java.time.format.DateTimeFormatter; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
@ -50,6 +60,30 @@ public class ModbusCollectServiceImpl |
|
|
|
@Autowired |
|
|
|
private ThreeColorLampDownlogMapper threeColorLampDownlogMapper; |
|
|
|
|
|
|
|
@Autowired(required = false) |
|
|
|
private TaskExecutor taskExecutor; |
|
|
|
|
|
|
|
@Value("${mes.sync.url:}") |
|
|
|
private String mesSyncUrl; |
|
|
|
|
|
|
|
private final RestTemplate restTemplate = new RestTemplate(); |
|
|
|
private final TaskExecutor fallbackExecutor = new SimpleAsyncTaskExecutor("mes-sync-"); |
|
|
|
|
|
|
|
private static final DateTimeFormatter MES_TIME_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|
|
|
private static final ZoneId MES_ZONE = ZoneId.of("Asia/Shanghai"); |
|
|
|
|
|
|
|
private void fireAndForget(String taskName, Runnable task) { |
|
|
|
TaskExecutor executor = (taskExecutor != null) ? taskExecutor : fallbackExecutor; |
|
|
|
executor.execute(() -> { |
|
|
|
try { |
|
|
|
task.run(); |
|
|
|
} catch (Exception ex) { |
|
|
|
// 不影响主流程:仅记录异常 |
|
|
|
logger.error("异步任务执行失败: {}", taskName, ex); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public void handleSignal(DeviceInfo deviceInfo) { |
|
|
|
@ -184,8 +218,6 @@ public class ModbusCollectServiceImpl |
|
|
|
int port = folderLocation.getRegisterPort() != null ? folderLocation.getRegisterPort() : 502; |
|
|
|
int quantity = folderLocation.getRegisterNum() != null ? folderLocation.getRegisterNum() : 3; |
|
|
|
int offset = 0x00; |
|
|
|
Integer failureTime = folderLocation.getFailureTime() != null ? folderLocation.getFailureTime() : 5; |
|
|
|
Integer runTime = folderLocation.getRunTime() != null ? folderLocation.getRunTime() : 4; |
|
|
|
String cuttingSymbol = folderLocation.getCuttingSymbol(); |
|
|
|
if (StringUtils.isNotBlank(cuttingSymbol)) { |
|
|
|
try { |
|
|
|
@ -199,6 +231,21 @@ public class ModbusCollectServiceImpl |
|
|
|
|
|
|
|
// 读取寄存器数据 |
|
|
|
Map<Integer, Integer> registerData = ModbusUtil.readHoldingRegisters(ip,port, 1, offset, quantity); |
|
|
|
handleHoldingRegisters(folderLocation, registerData); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void readHoldingRegistersLocal(Resource folderLocation, Map<Integer, Integer> registerData) { |
|
|
|
handleHoldingRegisters(folderLocation, registerData != null ? registerData : Collections.emptyMap()); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleHoldingRegisters(Resource folderLocation, Map<Integer, Integer> registerData) { |
|
|
|
if (registerData == null) { |
|
|
|
registerData = Collections.emptyMap(); |
|
|
|
} |
|
|
|
|
|
|
|
Integer failureTime = folderLocation.getFailureTime() != null ? folderLocation.getFailureTime() : 5; |
|
|
|
Integer runTime = folderLocation.getRunTime() != null ? folderLocation.getRunTime() : 4; |
|
|
|
|
|
|
|
if (registerData.isEmpty()) { |
|
|
|
//如果读取不到数据 |
|
|
|
@ -273,6 +320,20 @@ public class ModbusCollectServiceImpl |
|
|
|
if(greenInsertHist && isLastGreen){ |
|
|
|
SfdcTimeHist sfdcTimeHistByGreen = sfdcTimeHistMapper.selectSfdcTimeHistByNew(folderLocation.getSite(), resourceScheduled.getSeqNo(), "自动停机"); |
|
|
|
if(sfdcTimeHistByGreen != null){ |
|
|
|
boolean skipReopenHist = false; |
|
|
|
if (sfdcTimeHistByGreen.getEventTime() != null && StringUtils.isNotBlank(resourceScheduled.getSeqNo())) { |
|
|
|
int longGreenCount = threeColorLampDownlogMapper.countDownlogLamp100ExceedingRuntimeAfterHistEvent( |
|
|
|
folderLocation.getSite(), |
|
|
|
resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHistByGreen.getEventTime(), |
|
|
|
runTime); |
|
|
|
if (longGreenCount > 0) { |
|
|
|
skipReopenHist = true; |
|
|
|
logger.info("hist event_time 之后存在 lamp=100 且持续超过 runTime({} 分钟) 的 downlog,跳过清空 hist,histId:{}", |
|
|
|
runTime, sfdcTimeHistByGreen.getId()); |
|
|
|
} |
|
|
|
} |
|
|
|
if (!skipReopenHist) { |
|
|
|
sfdcTimeHistByGreen.setTillTime(null); |
|
|
|
sfdcTimeHistByGreen.setTillenteredTime(null); |
|
|
|
sfdcTimeHistByGreen.setCompletedFlag("N"); |
|
|
|
@ -286,6 +347,10 @@ public class ModbusCollectServiceImpl |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHistByGreen.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("停机恢复后正常运行时间未到指定时间,sfdcid变为之前的,id:{}",sfdcTimeHistByGreen.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), sfdcTimeHistByGreen.getSeqNo(), |
|
|
|
sfdcTimeHistByGreen.getId(), sfdcTimeHistByGreen.getEventTime())); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -325,7 +390,9 @@ public class ModbusCollectServiceImpl |
|
|
|
sfdcTimeHist.setHistSeqno(histSeqno+1); |
|
|
|
Date currentTime = new Date(); |
|
|
|
Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); |
|
|
|
sfdcTimeHist.setEventTime(fiveMinutesAgo); |
|
|
|
/* sfdcTimeHist.setEventTime(fiveMinutesAgo);*/ |
|
|
|
ThreeColorLampDownlog sfdcTimeHistStartTime =threeColorLampDownlogMapper.selectThreeColorLampDownlogStartTime(folderLocation.getSite(), folderLocation.getResourceId(),resourceScheduled.getSeqNo()) ; |
|
|
|
sfdcTimeHist.setEventTime(sfdcTimeHistStartTime.getStartDate() == null?fiveMinutesAgo:sfdcTimeHistStartTime.getStartDate()); |
|
|
|
sfdcTimeHist.setEnteredBy(null); |
|
|
|
sfdcTimeHist.setEventDesc(null); |
|
|
|
sfdcTimeHist.setDowntimeCode(null); |
|
|
|
@ -359,6 +426,9 @@ public class ModbusCollectServiceImpl |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHist.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -376,7 +446,9 @@ public class ModbusCollectServiceImpl |
|
|
|
sfdcTimeHist.setHistSeqno(histSeqno+1); |
|
|
|
Date currentTime = new Date(); |
|
|
|
Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); |
|
|
|
sfdcTimeHist.setEventTime(fiveMinutesAgo); |
|
|
|
/* sfdcTimeHist.setEventTime(fiveMinutesAgo);*/ |
|
|
|
ThreeColorLampDownlog sfdcTimeHistStartTime =threeColorLampDownlogMapper.selectThreeColorLampDownlogStartTime(folderLocation.getSite(), folderLocation.getResourceId(),resourceScheduled.getSeqNo()) ; |
|
|
|
sfdcTimeHist.setEventTime(sfdcTimeHistStartTime.getStartDate() == null?fiveMinutesAgo:sfdcTimeHistStartTime.getStartDate()); |
|
|
|
sfdcTimeHist.setEnteredBy(null); |
|
|
|
sfdcTimeHist.setEventDesc(null); |
|
|
|
sfdcTimeHist.setDowntimeCode(null); |
|
|
|
@ -410,6 +482,9 @@ public class ModbusCollectServiceImpl |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHist.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -461,7 +536,9 @@ public class ModbusCollectServiceImpl |
|
|
|
sfdcTimeHist.setHistSeqno(histSeqno+1); |
|
|
|
Date currentTime = new Date(); |
|
|
|
Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); |
|
|
|
sfdcTimeHist.setEventTime(fiveMinutesAgo); |
|
|
|
/* sfdcTimeHist.setEventTime(fiveMinutesAgo);*/ |
|
|
|
ThreeColorLampDownlog sfdcTimeHistStartTime =threeColorLampDownlogMapper.selectThreeColorLampDownlogStartTime(folderLocation.getSite(), folderLocation.getResourceId(),resourceScheduled.getSeqNo()) ; |
|
|
|
sfdcTimeHist.setEventTime(sfdcTimeHistStartTime.getStartDate() == null?fiveMinutesAgo:sfdcTimeHistStartTime.getStartDate()); |
|
|
|
sfdcTimeHist.setEnteredBy(null); |
|
|
|
sfdcTimeHist.setEventDesc(null); |
|
|
|
sfdcTimeHist.setDowntimeCode(null); |
|
|
|
@ -495,6 +572,9 @@ public class ModbusCollectServiceImpl |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHist.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -512,7 +592,9 @@ public class ModbusCollectServiceImpl |
|
|
|
sfdcTimeHist.setHistSeqno(histSeqno+1); |
|
|
|
Date currentTime = new Date(); |
|
|
|
Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); |
|
|
|
sfdcTimeHist.setEventTime(fiveMinutesAgo); |
|
|
|
/* sfdcTimeHist.setEventTime(fiveMinutesAgo);*/ |
|
|
|
ThreeColorLampDownlog sfdcTimeHistStartTime =threeColorLampDownlogMapper.selectThreeColorLampDownlogStartTime(folderLocation.getSite(), folderLocation.getResourceId(),resourceScheduled.getSeqNo()) ; |
|
|
|
sfdcTimeHist.setEventTime(sfdcTimeHistStartTime.getStartDate() == null?fiveMinutesAgo:sfdcTimeHistStartTime.getStartDate()); |
|
|
|
sfdcTimeHist.setEnteredBy(null); |
|
|
|
sfdcTimeHist.setEventDesc(null); |
|
|
|
sfdcTimeHist.setDowntimeCode(null); |
|
|
|
@ -546,6 +628,9 @@ public class ModbusCollectServiceImpl |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHist.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -566,6 +651,151 @@ public class ModbusCollectServiceImpl |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//000的情况 |
|
|
|
boolean whiteInsertHist = false; |
|
|
|
if (colorLampLisByTime != null && colorLampLisByTime.size() > 0) { |
|
|
|
// 只取最近 failureTime 条记录做判断 |
|
|
|
whiteInsertHist = true; |
|
|
|
for (ThreeColorLamp lamp3 : colorLampLisByTime) { |
|
|
|
boolean isWhite = ("0".equals(lamp3.getGreen())) && |
|
|
|
("0".equals(lamp3.getOrange())) && |
|
|
|
("0".equals(lamp3.getRed())); |
|
|
|
if (!isWhite) { |
|
|
|
whiteInsertHist = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (whiteInsertHist){ |
|
|
|
if(!"X".equals(resourceScheduled.getIssend())){ |
|
|
|
SfdcTimeHist timeHist = sfdcTimeHistMapper.selectSfdcTimeHistByNew(folderLocation.getSite(), resourceScheduled.getSeqNo(), "自动停机"); |
|
|
|
if(timeHist == null){ |
|
|
|
SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); |
|
|
|
if(soscheduled != null){ |
|
|
|
int histSeqno = threeColorLampMapper.selectHistSeqno(folderLocation.getSite(), resourceScheduled.getSeqNo()); |
|
|
|
SfdcTimeHist sfdcTimeHist = new SfdcTimeHist(); |
|
|
|
sfdcTimeHist.setSite(folderLocation.getSite()); |
|
|
|
sfdcTimeHist.setOrderNo(soscheduled.getOrderno()); |
|
|
|
sfdcTimeHist.setItemNo(Double.valueOf(soscheduled.getItemno())); |
|
|
|
sfdcTimeHist.setSeqNo(soscheduled.getSeqno()); |
|
|
|
sfdcTimeHist.setHistSeqno(histSeqno+1); |
|
|
|
Date currentTime = new Date(); |
|
|
|
Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); |
|
|
|
/* sfdcTimeHist.setEventTime(fiveMinutesAgo);*/ |
|
|
|
ThreeColorLampDownlog sfdcTimeHistStartTime =threeColorLampDownlogMapper.selectThreeColorLampDownlogStartTime(folderLocation.getSite(), folderLocation.getResourceId(),resourceScheduled.getSeqNo()) ; |
|
|
|
sfdcTimeHist.setEventTime(sfdcTimeHistStartTime.getStartDate() == null?fiveMinutesAgo:sfdcTimeHistStartTime.getStartDate()); |
|
|
|
sfdcTimeHist.setEnteredBy(null); |
|
|
|
sfdcTimeHist.setEventDesc(null); |
|
|
|
sfdcTimeHist.setDowntimeCode(null); |
|
|
|
sfdcTimeHist.setEventType("D"); |
|
|
|
sfdcTimeHist.setLinkhistSeqno(null); |
|
|
|
sfdcTimeHist.setTillenteredBy(null); |
|
|
|
sfdcTimeHist.setCompletedFlag("N"); |
|
|
|
if("T".equals(resourceScheduled.getStatus())){ |
|
|
|
sfdcTimeHist.setDowntimePhasein("调机"); |
|
|
|
}else{ |
|
|
|
sfdcTimeHist.setDowntimePhasein("生产"); |
|
|
|
} |
|
|
|
|
|
|
|
sfdcTimeHist.setRollNo(soscheduled.getRollNo()); |
|
|
|
sfdcTimeHist.setCreatedDate(new Date()); |
|
|
|
sfdcTimeHist.setCreatedBy("自动停机"); |
|
|
|
sfdcTimeHist.setUpdatedDate(new Date()); |
|
|
|
sfdcTimeHist.setDelflag("N"); |
|
|
|
sfdcTimeHist.setVersion(1); |
|
|
|
sfdcTimeHist.setReplaceFlag("0"); |
|
|
|
sfdcTimeHist.setBatchNo(null); |
|
|
|
sfdcTimeHist.setRemark(null); |
|
|
|
int insert = sfdcTimeHistMapper.insert(sfdcTimeHist); |
|
|
|
logger.info("停机红灯插入数据: {}", sfdcTimeHist); |
|
|
|
if(insert >0){ |
|
|
|
UpdateWrapper<ResourceScheduled> updateWrapper = new UpdateWrapper<>(); |
|
|
|
updateWrapper.eq("site", folderLocation.getSite()); |
|
|
|
updateWrapper.eq("resource_id", folderLocation.getResourceId()); |
|
|
|
updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); |
|
|
|
updateWrapper.set("issend", "X"); |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHist.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else{ |
|
|
|
if( "Y".equals(timeHist.getCompletedFlag())){ |
|
|
|
SoscheduledroutingVo soscheduled = threeColorLampMapper.getSoscheduled(resourceScheduled.getSeqNo()); |
|
|
|
if(soscheduled != null){ |
|
|
|
int histSeqno = threeColorLampMapper.selectHistSeqno(folderLocation.getSite(), resourceScheduled.getSeqNo()); |
|
|
|
SfdcTimeHist sfdcTimeHist = new SfdcTimeHist(); |
|
|
|
sfdcTimeHist.setSite(folderLocation.getSite()); |
|
|
|
sfdcTimeHist.setOrderNo(soscheduled.getOrderno()); |
|
|
|
sfdcTimeHist.setItemNo(Double.valueOf(soscheduled.getItemno())); |
|
|
|
sfdcTimeHist.setSeqNo(soscheduled.getSeqno()); |
|
|
|
sfdcTimeHist.setHistSeqno(histSeqno+1); |
|
|
|
Date currentTime = new Date(); |
|
|
|
Date fiveMinutesAgo = new Date(currentTime.getTime() - failureTime * 60 * 1000); |
|
|
|
/* sfdcTimeHist.setEventTime(fiveMinutesAgo);*/ |
|
|
|
ThreeColorLampDownlog sfdcTimeHistStartTime =threeColorLampDownlogMapper.selectThreeColorLampDownlogStartTime(folderLocation.getSite(), folderLocation.getResourceId(),resourceScheduled.getSeqNo()) ; |
|
|
|
sfdcTimeHist.setEventTime(sfdcTimeHistStartTime.getStartDate() == null?fiveMinutesAgo:sfdcTimeHistStartTime.getStartDate()); |
|
|
|
sfdcTimeHist.setEnteredBy(null); |
|
|
|
sfdcTimeHist.setEventDesc(null); |
|
|
|
sfdcTimeHist.setDowntimeCode(null); |
|
|
|
sfdcTimeHist.setEventType("D"); |
|
|
|
sfdcTimeHist.setLinkhistSeqno(null); |
|
|
|
sfdcTimeHist.setTillenteredBy(null); |
|
|
|
sfdcTimeHist.setCompletedFlag("N"); |
|
|
|
if("T".equals(resourceScheduled.getStatus())){ |
|
|
|
sfdcTimeHist.setDowntimePhasein("调机"); |
|
|
|
}else{ |
|
|
|
sfdcTimeHist.setDowntimePhasein("生产"); |
|
|
|
} |
|
|
|
|
|
|
|
sfdcTimeHist.setRollNo(soscheduled.getRollNo()); |
|
|
|
sfdcTimeHist.setCreatedDate(new Date()); |
|
|
|
sfdcTimeHist.setCreatedBy("自动停机"); |
|
|
|
sfdcTimeHist.setUpdatedDate(new Date()); |
|
|
|
sfdcTimeHist.setDelflag("N"); |
|
|
|
sfdcTimeHist.setVersion(1); |
|
|
|
sfdcTimeHist.setReplaceFlag("0"); |
|
|
|
sfdcTimeHist.setBatchNo(null); |
|
|
|
sfdcTimeHist.setRemark(null); |
|
|
|
int insert = sfdcTimeHistMapper.insert(sfdcTimeHist); |
|
|
|
logger.info("停机红灯插入数据: {}", sfdcTimeHist); |
|
|
|
if(insert >0){ |
|
|
|
UpdateWrapper<ResourceScheduled> updateWrapper = new UpdateWrapper<>(); |
|
|
|
updateWrapper.eq("site", folderLocation.getSite()); |
|
|
|
updateWrapper.eq("resource_id", folderLocation.getResourceId()); |
|
|
|
updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); |
|
|
|
updateWrapper.set("issend", "X"); |
|
|
|
updateWrapper.set("sfdcid",sfdcTimeHist.getId()); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,变为X,sfdcid:{}",sfdcTimeHist.getId()); |
|
|
|
fireAndForget("syncMesFormStop", () -> |
|
|
|
syncMesFormStop(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else{ |
|
|
|
// 不满足连续 failureTime 条 0,0,0 的条件时,保持原有行为:将中间表发送状态置为 Y |
|
|
|
UpdateWrapper<ResourceScheduled> updateWrapper = new UpdateWrapper<>(); |
|
|
|
updateWrapper.eq("site", folderLocation.getSite()); |
|
|
|
updateWrapper.eq("resource_id", folderLocation.getResourceId()); |
|
|
|
updateWrapper.eq("seq_no", resourceScheduled.getSeqNo()); |
|
|
|
updateWrapper.set("issend", "Y"); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else{ |
|
|
|
@ -633,7 +863,16 @@ public class ModbusCollectServiceImpl |
|
|
|
if(StringUtils.isNotBlank(sfdcTimeHist1.getEventDesc())){ |
|
|
|
String startTime = sdf.format(sfdcTimeHist1.getEventTime()); |
|
|
|
String endTime = sdf.format(sfdcTimeHist1.getTillTime()); |
|
|
|
threeColorLampDownlogMapper.updateDownLogEventDesc(startTime,endTime,sfdcTimeHist1.getEventDesc()); |
|
|
|
threeColorLampDownlogMapper.updateDownLogEventDesc( |
|
|
|
startTime, |
|
|
|
endTime, |
|
|
|
sfdcTimeHist1.getEventDesc(), |
|
|
|
folderLocation.getSite(), |
|
|
|
folderLocation.getResourceId(), |
|
|
|
sfdcTimeHist1.getSeqNo(), |
|
|
|
sfdcTimeHist1.getOrderNo(), |
|
|
|
runTime |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -646,6 +885,9 @@ public class ModbusCollectServiceImpl |
|
|
|
updateWrapper.set("sfdcid",null); |
|
|
|
resourceScheduledMapper.update(updateWrapper); |
|
|
|
logger.info("更新了中间表,sfdcid变为null,id:{}",resourceScheduled.getId()); |
|
|
|
fireAndForget("syncMesFormStart", () -> |
|
|
|
syncMesFormStart(folderLocation.getSite(), resourceScheduled.getSeqNo(), |
|
|
|
sfdcTimeHist.getId(), sfdcTimeHist.getEventTime())); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -846,5 +1088,55 @@ public class ModbusCollectServiceImpl |
|
|
|
} |
|
|
|
return sb.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
private void syncMesFormStop(String site, String seqNo, Integer sfdcId, Date eventTime) { |
|
|
|
postMesDowntimeEvent(site, seqNo, sfdcId, eventTime, "DOWN_TIME_INSERTED"); |
|
|
|
} |
|
|
|
|
|
|
|
private void syncMesFormStart(String site, String seqNo, Integer sfdcId, Date eventTime) { |
|
|
|
postMesDowntimeEvent(site, seqNo, sfdcId, eventTime, "DOWN_TIME_FINISHED"); |
|
|
|
} |
|
|
|
|
|
|
|
private void postMesDowntimeEvent(String site, String seqNo, Integer sfdcId, Date eventTime, String event) { |
|
|
|
if (StringUtils.isBlank(site) || StringUtils.isBlank(seqNo)) { |
|
|
|
logger.warn("MES 同步跳过:site/seqNo 为空。event={}, site={}, seqNo={}", event, site, seqNo); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(mesSyncUrl)) { |
|
|
|
logger.warn("MES sync url 未配置,跳过同步。event={}, site={}, seqNo={}", event, site, seqNo); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String finalEventTime = eventTime !=null |
|
|
|
? eventTime.toString() |
|
|
|
: MES_TIME_FMT.format(ZonedDateTime.now(MES_ZONE)); |
|
|
|
|
|
|
|
Map<String, Object> body = new LinkedHashMap<>(); |
|
|
|
body.put("site", site); |
|
|
|
body.put("seqNo", seqNo); |
|
|
|
body.put("downTimeId", sfdcId); |
|
|
|
body.put("event", event); |
|
|
|
body.put("eventTime", finalEventTime); |
|
|
|
body.put("source", "RFID_JAR"); |
|
|
|
|
|
|
|
HttpHeaders headers = new HttpHeaders(); |
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON); |
|
|
|
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(body, headers); |
|
|
|
|
|
|
|
String url = UriComponentsBuilder.fromHttpUrl(mesSyncUrl).toUriString(); |
|
|
|
try { |
|
|
|
ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, entity, String.class); |
|
|
|
if (!resp.getStatusCode().is2xxSuccessful()) { |
|
|
|
logger.warn("MES 同步失败。status={}, event={}, site={}, seqNo={}, downTimeId={}, resp={}", |
|
|
|
resp.getStatusCodeValue(), event, site, seqNo, sfdcId, resp.getBody()); |
|
|
|
} else { |
|
|
|
logger.info("MES 同步成功。event={}, site={}, seqNo={}, downTimeId={}", event, site, seqNo, sfdcId); |
|
|
|
} |
|
|
|
} catch (RestClientException ex) { |
|
|
|
logger.error("MES 同步异常。event={}, site={}, seqNo={}, downTimeId={}, url={}", |
|
|
|
event, site, seqNo, sfdcId, url, ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|