diff --git a/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/controller/ServerController.java b/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/controller/ServerController.java index 51f7608a99471fd30832d0e9a05ae2fb73b75c41..7ac51a24336802e16fc06d49f7963df6f1173237 100644 --- a/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/controller/ServerController.java +++ b/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/controller/ServerController.java @@ -214,65 +214,115 @@ public class ServerController { */ @Scheduled(fixedRate = 1000) private void updatePatternCountDown(){ - try{ - for(MessageData md : ascDao.getStatusPatternMap().values() ){ - + try { + for (MessageData md : ascDao.getStatusPatternMap().values()){ JsonObject mdo = md.getData().getAsJsonObject(); - if(mdo.get("current_stage") == null) - return; - - int control = mdo.get("control").getAsInt(); - int patternid = 0; - if( mdo.get("patternid") != null ) patternid = mdo.get("patternid").getAsInt(); - int current_stage = mdo.get("current_stage").getAsInt(); - -// int curTime = mdo.get("curTime").getAsInt(); - + StatusPattern statusPattern = gson.fromJson(mdo, StatusPattern.class); + if (statusPattern == null) return; + if (statusPattern.getCurrent_stage() == null) return; + Integer patternid = statusPattern.getPatternid(); + // 特殊控制不存在控制方案 + if (patternid == null) return; CountDownPattern cdPattern = ascDao.cdPatternMap.get(md.getAgentid()); - if( cdPattern == null ) { - // 初始化 - cdPattern = new CountDownPattern(); + if (cdPattern == null) { + List> stages = statusPattern.getStages(); + cdPattern = new CountDownPattern(stages.size()); + cdPattern.setPatternid(patternid); ascDao.cdPatternMap.put(md.getAgentid(), cdPattern); - }else{ - // 方案发生变化,清空阶段信息 - if( patternid != cdPattern.getPatternid()){ - cdPattern.getStages().clear(); - cdPattern.setControl(control); + } else { + // 方案发生变化时,如果阶段数不一致,重置阶段信息,避免多次重置 + // 方案发生变化,重置阶段信息 + if (patternid != cdPattern.getPatternid()) { + cdPattern.initStages(statusPattern.getStages().size()); cdPattern.setPatternid(patternid); } + // 当前运行的阶段数和保存的阶段数不一致时,重置阶段信息 + int savedSize = cdPattern.getStages().size(); + int currentSize = statusPattern.getStages().size(); + if (savedSize != currentSize) { + cdPattern.initStages(statusPattern.getStages().size()); + } } - // - CountDownStage cdStage = cdPattern.getStages().get(current_stage); - if( cdStage == null ){ - cdStage = new CountDownStage(); - cdStage.setStageNum( current_stage ); - cdPattern.getStages().put(current_stage,cdStage ); - } - - int lastSecStageNum = cdPattern.getCurStageNum(); - + int control = statusPattern.getControl(); + cdPattern.setControl(control); + // 实时运行方案的当前阶段 + Integer currentStage = statusPattern.getCurrent_stage(); + CountDownStage currentCountDownStage = cdPattern.getStages().get(currentStage); + // 上次保存的运行阶段 + int curStageNum = cdPattern.getCurStageNum(); // 判断阶段是否切换 - if( lastSecStageNum != current_stage){ - cdPattern.setCurStageNum( current_stage ); - cdStage.setLaststageNum(lastSecStageNum); - cdStage.setCurDuration(0); -// int split = cdStage.getSplit(); - // 更新上个阶段的绿信比 - CountDownStage lastcdStage = cdPattern.getStages().get(lastSecStageNum); - lastcdStage.setNeststageNum( current_stage ); - lastcdStage.setSplit( lastcdStage.getCurDuration() ); + if (curStageNum != currentStage) { + cdPattern.setCurStageNum(currentStage); + currentCountDownStage.setCurDuration(0); + // 更新上个阶段绿信比 + CountDownStage lastStage = cdPattern.getStages().get(curStageNum); + lastStage.setSplit(lastStage.getCurDuration()); } - - // 定时控制计算倒计时 - // 持续时间加1 - int curDuration = cdStage.getCurDuration()+1; - cdStage.setCurDuration( curDuration ); + // 定时控制计算倒计时,持续时间加1 + int curDuration = currentCountDownStage.getCurDuration() + 1; + currentCountDownStage.setCurDuration(curDuration); if( control == 5 || control == 10 || control == 11 || control == 13){ - int current_stagecd = Math.max( cdStage.getSplit() - curDuration, 0 ); + int current_stagecd = Math.max(currentCountDownStage.getSplit() - curDuration, 0); cdPattern.setCurStageCd( current_stagecd ); mdo.addProperty("current_stagecd",current_stagecd); } + // ########################################################## +// if(mdo.get("current_stage") == null) +// return; +// +// int control = mdo.get("control").getAsInt(); +// int patternid = 0; +// if( mdo.get("patternid") != null ) patternid = mdo.get("patternid").getAsInt(); +// int current_stage = mdo.get("current_stage").getAsInt(); +// +//// int curTime = mdo.get("curTime").getAsInt(); +// +// CountDownPattern cdPattern = ascDao.cdPatternMap.get(md.getAgentid()); +// if( cdPattern == null ) { +// // 初始化 +// cdPattern = new CountDownPattern(); +// ascDao.cdPatternMap.put(md.getAgentid(), cdPattern); +// }else{ +// // 方案发生变化,清空阶段信息 +// if( patternid != cdPattern.getPatternid()){ +// cdPattern.getStages().clear(); +// cdPattern.setControl(control); +// cdPattern.setPatternid(patternid); +// } +// } +// // +// CountDownStage cdStage = cdPattern.getStages().get(current_stage); +// if( cdStage == null ){ +// cdStage = new CountDownStage(); +// cdStage.setStageNum( current_stage ); +// cdPattern.getStages().put(current_stage,cdStage ); +// } +// +// int lastSecStageNum = cdPattern.getCurStageNum(); +// +// // 判断阶段是否切换 +// if( lastSecStageNum != current_stage){ +// cdPattern.setCurStageNum( current_stage ); +// cdStage.setLaststageNum(lastSecStageNum); +// cdStage.setCurDuration(0); +//// int split = cdStage.getSplit(); +// // 更新上个阶段的绿信比 +// CountDownStage lastcdStage = cdPattern.getStages().get(lastSecStageNum); +// lastcdStage.setNeststageNum( current_stage ); +// lastcdStage.setSplit( lastcdStage.getCurDuration() ); +// } +// +// // 定时控制计算倒计时 +// // 持续时间加1 +// int curDuration = cdStage.getCurDuration()+1; +// cdStage.setCurDuration( curDuration ); +// +// if( control == 5 || control == 10 || control == 11 || control == 13){ +// int current_stagecd = Math.max( cdStage.getSplit() - curDuration, 0 ); +// cdPattern.setCurStageCd( current_stagecd ); +// mdo.addProperty("current_stagecd",current_stagecd); +// } // logger.info( cdPattern.toString() ); diff --git a/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/handler/AgentHandler.java b/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/handler/AgentHandler.java index 110db3c61cb812e0d856b29b063231f08fac0b28..a44d8dd466f2fe70d705bce303feabb673b33ffa 100644 --- a/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/handler/AgentHandler.java +++ b/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/handler/AgentHandler.java @@ -298,6 +298,7 @@ public class AgentHandler extends ICommHandler { } } catch (Exception e) { + e.printStackTrace(); logger.warning("taskExecutor Exception: " + e.getMessage()); } } diff --git a/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/model/CountDownPattern.java b/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/model/CountDownPattern.java index b103f7fa60259a084d53296c1d87a23957376364..6f3913e2384e8ed648edbe27175d90472e083add 100644 --- a/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/model/CountDownPattern.java +++ b/OpenATC-Admin-server/agent/src/main/java/com/openatc/agent/model/CountDownPattern.java @@ -3,6 +3,7 @@ package com.openatc.agent.model; import lombok.Data; import java.util.HashMap; +import java.util.List; import java.util.Map; @Data @@ -15,6 +16,32 @@ public class CountDownPattern { int patternid; public CountDownPattern(){ - stages = new HashMap<>(); +// stages = new HashMap<>(); } - } + + public CountDownPattern(int size) { + this.initStages(size); + } + + public void initStages(int size) { + this.curStageNum = 1; + this.stages = new HashMap<>(size); + for (int stageIndex = 1; stageIndex <= size; stageIndex++) { + CountDownStage countDownStage = new CountDownStage(); + countDownStage.setStageNum(stageIndex); + if (stageIndex == 1) { + countDownStage.setLaststageNum(size); + } else { + countDownStage.setLaststageNum(stageIndex - 1); + } + if (stageIndex == size) { + countDownStage.setNeststageNum(1); + } else { + countDownStage.setNeststageNum(stageIndex + 1); + } + countDownStage.setSplit(0); + countDownStage.setCurDuration(0); + this.stages.put(stageIndex, countDownStage); + } + } +} diff --git a/OpenATC-Admin-server/comm/src/main/java/com/openatc/comm/model/UdpCommunicationForConfiger.java b/OpenATC-Admin-server/comm/src/main/java/com/openatc/comm/model/UdpCommunicationForConfiger.java index 3f6a0c4addeb352355daa2843621005f318ed05f..0c95f3eb2ca16cb4a0d6c39b05ddd3c963b7aaa7 100644 --- a/OpenATC-Admin-server/comm/src/main/java/com/openatc/comm/model/UdpCommunicationForConfiger.java +++ b/OpenATC-Admin-server/comm/src/main/java/com/openatc/comm/model/UdpCommunicationForConfiger.java @@ -82,7 +82,7 @@ public class UdpCommunicationForConfiger implements Communication { logger.warning(e.getMessage()); } // logger.info("datagramSocket senddata end: " + System.currentTimeMillis()); -// logger.info("============= From Local: " + datagramSocket.getLocalPort() + " send to " + ip + ":" + port + " successfully!"); + System.out.println("From Local Port: " + datagramSocket.getLocalPort() + " send to " + ip + ":" + port + " Length: " + packData.getM_packDataSize()); return 0; } @@ -97,6 +97,8 @@ public class UdpCommunicationForConfiger implements Communication { DatagramPacket recvPacket = new DatagramPacket(dataRecv, dataRecv.length); try { datagramSocket.receive(recvPacket); + System.out.println("Receive From Ip: " + recvPacket.getAddress().getHostAddress() + " port: " + recvPacket.getPort() + " Length: " + recvPacket.getLength()); + md = message.uppack(recvPacket.getData(),recvPacket.getLength()); // logger.info("Recv data: " + BytePrintAsString(recvPacket.getData(),recvPacket.getLength())); } catch (IOException e) {