Browse Source

重写判断和执行

zlSun 3 months ago
parent
commit
bb67f6c183
57 changed files with 986 additions and 584 deletions
  1. 0 35
      pom.xml
  2. 57 0
      src/main/java/com/dc/datachange/communication/controller/CommunicationController.java
  3. 4 0
      src/main/java/com/dc/datachange/communication/entity/MessageVo.java
  4. 21 0
      src/main/java/com/dc/datachange/communication/entity/NetworkGroupVo.java
  5. 0 61
      src/main/java/com/dc/datachange/communityQuality/controller/CommunityQualityController.java
  6. 0 19
      src/main/java/com/dc/datachange/communityQuality/entity/LinkParam.java
  7. 0 17
      src/main/java/com/dc/datachange/communityQuality/entity/Message.java
  8. 3 2
      src/main/java/com/dc/datachange/core/common/MsgConstants.java
  9. 2 1
      src/main/java/com/dc/datachange/core/common/PlatConstants.java
  10. 2 15
      src/main/java/com/dc/datachange/core/connection/DDSPublisher.java
  11. 9 10
      src/main/java/com/dc/datachange/core/connection/DDSStateManger.java
  12. 16 1
      src/main/java/com/dc/datachange/core/entity/NetworkGroup.java
  13. 0 4
      src/main/java/com/dc/datachange/core/entity/NormalMsg.java
  14. 0 18
      src/main/java/com/dc/datachange/core/entity/VoMessage.java
  15. 1 1
      src/main/java/com/dc/datachange/core/entity/graph/EdgeVo.java
  16. 1 1
      src/main/java/com/dc/datachange/core/entity/graph/NodeVo.java
  17. 16 0
      src/main/java/com/dc/datachange/core/entity/message/DDSMessage.java
  18. 19 0
      src/main/java/com/dc/datachange/core/entity/message/ReceivedMessage.java
  19. 4 0
      src/main/java/com/dc/datachange/core/entity/message/SendMessage.java
  20. 6 6
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/CompIntelMsg.java
  21. 8 12
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/DaoTiaoMsg.java
  22. 5 6
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/EleInterMsg.java
  23. 5 3
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/ErrorMessage.java
  24. 5 9
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/InitialMessage.java
  25. 25 0
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/NetGroupReq.java
  26. 6 6
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/RadarPulseMsg.java
  27. 7 0
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/RunningMessage.java
  28. 34 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/DaoTiaoRes.java
  29. 31 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/HeartBeatMsg.java
  30. 31 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/InitialRequest.java
  31. 36 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/InitialResponse.java
  32. 72 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/NetGroupMsg.java
  33. 13 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/ReactiveMsg.java
  34. 11 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/Selfmsg.java
  35. 0 9
      src/main/java/com/dc/datachange/core/entity/platformInfo/InterferPlatform.java
  36. 7 2
      src/main/java/com/dc/datachange/core/entity/platformInfo/Platform.java
  37. 0 9
      src/main/java/com/dc/datachange/core/entity/platformInfo/RadarPlatform.java
  38. 3 17
      src/main/java/com/dc/datachange/core/exchange/DDSListener.java
  39. 14 14
      src/main/java/com/dc/datachange/core/exchange/DataManager.java
  40. 38 146
      src/main/java/com/dc/datachange/core/exchange/InvokeExecutor.java
  41. 46 0
      src/main/java/com/dc/datachange/core/exchange/SendExecutor.java
  42. 21 0
      src/main/java/com/dc/datachange/core/exchange/strategy/CompIntStrategy.java
  43. 66 0
      src/main/java/com/dc/datachange/core/exchange/strategy/DaoTiaoStrategy.java
  44. 19 0
      src/main/java/com/dc/datachange/core/exchange/strategy/EleInterStrategy.java
  45. 25 0
      src/main/java/com/dc/datachange/core/exchange/strategy/ErrorStrategy.java
  46. 50 0
      src/main/java/com/dc/datachange/core/exchange/strategy/InitialMsgStrategy.java
  47. 11 0
      src/main/java/com/dc/datachange/core/exchange/strategy/MessageStrategy.java
  48. 42 0
      src/main/java/com/dc/datachange/core/exchange/strategy/NetGroupReqStrategy.java
  49. 21 0
      src/main/java/com/dc/datachange/core/exchange/strategy/RadarPulseStrategy.java
  50. 56 0
      src/main/java/com/dc/datachange/core/exchange/strategy/RunningMsgStrategy.java
  51. 7 0
      src/main/java/com/dc/datachange/exception/UnknownMsgException.java
  52. 3 3
      src/main/java/com/dc/datachange/messageManager/controller/MessageController.java
  53. 22 140
      src/main/java/com/dc/datachange/networkGroup/controller/NetworkController.java
  54. 1 0
      src/main/java/com/dc/datachange/networkGroup/entity/NetworkParams.java
  55. 3 0
      src/main/java/com/dc/datachange/utils/ConcurrentIndexedMap.java
  56. 38 0
      src/main/java/com/dc/datachange/utils/MessageUtils.java
  57. 43 17
      src/main/java/com/dc/datachange/utils/Simulator.java

+ 0 - 35
pom.xml

@@ -37,41 +37,6 @@
             <!--            <version>${lombok.version}</version>-->
         </dependency>
 
-        <dependency>
-            <groupId>com.baomidou</groupId>
-            <artifactId>mybatis-plus-boot-starter</artifactId>
-            <version>${mybatisplus.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.baomidou</groupId>
-                    <artifactId>mybatis-plus-generator</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <!--            <version>5.1.45</version>-->
-            <version>8.0.19</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.junit.vintage</groupId>
-                    <artifactId>junit-vintage-engine</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.10.1</version> <!-- 确保使用最新版本 -->
-        </dependency>
 <!--        本地lib依赖-->
         <dependency>
             <groupId>opendds</groupId>

+ 57 - 0
src/main/java/com/dc/datachange/communication/controller/CommunicationController.java

@@ -0,0 +1,57 @@
+package com.dc.datachange.communication.controller;
+
+import com.dc.datachange.communication.entity.NetworkGroupVo;
+import com.dc.datachange.core.entity.graph.EdgeVo;
+import com.dc.datachange.core.entity.graph.NodeVo;
+import com.dc.datachange.core.entity.platformInfo.Platform;
+import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.core.entity.NetworkGroup;
+import com.dc.datachange.utils.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static com.dc.datachange.utils.MessageUtils.getEdgesFromPlatform;
+
+@RestController
+@Slf4j
+@RequestMapping("/communication")
+public class CommunicationController {
+    @Autowired
+    private DataManager dataManager;
+
+    @GetMapping("/getNetworkGroups")
+    public R getNetworkGroups(){
+        return R.ok().put("data",dataManager.getAllData(NetworkGroup.class)
+                .stream()
+                .map(NetworkGroupVo::new)
+                .collect(Collectors.toList()));
+    }
+    @GetMapping("/getChart")
+    public R getChart(@RequestParam Integer id){
+        NetworkGroup networkGroup = dataManager.getData(NetworkGroup.class, id);
+        if(networkGroup==null){
+            return R.error("暂未设置网络组");
+        }
+        Set<Platform> platformSet = networkGroup.getPlatformSet();
+        List<NodeVo> nodeList = platformSet.stream()
+                .map(x -> new NodeVo(x.getId(), x.getId()))
+                .collect(Collectors.toList());
+        List<EdgeVo> edgeList =new ArrayList<>();
+        getEdgesFromPlatform(edgeList,platformSet);
+        return R.ok().put("nodes",nodeList).put("edges",edgeList);
+    }
+    @GetMapping("/getSendMessage")
+    public R getSendMessage(@RequestParam Integer id){
+        NetworkGroup networkGroup = dataManager.getData(NetworkGroup.class,id);
+        return R.ok();
+    }
+}

+ 4 - 0
src/main/java/com/dc/datachange/communication/entity/MessageVo.java

@@ -0,0 +1,4 @@
+package com.dc.datachange.communication.entity;
+
+public class MessageVo {
+}

+ 21 - 0
src/main/java/com/dc/datachange/communication/entity/NetworkGroupVo.java

@@ -0,0 +1,21 @@
+package com.dc.datachange.communication.entity;
+
+import com.dc.datachange.core.entity.NetworkGroup;
+import lombok.Data;
+
+@Data
+public class NetworkGroupVo {
+    private int id;
+
+    //interference
+    //radar
+    private String type;
+
+    private String name;
+
+    public NetworkGroupVo(NetworkGroup networkGroup){
+        this.id=networkGroup.getId();
+        this.name=networkGroup.getName();
+        this.type=networkGroup.getType();
+    }
+}

+ 0 - 61
src/main/java/com/dc/datachange/communityQuality/controller/CommunityQualityController.java

@@ -1,61 +0,0 @@
-package com.dc.datachange.communityQuality.controller;
-
-import com.dc.datachange.utils.R;
-import com.dc.datachange.communityQuality.entity.LinkParam;
-import com.dc.datachange.communityQuality.entity.Message;
-import org.springframework.web.bind.annotation.*;
-
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/community")
-public class CommunityQualityController {
-
-    private final List<Map<String, Object>> nodeList = new ArrayList<>();
-    private final LinkParam linkParam = new LinkParam();
-    private final List<Message> messageArrayList = new ArrayList<>();
-    private final List<Message> receivedMessageArrayList = new ArrayList<>();
-
-    @GetMapping("listLinkParam")
-    public R listLinkParam() {
-        System.out.printf(linkParam.toString());
-        return R.ok().put("linkParam", linkParam);
-    }
-
-    @PostMapping("updateLink")
-    public R updateLink(@RequestParam Map<String, Object> params) {
-        int id = Integer.parseInt(params.get("PlatformID").toString());
-        int isValid = Integer.parseInt(params.get("isValid").toString());
-        int isSilence = Integer.parseInt(params.get("isSilence").toString());
-        String linkSpeed = params.get("linkSpeed").toString();
-        String linkQuality = params.get("linkQuality").toString();
-        String nodeName = params.get("nodeName").toString();
-
-        linkParam.setPlatformID(id);
-        linkParam.setLinkSwitch(isValid);
-        linkParam.setLinkQuality(linkQuality);
-        linkParam.setLinkSpeed(linkSpeed);
-        linkParam.setLinkSilent(isSilence);
-        linkParam.setSelectedNode(nodeName);
-        return R.ok();
-    }
-
-    @PostMapping("sendMessage")
-    public R sendMessage(@RequestBody List<Message> messageList) {
-        messageArrayList.addAll(messageList);
-        return R.ok();
-    }
-
-    @GetMapping("listReceivedMessage")
-    public R listReceivedMessage() {
-        for (Message message : messageArrayList) {
-            if (message.getStatus().equals("成功")){
-                receivedMessageArrayList.add(message);
-            }
-        }
-        return R.ok().put("receivedMessage", receivedMessageArrayList);
-    }
-}

+ 0 - 19
src/main/java/com/dc/datachange/communityQuality/entity/LinkParam.java

@@ -1,19 +0,0 @@
-package com.dc.datachange.communityQuality.entity;
-
-import lombok.Data;
-
-@Data
-public class LinkParam {
-
-    private int platformID;
-
-    private int linkSwitch;
-
-    private int linkSilent;
-
-    private String selectedNode;
-
-    private String linkSpeed;
-
-    private String linkQuality;
-}

+ 0 - 17
src/main/java/com/dc/datachange/communityQuality/entity/Message.java

@@ -1,17 +0,0 @@
-package com.dc.datachange.communityQuality.entity;
-
-import lombok.Data;
-
-import java.util.Date;
-
-@Data
-public class Message {
-
-    private String time;
-
-    private String domain;
-
-    private String topic;
-
-    private String status;
-}

+ 3 - 2
src/main/java/com/dc/datachange/core/common/MsgConstants.java

@@ -6,12 +6,13 @@ public class MsgConstants {
 
     public static final String ERROR_MSG="0";
     public static final String INITIAL_MSG="1";
-    public static final String INITIAL_ANS="11";
+    public static final String INITIAL_RES="11";
     public static final String INITIAL_REQ="12";
     public static final String DAOTIAO_MSG="2";
     public static final String DAOTIAO_REQ="21";
     public static final String PLATFORM_POSITION="3";
-    public static final String NETWORK_GROUP="4";
+    public static final String NETGROUP_MSG ="4";
+    public static final String NETGROUP_REQ ="41";
     public static final String RADAR_PULSE="5";
     public static final String ELECTRIC_INTERFERE="6";
     public static final String COMPREHEN_INTELL="7";

+ 2 - 1
src/main/java/com/dc/datachange/core/common/PlatConstants.java

@@ -3,6 +3,7 @@ package com.dc.datachange.core.common;
 public class PlatConstants {
     public static final String ALGORITHM_PLATFORM="4";
     public static final String SUPPORT_PLATFORM = "1";
-    public static final String TASK_SYSTEM="2";
     public static final String EXCHANGE_PLATFORM="3";
+    public static final String RADAR_TASKSYS="5";
+    public static final String INTERFER_TASKSYS="2";
 }

+ 2 - 15
src/main/java/com/dc/datachange/core/connection/DDSPublisher.java

@@ -24,7 +24,6 @@ import java.util.concurrent.*;
 public class DDSPublisher {
     @Autowired
     private ConnectionParams params;
-    private int count = 0;
     private final BlockingQueue<Message> messageQueue = new LinkedBlockingQueue<>();
     private volatile boolean isInitialized = false;
     private volatile boolean running = true;
@@ -172,23 +171,11 @@ public class DDSPublisher {
         matchService.shutdown();
     }
 
-    public <T1,T2,T3> void publishMessage(T1 from, T2 subject, T3 text) {
+    public void sendMessage(Message message){
         if (!isInitialized) {
             throw new IllegalStateException("Publisher not initialized");
         }
-
-        Message msg = new Message();
-        msg.subject_id = 99;
-        msg.from = String.valueOf(from);
-        msg.subject = String.valueOf(subject);
-        msg.text = String.valueOf(text);
-        msg.count = count++; // 根据需求调整
-
-        messageQueue.offer(msg); // 非阻塞式添加
-    }
-
-    public <T1,T2> void publishMessage(T1 from, T2 subject) {
-        publishMessage(from,subject,"");
+        messageQueue.offer(message);
     }
 
     @PreDestroy

+ 9 - 10
src/main/java/com/dc/datachange/core/connection/DDSStateManger.java

@@ -1,12 +1,11 @@
 package com.dc.datachange.core.connection;
 
-import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.common.PlatConstants;
 import com.dc.datachange.core.common.State;
-import com.dc.datachange.core.entity.*;
-import com.dc.datachange.core.entity.speicMsg.DaoTiaoMsg;
-import com.dc.datachange.core.entity.speicMsg.InitialMessage;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.DaoTiaoMsg;
+import com.dc.datachange.core.entity.message.receivedMessage.InitialMessage;
 import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.core.exchange.SendExecutor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.DependsOn;
@@ -19,7 +18,7 @@ import org.springframework.stereotype.Component;
 @DependsOn("DDSSubscriber")
 public class DDSStateManger {
     @Autowired
-    private DDSPublisher publisher;
+    private SendExecutor sendExecutor;
     @Autowired
     private DataManager dataManager;
     private volatile State state=State.INITIALING;
@@ -28,13 +27,13 @@ public class DDSStateManger {
     @Scheduled(fixedDelay = 6000)
     public void initializer(){
         if(state==State.INITIALED)
-            publisher.publishMessage(PlatConstants.EXCHANGE_PLATFORM, MsgConstants.INITIAL_REQ);
+            sendExecutor.sendInitialReq();
     }
 
     @Async
     @Scheduled(fixedDelay = 6000)
     public void heartBeat(){
-        publisher.publishMessage(PlatConstants.EXCHANGE_PLATFORM, MsgConstants.HEART_BEAT);
+        sendExecutor.sendHeartBeat();
     }
     public boolean isInitialed(){
         return state.equals(State.INITIALED);
@@ -62,10 +61,10 @@ public class DDSStateManger {
         running();
     }
 
-    public boolean stateChecker(VoMessage message){
+    public boolean stateChecker(ReceivedMessage message){
         if (InitialMessage.class.equals(message.getClass())) {
             return isInitialed();
-        } else if (message.isNormalMsg()) {
+        } else if (message.isRunningMsg()) {
             return isRunning();
         } else if (message.getClass().equals(DaoTiaoMsg.class)){
             return isRunning() || isPaused() || isInitialed();

+ 16 - 1
src/main/java/com/dc/datachange/networkGroup/entity/NetworkGroup.java → src/main/java/com/dc/datachange/core/entity/NetworkGroup.java

@@ -1,15 +1,19 @@
-package com.dc.datachange.networkGroup.entity;
+package com.dc.datachange.core.entity;
 
+import com.dc.datachange.communication.entity.MessageVo;
 import com.dc.datachange.core.entity.platformInfo.Platform;
 import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
 import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
 import com.dc.datachange.exception.IllegalTypeException;
 import com.dc.datachange.exception.NameDuplicatedException;
 import com.dc.datachange.exception.PlatChangeException;
+import com.dc.datachange.networkGroup.entity.RawGroup;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 @Data
@@ -21,6 +25,8 @@ public class NetworkGroup {
 
     private int id;
 
+    //interference
+    //radar
     private String type;
 
     private String name;
@@ -33,6 +39,8 @@ public class NetworkGroup {
 
     private String params;
 
+    private List<MessageVo> historyMsg;
+
     public NetworkGroup(RawGroup rawGroup) {
         synchronized (NetworkGroup.class){
             if(nameSet.contains(rawGroup.getName())){
@@ -45,6 +53,7 @@ public class NetworkGroup {
             this.mainStation = rawGroup.getMainStation();
             this.communication = rawGroup.isCommunication();
             this.platformSet = new HashSet<>();
+            this.historyMsg = new ArrayList<>();
         }
     }
 
@@ -82,4 +91,10 @@ public class NetworkGroup {
     public boolean inSet(Integer id){
         return platformSet.stream().anyMatch(x->x.getId().equals(id));
     }
+    public boolean isInterfer(){
+        return this.type.equals("interference");
+    }
+    public boolean isRadar(){
+        return this.type.equals("radar");
+    }
 }

+ 0 - 4
src/main/java/com/dc/datachange/core/entity/NormalMsg.java

@@ -1,4 +0,0 @@
-package com.dc.datachange.core.entity;
-
-public abstract class NormalMsg extends VoMessage{
-}

+ 0 - 18
src/main/java/com/dc/datachange/core/entity/VoMessage.java

@@ -1,18 +0,0 @@
-package com.dc.datachange.core.entity;
-
-import Messenger.Message;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.Data;
-
-@Data
-abstract public class VoMessage {
-    @JsonIgnore
-    protected Message DDSMessage;
-    protected String from;
-    protected String to;
-    public abstract String getMsgType();
-
-    public boolean isNormalMsg(){
-        return this.getClass().isAssignableFrom(NormalMsg.class);
-    }
-}

+ 1 - 1
src/main/java/com/dc/datachange/networkGroup/entity/EdgeVo.java → src/main/java/com/dc/datachange/core/entity/graph/EdgeVo.java

@@ -1,4 +1,4 @@
-package com.dc.datachange.networkGroup.entity;
+package com.dc.datachange.core.entity.graph;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 1 - 1
src/main/java/com/dc/datachange/networkGroup/entity/NodeVo.java → src/main/java/com/dc/datachange/core/entity/graph/NodeVo.java

@@ -1,4 +1,4 @@
-package com.dc.datachange.networkGroup.entity;
+package com.dc.datachange.core.entity.graph;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 16 - 0
src/main/java/com/dc/datachange/core/entity/message/DDSMessage.java

@@ -0,0 +1,16 @@
+package com.dc.datachange.core.entity.message;
+
+import com.dc.datachange.core.entity.message.receivedMessage.RunningMessage;
+import com.dc.datachange.utils.MessageUtils;
+import lombok.Data;
+
+@Data
+abstract public class DDSMessage {
+
+    protected String time;
+    public abstract String getMsgType();
+
+    public DDSMessage(){
+        this.time= MessageUtils.getTimeString();
+    }
+}

+ 19 - 0
src/main/java/com/dc/datachange/core/entity/message/ReceivedMessage.java

@@ -0,0 +1,19 @@
+package com.dc.datachange.core.entity.message;
+
+import Messenger.Message;
+import com.dc.datachange.core.entity.message.receivedMessage.RunningMessage;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+@Data
+public abstract class ReceivedMessage extends DDSMessage{
+    @JsonIgnore
+    protected Message DDSMessage;
+    protected String from;
+    protected String to;
+    protected boolean validate=false;
+    public boolean isRunningMsg(){
+        return RunningMessage.class.isAssignableFrom(this.getClass());
+    }
+
+}

+ 4 - 0
src/main/java/com/dc/datachange/core/entity/message/SendMessage.java

@@ -0,0 +1,4 @@
+package com.dc.datachange.core.entity.message;
+
+public abstract class SendMessage extends DDSMessage{
+}

+ 6 - 6
src/main/java/com/dc/datachange/core/entity/speicMsg/CompIntelMsg.java → src/main/java/com/dc/datachange/core/entity/message/receivedMessage/CompIntelMsg.java

@@ -1,8 +1,8 @@
-package com.dc.datachange.core.entity.speicMsg;
+package com.dc.datachange.core.entity.message.receivedMessage;
 
 import Messenger.Message;
 import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.entity.NormalMsg;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -15,9 +15,8 @@ import lombok.extern.slf4j.Slf4j;
 @AllArgsConstructor
 @Slf4j
 @Data
-public class CompIntelMsg extends NormalMsg {
+public class CompIntelMsg extends ReceivedMessage implements RunningMessage {
     private static final String msgType= MsgConstants.COMPREHEN_INTELL;
-    private boolean validate=false;
     /**
      * 消息类型
      * 综合 战术 自由
@@ -51,8 +50,9 @@ public class CompIntelMsg extends NormalMsg {
 
             String[] parts = message.from.split(" ");
             super.from = parts[0];
-            super.to = parts[1];
-            if(parts.length==2)
+            super.to = parts[2];
+
+            if(parts.length==3 && value.length==4 && parts[1].equals("3"))
                 validate=true;
         }catch (Exception e){
             log.error(e.getMessage());

+ 8 - 12
src/main/java/com/dc/datachange/core/entity/speicMsg/DaoTiaoMsg.java → src/main/java/com/dc/datachange/core/entity/message/receivedMessage/DaoTiaoMsg.java

@@ -1,8 +1,8 @@
-package com.dc.datachange.core.entity.speicMsg;
+package com.dc.datachange.core.entity.message.receivedMessage;
 
 import Messenger.Message;
 import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.entity.VoMessage;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -10,22 +10,14 @@ import lombok.extern.slf4j.Slf4j;
 @Data
 @Slf4j
 @AllArgsConstructor
-public class DaoTiaoMsg extends VoMessage {
+public class DaoTiaoMsg extends ReceivedMessage {
     private static final String msgType= MsgConstants.DAOTIAO_MSG;
-    private boolean validate=false;
     private String msg;
 
     public DaoTiaoMsg(Message message) {
         try {
-            super.setDDSMessage(message);
-
             msg =message.text;
-
-            String[] parts = message.from.split(" ");
-            super.from = parts[0];
-            super.to = parts[1];
-
-            if(parts.length==2){
+            if(message.from.equals("1") && isRightMsg(msg)){
                 validate=true;
             }
         }catch (Exception e){
@@ -34,6 +26,10 @@ public class DaoTiaoMsg extends VoMessage {
         }
     }
 
+    private boolean isRightMsg(String msg) {
+        return msg.equals("1")||msg.equals("2")||msg.equals("3")||msg.equals("4");
+    }
+
     public String getMsgType() {
         return msgType;
     }

+ 5 - 6
src/main/java/com/dc/datachange/core/entity/speicMsg/EleInterMsg.java → src/main/java/com/dc/datachange/core/entity/message/receivedMessage/EleInterMsg.java

@@ -1,8 +1,8 @@
-package com.dc.datachange.core.entity.speicMsg;
+package com.dc.datachange.core.entity.message.receivedMessage;
 
 import Messenger.Message;
 import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.entity.NormalMsg;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -12,9 +12,8 @@ import lombok.extern.slf4j.Slf4j;
 @NoArgsConstructor
 @Slf4j
 @Data
-public class EleInterMsg extends NormalMsg {
+public class EleInterMsg extends ReceivedMessage implements RunningMessage {
     private static final String msgType= MsgConstants.ELECTRIC_INTERFERE;
-    private boolean validate=false;
     /**
      * 干扰类型
      * 各种干扰决策类型
@@ -65,9 +64,9 @@ public class EleInterMsg extends NormalMsg {
 
             String[] parts = message.from.split(" ");
             super.from = parts[0];
-            super.to = parts[1];
+            super.to = parts[2];
 
-            if(parts.length==2 && value.length==7)
+            if(parts.length==3 && value.length==7 && parts[1].equals("3"))
                 validate=true;
         }catch (Exception e){
             log.error(e.getMessage());

+ 5 - 3
src/main/java/com/dc/datachange/core/entity/speicMsg/ErrorMessage.java → src/main/java/com/dc/datachange/core/entity/message/receivedMessage/ErrorMessage.java

@@ -1,10 +1,12 @@
-package com.dc.datachange.core.entity.speicMsg;
+package com.dc.datachange.core.entity.message.receivedMessage;
 
 import Messenger.Message;
 import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.entity.VoMessage;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import lombok.NoArgsConstructor;
 
-public class ErrorMessage extends VoMessage {
+@NoArgsConstructor
+public class ErrorMessage extends ReceivedMessage {
     public ErrorMessage(Message message){
         super.setDDSMessage(message);
     }

+ 5 - 9
src/main/java/com/dc/datachange/core/entity/speicMsg/InitialMessage.java → src/main/java/com/dc/datachange/core/entity/message/receivedMessage/InitialMessage.java

@@ -1,8 +1,8 @@
-package com.dc.datachange.core.entity.speicMsg;
+package com.dc.datachange.core.entity.message.receivedMessage;
 
 import Messenger.Message;
 import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.entity.VoMessage;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
 import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
 import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
 import lombok.AllArgsConstructor;
@@ -17,9 +17,8 @@ import java.util.List;
 @NoArgsConstructor
 @Slf4j
 @Data
-public class InitialMessage extends VoMessage {
+public class InitialMessage extends ReceivedMessage {
     private static final String msgType= MsgConstants.INITIAL_MSG;
-    private boolean validate=false;
     private List<InterferPlatform> interPlats=new ArrayList<>();
     private List<RadarPlatform> radarPlats=new ArrayList<>();
 
@@ -38,11 +37,8 @@ public class InitialMessage extends VoMessage {
                 radarPlats.add(new RadarPlatform(line[i]));
             }
 
-            String[] parts = message.from.split(" ");
-            super.from = parts[0];
-            super.to = parts[1];
-
-            if(parts.length==2)
+            super.from = message.from;
+            if(from.equals("1"))
                 validate=true;
 
         }catch (Exception e){

+ 25 - 0
src/main/java/com/dc/datachange/core/entity/message/receivedMessage/NetGroupReq.java

@@ -0,0 +1,25 @@
+package com.dc.datachange.core.entity.message.receivedMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.common.PlatConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import lombok.Data;
+
+@Data
+public class NetGroupReq extends ReceivedMessage {
+    private static final String subject= MsgConstants.NETGROUP_REQ;
+    private String from;
+
+    public NetGroupReq(Message message) {
+        this.setDDSMessage(message);
+        this.from=message.from;
+        if(from.equals(PlatConstants.RADAR_TASKSYS) || from.equals(PlatConstants.INTERFER_TASKSYS))
+            validate=true;
+    }
+
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+}

+ 6 - 6
src/main/java/com/dc/datachange/core/entity/speicMsg/RadarPulseMsg.java → src/main/java/com/dc/datachange/core/entity/message/receivedMessage/RadarPulseMsg.java

@@ -1,8 +1,8 @@
-package com.dc.datachange.core.entity.speicMsg;
+package com.dc.datachange.core.entity.message.receivedMessage;
 
 import Messenger.Message;
 import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.entity.NormalMsg;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -12,9 +12,8 @@ import lombok.extern.slf4j.Slf4j;
 @AllArgsConstructor
 @Slf4j
 @Data
-public class RadarPulseMsg extends NormalMsg {
+public class RadarPulseMsg extends ReceivedMessage implements RunningMessage {
     private static final String msgType= MsgConstants.RADAR_PULSE;
-    private boolean validate=false;
     /**
      * 类型
      * 雷达、通信
@@ -66,8 +65,9 @@ public class RadarPulseMsg extends NormalMsg {
 
             String[] parts = message.from.split(" ");
             super.from = parts[0];
-            super.to = parts[1];
-            if(parts.length==2)
+            super.to = parts[2];
+
+            if(parts.length==3 && value.length==7 && parts[1].equals("3"))
                 validate=true;
         }catch (Exception e){
             log.error(e.getMessage());

+ 7 - 0
src/main/java/com/dc/datachange/core/entity/message/receivedMessage/RunningMessage.java

@@ -0,0 +1,7 @@
+package com.dc.datachange.core.entity.message.receivedMessage;
+
+/**
+ * 指仅在运行状态下会 接收并处理 的消息
+ */
+public interface RunningMessage{
+}

+ 34 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/DaoTiaoRes.java

@@ -0,0 +1,34 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.common.PlatConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.SendMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.DaoTiaoMsg;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DaoTiaoRes extends SendMessage implements ReactiveMsg{
+    private static final String from= PlatConstants.EXCHANGE_PLATFORM;
+    private static final String subject= MsgConstants.INITIAL_RES;
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage(ReceivedMessage msg){
+        DaoTiaoMsg daoTiaoMsg = (DaoTiaoMsg) msg;
+        Message message=new Message();
+        message.from= from;
+        message.subject= subject;
+        message.text=daoTiaoMsg.getMsg();
+        return message;
+    }
+
+    @Override
+    public String getSourceMsgType() {
+        return MsgConstants.DAOTIAO_MSG;
+    }
+}

+ 31 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/HeartBeatMsg.java

@@ -0,0 +1,31 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.common.PlatConstants;
+import com.dc.datachange.core.entity.message.SendMessage;
+import org.springframework.stereotype.Component;
+
+@Component
+public class HeartBeatMsg extends SendMessage implements Selfmsg{
+    private static final String from = PlatConstants.EXCHANGE_PLATFORM;
+    private static final String subject = MsgConstants.HEART_BEAT;
+    private final Message message;
+
+    public HeartBeatMsg(){
+        Message message=new Message();
+        message.from=from;
+        message.subject=subject;
+        this.message=message;
+    }
+
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage() {
+        return this.message;
+    }
+}

+ 31 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/InitialRequest.java

@@ -0,0 +1,31 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.common.PlatConstants;
+import com.dc.datachange.core.entity.message.SendMessage;
+import org.springframework.stereotype.Component;
+
+@Component
+public class InitialRequest extends SendMessage implements Selfmsg{
+    private static final String from= PlatConstants.EXCHANGE_PLATFORM;
+    private static final String subject= MsgConstants.INITIAL_REQ;
+    private final Message message;
+
+    private InitialRequest(){
+        Message message=new Message();
+        message.from= from;
+        message.subject= subject;
+        this.message=message;
+    }
+
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage() {
+        return this.message;
+    }
+}

+ 36 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/InitialResponse.java

@@ -0,0 +1,36 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.common.PlatConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.SendMessage;
+import org.springframework.stereotype.Component;
+
+@Component
+public class InitialResponse extends SendMessage implements ReactiveMsg{
+    private static final String from= PlatConstants.EXCHANGE_PLATFORM;
+    private static final String subject= MsgConstants.INITIAL_RES;
+    private final Message message;
+
+    private InitialResponse(){
+        Message message=new Message();
+        message.from= from;
+        message.subject= subject;
+        this.message=message;
+    }
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage(ReceivedMessage message) {
+        return this.message;
+    }
+
+    @Override
+    public String getSourceMsgType() {
+        return MsgConstants.INITIAL_MSG;
+    }
+}

+ 72 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/NetGroupMsg.java

@@ -0,0 +1,72 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.common.PlatConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.RunningMessage;
+import com.dc.datachange.core.entity.message.SendMessage;
+import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.core.entity.NetworkGroup;
+import com.dc.datachange.utils.MessageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class NetGroupMsg extends SendMessage implements ReactiveMsg,Selfmsg{
+    private static final String subject = MsgConstants.NETGROUP_MSG;
+    private static final String from= PlatConstants.EXCHANGE_PLATFORM;
+    private static Integer version=1;
+    @Autowired
+    private DataManager dataManager;
+    private static DataManager dataManagerStatic;
+
+
+    //私有化构造方法防止其被手动创建
+    private NetGroupMsg(){}
+
+    @PostConstruct
+    public void init(){
+        dataManagerStatic=dataManager;
+    }
+
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage(ReceivedMessage receivedMessage) {
+        return this.toMessage();
+    }
+
+    @Override
+    public String getSourceMsgType() {
+        return MsgConstants.NETGROUP_REQ;
+    }
+
+    @Override
+    public synchronized Message toMessage() {
+        Message message=new Message();
+        message.from=from;
+        message.subject=subject;
+        StringBuilder stringBuilder=new StringBuilder();
+        List<NetworkGroup> networkGroups = dataManagerStatic.getAllData(NetworkGroup.class);
+        List<NetworkGroup> interferGroups=networkGroups.stream().filter(NetworkGroup::isInterfer).collect(Collectors.toList());
+        List<NetworkGroup> radarGroups=networkGroups.stream().filter(NetworkGroup::isRadar).collect(Collectors.toList());
+        //第一行
+        stringBuilder.append(interferGroups.size()).append(" ")
+                .append(radarGroups.size()).append(" ")
+                .append(version++);
+        for(NetworkGroup interferGroup: interferGroups){
+            stringBuilder.append("\n").append(MessageUtils.getLineStr(interferGroup));
+        }
+        for(NetworkGroup radarGroup: radarGroups){
+            stringBuilder.append("\n").append(MessageUtils.getLineStr(radarGroup));
+        }
+        message.text=stringBuilder.toString();
+        return message;    }
+}

+ 13 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/ReactiveMsg.java

@@ -0,0 +1,13 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+
+/**
+ * 用于标识需要输入才有输出的消息
+ */
+public interface ReactiveMsg {
+    Message toMessage(ReceivedMessage message);
+
+    String getSourceMsgType();
+}

+ 11 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/Selfmsg.java

@@ -0,0 +1,11 @@
+package com.dc.datachange.core.entity.message.sendMessage;
+
+import Messenger.Message;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+
+/**
+ * 用于标注自己就能够触发请求的消息
+ */
+public interface Selfmsg {
+    Message toMessage();
+}

+ 0 - 9
src/main/java/com/dc/datachange/core/entity/platformInfo/InterferPlatform.java

@@ -46,15 +46,6 @@ public class InterferPlatform extends Platform {
      */
     private String height;
 
-    /**
-     * 组别信息
-     */
-    private Integer groupId;
-
-    @Override
-    public String getMsgType() {
-        return null;
-    }
 
     public InterferPlatform(String line){
         try {

+ 7 - 2
src/main/java/com/dc/datachange/core/entity/platformInfo/Platform.java

@@ -1,8 +1,13 @@
 package com.dc.datachange.core.entity.platformInfo;
 
-import com.dc.datachange.core.entity.VoMessage;
+import lombok.Data;
 
-public abstract class Platform extends VoMessage {
+@Data
+public abstract class Platform{
+    /**
+     * 组别信息
+     */
+    protected Integer groupId;
     public abstract Integer getId();
     public abstract boolean isGrouped();
     public abstract void grouped(Integer groupId);

+ 0 - 9
src/main/java/com/dc/datachange/core/entity/platformInfo/RadarPlatform.java

@@ -46,11 +46,6 @@ public class RadarPlatform extends Platform {
      */
     private String height;
 
-    /**
-     * 组别信息
-     */
-    private Integer groupId;
-
     public RadarPlatform(String line) {
         try {
             String[] value= line.split(" ");
@@ -68,10 +63,6 @@ public class RadarPlatform extends Platform {
         }
     }
 
-    @Override
-    public String getMsgType() {
-        return null;
-    }
     public boolean isGrouped(){
         return groupId!=null;
     }

+ 3 - 17
src/main/java/com/dc/datachange/core/exchange/DDSListener.java

@@ -5,10 +5,9 @@ import Messenger.Message;
 import Messenger.MessageDataReader;
 import Messenger.MessageDataReaderHelper;
 import Messenger.MessageHolder;
-import com.dc.datachange.core.entity.VoMessage;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 @Slf4j
@@ -16,8 +15,6 @@ import org.springframework.stereotype.Component;
 public class DDSListener extends DDS._DataReaderListenerLocalBase{
     @Autowired
     private InvokeExecutor executor;
-    @Value("${dds.config.enablePrint}")
-    private Boolean enablePrint;
 
     public synchronized void on_data_available(DataReader reader) {
 
@@ -36,19 +33,8 @@ public class DDSListener extends DDS._DataReaderListenerLocalBase{
             if (sih.value.valid_data) {
                 //核心处理逻辑
 
-                VoMessage voMessage = executor.getSpecMsg(mh.value);
-                executor.invoke(voMessage);
-
-                if(enablePrint){
-                    System.out.println("==============================================");
-                    System.out.println("Message: subject    = " + mh.value.subject);
-                    System.out.println("         subject_id = "
-                            + mh.value.subject_id);
-                    System.out.println("         from       = " + mh.value.from);
-                    System.out.println("         count      = " + mh.value.count);
-                    System.out.println("         text       = " + mh.value.text);
-                    System.out.println("==============================================");
-                }
+                ReceivedMessage DDSMessage = executor.getSpecMsg(mh.value);
+                executor.invoke(DDSMessage);
 
             }
             else if (sih.value.instance_state ==

+ 14 - 14
src/main/java/com/dc/datachange/core/exchange/DataManager.java

@@ -1,22 +1,23 @@
 package com.dc.datachange.core.exchange;
 
+import com.dc.datachange.core.entity.message.receivedMessage.CompIntelMsg;
+import com.dc.datachange.core.entity.message.receivedMessage.EleInterMsg;
+import com.dc.datachange.core.entity.message.receivedMessage.RadarPulseMsg;
 import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
 import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
-import com.dc.datachange.core.entity.speicMsg.*;
-import com.dc.datachange.networkGroup.entity.NetworkGroup;
+import com.dc.datachange.core.entity.NetworkGroup;
 import com.dc.datachange.utils.ConcurrentIndexedMap;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Component
-@Data
 @Slf4j
 public class DataManager {
     private final ConcurrentHashMap<Class<?>, ConcurrentIndexedMap<?>> listMap =new ConcurrentHashMap<>();
@@ -50,16 +51,6 @@ public class DataManager {
             }
         }
     }
-    @SuppressWarnings("unchecked")
-    public <T> void addData(List<T> data){
-        if(!data.isEmpty()){
-            Class<?> aClass = data.get(0).getClass();
-            ConcurrentIndexedMap<T> list = (ConcurrentIndexedMap<T>) listMap.get(aClass);
-            if(list != null){
-                list.addAll(data);
-            }
-        }
-    }
 
     @SuppressWarnings("unchecked")
     public <T> void addData(Integer index,T data){
@@ -83,6 +74,15 @@ public class DataManager {
         return new ArrayList<>();
     }
 
+    @SuppressWarnings("unchecked")
+    public <T> Map<Integer,T> getMap(Class<T> tClass){
+        ConcurrentIndexedMap<T> map = (ConcurrentIndexedMap<T>) listMap.get(tClass);
+        if(map!=null){
+            return map.getMap();
+        }
+        return new HashMap<>();
+    }
+
     public <T> int getCount(Class<T> tClass){
         ConcurrentIndexedMap<?> list = listMap.get(tClass);
         if (list!=null){

+ 38 - 146
src/main/java/com/dc/datachange/core/exchange/InvokeExecutor.java

@@ -1,71 +1,48 @@
 package com.dc.datachange.core.exchange;
 
 import Messenger.Message;
-import com.dc.datachange.core.common.ControlConstans;
-import com.dc.datachange.core.common.MsgConstants;
-import com.dc.datachange.core.common.PlatConstants;
-import com.dc.datachange.core.connection.DDSStateManger;
-import com.dc.datachange.core.connection.DDSPublisher;
-import com.dc.datachange.core.entity.*;
-import com.dc.datachange.core.entity.speicMsg.*;
+import com.dc.datachange.core.entity.message.*;
+import com.dc.datachange.core.entity.message.receivedMessage.ErrorMessage;
+import com.dc.datachange.core.exchange.strategy.MessageStrategy;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Component
 @Slf4j
 public class InvokeExecutor {
+    private final Map<String, MessageStrategy> strategyMap=new HashMap<>();
+    @Value("${dds.config.enablePrint}")
+    private Boolean enablePrint;
+
     @Autowired
-    private DDSStateManger stateManger;
-    @Autowired
-    private DDSPublisher publisher;
-    @Autowired
-    private DataManager dataManager;
+    public InvokeExecutor(List<MessageStrategy> strategies){
+        for(MessageStrategy strategy:strategies){
+            strategyMap.put(strategy.getMsgType(),strategy);
+        }
+    }
 
-    public VoMessage getSpecMsg(Message message) {
-        switch (message.subject) {
-            case MsgConstants.INITIAL_MSG:
-                return new InitialMessage(message);
-            case MsgConstants.DAOTIAO_MSG:
-                return new DaoTiaoMsg(message);
-            case MsgConstants.RADAR_PULSE:
-                return new RadarPulseMsg(message);
-            case MsgConstants.ELECTRIC_INTERFERE:
-                return new EleInterMsg(message);
-            case MsgConstants.COMPREHEN_INTELL:
-                return new CompIntelMsg(message);
-            default:
-                return new ErrorMessage(message);
+    public ReceivedMessage getSpecMsg(Message message) {
+        if(enablePrint){
+            printMessage(message);
         }
+        MessageStrategy strategy=strategyMap.get(message.subject);
+        if(strategy!=null){
+            return strategy.generate(message);
+        }else
+            return new ErrorMessage(message);
     }
 
-    public void invoke(VoMessage message) {
+    public void invoke(ReceivedMessage message) {
         try {
-            switch (message.getMsgType()) {
-                case MsgConstants.INITIAL_MSG:
-                    if (initialValidate(message)) {
-                        initialMsgInvoke(message);
-                    }
-                    break;
-                case MsgConstants.DAOTIAO_MSG:
-                    if (DaoTiaoValidate(message)) {
-                        DaoTiaoMsgInvoke(message);
-                    }
-                    break;
-                case MsgConstants.RADAR_PULSE:
-                    if (radarPulseValidate(message)) {
-                        radarPulseInvoke(message);
-                    }
-                    break;
-                case MsgConstants.ELECTRIC_INTERFERE:
-                    if(eleInterValidate(message)){
-                        eleInterInvoke(message);
-                    }
-                    break;
-                case MsgConstants.COMPREHEN_INTELL:
-                    if(compIntValidate(message)){
-                        compIntInvoke(message);
-                    }
+            MessageStrategy strategy=strategyMap.get(message.getMsgType());
+            if(strategy.validate(message)){
+                strategy.invoke(message);
             }
         } catch (Exception e) {
             log.error(e.getMessage());
@@ -73,99 +50,14 @@ public class InvokeExecutor {
         }
 
     }
-
-    private boolean initialValidate(VoMessage message) {
-        InitialMessage initialMessage = (InitialMessage) message;
-        if (stateManger.stateChecker(initialMessage)) {
-            return initialMessage.isValidate()
-                    && initialMessage.getFrom().equals(PlatConstants.SUPPORT_PLATFORM)
-                    && initialMessage.getTo().equals(PlatConstants.EXCHANGE_PLATFORM);
-        }
-        return false;
-    }
-    private void initialMsgInvoke(VoMessage message) {
-        stateManger.running();
-        publisher.publishMessage(PlatConstants.EXCHANGE_PLATFORM, MsgConstants.INITIAL_ANS);
-
-        InitialMessage initialMessage = (InitialMessage) message;
-        initialMessage.getRadarPlats().forEach(x->dataManager.addData(x.getId(),x));
-        initialMessage.getInterPlats().forEach(x->dataManager.addData(x.getId(),x));
-    }
-    private boolean DaoTiaoValidate(VoMessage message) {
-        DaoTiaoMsg daoTiaoMsg = (DaoTiaoMsg) message;
-        if (stateManger.stateChecker(daoTiaoMsg)) {
-            return daoTiaoMsg.isValidate()
-                    && daoTiaoMsg.getFrom().equals(PlatConstants.SUPPORT_PLATFORM)
-                    && daoTiaoMsg.getTo().equals(PlatConstants.EXCHANGE_PLATFORM);
-        }
-        return false;
-    }
-    private void DaoTiaoMsgInvoke(VoMessage message) {
-        DaoTiaoMsg daoTiaoMsg = (DaoTiaoMsg) message;
-        switch (daoTiaoMsg.getMsg()){
-            case ControlConstans.CTRL_START:
-                if(stateManger.isInitialed())
-                    stateManger.running();
-                else log.error("当前状态{}无法处理开始请求",stateManger.getState());
-                break;
-            case ControlConstans.CTRL_PAUSE:
-                if(stateManger.isRunning())
-                    stateManger.pause();
-                else log.error("当前状态{}无法处理暂停请求",stateManger.getState());
-                break;
-            case ControlConstans.CTRL_CONTINUE:
-                if(stateManger.isPaused())
-                    stateManger.running();
-                else log.error("当前状态{}无法处理继续请求",stateManger.getState());
-                break;
-            case ControlConstans.CTRL_FINISH:
-                //理论上结束后还需要手动制定开始,但是目前省略这一步,结束后自动开始
-                stateManger.stop();
-                break;
-        }
-    }
-    private boolean radarPulseValidate(VoMessage message) {
-        RadarPulseMsg radarPulseMsg = (RadarPulseMsg) message;
-        if (stateManger.stateChecker(radarPulseMsg)) {
-            /*
-             * todo:根据分组判断message中的两个id是否在同一组中;
-             */
-        }
-        return true;
-    }
-
-    private void radarPulseInvoke(VoMessage message) {
-        RadarPulseMsg radarPulseMsg = (RadarPulseMsg) message;
-        dataManager.addData(radarPulseMsg);
-    }
-
-    private boolean eleInterValidate(VoMessage message) {
-        EleInterMsg eleInterMsg = (EleInterMsg) message;
-        if(stateManger.stateChecker(eleInterMsg)){
-            /*
-             * todo:根据分组判断message中的两个id是否在同一组中;
-             */
-        }
-        return true;
-    }
-
-    private void eleInterInvoke(VoMessage message) {
-        EleInterMsg eleInterMsg = (EleInterMsg) message;
-        dataManager.addData(eleInterMsg);
-    }
-
-    private boolean compIntValidate(VoMessage message) {
-        CompIntelMsg compIntelMsg = (CompIntelMsg) message;
-        if(stateManger.stateChecker(compIntelMsg)) {
-            /*
-             * todo:根据分组判断message中的两个id是否在同一组中;
-             */
-        }
-        return true;
-    }
-
-    private void compIntInvoke(VoMessage message) {
-        CompIntelMsg compIntelMsg = (CompIntelMsg) message;
-        dataManager.addData(compIntelMsg);
+    public void printMessage(Message message){
+            System.out.println("==============================================");
+            System.out.println("Message: subject    = " + message.subject);
+            System.out.println("         subject_id = "
+                    + message.subject_id);
+            System.out.println("         from       = " + message.from);
+            System.out.println("         count      = " + message.count);
+            System.out.println("         text       = " + message.text);
+            System.out.println("==============================================");
     }
 }

+ 46 - 0
src/main/java/com/dc/datachange/core/exchange/SendExecutor.java

@@ -0,0 +1,46 @@
+package com.dc.datachange.core.exchange;
+
+import com.dc.datachange.core.connection.DDSPublisher;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.sendMessage.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class SendExecutor {
+    @Autowired
+    private DDSPublisher ddsPublisher;
+    @Autowired
+    private InitialRequest initialRequest;
+    @Autowired
+    private NetGroupMsg netGroupMsg;
+    @Autowired
+    private HeartBeatMsg heartBeatMsg;
+    private final Map<String, ReactiveMsg> msgMap=new HashMap<>();
+
+    public SendExecutor(List<ReactiveMsg> reactiveMsgs){
+        for(ReactiveMsg msg:reactiveMsgs){
+            msgMap.put(msg.getSourceMsgType(),msg);
+        }
+    }
+    public void sendDDS(ReceivedMessage message){
+        ddsPublisher.sendMessage(msgMap.get(message.getMsgType()).toMessage(message));
+    }
+    public void sendDDS(Selfmsg message){
+        ddsPublisher.sendMessage(message.toMessage());
+    }
+
+    public void sendHeartBeat(){
+        ddsPublisher.sendMessage(heartBeatMsg.toMessage());
+    }
+    public void sendInitialReq(){
+        ddsPublisher.sendMessage(initialRequest.toMessage());
+    }
+    public void sendNetGroupMsg(){
+        ddsPublisher.sendMessage(netGroupMsg.toMessage());
+    }
+}

+ 21 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/CompIntStrategy.java

@@ -0,0 +1,21 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.CompIntelMsg;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CompIntStrategy extends RunningMsgStrategy {
+
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new CompIntelMsg(message);
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.COMPREHEN_INTELL;
+    }
+}

+ 66 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/DaoTiaoStrategy.java

@@ -0,0 +1,66 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.ControlConstans;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.connection.DDSStateManger;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.DaoTiaoMsg;
+import com.dc.datachange.core.exchange.SendExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class DaoTiaoStrategy implements MessageStrategy{
+    @Autowired
+    private DDSStateManger stateManger;
+    @Autowired
+    private SendExecutor sendExecutor;
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new DaoTiaoMsg(message);
+    }
+
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        DaoTiaoMsg daoTiaoMsg = (DaoTiaoMsg) message;
+        if (stateManger.stateChecker(daoTiaoMsg)) {
+            return daoTiaoMsg.isValidate();
+        }
+        return false;
+    }
+
+    @Override
+    public void invoke(ReceivedMessage message) {
+        DaoTiaoMsg daoTiaoMsg = (DaoTiaoMsg) message;
+        sendExecutor.sendDDS(daoTiaoMsg);
+        switch (daoTiaoMsg.getMsg()) {
+            case ControlConstans.CTRL_START:
+                if (stateManger.isInitialed())
+                    stateManger.running();
+                else log.error("当前状态{}无法处理开始请求", stateManger.getState());
+                break;
+            case ControlConstans.CTRL_PAUSE:
+                if (stateManger.isRunning())
+                    stateManger.pause();
+                else log.error("当前状态{}无法处理暂停请求", stateManger.getState());
+                break;
+            case ControlConstans.CTRL_CONTINUE:
+                if (stateManger.isPaused())
+                    stateManger.running();
+                else log.error("当前状态{}无法处理继续请求", stateManger.getState());
+                break;
+            case ControlConstans.CTRL_FINISH:
+                //理论上结束后还需要手动指定开始,但是目前省略这一步,结束后自动开始
+                stateManger.stop();
+                break;
+        }
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.DAOTIAO_MSG;
+    }
+}

+ 19 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/EleInterStrategy.java

@@ -0,0 +1,19 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.EleInterMsg;
+import org.springframework.stereotype.Component;
+
+@Component
+public class EleInterStrategy extends RunningMsgStrategy{
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new EleInterMsg(message);
+    }
+    @Override
+    public String getMsgType() {
+        return MsgConstants.ELECTRIC_INTERFERE;
+    }
+}

+ 25 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/ErrorStrategy.java

@@ -0,0 +1,25 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.ErrorMessage;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ErrorStrategy implements MessageStrategy{
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new ErrorMessage(message);
+    }
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        return false;
+    }
+    @Override
+    public void invoke(ReceivedMessage message) {}
+    @Override
+    public String getMsgType() {
+        return MsgConstants.ERROR_MSG;
+    }
+}

+ 50 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/InitialMsgStrategy.java

@@ -0,0 +1,50 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.connection.DDSStateManger;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.InitialMessage;
+import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.core.exchange.SendExecutor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class InitialMsgStrategy implements MessageStrategy{
+    @Autowired
+    private DDSStateManger stateManger;
+    @Autowired
+    private SendExecutor sendExecutor;
+    @Autowired
+    private DataManager dataManager;
+
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new InitialMessage(message);
+    }
+
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        InitialMessage initialMessage = (InitialMessage) message;
+        if (stateManger.stateChecker(initialMessage)) {
+            return initialMessage.isValidate();
+        }
+        return false;
+    }
+
+    @Override
+    public void invoke(ReceivedMessage message) {
+        stateManger.running();
+        sendExecutor.sendDDS(message);
+
+        InitialMessage initialMessage = (InitialMessage) message;
+        initialMessage.getRadarPlats().forEach(x->dataManager.addData(x.getId(),x));
+        initialMessage.getInterPlats().forEach(x->dataManager.addData(x.getId(),x));
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.INITIAL_MSG;
+    }
+}

+ 11 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/MessageStrategy.java

@@ -0,0 +1,11 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+
+public interface MessageStrategy {
+    ReceivedMessage generate(Message message);
+    boolean validate(ReceivedMessage message);
+    void invoke(ReceivedMessage message);
+    String getMsgType();
+}

+ 42 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/NetGroupReqStrategy.java

@@ -0,0 +1,42 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.connection.DDSStateManger;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.NetGroupReq;
+import com.dc.datachange.core.exchange.SendExecutor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class NetGroupReqStrategy implements MessageStrategy{
+    @Autowired
+    private DDSStateManger stateManger;
+    @Autowired
+    private SendExecutor sendExecutor;
+
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new NetGroupReq(message);
+    }
+
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        NetGroupReq netGroupReq=(NetGroupReq) message;
+        if(stateManger.stateChecker(netGroupReq)){
+            return netGroupReq.isValidate();
+        }
+        return false;
+    }
+
+    @Override
+    public void invoke(ReceivedMessage message) {
+        sendExecutor.sendDDS(message);
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.NETGROUP_REQ;
+    }
+}

+ 21 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/RadarPulseStrategy.java

@@ -0,0 +1,21 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.RadarPulseMsg;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RadarPulseStrategy extends RunningMsgStrategy{
+
+    @Override
+    public ReceivedMessage generate(Message message) {
+        return new RadarPulseMsg(message);
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.RADAR_PULSE;
+    }
+}

+ 56 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/RunningMsgStrategy.java

@@ -0,0 +1,56 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import com.dc.datachange.core.connection.DDSStateManger;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
+import com.dc.datachange.core.entity.platformInfo.Platform;
+import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
+import com.dc.datachange.core.exchange.DataManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+@Slf4j
+public abstract class RunningMsgStrategy implements MessageStrategy {
+    @Autowired
+    private DDSStateManger stateManger;
+    @Autowired
+    private DataManager dataManager;
+
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        if (stateManger.stateChecker(message) && message.isValidate()) {
+            log.info(message.getClass().toString());
+            Integer from = Integer.valueOf(message.getFrom());
+            Integer to = Integer.valueOf(message.getTo());
+            Class<? extends Platform> clazz;
+
+            Map<Integer, InterferPlatform> InterferMap = dataManager.getMap(InterferPlatform.class);
+            Map<Integer, RadarPlatform> radarMap = dataManager.getMap(RadarPlatform.class);
+            if(InterferMap.containsKey(from) && InterferMap.containsKey(to)){
+                clazz= InterferPlatform.class;
+            }else if(radarMap.containsKey(from) && radarMap.containsKey(to)){
+                clazz = RadarPlatform.class;
+            }
+            else {
+                return false;
+            }
+
+            Platform fromPlat = dataManager.getData(clazz,from);
+            Platform toPlat = dataManager.getData(clazz,to);
+            return fromPlat != null && toPlat != null
+                    && fromPlat.isGrouped() && toPlat.isGrouped()
+                    && fromPlat.getGroupId().equals(toPlat.getGroupId());
+        }
+        return false;
+    }
+
+    @Override
+    public void invoke(ReceivedMessage message) {
+        log.info(message.getClass().toString());
+        dataManager.addData(message);
+    }
+}

+ 7 - 0
src/main/java/com/dc/datachange/exception/UnknownMsgException.java

@@ -0,0 +1,7 @@
+package com.dc.datachange.exception;
+
+public class UnknownMsgException extends RuntimeException{
+    public UnknownMsgException(){
+        super("当前类型消息缺失参数");
+    }
+}

+ 3 - 3
src/main/java/com/dc/datachange/messageManager/controller/MessageController.java

@@ -2,9 +2,9 @@ package com.dc.datachange.messageManager.controller;
 
 import com.dc.datachange.utils.PageUtils;
 import com.dc.datachange.utils.R;
-import com.dc.datachange.core.entity.speicMsg.CompIntelMsg;
-import com.dc.datachange.core.entity.speicMsg.EleInterMsg;
-import com.dc.datachange.core.entity.speicMsg.RadarPulseMsg;
+import com.dc.datachange.core.entity.message.receivedMessage.CompIntelMsg;
+import com.dc.datachange.core.entity.message.receivedMessage.EleInterMsg;
+import com.dc.datachange.core.entity.message.receivedMessage.RadarPulseMsg;
 import com.dc.datachange.core.exchange.DataManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;

+ 22 - 140
src/main/java/com/dc/datachange/networkGroup/controller/NetworkController.java

@@ -1,9 +1,13 @@
 package com.dc.datachange.networkGroup.controller;
 
+import com.dc.datachange.core.entity.NetworkGroup;
+import com.dc.datachange.core.entity.graph.EdgeVo;
+import com.dc.datachange.core.entity.graph.NodeVo;
 import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
 import com.dc.datachange.core.entity.platformInfo.Platform;
 import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
 import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.core.exchange.SendExecutor;
 import com.dc.datachange.exception.IllegalTypeException;
 import com.dc.datachange.exception.NameDuplicatedException;
 import com.dc.datachange.exception.NetworkCreateException;
@@ -21,12 +25,16 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import static com.dc.datachange.utils.MessageUtils.getEdgesFromPlatform;
+
 @RestController
 @Slf4j
 @RequestMapping("/network")
 public class NetworkController {
     @Autowired
     private DataManager dataManager;
+    @Autowired
+    private SendExecutor sendExecutor;
 
     @GetMapping("allGroup")
     public R getAllGroup() {
@@ -75,6 +83,10 @@ public class NetworkController {
 
     @GetMapping("delete")
     public R deleteNetworkGroup(@RequestParam Integer id) {
+        NetworkGroup data = dataManager.getData(NetworkGroup.class, id);
+        if(data.getPlatformSet()!=null){
+            deleteNetworkParams(id);
+        }
         if (dataManager.deleteData(NetworkGroup.class, id)) {
             return R.ok();
         } else {
@@ -116,6 +128,7 @@ public class NetworkController {
                         networkGroup.getPlatformSet().forEach(x->x.grouped(null));
                         networkGroup.setPlatformSet(collect);
                         collect.forEach(x->x.grouped(networkGroup.getId()));
+                        sendExecutor.sendNetGroupMsg();
                         return R.ok();
                     }
                     else{
@@ -129,6 +142,7 @@ public class NetworkController {
                     return R.error(e.getMessage());
                 }
             }
+            sendExecutor.sendNetGroupMsg();
             return R.ok();
         } else return R.error("目标网络组不存在");
     }
@@ -139,6 +153,7 @@ public class NetworkController {
         networkGroup.setParams(null);
         networkGroup.getPlatformSet().forEach(x->x.grouped(null));
         networkGroup.setPlatformSet(new HashSet<>());
+        sendExecutor.sendNetGroupMsg();
         return R.ok();
     }
 
@@ -158,165 +173,32 @@ public class NetworkController {
     }
     @GetMapping("/getInterferChartInfo")
     public R getInterferChartInfo(){
-        List<NodeVo> nodes = dataManager.getInterferPlatforms().stream()
+        List<NodeVo> nodes = dataManager.getAllData(InterferPlatform.class).stream()
                 .map(x -> new NodeVo(x.getId(), x.getId()))
                 .collect(Collectors.toList());
 
         List<EdgeVo> edgeList =new ArrayList<>();
-        for(NetworkGroup networkGroup: dataManager.getNetworkGroups()){
+        for(NetworkGroup networkGroup: dataManager.getAllData(NetworkGroup.class)){
             if(networkGroup.getType().equals("interference")) {
-                getEdgesFromGroup(edgeList, networkGroup);
+                getEdgesFromPlatform(edgeList, networkGroup.getPlatformSet());
             }
         }
         return R.ok().put("nodes",nodes).put("edges",edgeList);
     }
     @GetMapping("/getRadarChartInfo")
     public R getRadarChartInfo(){
-        List<NodeVo> nodes = dataManager.getRadarPlatforms().stream()
+        List<NodeVo> nodes = dataManager.getAllData(RadarPlatform.class).stream()
                 .map(x -> new NodeVo(x.getId(), x.getId()))
                 .collect(Collectors.toList());
 
         List<EdgeVo> edgeList =new ArrayList<>();
-        for(NetworkGroup networkGroup: dataManager.getNetworkGroups()){
+        for(NetworkGroup networkGroup: dataManager.getAllData(NetworkGroup.class)){
             if(networkGroup.getType().equals("radar")) {
-                getEdgesFromGroup(edgeList, networkGroup);
+                getEdgesFromPlatform(edgeList, networkGroup.getPlatformSet());
             }
         }
         return R.ok().put("nodes",nodes).put("edges",edgeList);
     }
 
-    private void getEdgesFromGroup(List<EdgeVo> edgeList, NetworkGroup networkGroup) {
-        List<Platform> list = new ArrayList<>(networkGroup.getPlatformSet());
-        int size = list.size();
-        for(int i=0;i<size-1;i++){
-            for(int j=i+1;j<size;j++){
-                edgeList.add(new EdgeVo(list.get(i).getId(),list.get(j).getId()));
-            }
-        }
-    }
-//
-//    @PostMapping("update")
-//    public R updateNetworkGroup(@RequestParam Map<String, Object> params){
-//        String name = params.get("name").toString();
-//        String type = params.get("type").toString();
-//        String mainStation = params.get("mainStation").toString();
-//        String communication = params.get("communication").toString();
-//        // 修改列表中的对象
-//        for (NetworkGroup networkGroup: networkGroupList){
-//            if(networkGroup.getName().equals(name) && networkGroup.getType().equals(type)){
-//                networkGroup.setMainStation(mainStation);
-//                networkGroup.setCommunication(communication);
-//                //获取station数组,用于配置参数的链路设置,如果更新为enable,就加入list中
-//                addStation(type, communication, mainStation, name);
-//            }
-//        }
-//        return R.ok();
-//    }
-//
-//    @PostMapping("delete")
-//    public R deleteNetworkGroup(@RequestBody NetworkGroup networkGroup){
-//        networkGroupList.removeIf(group -> group.getId() == networkGroup.getId());
-//        idList.removeIf(map -> map.get("value").equals(networkGroup.getId()));
-//        radarStationList.removeIf(sourceStation -> sourceStation.get("name").equals(networkGroup.getMainStation()));
-//        interferenceStationList.removeIf(targetStation -> targetStation.get("name").equals(networkGroup.getMainStation()));
-//        return R.ok();
-//    }
-//
-//    @GetMapping("paramsList")
-//    public R paramsList(@RequestParam(defaultValue = "1") int page,
-//                  @RequestParam(defaultValue = "10") int limit){
-//
-//        System.out.println("networkParamsList" + networkParamsList);
-//        // 计算总记录数
-//        int totalCount = networkParamsList.size();
-//
-//        // 计算分页数据
-//        int fromIndex = (page - 1) * limit;
-//        int toIndex = Math.min(fromIndex + limit, totalCount);
-//        List<NetworkParams> paginatedList = networkParamsList.subList(fromIndex, toIndex);
-//
-//        // 创建 PageUtils 实例
-//        PageUtils page1 = new PageUtils(paginatedList, totalCount, limit, page);
-//
-//        return R.ok().put("page", page1);
-//    }
-//    @PostMapping("addParam")
-//    public R addNetworkParam(@RequestParam Map<String, Object> params){
-//        String link = params.get("link").toString();
-//        int groupId = Integer.parseInt(params.get("groupId").toString());
-//        String parameter = params.get("parameter").toString();
-//        String sourceStation = params.get("sourceStation").toString();
-//        String targetStation = params.get("targetStation").toString();
-//        for (NetworkParams networkParam: networkParamsList){
-//            if(networkParam.getLink().equals(link) && networkParam.getGroupId() == groupId){
-//                return R.error("链路已存在");
-//            }
-//        }
-//
-//        NetworkParams networkParam = new NetworkParams();
-//        networkParam.setGroupId(groupId);
-//        networkParam.setLink(link);
-//        networkParam.setParameter(parameter);
-//        networkParam.setSourceStation(sourceStation);
-//        networkParam.setTargetStation(targetStation);
-//        networkParamsList.add(networkParam);
-//        return R.ok();
-//    }
-//
-//    @PostMapping("updateParam")
-//    public R updateNetworkParam(@RequestParam Map<String, Object> params){
-//        String link = params.get("link").toString();
-//        int groupId = Integer.parseInt(params.get("groupId").toString());
-//        String parameter = params.get("parameter").toString();
-//        String sourceStation = params.get("sourceStation").toString();
-//        String targetStation = params.get("targetStation").toString();
-//        // 修改列表中的对象
-//        for (NetworkParams networkParam: networkParamsList){
-//            if(networkParam.getLink().equals(link) && networkParam.getGroupId() == groupId){
-//                return R.error("链路已存在");
-//            }
-//            if(networkParam.getGroupId() == groupId){
-//                networkParam.setLink(link);
-//                networkParam.setParameter(parameter);
-//                networkParam.setSourceStation(sourceStation);
-//                networkParam.setTargetStation(targetStation);
-//            }
-//        }
-//        return R.ok();
-//    }
-//
-//    @PostMapping("deleteParam")
-//    public R deleteNetworkParam(@RequestBody int id){
-//        networkParamsList.removeIf(networkParams -> networkParams.getId() == id);
-//        return R.ok();
-//    }
-//
-//    //添加主站
-//    private void addStation(String type, String communication, String mainStation, String groupName) {
-//        // 检查 communication 是否为 "enabled"
-//        if ("enabled".equals(communication)) {
-//            Map<String, Object> stationMap = new HashMap<>();
-//            stationMap.put("name", mainStation);
-//            stationMap.put("groupName", groupName);
-//
-//            // 根据 type 将 stationMap 添加到相应的列表中
-//            if ("radar".equals(type)) {
-//                // 检查是否已存在于 radarStationList 中
-//                if (!isStationExists(radarStationList, mainStation)) {
-//                    radarStationList.add(stationMap);
-//                }
-//            } else if ("interference".equals(type)) {
-//                // 检查是否已存在于 interferenceStationList 中
-//                if (!isStationExists(interferenceStationList, mainStation)) {
-//                    interferenceStationList.add(stationMap);
-//                }
-//            }
-//        }
-//    }
-//
-//    // 辅助方法:检查站点是否已存在
-//    private boolean isStationExists(List<Map<String, Object>> stationList, String mainStation) {
-//        return stationList.stream()
-//                .anyMatch(station -> mainStation.equals(station.get("name")));
-//    }
+
 }

+ 1 - 0
src/main/java/com/dc/datachange/networkGroup/entity/NetworkParams.java

@@ -1,5 +1,6 @@
 package com.dc.datachange.networkGroup.entity;
 
+import com.dc.datachange.core.entity.NetworkGroup;
 import com.dc.datachange.core.entity.platformInfo.Platform;
 import lombok.Data;
 import lombok.NoArgsConstructor;

+ 3 - 0
src/main/java/com/dc/datachange/utils/ConcurrentIndexedMap.java

@@ -166,6 +166,9 @@ public class ConcurrentIndexedMap<V> implements Collection<V> {
     public List<V> getList(){
         return this.valueList;
     }
+    public Map<Integer,V> getMap(){
+        return this.keyMap;
+    }
 
     public enum Type{
         UNKNOWN,LIST,MAP

+ 38 - 0
src/main/java/com/dc/datachange/utils/MessageUtils.java

@@ -0,0 +1,38 @@
+package com.dc.datachange.utils;
+
+import com.dc.datachange.core.entity.graph.EdgeVo;
+import com.dc.datachange.core.entity.platformInfo.Platform;
+import com.dc.datachange.core.entity.NetworkGroup;
+
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+public class MessageUtils {
+    public static String getLineStr(NetworkGroup networkGroup){
+        Set<Platform> platformSet = networkGroup.getPlatformSet();
+        StringBuilder stringBuilder=new StringBuilder();
+        stringBuilder.append(networkGroup.getId()).append(" ")
+                .append(platformSet.size());
+        for(Platform platform:platformSet){
+            stringBuilder.append(" ").append(platform.getId());
+        }
+        return stringBuilder.toString();
+    }
+
+    public static void getEdgesFromPlatform(List<EdgeVo> edgeList, Set<Platform> platformSet) {
+        List<Platform> list = new ArrayList<>(platformSet);
+        int size = list.size();
+        for(int i=0;i<size-1;i++){
+            for(int j=i+1;j<size;j++){
+                edgeList.add(new EdgeVo(list.get(i).getId(),list.get(j).getId()));
+            }
+        }
+    }
+    public static String  getTimeString(){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm.ss");
+        return LocalTime.now().format(formatter);
+    }
+}

+ 43 - 17
src/main/java/com/dc/datachange/utils/Simulator.java

@@ -1,5 +1,6 @@
 package com.dc.datachange.utils;
 
+import Messenger.Message;
 import com.dc.datachange.core.common.ControlConstans;
 import com.dc.datachange.core.common.MsgConstants;
 import com.dc.datachange.core.common.PlatConstants;
@@ -8,7 +9,7 @@ import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
 import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
 import com.dc.datachange.core.exchange.DataManager;
 import com.dc.datachange.networkGroup.controller.NetworkController;
-import com.dc.datachange.networkGroup.entity.NetworkGroup;
+import com.dc.datachange.core.entity.NetworkGroup;
 import com.dc.datachange.networkGroup.entity.NetworkParams;
 import com.dc.datachange.networkGroup.entity.RawGroup;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,29 +35,46 @@ public class Simulator {
     @GetMapping("/add1")
     public R addRadarPulse(){
         count++;
-        publisher.publishMessage(PlatConstants.TASK_SYSTEM+" "+PlatConstants.EXCHANGE_PLATFORM,
-                MsgConstants.RADAR_PULSE,"雷达 空中 21 127 10000 5000 "+count);
+        publisher.sendMessage(
+                new Message(
+                        PlatConstants.RADAR_TASKSYS+" "+PlatConstants.EXCHANGE_PLATFORM+" "+PlatConstants.EXCHANGE_PLATFORM,
+                        MsgConstants.RADAR_PULSE,
+                        count,
+                        "雷达 空中 21 127 10000 5000 "+count,
+                        count));
         return R.ok();
     }
     @GetMapping("/add2")
     public R addEleInter(){
         count++;
-        publisher.publishMessage(PlatConstants.TASK_SYSTEM+" "+PlatConstants.EXCHANGE_PLATFORM,
-                MsgConstants.ELECTRIC_INTERFERE,"宽带干扰 空中 区域A 宽带干扰 未知 否 "+count);
+        publisher.sendMessage(
+                new Message(
+                        PlatConstants.RADAR_TASKSYS+" "+PlatConstants.EXCHANGE_PLATFORM+" "+PlatConstants.EXCHANGE_PLATFORM,
+                        MsgConstants.ELECTRIC_INTERFERE,
+                        count,
+                        "宽带干扰 空中 区域A 宽带干扰 未知 否 "+count,
+                        count));
         return R.ok();
     }
     @GetMapping("/add3")
     public R addComprehen(){
         count++;
-        publisher.publishMessage(PlatConstants.TASK_SYSTEM+" "+PlatConstants.EXCHANGE_PLATFORM,
-                MsgConstants.COMPREHEN_INTELL,"综合 "+count+" 否 在侦察完成后立刻启动干扰");
+        publisher.sendMessage(
+                new Message(
+                        PlatConstants.RADAR_TASKSYS+" "+PlatConstants.EXCHANGE_PLATFORM+" "+PlatConstants.EXCHANGE_PLATFORM,
+                        MsgConstants.COMPREHEN_INTELL,
+                        count,
+                        "综合 "+count+" 否 在侦察完成后立刻启动干扰",
+                        count));
         return R.ok();
     }
     @GetMapping("/init")
     public R init() throws InterruptedException {
-        publisher.publishMessage(PlatConstants.SUPPORT_PLATFORM+" "+PlatConstants.EXCHANGE_PLATFORM,
-                MsgConstants.INITIAL_MSG,
-                "6 4\n" +
+        publisher.sendMessage(
+                new Message(PlatConstants.SUPPORT_PLATFORM,
+                    MsgConstants.INITIAL_MSG,
+                    count,
+                    "6 4\n"+
                         "104 1 0 1 -1502143.7779720642 5459654.14635412 2925524.054455928\n" +
                         "105 1 0 1 -1119974.522455073 5202530.972695272 3503886.1094705067\n" +
                         "103 1 0 1 -1569497.379037304 4803025.549234323 3879026.548666874\n" +
@@ -66,7 +84,8 @@ public class Simulator {
                         "201 2 1 1 -2288875.7919909689 4187613.197114771 4058771.869184186\n" +
                         "202 2 1 1 -2388875.7919909689 4287613.197114771 4108771.869184186\n" +
                         "203 2 1 1 -2188875.7919909689 4387613.197114771 4208771.869184186\n" +
-                        "204 2 1 1 -2588875.7919909689 4487613.197114771 4078771.869184186");
+                        "204 2 1 1 -2588875.7919909689 4487613.197114771 4078771.869184186",
+                        count));
         this.addNet1();
         this.addNet2();
         this.addNet1();
@@ -95,9 +114,11 @@ public class Simulator {
     }
     @GetMapping("/init2")
     public R init2(){
-        publisher.publishMessage(PlatConstants.SUPPORT_PLATFORM+" "+PlatConstants.TASK_SYSTEM,
-                MsgConstants.INITIAL_MSG,
-                "6 4\n" +
+        publisher.sendMessage(
+                new Message(PlatConstants.SUPPORT_PLATFORM+" "+PlatConstants.RADAR_TASKSYS,
+                        MsgConstants.INITIAL_MSG,
+                        count,
+                    "6 4\n" +
                         "104 1 0 1 -1502143.7779720642 5459654.14635412 2925524.054455928\n" +
                         "105 1 0 1 -1119974.522455073 5202530.972695272 3503886.1094705067\n" +
                         "103 1 0 1 -1569497.379037304 4803025.549234323 3879026.548666874\n" +
@@ -107,7 +128,8 @@ public class Simulator {
                         "201 2 1 1 -2288875.7919909689 4187613.197114771 4058771.869184186\n" +
                         "202 2 1 1 -2388875.7919909689 4287613.197114771 4108771.869184186\n" +
                         "203 2 1 1 -2188875.7919909689 4387613.197114771 4208771.869184186\n" +
-                        "204 2 1 1 -2588875.7919909689 4487613.197114771 4078771.869184186");
+                        "204 2 1 1 -2588875.7919909689 4487613.197114771 4078771.869184186",
+                        count));
         return R.ok();
     }
     @GetMapping("/listInter")
@@ -121,8 +143,12 @@ public class Simulator {
     }
     @GetMapping("/stop")
     public R stop(){
-        publisher.publishMessage(PlatConstants.SUPPORT_PLATFORM+" "+PlatConstants.EXCHANGE_PLATFORM,
-                MsgConstants.DAOTIAO_MSG, ControlConstans.CTRL_FINISH);
+        publisher.sendMessage(new Message(
+                PlatConstants.SUPPORT_PLATFORM+" "+PlatConstants.EXCHANGE_PLATFORM,
+                MsgConstants.DAOTIAO_MSG,
+                count,
+                ControlConstans.CTRL_FINISH,
+                count));
         return R.ok();
     }
     @GetMapping("/addNet1")