浏览代码

半实物设备

Rgx 3 月之前
父节点
当前提交
bba1fec711

+ 27 - 0
src/main/java/com/example/backend/controller/RadarStatusController.java

@@ -317,4 +317,31 @@ public class RadarStatusController {
             throw new ServiceException("获取编队成员数据失败");
         }
     }
+
+    // 获取半实物信息
+    @GetMapping("/platform/{platformId}/getIsReal")
+    public ResponseEntity<String> getIsReal(
+            @PathVariable @NotBlank String platformId) {
+        logger.info("获取平台 {} 的半实物信息", platformId);
+        try {
+            String s = radarStatusService.getIsReal(platformId);
+            return ResponseEntity.ok(s);
+        } catch (Exception e) {
+            logger.error("获取半实物信息失败", e);
+            throw new ServiceException("获取半实物信息失败");
+        }
+    }
+
+    @GetMapping("/platform/{platformId}/getSdrStatusByID")
+    public ResponseEntity<sdrStatus> getSdrStatusByID(
+            @PathVariable @NotBlank String platformId) {
+        logger.info("获取平台 {} 的sdr状态", platformId);
+        try {
+            sdrStatus s = radarStatusService.getSdrStatusByID(platformId);
+            return ResponseEntity.ok(s);
+        } catch (Exception e) {
+            logger.error("获取sdr状态失败", e);
+            throw new ServiceException("获取sdr状态失败");
+        }
+    }
 }

+ 25 - 0
src/main/java/com/example/backend/dds/DataReaderListenerImpl.java

@@ -10,6 +10,7 @@ import OpenDDS.DCPS.*;
 import OpenDDS.DCPS.transport.*;
 import com.example.backend.model.MessageStatus;
 import com.example.backend.model.Position;
+import com.example.backend.model.sdrStatus;
 import org.omg.CORBA.StringSeqHolder;
 import Messenger.*;
 
@@ -37,6 +38,11 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
     public final Map<String, List<com.example.backend.model.Message>> messageList = new ConcurrentHashMap<>();
     public Map<String, MessageStatus> messageStatusMap = new ConcurrentHashMap<>();
 
+    public int isCoopParamsInit = 0;
+    public String realJamID = "";
+    public String realRadarID = "";
+    public Map<String, sdrStatus> sdrStatueMap = new ConcurrentHashMap<>();
+
     private void initialize_counts() {
         if (counts.size() > 0) {
           return;
@@ -119,6 +125,7 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
                         p.coopID = s[1];
                         p.jaming = s[2];
                         p.isReal = s[3];
+                        if(s[3].equals("2"))realJamID = s[0];
                         p.x = Double.parseDouble(s[4]);
                         p.y = Double.parseDouble(s[5]);
                         p.z = Double.parseDouble(s[6]);
@@ -132,6 +139,7 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
                         p.collaborationNumber = s[1];
                         p.interferenceStrategy = s[2];
                         p.isReal = s[3];
+                        if(s[3].equals("2"))realRadarID = s[0];
                         p.x = Double.parseDouble(s[4]);
                         p.y = Double.parseDouble(s[5]);
                         p.z = Double.parseDouble(s[6]);
@@ -222,6 +230,7 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
                 }
                 if(mh.value.subject.equals("10")){
                     // 收到分组状态参数初始化
+                    isCoopParamsInit = 1;
                     String message = mh.value.text;
                     String[] messageList = message.split("\n");
                     String[] countList = messageList[0].split(" ");
@@ -236,6 +245,18 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
                         messageStatusMap.put(platformID,m);
                     }
                 }
+                if(mh.value.subject.equals("120")){
+                    //收到sdr状态消息
+                    String message = mh.value.text;
+                    String[] messageList = message.split(" ");
+                    sdrStatus s = new sdrStatus();
+                    s.platformStatus = messageList[0];
+                    s.serviceStatus = messageList[1];
+                    s.jamingPolicy = messageList[2];
+                    s.investingPolicy = messageList[3];
+                    sdrStatueMap.put(realJamID,s);
+                    sdrStatueMap.put(realRadarID,s);
+                }
                 if (invalid_count == true) {
                     System.out.println("ERROR: Invalid message.count (" + mh.value.count + ")");
                 }
@@ -306,6 +327,10 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
         this.isInit = 0;
         this.isRecall = 0;
         this.isTeam = 0;
+        this.isCoopParamsInit = 0;
+        this.sdrStatueMap.clear();
+        realJamID = "";
+        realRadarID = "";
     }
 
     public void report_validity() {

+ 42 - 0
src/main/java/com/example/backend/model/sdrStatus.java

@@ -0,0 +1,42 @@
+package com.example.backend.model;
+
+public class sdrStatus {
+    public String platformStatus;
+    public String serviceStatus;
+    public String jamingPolicy;
+
+    public String getPlatformStatus() {
+        return platformStatus;
+    }
+
+    public void setPlatformStatus(String platformStatus) {
+        this.platformStatus = platformStatus;
+    }
+
+    public String getServiceStatus() {
+        return serviceStatus;
+    }
+
+    public void setServiceStatus(String serviceStatus) {
+        this.serviceStatus = serviceStatus;
+    }
+
+    public String getJamingPolicy() {
+        return jamingPolicy;
+    }
+
+    public void setJamingPolicy(String jamingPolicy) {
+        this.jamingPolicy = jamingPolicy;
+    }
+
+    public String getInvestingPolicy() {
+        return investingPolicy;
+    }
+
+    public void setInvestingPolicy(String investingPolicy) {
+        this.investingPolicy = investingPolicy;
+    }
+
+    public String investingPolicy;
+
+}

+ 49 - 9
src/main/java/com/example/backend/service/RadarStatusService.java

@@ -33,11 +33,11 @@ public class RadarStatusService {
     private final Map<String, List<ecmParams>> ecmParamsList = new ConcurrentHashMap<>();
     private final Map<String, ecmStatus> ecmStatusList = new ConcurrentHashMap<>();
 
-    @Autowired
-    public TestSubscriber subscriber;
 
-    @Autowired
-    public TestPublisher publisher;
+    public final TestSubscriber subscriber = new TestSubscriber();
+
+
+    public final TestPublisher publisher = new TestPublisher();
 
     
     // 设置队列最大容量
@@ -113,6 +113,19 @@ public class RadarStatusService {
 
                     } catch (Exception e) {
 
+                    }
+                }
+                if(subscriber.listener.isTeam==1&&subscriber.listener.isInit==1&&subscriber.listener.isCoopParamsInit==0){
+                    //未初始化参数 发送请求
+                    try {
+                        publisher.publishMessage(
+                                "5",
+                                "101",
+                                "这是分组参数初始化请求"
+                        );
+
+                    } catch (Exception e) {
+
                     }
                 }
             }
@@ -142,6 +155,22 @@ public class RadarStatusService {
         MessageStatus m = new MessageStatus();
         messageStatusMap.put(platformId,m);
         ecmParamsList.put(platformId,new ArrayList<>());
+
+        sdrStatus s = new sdrStatus();
+        if(platformId.equals(subscriber.listener.realJamID)||platformId.equals(subscriber.listener.realRadarID)){
+            s.platformStatus = "离线";
+            s.serviceStatus = "无法提供";
+            s.jamingPolicy = "无";
+            s.investingPolicy = "无";
+            subscriber.listener.sdrStatueMap.put(platformId,s);
+        }
+        else{
+            s.platformStatus = "此设备并未采用半实物设备模拟";
+            s.serviceStatus = "此设备并未采用半实物设备模拟";
+            s.jamingPolicy = "此设备并未采用半实物设备模拟";
+            s.investingPolicy = "此设备并未采用半实物设备模拟";
+            subscriber.listener.sdrStatueMap.put(platformId,s);
+        }
     }
 
     public List<Map<String, Object>> getRadarStatus(String platformId) {
@@ -150,6 +179,13 @@ public class RadarStatusService {
         return convertToKeyValueList(status);
     }
 
+    public String getIsReal(String platformId) {
+        logger.info("获取平台 {} 的是否半实物", platformId);
+        Position p = subscriber.listener.positionMap.get(platformId);
+        String s = p.isReal.equals("2") ? "是" : "否";
+        return s;
+    }
+
     public RadarStatus updateRadarStatus(String platformId, RadarStatus updatedStatus) {
         if (updatedStatus == null) {
             logger.error("尝试更新空的雷达状态");
@@ -360,13 +396,13 @@ public class RadarStatusService {
     //获取消息数据 链路状态相关方法
     public MessageStatus getMsgStatusById(String PlatformID){
 
-        return messageStatusMap.get(PlatformID);
+        return subscriber.listener.messageStatusMap.get(PlatformID);
     }
 
     public void setMsgStatusById(String PlatformID,MessageStatus m){
         // messageStatusMap.put(PlatformID,m);
         subscriber.listener.messageStatusMap.put(PlatformID,m);
-        publisher.publishMessage("5","9",m.startUp+" "+m.quite+" "+m.mode);
+        publisher.publishMessage("5","9",PlatformID+" "+m.startUp+" "+m.quite+" "+m.mode);
 
     }
 
@@ -454,6 +490,10 @@ public class RadarStatusService {
        ecmParamsList.put(platformID,list);
     }
 
+    public sdrStatus getSdrStatusByID(String platformID){
+        return subscriber.listener.sdrStatueMap.get(platformID);
+    }
+
     //编队成员方法
     public List<String> getTeamMemberByID(String platformID) {
         for(List<String> list : subscriber.listener.coopTeamMap.values()){
@@ -532,10 +572,10 @@ public class RadarStatusService {
     private void checkTargets(){
         platformTargetsMap.clear();
         //雷达循环
-        for(String missile : subscriber.listener.radarPositionMap.keySet()){
+        for(String radar : subscriber.listener.radarPositionMap.keySet()){
             Queue<RadarTarget> queue = new ConcurrentLinkedQueue<>();
             //侦察循环
-            for(String radar : subscriber.listener.positionMap.keySet()){
+            for(String missile : subscriber.listener.positionMap.keySet()){
                 //侦察
                 Position thisMissile = subscriber.listener.positionMap.get(missile);
                 //雷达
@@ -562,7 +602,7 @@ public class RadarStatusService {
                     queue.add(target);
                 }
             }
-            platformTargetsMap.put(missile,queue);
+            platformTargetsMap.put(radar,queue);
         }
     }
 }