@ -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,19 +320,37 @@ public class ModbusCollectServiceImpl
if ( greenInsertHist & & isLastGreen ) {
SfdcTimeHist sfdcTimeHistByGreen = sfdcTimeHistMapper . selectSfdcTimeHistByNew ( folderLocation . getSite ( ) , resourceScheduled . getSeqNo ( ) , "自动停机" ) ;
if ( sfdcTimeHistByGreen ! = null ) {
sfdcTimeHistByGreen . setTillTime ( null ) ;
sfdcTimeHistByGreen . setTillenteredTime ( null ) ;
sfdcTimeHistByGreen . setCompletedFlag ( "N" ) ;
int i = sfdcTimeHistMapper . updateById ( sfdcTimeHistByGreen ) ;
if ( i > 0 ) {
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
updateWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
updateWrapper . eq ( "seq_no" , sfdcTimeHistByGreen . getSeqNo ( ) ) ;
updateWrapper . set ( "issend" , "Y" ) ;
updateWrapper . set ( "sfdcid" , sfdcTimeHistByGreen . getId ( ) ) ;
resourceScheduledMapper . update ( updateWrapper ) ;
logger . info ( "停机恢复后正常运行时间未到指定时间,sfdcid变为之前的,id:{}" , sfdcTimeHistByGreen . getId ( ) ) ;
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" ) ;
int i = sfdcTimeHistMapper . updateById ( sfdcTimeHistByGreen ) ;
if ( i > 0 ) {
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
updateWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
updateWrapper . eq ( "seq_no" , sfdcTimeHistByGreen . getSeqNo ( ) ) ;
updateWrapper . set ( "issend" , "Y" ) ;
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 ) ;
}
}
}