1
0

3 Revīzijas e2cd139996 ... c0dcd34b4e

Autors SHA1 Ziņojums Datums
  zlSun c0dcd34b4e 测试前最终版 3 mēneši atpakaļ
  zlSun d4d3e81935 测试bug修改,完善断开连接 3 mēneši atpakaļ
  zlSun 7ea0385334 通信质量第一版 3 mēneši atpakaļ
35 mainītis faili ar 768 papildinājumiem un 78 dzēšanām
  1. 39 7
      src/main/java/com/dc/datachange/communication/controller/CommunicationController.java
  2. 0 19
      src/main/java/com/dc/datachange/communication/entity/PlatformVo.java
  3. 63 0
      src/main/java/com/dc/datachange/core/common/DefaultPlatParams.java
  4. 4 0
      src/main/java/com/dc/datachange/core/common/MsgConstants.java
  5. 21 5
      src/main/java/com/dc/datachange/core/connection/DDSPublisher.java
  6. 10 1
      src/main/java/com/dc/datachange/core/connection/DDSStatusManger.java
  7. 21 4
      src/main/java/com/dc/datachange/core/connection/DDSSubscriber.java
  8. 44 0
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/GroupParamsCtrl.java
  9. 21 0
      src/main/java/com/dc/datachange/core/entity/message/receivedMessage/GroupParamsReq.java
  10. 31 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/GroupParamsCtrl.java
  11. 56 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/GroupParamsInitial.java
  12. 8 12
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/NetGroupMsg.java
  13. 40 0
      src/main/java/com/dc/datachange/core/entity/message/sendMessage/SDRStatusMsg.java
  14. 1 0
      src/main/java/com/dc/datachange/core/entity/platformInfo/InterferPlatform.java
  15. 4 0
      src/main/java/com/dc/datachange/core/entity/platformInfo/Platform.java
  16. 47 0
      src/main/java/com/dc/datachange/core/entity/platformInfo/PlatformParams.java
  17. 1 0
      src/main/java/com/dc/datachange/core/entity/platformInfo/RadarPlatform.java
  18. 2 2
      src/main/java/com/dc/datachange/core/exchange/DDSListener.java
  19. 17 0
      src/main/java/com/dc/datachange/core/exchange/DataManager.java
  20. 17 5
      src/main/java/com/dc/datachange/core/exchange/SendExecutor.java
  21. 1 1
      src/main/java/com/dc/datachange/core/exchange/strategy/CompIntStrategy.java
  22. 1 1
      src/main/java/com/dc/datachange/core/exchange/strategy/DaoTiaoStrategy.java
  23. 1 1
      src/main/java/com/dc/datachange/core/exchange/strategy/EleInterStrategy.java
  24. 2 3
      src/main/java/com/dc/datachange/core/exchange/strategy/GeneralDataStrategy.java
  25. 63 0
      src/main/java/com/dc/datachange/core/exchange/strategy/GroupParamsCtrlStrategy.java
  26. 40 0
      src/main/java/com/dc/datachange/core/exchange/strategy/GroupParamsReqStrategy.java
  27. 20 3
      src/main/java/com/dc/datachange/core/exchange/strategy/InitialMsgStrategy.java
  28. 1 1
      src/main/java/com/dc/datachange/core/exchange/strategy/NetGroupReqStrategy.java
  29. 1 1
      src/main/java/com/dc/datachange/core/exchange/strategy/RadarPulseStrategy.java
  30. 11 0
      src/main/java/com/dc/datachange/remote/RequestData.java
  31. 8 0
      src/main/java/com/dc/datachange/remote/SDRClient.java
  32. 43 7
      src/main/java/com/dc/datachange/remote/SDRController.java
  33. 107 0
      src/main/java/com/dc/datachange/remote/SDRManager.java
  34. 8 3
      src/main/java/com/dc/datachange/utils/MessageUtils.java
  35. 14 2
      src/main/resources/application.yml

+ 39 - 7
src/main/java/com/dc/datachange/communication/controller/CommunicationController.java

@@ -1,22 +1,23 @@
 package com.dc.datachange.communication.controller;
 
 import com.dc.datachange.communication.entity.NetworkGroupVo;
-import com.dc.datachange.communication.entity.PlatformVo;
 import com.dc.datachange.core.entity.graph.EdgeVo;
 import com.dc.datachange.core.entity.graph.NodeVo;
 import com.dc.datachange.core.entity.networkGroup.NetworkGroup;
+import com.dc.datachange.core.entity.platformInfo.InterferPlatform;
 import com.dc.datachange.core.entity.platformInfo.Platform;
+import com.dc.datachange.core.entity.platformInfo.PlatformParams;
+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.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 org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -28,6 +29,8 @@ import static com.dc.datachange.utils.MessageUtils.getEdgesFromPlatform;
 public class CommunicationController {
     @Autowired
     private DataManager dataManager;
+    @Autowired
+    private SendExecutor sendExecutor;
 
     @GetMapping("/getNetworkGroups")
     public R getNetworkGroups(){
@@ -53,11 +56,40 @@ public class CommunicationController {
     @GetMapping("/getSendMessage")
     public R getSendMessage(@RequestParam Integer id){
         NetworkGroup networkGroup = dataManager.getData(NetworkGroup.class,id);
-        return R.ok().put("data",networkGroup.getHistoryMsg());
+        return R.ok().put("data",networkGroup==null?null:networkGroup.getHistoryMsg());
     }
     @GetMapping("/getMembers")
     public R getMembers(@RequestParam Integer id){
         NetworkGroup networkGroup = dataManager.getData(NetworkGroup.class,id);
-        return R.ok().put("data",networkGroup.getPlatformSet().stream().map(PlatformVo::new).collect(Collectors.toList()));
+        return R.ok().put("data",networkGroup==null?null:networkGroup.getPlatformSet().stream().map(Platform::getParams).collect(Collectors.toList()));
+    }
+
+    @PostMapping("/updateParams")
+    public R updateParams(@RequestBody PlatformParams platformParams){
+        Integer id =platformParams.getId();
+        Map<Integer, InterferPlatform> interferPlatformMap = dataManager.getMap(InterferPlatform.class);
+        Map<Integer, RadarPlatform> radarPlatformMap = dataManager.getMap(RadarPlatform.class);
+        if(interferPlatformMap.containsKey(id)){
+            interferPlatformMap.get(id).setParams(platformParams);
+            sendExecutor.sendDDS(platformParams.toMessage());
+        }else if(radarPlatformMap.containsKey(id)){
+            radarPlatformMap.get(id).setParams(platformParams);
+            sendExecutor.sendDDS(platformParams.toMessage());
+        }else {
+            return R.error("平台Id不存在");
+        }
+        return R.ok();
+    }
+    @GetMapping("/getParams")
+    public R listParams(@RequestParam Integer id){
+        Map<Integer, InterferPlatform> interferPlatformMap = dataManager.getMap(InterferPlatform.class);
+        Map<Integer, RadarPlatform> radarPlatformMap = dataManager.getMap(RadarPlatform.class);
+        if(interferPlatformMap.containsKey(id)){
+            return R.ok().put("data",interferPlatformMap.get(id).getParams());
+        }else if(radarPlatformMap.containsKey(id)){
+            return R.ok().put("data",radarPlatformMap.get(id).getParams());
+        }else {
+            return R.error("平台Id不存在");
+        }
     }
 }

+ 0 - 19
src/main/java/com/dc/datachange/communication/entity/PlatformVo.java

@@ -1,19 +0,0 @@
-package com.dc.datachange.communication.entity;
-
-import com.dc.datachange.core.entity.platformInfo.Platform;
-import lombok.Data;
-
-@Data
-public class PlatformVo {
-    private Integer id;
-    private String isOnline;
-    private String status;
-    private String linkModel;
-
-    public PlatformVo(Platform platform){
-        this.id =platform.getId();
-        this.isOnline="是";
-        this.status="非静默";
-        this.linkModel="CAN";
-    }
-}

+ 63 - 0
src/main/java/com/dc/datachange/core/common/DefaultPlatParams.java

@@ -0,0 +1,63 @@
+package com.dc.datachange.core.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DefaultPlatParams {
+
+    private static final Map<String,String> FrequencyAgility=new HashMap<String,String >(){{
+        put("捷变范围","±100MHz");
+        put("切换时间","1ms");
+        put("捷变模式","伪随机序列");
+    }};
+    private static final Map<String,String> WaveformAgility=new HashMap<String ,String>(){{
+       put("波形类型","LFM");
+       put("带宽捷变范围","50MHz");
+       put("脉宽捷变范围","10μs");
+       put("捷变间隔","100ms");
+    }};
+    private static final Map<String ,String > AdaptivePolarizationFilter=new HashMap<String ,String>(){{
+        put("极化方式","动态四配");
+        put("滤波响应时间","1ms");
+        put("干扰抑制比","30dB");
+    }};
+    public static Map<String,Object> radarMap=new HashMap<String,Object>(){{
+        put("频率捷变",FrequencyAgility);
+        put("波形捷变",WaveformAgility);
+        put("自适应极化滤波",AdaptivePolarizationFilter);
+    }};
+
+    private static final Map<String ,String > NoiseFMJamming= new HashMap<String,String >(){{
+       put("调制带宽","50MHZ");
+       put("调制速率","10kHz");
+       put("干扰功率","100W");
+    }};
+    private static final Map<String ,String > NoiseAMJamming = new HashMap<String ,String>(){{
+       put("调制深度","50%");
+       put("干扰带宽","20MHz");
+       put("功率起伏","±1dB");
+    }};
+    private static final Map<String,String> DirectNoiseRepeaterJamming=new HashMap<String ,String >(){{
+       put("转发延迟","1μs");
+       put("干扰增益","30dB");
+       put("饱和功率","50W");
+    }};
+    private static final Map<String,String> VelocityFalseTargetJamming = new HashMap<String,String>(){{
+       put("假目标数量","10个");
+       put("速度间隔","1m/s");
+       put("假目标功率比","0dB");
+    }};
+    private static final Map<String,String > RangeFalseTargetJamming = new HashMap<String ,String >(){{
+        put("假目标数量","10个");
+        put("距离间隔","1km");
+        put("脉冲延迟精度","100ns");
+    }};
+
+    public static Map<String,Object> interferMap = new HashMap<String ,Object>(){{
+       put("噪声调频",NoiseFMJamming);
+       put("噪声调幅",NoiseAMJamming);
+       put("噪声直放",DirectNoiseRepeaterJamming);
+       put("速度多假目标",VelocityFalseTargetJamming);
+       put("距离多假目标",RangeFalseTargetJamming);
+    }};
+}

+ 4 - 0
src/main/java/com/dc/datachange/core/common/MsgConstants.java

@@ -18,6 +18,10 @@ public class MsgConstants {
     public static final String ELECTRIC_INTERFERE="6";
     public static final String COMPREHEN_INTELL="7";
     public static final String HEART_BEAT="8";
+    public static final String GROUP_PARAMS_CTRL= "9";
+    public static final String GROUP_PARAMS_INI= "10";
+    public static final String GROUP_PARAMS_REQ = "101";
+    public static final String EQUIP_STATUS_MSG = "120";
     public static final HashMap<String,String > MSG_MAP = new HashMap<>();
 
     static {

+ 21 - 5
src/main/java/com/dc/datachange/core/connection/DDSPublisher.java

@@ -33,6 +33,10 @@ public class DDSPublisher {
     private final ExecutorService matchService = Executors.newSingleThreadExecutor();
     private static final int MAX_RETRIES = 5;  // 最大重试次数
     private int retryCount = 0;                // 当前重试计数
+    private DataWriter dw;
+    private Publisher pub;
+    private DomainParticipant dp;
+    private DomainParticipantFactory dpf;
 
     @PostConstruct
     private void initialize(){
@@ -62,12 +66,12 @@ public class DDSPublisher {
     private void doInitialize() {
         log.info("Start Publisher");
 
-        DomainParticipantFactory dpf = TheParticipantFactory.WithArgs(new StringSeqHolder(params.toArgs()));
+        dpf = TheParticipantFactory.WithArgs(new StringSeqHolder(params.toArgs()));
         if (dpf == null) {
             throw new InitialFailedException("ERROR: Domain Participant Factory not found");
         }
 
-        DomainParticipant dp = dpf.create_participant(4,
+        dp = dpf.create_participant(4,
                 PARTICIPANT_QOS_DEFAULT.get(), null, DEFAULT_STATUS_MASK.value);
         if (dp == null) {
             throw new InitialFailedException("ERROR: Domain Participant creation failed");
@@ -87,7 +91,7 @@ public class DDSPublisher {
             throw new InitialFailedException("ERROR: Topic creation failed");
         }
 
-        Publisher pub = dp.create_publisher(PUBLISHER_QOS_DEFAULT.get(), null,
+        pub = dp.create_publisher(PUBLISHER_QOS_DEFAULT.get(), null,
                 DEFAULT_STATUS_MASK.value);
         if (pub == null) {
             throw new InitialFailedException("ERROR: Publisher creation failed");
@@ -135,7 +139,7 @@ public class DDSPublisher {
             qosh.value.reliability.kind =
                     ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS;
         }
-        DataWriter dw = pub.create_datawriter(top,
+        dw = pub.create_datawriter(top,
                 qosh.value,
                 null,
                 DEFAULT_STATUS_MASK.value);
@@ -198,10 +202,22 @@ public class DDSPublisher {
         isInitialized=false;
         running=false;
         log.info("终止publisher运行");
-//        disconnection();
+        disconnection();
         log.info("关闭publisher连接完成");
     }
 
+    private void disconnection() {
+        if (dw != null) {
+            pub.delete_datawriter(dw);
+        }
+        if (pub != null) {
+            dp.delete_publisher(pub);
+        }
+        if (dp != null) {
+            dpf.delete_participant(dp);
+        }
+    }
+
     @Bean
     @Async
     public void processMessageQueue() {

+ 10 - 1
src/main/java/com/dc/datachange/core/connection/DDSStatusManger.java

@@ -8,6 +8,7 @@ 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.Bean;
 import org.springframework.context.annotation.DependsOn;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -32,6 +33,14 @@ public class DDSStatusManger {
 
     @Async
     @Scheduled(fixedDelay = 6000)
+    public void SDRStatus(){
+        if(status ==State.RUNNING)
+            sendExecutor.sendSDRStatusMsg();
+    }
+
+    @Async
+    @Bean
+    @Scheduled(fixedDelay = 6000)
     public void heartBeat(){
         sendExecutor.sendHeartBeat();
     }
@@ -61,7 +70,7 @@ public class DDSStatusManger {
 //        running();
     }
 
-    public boolean stateChecker(ReceivedMessage message){
+    public boolean statusChecker(ReceivedMessage message){
         if (InitialMessage.class.equals(message.getClass())) {
             return isInitialed();
         } else if (message.isRunningMsg()) {

+ 21 - 4
src/main/java/com/dc/datachange/core/connection/DDSSubscriber.java

@@ -24,6 +24,10 @@ public class DDSSubscriber {
     @Autowired
     private DDSListener listener;
     private volatile boolean running = true;
+    private DomainParticipantFactory dpf;
+    private DomainParticipant dp;
+    private Subscriber sub;
+    private DataReader dr;
 
     @PostConstruct
     public void initialized(){
@@ -32,12 +36,12 @@ public class DDSSubscriber {
 
             log.info("Start Subscriber");
 
-            DomainParticipantFactory dpf = TheParticipantFactory.WithArgs(new StringSeqHolder(params.toArgs()));
+            dpf = TheParticipantFactory.WithArgs(new StringSeqHolder(params.toArgs()));
             if (dpf == null) {
                 System.err.println("ERROR: Domain Participant Factory not found");
                 return;
             }
-            DomainParticipant dp = dpf.create_participant(4,
+            dp = dpf.create_participant(4,
                     PARTICIPANT_QOS_DEFAULT.get(), null, DEFAULT_STATUS_MASK.value);
             if (dp == null) {
                 System.err.println("ERROR: Domain Participant creation failed");
@@ -59,7 +63,7 @@ public class DDSSubscriber {
                 return;
             }
 
-            Subscriber sub = dp.create_subscriber(SUBSCRIBER_QOS_DEFAULT.get(),
+            sub = dp.create_subscriber(SUBSCRIBER_QOS_DEFAULT.get(),
                     null, DEFAULT_STATUS_MASK.value);
             if (sub == null) {
                 System.err.println("ERROR: Subscriber creation failed");
@@ -106,7 +110,7 @@ public class DDSSubscriber {
             }
             qosh.value.history.kind = HistoryQosPolicyKind.KEEP_ALL_HISTORY_QOS;
 
-            DataReader dr = sub.create_datareader(top,
+            dr = sub.create_datareader(top,
                     qosh.value,
                     listener,
                     DEFAULT_STATUS_MASK.value);
@@ -155,6 +159,19 @@ public class DDSSubscriber {
     public void preDestroy(){
         running=false;
         log.info("终止subscriber运行");
+        disconnection();
         log.info("关闭subscriber连接完成");
     }
+
+    private void disconnection() {
+        if (dr != null) {
+            sub.delete_datareader(dr);
+        }
+        if (sub != null) {
+            dp.delete_subscriber(sub);
+        }
+        if (dp != null) {
+            dpf.delete_participant(dp);
+        }
+    }
 }

+ 44 - 0
src/main/java/com/dc/datachange/core/entity/message/receivedMessage/GroupParamsCtrl.java

@@ -0,0 +1,44 @@
+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 com.dc.datachange.core.entity.platformInfo.PlatformParams;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Data
+public class GroupParamsCtrl extends ReceivedMessage implements RunningMessage{
+    private static final String msgType= MsgConstants.GROUP_PARAMS_CTRL;
+
+    private PlatformParams params;
+
+    public GroupParamsCtrl(Message message){
+        this.setDDSMessage(message);
+        try {
+            String[] value=message.text.split(" ");
+            params=new PlatformParams(Integer.valueOf(value[0]));
+            params.setIsOnline(value[1]);
+            params.setStatus(value[2]);
+            params.setLinkModel(value[3]);
+            super.from = message.from;
+
+            if((from.equals(PlatConstants.INTERFER_TASKSYS)
+                    || from.equals(PlatConstants.RADAR_TASKSYS))
+                    && value.length==4){
+                validate=true;
+            }
+        }catch (Exception e){
+            log.error(e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public String getMsgType() {
+        return msgType;
+    }
+}

+ 21 - 0
src/main/java/com/dc/datachange/core/entity/message/receivedMessage/GroupParamsReq.java

@@ -0,0 +1,21 @@
+package com.dc.datachange.core.entity.message.receivedMessage;
+
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+@Data
+@Slf4j
+@AllArgsConstructor
+@Component
+public class GroupParamsReq extends ReceivedMessage implements RunningMessage {
+    private static final String msgType= MsgConstants.GROUP_PARAMS_REQ;
+
+    @Override
+    public String getMsgType() {
+        return msgType;
+    }
+}

+ 31 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/GroupParamsCtrl.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 com.dc.datachange.core.entity.platformInfo.PlatformParams;
+
+public class GroupParamsCtrl extends SendMessage implements SelfMsg{
+    private static final String subject = MsgConstants.GROUP_PARAMS_CTRL;
+    private static final String from = PlatConstants.EXCHANGE_PLATFORM;
+    private final PlatformParams params;
+
+    public GroupParamsCtrl(PlatformParams params){
+        this.params=params;
+    }
+
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage() {
+        Message message=new Message();
+        message.from=from;
+        message.subject=subject;
+        message.text=params.toString();
+        return message;
+    }
+}

+ 56 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/GroupParamsInitial.java

@@ -0,0 +1,56 @@
+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.platformInfo.InterferPlatform;
+import com.dc.datachange.core.entity.platformInfo.RadarPlatform;
+import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.utils.MessageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class GroupParamsInitial extends SendMessage implements ReactiveMsg{
+    private static final String from = PlatConstants.EXCHANGE_PLATFORM;
+    private static final String subject = MsgConstants.GROUP_PARAMS_INI;
+    @Autowired
+    private DataManager dataManager;
+    //私有化构造方法防止其被手动创建
+    private GroupParamsInitial(){}
+
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage(ReceivedMessage receivedMessage) {
+        Message message=new Message();
+        message.from=from;
+        message.subject=subject;
+        StringBuilder stringBuilder=new StringBuilder();
+        List<InterferPlatform> interferPlatforms = dataManager.getAllData(InterferPlatform.class);
+        List<RadarPlatform> radarPlatforms = dataManager.getAllData(RadarPlatform.class);
+        //第一行
+        stringBuilder.append(interferPlatforms.size()).append(" ")
+                .append(radarPlatforms.size()).append(" ");
+        for(InterferPlatform interferPlatform: interferPlatforms){
+            stringBuilder.append("\n").append(MessageUtils.GetLineFromPlatFrom(interferPlatform));
+        }
+        for(RadarPlatform radarPlatform: radarPlatforms){
+            stringBuilder.append("\n").append(MessageUtils.GetLineFromPlatFrom(radarPlatform));
+        }
+        message.text=stringBuilder.toString();
+        return message;
+    }
+
+    @Override
+    public String getSourceMsgType() {
+        return MsgConstants.GROUP_PARAMS_REQ;
+    }
+}

+ 8 - 12
src/main/java/com/dc/datachange/core/entity/message/sendMessage/NetGroupMsg.java

@@ -11,7 +11,6 @@ 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;
 
@@ -22,17 +21,10 @@ public class NetGroupMsg extends SendMessage implements ReactiveMsg, SelfMsg {
     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;
     }
@@ -53,19 +45,23 @@ public class NetGroupMsg extends SendMessage implements ReactiveMsg, SelfMsg {
         message.from=from;
         message.subject=subject;
         StringBuilder stringBuilder=new StringBuilder();
-        List<NetworkGroup> networkGroups = dataManagerStatic.getAllData(NetworkGroup.class);
+        List<NetworkGroup> networkGroups = dataManager.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());
+        if(interferGroups.size()==0 && radarGroups.size()==0){
+            return null;
+        }
         //第一行
         stringBuilder.append(interferGroups.size()).append(" ")
                 .append(radarGroups.size()).append(" ")
                 .append(version++);
         for(NetworkGroup interferGroup: interferGroups){
-            stringBuilder.append("\n").append(MessageUtils.getLineStr(interferGroup));
+            stringBuilder.append("\n").append(MessageUtils.getLineFromNetworkGroup(interferGroup));
         }
         for(NetworkGroup radarGroup: radarGroups){
-            stringBuilder.append("\n").append(MessageUtils.getLineStr(radarGroup));
+            stringBuilder.append("\n").append(MessageUtils.getLineFromNetworkGroup(radarGroup));
         }
         message.text=stringBuilder.toString();
-        return message;    }
+        return message;
+    }
 }

+ 40 - 0
src/main/java/com/dc/datachange/core/entity/message/sendMessage/SDRStatusMsg.java

@@ -0,0 +1,40 @@
+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 com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.remote.SDRManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SDRStatusMsg extends SendMessage implements SelfMsg {
+    private static final String subject = MsgConstants.EQUIP_STATUS_MSG;
+    private static final String from = PlatConstants.EXCHANGE_PLATFORM;
+    @Autowired
+    private SDRManager sdrManager;
+    @Autowired
+    private DataManager dataManager;
+
+    @Override
+    public String getMsgType() {
+        return subject;
+    }
+
+    @Override
+    public Message toMessage() {
+        if(dataManager.getPhysicalRadarPlat()==null || dataManager.getPhysicalInterferPlat()==null){
+            return null;
+        }
+        Message message=new Message();
+        message.from=from;
+        message.subject=subject;
+        message.text=sdrManager.getSDRStatus()+" "
+                +sdrManager.getServiceStatus()+" "
+                +dataManager.getPhysicalRadarPlat().getStrategy()+" "
+                +dataManager.getPhysicalInterferPlat().getStrategy();
+        return message;
+    }
+}

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

@@ -58,6 +58,7 @@ public class InterferPlatform extends Platform {
             this.longitude = value[5];
             this.height = value[6];
             this.groupId=null;
+            this.params=new PlatformParams(id);
         }catch (Exception e){
             log.error(e.getMessage());
             e.printStackTrace();

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

@@ -8,6 +8,10 @@ public abstract class Platform{
      * 组别信息
      */
     protected Integer groupId;
+    /**
+     * 平台参数
+     */
+    protected PlatformParams params;
     public abstract Integer getId();
     public abstract boolean isGrouped();
     public abstract void grouped(Integer groupId);

+ 47 - 0
src/main/java/com/dc/datachange/core/entity/platformInfo/PlatformParams.java

@@ -0,0 +1,47 @@
+package com.dc.datachange.core.entity.platformInfo;
+
+import com.dc.datachange.core.entity.message.sendMessage.GroupParamsCtrl;
+import com.dc.datachange.core.entity.message.sendMessage.SelfMsg;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PlatformParams {
+    /**
+     * 平台Id
+     */
+    private Integer id;
+    /**
+     * 是否在网
+     */
+    private String isOnline;
+    /**
+     * 静默状态
+     */
+    private String status;
+    /**
+     * 传输模式
+     */
+    private String linkModel;
+
+    public PlatformParams(Integer id){
+        this.id=id;
+        this.isOnline="开";
+        this.status="非静默";
+        this.linkModel="实时性";
+    }
+    @Override
+    public String toString(){
+        return id + " " +
+                isOnline + " " +
+                status + " " +
+                linkModel;
+    }
+
+    public SelfMsg toMessage() {
+        return new GroupParamsCtrl(this);
+    }
+}

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

@@ -57,6 +57,7 @@ public class RadarPlatform extends Platform {
             this.longitude = value[5];
             this.height = value[6];
             this.groupId = null;
+            this.params=new PlatformParams(id);
         }catch (Exception e){
             log.error(e.getMessage());
             e.printStackTrace();

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

@@ -37,11 +37,11 @@ public class DDSListener extends DDS._DataReaderListenerLocalBase{
 
         if (status == RETCODE_OK.value) {
             if (sih.value.valid_data) {
-                //核心处理逻辑
+                //根据配置的类型进行输出。但是或许应该写成反向过滤,而不是正向?
                 if(printConfig.getPrintMsgType().contains(mh.value.subject)){
                     log.info(printMessage(mh.value));
                 }
-
+                //核心处理逻辑
                 ReceivedMessage DDSMessage = executor.getSpecMsg(mh.value);
                 if(!(DDSMessage instanceof ErrorMessage)){
                     executor.invoke(DDSMessage);

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

@@ -27,6 +27,8 @@ public class DataManager {
     private final ConcurrentIndexedMap<EleInterMsg> eleInterMsgs = new ConcurrentIndexedMap<>(List.class);
     private final ConcurrentIndexedMap<CompIntelMsg> compIntelMsgs = new ConcurrentIndexedMap<>(List.class);
     private final ConcurrentIndexedMap<NetworkGroup> networkGroups = new ConcurrentIndexedMap<>(Map.class);
+    private RadarPlatform physicalRadarPlat=null;
+    private InterferPlatform physicalInterferPlat=null;
 
     /**
      * 有自动的写法,但是太复杂了,手动一个个加算了
@@ -120,6 +122,19 @@ public class DataManager {
         return false;
     }
 
+    public void addPhysicalInterferPlat(InterferPlatform platform){
+        this.physicalInterferPlat=platform;
+    }
+    public void addPhysicalRadarPlat(RadarPlatform radarPlatform){
+        this.physicalRadarPlat=radarPlatform;
+    }
+    public InterferPlatform getPhysicalInterferPlat(){
+        return this.physicalInterferPlat;
+    }
+    public RadarPlatform getPhysicalRadarPlat(){
+        return this.physicalRadarPlat;
+    }
+
     public void clean(){
         this.interferPlatforms.clear();
         this.radarPlatforms.clear();
@@ -127,6 +142,8 @@ public class DataManager {
         this.eleInterMsgs.clear();
         this.compIntelMsgs.clear();
         this.networkGroups.clear();
+        this.physicalInterferPlat=null;
+        this.physicalRadarPlat=null;
     }
 
 

+ 17 - 5
src/main/java/com/dc/datachange/core/exchange/SendExecutor.java

@@ -1,5 +1,6 @@
 package com.dc.datachange.core.exchange;
 
+import Messenger.Message;
 import com.dc.datachange.core.connection.DDSPublisher;
 import com.dc.datachange.core.entity.message.ReceivedMessage;
 import com.dc.datachange.core.entity.message.sendMessage.*;
@@ -20,6 +21,8 @@ public class SendExecutor {
     private NetGroupMsg netGroupMsg;
     @Autowired
     private HeartBeatMsg heartBeatMsg;
+    @Autowired
+    private SDRStatusMsg SDRStatusMsg;
     private final Map<String, ReactiveMsg> msgMap=new HashMap<>();
 
     public SendExecutor(List<ReactiveMsg> reactiveMsgs){
@@ -28,19 +31,28 @@ public class SendExecutor {
         }
     }
     public void sendDDS(ReceivedMessage message){
-        ddsPublisher.sendMessage(msgMap.get(message.getMsgType()).toMessage(message));
+        Message DDSMessage = msgMap.get(message.getMsgType()).toMessage(message);
+        if(DDSMessage != null){
+            ddsPublisher.sendMessage(DDSMessage);
+        }
     }
     public void sendDDS(SelfMsg message){
-        ddsPublisher.sendMessage(message.toMessage());
+        Message DDSMessage = message.toMessage();
+        if(DDSMessage !=null){
+            ddsPublisher.sendMessage(DDSMessage);
+        }
     }
 
     public void sendHeartBeat(){
-        ddsPublisher.sendMessage(heartBeatMsg.toMessage());
+        sendDDS(heartBeatMsg);
     }
     public void sendInitialReq(){
-        ddsPublisher.sendMessage(initialRequest.toMessage());
+        sendDDS(initialRequest);
     }
     public void sendNetGroupMsg(){
-        ddsPublisher.sendMessage(netGroupMsg.toMessage());
+        sendDDS(netGroupMsg);
+    }
+    public void sendSDRStatusMsg(){
+        sendDDS(SDRStatusMsg);
     }
 }

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

@@ -7,7 +7,7 @@ import com.dc.datachange.core.entity.message.receivedMessage.CompIntelMsg;
 import org.springframework.stereotype.Component;
 
 @Component
-public class CompIntStrategy extends RunningMsgStrategy {
+public class CompIntStrategy extends GeneralDataStrategy {
 
     @Override
     public ReceivedMessage generate(Message message) {

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

@@ -26,7 +26,7 @@ public class DaoTiaoStrategy implements MessageStrategy {
     @Override
     public boolean validate(ReceivedMessage message) {
         DaoTiaoMsg daoTiaoMsg = (DaoTiaoMsg) message;
-        if (stateManger.stateChecker(daoTiaoMsg)) {
+        if (stateManger.statusChecker(daoTiaoMsg)) {
             return daoTiaoMsg.isValidate();
         }
         return false;

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

@@ -7,7 +7,7 @@ import com.dc.datachange.core.entity.message.receivedMessage.EleInterMsg;
 import org.springframework.stereotype.Component;
 
 @Component
-public class EleInterStrategy extends RunningMsgStrategy {
+public class EleInterStrategy extends GeneralDataStrategy {
     @Override
     public ReceivedMessage generate(Message message) {
         return new EleInterMsg(message);

+ 2 - 3
src/main/java/com/dc/datachange/core/exchange/strategy/RunningMsgStrategy.java → src/main/java/com/dc/datachange/core/exchange/strategy/GeneralDataStrategy.java

@@ -15,7 +15,7 @@ import java.util.Map;
 
 @Component
 @Slf4j
-public abstract class RunningMsgStrategy implements MessageStrategy {
+public abstract class GeneralDataStrategy implements MessageStrategy {
     @Autowired
     private DDSStatusManger stateManger;
     @Autowired
@@ -23,8 +23,7 @@ public abstract class RunningMsgStrategy implements MessageStrategy {
 
     @Override
     public boolean validate(ReceivedMessage message) {
-        if (stateManger.stateChecker(message) && message.isValidate()) {
-            log.info(message.getClass().toString());
+        if (stateManger.statusChecker(message) && message.isValidate()) {
             Integer from = Integer.valueOf(message.getFrom());
             Integer to = Integer.valueOf(message.getTo());
             Class<? extends Platform> clazz;

+ 63 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/GroupParamsCtrlStrategy.java

@@ -0,0 +1,63 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.connection.DDSStatusManger;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.GroupParamsCtrl;
+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.exception.UnknownMsgException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class GroupParamsCtrlStrategy implements MessageStrategy{
+    @Autowired
+    private DDSStatusManger stateManger;
+    @Autowired
+    private DataManager dataManager;
+
+    @Override
+    public GroupParamsCtrl generate(Message message) {
+        return new GroupParamsCtrl(message);
+    }
+
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        GroupParamsCtrl groupParamsCtrl=(GroupParamsCtrl) message;
+        if(stateManger.statusChecker(groupParamsCtrl)){
+            Map<Integer, InterferPlatform> InterferMap = dataManager.getMap(InterferPlatform.class);
+            Map<Integer, RadarPlatform> radarMap = dataManager.getMap(RadarPlatform.class);
+            Integer id = groupParamsCtrl.getParams().getId();
+            if(InterferMap.containsKey(id) || radarMap.containsKey(id))
+                return groupParamsCtrl.isValidate();
+        }
+        return false;
+    }
+
+    @Override
+    public void invoke(ReceivedMessage message) {
+        GroupParamsCtrl groupParamsCtrl = (GroupParamsCtrl) message;
+        Integer id = groupParamsCtrl.getParams().getId();
+        Map<Integer, InterferPlatform> InterferMap = dataManager.getMap(InterferPlatform.class);
+        Map<Integer, RadarPlatform> radarMap = dataManager.getMap(RadarPlatform.class);
+        if(InterferMap.containsKey(id)){
+            InterferPlatform data = dataManager.getData(InterferPlatform.class, id);
+            data.setParams(groupParamsCtrl.getParams());
+        }else if(radarMap.containsKey(id)){
+            RadarPlatform data = dataManager.getData(RadarPlatform.class,id);
+            data.setParams(groupParamsCtrl.getParams());
+        }else {
+            throw new UnknownMsgException();
+        }
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.GROUP_PARAMS_CTRL;
+    }
+}

+ 40 - 0
src/main/java/com/dc/datachange/core/exchange/strategy/GroupParamsReqStrategy.java

@@ -0,0 +1,40 @@
+package com.dc.datachange.core.exchange.strategy;
+
+import Messenger.Message;
+import com.dc.datachange.core.common.MsgConstants;
+import com.dc.datachange.core.connection.DDSStatusManger;
+import com.dc.datachange.core.entity.message.ReceivedMessage;
+import com.dc.datachange.core.entity.message.receivedMessage.GroupParamsReq;
+import com.dc.datachange.core.exchange.SendExecutor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class GroupParamsReqStrategy implements MessageStrategy{
+    @Autowired
+    private DDSStatusManger statusManager;
+    @Autowired
+    private SendExecutor sendExecutor;
+    @Autowired
+    private GroupParamsReq groupParamsReq;
+
+    @Override
+    public GroupParamsReq generate(Message message) {
+        return groupParamsReq;
+    }
+
+    @Override
+    public boolean validate(ReceivedMessage message) {
+        return statusManager.statusChecker(message);
+    }
+
+    @Override
+    public void invoke(ReceivedMessage message) {
+        sendExecutor.sendDDS(message);
+    }
+
+    @Override
+    public String getMsgType() {
+        return MsgConstants.GROUP_PARAMS_REQ;
+    }
+}

+ 20 - 3
src/main/java/com/dc/datachange/core/exchange/strategy/InitialMsgStrategy.java

@@ -5,12 +5,16 @@ import com.dc.datachange.core.common.MsgConstants;
 import com.dc.datachange.core.connection.DDSStatusManger;
 import com.dc.datachange.core.entity.message.ReceivedMessage;
 import com.dc.datachange.core.entity.message.receivedMessage.InitialMessage;
+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.core.exchange.SendExecutor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 @Component
 @Slf4j
 public class InitialMsgStrategy implements MessageStrategy {
@@ -29,7 +33,7 @@ public class InitialMsgStrategy implements MessageStrategy {
     @Override
     public boolean validate(ReceivedMessage message) {
         InitialMessage initialMessage = (InitialMessage) message;
-        if (stateManger.stateChecker(initialMessage)) {
+        if (stateManger.statusChecker(initialMessage)) {
             return initialMessage.isValidate();
         }
         return false;
@@ -41,8 +45,21 @@ public class InitialMsgStrategy implements MessageStrategy {
         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));
+        List<RadarPlatform> radarPlatforms=initialMessage.getRadarPlats();
+        List<InterferPlatform> interferPlatforms = initialMessage.getInterPlats();
+
+        radarPlatforms.forEach(x->{
+            dataManager.addData(x.getId(),x);
+            if(x.getIsPhysical().equals("2")){
+                dataManager.addPhysicalRadarPlat(x);
+            }
+        });
+        interferPlatforms.forEach(x->{
+            dataManager.addData(x.getId(),x);
+            if(x.getIsPhysical().equals("2")){
+                dataManager.addPhysicalInterferPlat(x);
+            }
+        });
     }
 
     @Override

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

@@ -26,7 +26,7 @@ public class NetGroupReqStrategy implements MessageStrategy {
     @Override
     public boolean validate(ReceivedMessage message) {
         NetGroupReq netGroupReq=(NetGroupReq) message;
-        if(stateManger.stateChecker(netGroupReq)){
+        if(stateManger.statusChecker(netGroupReq)){
             return netGroupReq.isValidate();
         }
         return false;

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

@@ -7,7 +7,7 @@ import com.dc.datachange.core.entity.message.receivedMessage.RadarPulseMsg;
 import org.springframework.stereotype.Component;
 
 @Component
-public class RadarPulseStrategy extends RunningMsgStrategy {
+public class RadarPulseStrategy extends GeneralDataStrategy {
 
     @Override
     public ReceivedMessage generate(Message message) {

+ 11 - 0
src/main/java/com/dc/datachange/remote/RequestData.java

@@ -0,0 +1,11 @@
+package com.dc.datachange.remote;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class RequestData {
+    private String jamming_policy;
+    private String anti_jamming_policy;
+}

+ 8 - 0
src/main/java/com/dc/datachange/remote/SDRClient.java

@@ -2,6 +2,8 @@ package com.dc.datachange.remote;
 
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 import java.util.Map;
@@ -10,4 +12,10 @@ import java.util.Map;
 public interface SDRClient {
     @GetMapping("/api/sdk/send")
     Map<String, List<Integer>> send();
+    @GetMapping("/api/sdk/status")
+    Map<String ,Object> status();
+    @GetMapping("/api/sdk/initialize")
+    Map<String,Object> initialize();
+    @PostMapping("/api/sdk/data")
+    Map<String,Object> getData(@RequestBody RequestData requestData);
 }

+ 43 - 7
src/main/java/com/dc/datachange/remote/SDRController.java

@@ -1,22 +1,58 @@
 package com.dc.datachange.remote;
 
+import com.dc.datachange.core.common.DefaultPlatParams;
+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.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.RestController;
 
+import java.util.Map;
+
 @RestController
+@Slf4j
 @RequestMapping("/SDR")
 public class SDRController {
-    private final SDRClient SDRClient;
-
     @Autowired
-    public SDRController(SDRClient SDRClient) {
-        this.SDRClient = SDRClient;
+    private SDRManager sdrManager;
+    @Autowired
+    private DataManager dataManager;
+
+    @GetMapping("/info")
+    public R info(){
+        return R.ok().put("data",sdrManager.getInfo());
+    }
+    @GetMapping("/initialize")
+    public R initialize(){
+        return sdrManager.initialize();
     }
 
-    @GetMapping("/send")
-    public String Send(){
-        return SDRClient.send().toString();
+    @GetMapping("/getInfo")
+    public R getRadarInfo(){
+        try{
+            RadarPlatform radarPlatform = dataManager.getPhysicalRadarPlat();
+            Map<String,String > radarInfo= (Map<String, String>) DefaultPlatParams.radarMap.get(radarPlatform.getStrategy());
+            radarInfo.put("strategy",radarPlatform.getStrategy());
+
+            InterferPlatform interferPlatform = dataManager.getPhysicalInterferPlat();
+            Map<String ,String > interferInfo= (Map<String, String>) DefaultPlatParams.interferMap.get(interferPlatform.getStrategy());
+            interferInfo.put("strategy",interferPlatform.getStrategy());
+
+            return R.ok().put("radarInfo",radarInfo).put("interferInfo",interferInfo);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            e.printStackTrace();
+            return R.ok().put("radarInfo",null).put("interferInfo",null);
+        }
     }
+
+    @GetMapping("/getData")
+    public R getData(){
+        return R.ok().put("data",sdrManager.getData());
+    }
+
 }

+ 107 - 0
src/main/java/com/dc/datachange/remote/SDRManager.java

@@ -0,0 +1,107 @@
+package com.dc.datachange.remote;
+
+import com.dc.datachange.core.exchange.DataManager;
+import com.dc.datachange.core.exchange.SendExecutor;
+import com.dc.datachange.exception.InitialFailedException;
+import com.dc.datachange.utils.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class SDRManager {
+    @Autowired
+    private SDRClient SDRClient;
+    @Autowired
+    private SendExecutor sendExecutor;
+    @Autowired
+    private DiscoveryClient discoveryClient;
+    @Autowired
+    private DataManager dataManager;
+    private String SDRStatus="离线";
+    private String ServiceStatus="无法提供";
+    @Value("${remote.client-name}")
+    private String clientName;
+
+    public String getSDRStatus(){
+        return this.SDRStatus;
+    }
+    public String getServiceStatus(){
+        return this.ServiceStatus;
+    }
+
+    @Async
+    @Bean
+    @Scheduled(fixedDelay = 6000)
+    public void checkRemoteOnline(){
+        try {
+            List<ServiceInstance> instances = discoveryClient.getInstances(clientName);
+            if(instances!=null && !instances.isEmpty()) {
+                this.SDRStatus = "上线";
+                try {
+                    checkStatus();
+                } catch (Exception e) {
+                    log.error(e.getMessage());
+                }
+            }
+            else {
+                this.SDRStatus="离线";
+                this.ServiceStatus="无法提供";
+            }
+        }catch (RuntimeException e){
+            log.error(e.getMessage());
+            this.SDRStatus="离线";
+            this.ServiceStatus="无法提供";
+        }finally {
+            sendExecutor.sendSDRStatusMsg();
+        }
+    }
+
+    public Map<String, String> getInfo() {
+        Map<String, String> o = new HashMap<>();
+        o.put("onlineStatus",SDRStatus);
+        o.put("serviceStatus",ServiceStatus);
+        return o;
+    }
+
+    private void checkStatus(){
+        Map<String, Object> statusData = SDRClient.status();
+        Map<String,Object> data = (Map<String, Object>) statusData.get("data");
+        Integer status = (Integer) data.get("status");
+        if(status == 0){
+            ServiceStatus="无法提供";
+            throw new InitialFailedException((String)statusData.get("message")+ data.get("Error"));
+        }
+        else {
+            ServiceStatus="正常提供";
+        }
+    }
+
+    public R initialize(){
+        Map<String, Object> initialize = SDRClient.status();
+        Map<String,Object> data = (Map<String, Object>) initialize.get("data");
+        Integer status = (Integer) data.get("status");
+        if(status == 1){
+            return R.ok("启动成功");
+        }else {
+            return R.error((String)initialize.get("message")+ data.get("Error"));
+        }
+    }
+
+    public Map<String,Object> getData(){
+        return (Map<String, Object>) SDRClient.getData(new RequestData(dataManager.getPhysicalInterferPlat().getStrategy(),
+                dataManager.getPhysicalRadarPlat().getStrategy())).get("data");
+    }
+
+}

+ 8 - 3
src/main/java/com/dc/datachange/utils/MessageUtils.java

@@ -6,6 +6,7 @@ import com.dc.datachange.core.common.PlatConstants;
 import com.dc.datachange.core.entity.graph.EdgeVo;
 import com.dc.datachange.core.entity.networkGroup.NetworkGroup;
 import com.dc.datachange.core.entity.platformInfo.Platform;
+import com.dc.datachange.core.entity.platformInfo.PlatformParams;
 
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
@@ -14,7 +15,7 @@ import java.util.List;
 import java.util.Set;
 
 public class MessageUtils {
-    public static String getLineStr(NetworkGroup networkGroup){
+    public static String getLineFromNetworkGroup(NetworkGroup networkGroup){
         Set<Platform> platformSet = networkGroup.getPlatformSet();
         StringBuilder stringBuilder=new StringBuilder();
         stringBuilder.append(networkGroup.getId()).append(" ")
@@ -24,6 +25,10 @@ public class MessageUtils {
         }
         return stringBuilder.toString();
     }
+    public static String GetLineFromPlatFrom(Platform platform){
+        PlatformParams params =platform.getParams();
+        return params.toString();
+    }
 
     public static void getEdgesFromPlatform(List<EdgeVo> edgeList, Set<Platform> platformSet) {
         List<Platform> list = new ArrayList<>(platformSet);
@@ -41,8 +46,8 @@ public class MessageUtils {
 
     public static String printMessage(Message message){
         return "\n"
-                +"Message: subject    = " + MsgConstants.MSG_MAP.get(message.subject)+" "+message.subject+"\n"
-                +"         from       = " + PlatConstants.PLAT_MAP.get(message.from) + " "+ message.from+"\n"
+                +"Message: subject    = " + MsgConstants.MSG_MAP.get(message.subject)+"|"+message.subject+"\n"
+                +"         from       = " + PlatConstants.PLAT_MAP.get(message.from) + "|"+ message.from+"\n"
                 +"         text       = " + message.text+"\n";
     }
 }

+ 14 - 2
src/main/resources/application.yml

@@ -13,12 +13,15 @@ server:
   port: 8081
   #  定时组件的配置,一般不改动
 
+remote:
+  client-name: SDR
+
 dds:
   connection:
   #  不知道
     DCPSBit: 0
   #  DDS实例位置
-    local: true
+    local: false
     DCPSConfigFile: D:\rocket\OpenDDS-3.16\java\tests\messenger\tcp.ini
     DCPSDefaultDiscovery: DEFAULT_REPO
     DCPSInfoRepo: corbaloc:iiop:10.195.84.22:12345/DCPSInfoRepo
@@ -28,9 +31,18 @@ dds:
     printMsgType:
       - "0" #错误消息
       - "1" #初始化消息,包含平台信息
+      - "11" #初始化应答
+      - "12" #初始化请求
       - "2" #导调控制信息
+      - "21" #导调应答
+#      - "3" #平台位置信息
+      - "4" #分组信息
       - "41" #分组请求
       - "5" #雷达脉冲信息
       - "6" #电子干扰信息
       - "7" #综合情报信息
-      - "8" #心跳
+#      - "8" #心跳
+      - "9" #平台参数单条数据
+      - "10" #平台参数集合数据
+      - "101" #平台参数集合请求
+      - "120" #半实物设备状态信息