Browse Source

2025 4 17 add sdrStatus control

xyh 3 months ago
parent
commit
48d55fd9fb

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

@@ -169,6 +169,20 @@ public class RadarStatusController {
         }
     }
 
+    //获取半实物信息
+    @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("获取半实物信息失败");
+        }
+    }
+
     @PostMapping("/platform/{platformId}/setMsgStatus")
     public ResponseEntity<Void> setMsgStatus(
             @PathVariable @NotBlank String platformId,
@@ -317,4 +331,17 @@ public class RadarStatusController {
             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,8 @@ import OpenDDS.DCPS.*;
 import OpenDDS.DCPS.transport.*;
 import com.example.backend.model.MessageStatus;
 import com.example.backend.model.Position;
+import com.example.backend.model.ecmStatus;
+import com.example.backend.model.sdrStatus;
 import org.omg.CORBA.StringSeqHolder;
 import Messenger.*;
 
@@ -28,6 +30,9 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
     public int isRecall = 0;
     public int isTeam = 0;
     public int versionID = 1;
+    public int isCoopParamsInit = 0;
+    public String realJamID = "";
+    public String realRadarID = "";
     public String text = "";
     private static final int N_EXPECTED = 40;
     private ArrayList<Boolean> counts = new ArrayList<Boolean>(N_EXPECTED);
@@ -36,6 +41,7 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
     public Map<String, List<String>> coopTeamMap = new ConcurrentHashMap<>();
     public final Map<String, List<com.example.backend.model.Message>> messageList = new ConcurrentHashMap<>();
     public Map<String, MessageStatus> messageStatusMap = new ConcurrentHashMap<>();
+    public Map<String, sdrStatus> sdrStatueMap = new ConcurrentHashMap<>();
 
     private void initialize_counts() {
         if (counts.size() > 0) {
@@ -118,6 +124,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]);
@@ -129,6 +136,7 @@ public class DataReaderListenerImpl extends DDS._DataReaderListenerLocalBase {
                         p.coopID = "未知";
                         p.jaming = "未知";
                         p.isReal = "未知";
+                        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]);
@@ -221,6 +229,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(" ");
@@ -234,6 +243,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 + ")");
                 }
@@ -304,6 +325,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;
+
+}

+ 41 - 1
src/main/java/com/example/backend/service/RadarStatusService.java

@@ -109,6 +109,19 @@ public class RadarStatusService {
 
                     }
                 }
+            if(subscriber.listener.isTeam==1&&subscriber.listener.isInit==1&&subscriber.listener.isCoopParamsInit==0){
+                //未初始化参数 发送请求
+                try {
+                    publisher.publishMessage(
+                            "2",
+                            "101",
+                            "这是分组参数初始化请求"
+                    );
+
+                } catch (Exception e) {
+
+                }
+            }
             }
         }
     }
@@ -142,6 +155,22 @@ public class RadarStatusService {
         e.setOpenTime("无");
         e.setJamingPolicy(subscriber.listener.positionMap.get(platformId).jaming);
         ecmStatusList.put(platformId,e);
+        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("尝试更新空的雷达状态");
@@ -364,7 +400,7 @@ public class RadarStatusService {
 
     public void setMsgStatusById(String PlatformID,MessageStatus m){
         subscriber.listener.messageStatusMap.put(PlatformID,m);
-        publisher.publishMessage("2","9",m.startUp+" "+m.quite+" "+m.mode);
+        publisher.publishMessage("2","9",PlatformID+" "+m.startUp+" "+m.quite+" "+m.mode);
     }
 
     public List<Message> getMsgListById(String PlatformID){
@@ -463,6 +499,10 @@ public class RadarStatusService {
         return list;
     }
 
+    public sdrStatus getSdrStatusByID(String platformID){
+        return subscriber.listener.sdrStatueMap.get(platformID);
+    }
+
     // 初始化默认目标数据
     private List<RadarTarget> initDefaultTargets() {
         List<RadarTarget> defaultTargets = new ArrayList<>();