zlSun 3 місяців тому
батько
коміт
c0dcd34b4e

+ 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);
+    }};
+}

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

@@ -21,6 +21,7 @@ public class MsgConstants {
     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 {

+ 9 - 0
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();
     }

+ 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;
+    }
+}

+ 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;
     }
 
 

+ 9 - 1
src/main/java/com/dc/datachange/core/exchange/SendExecutor.java

@@ -21,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){
@@ -35,7 +37,10 @@ public class SendExecutor {
         }
     }
     public void sendDDS(SelfMsg message){
-        ddsPublisher.sendMessage(message.toMessage());
+        Message DDSMessage = message.toMessage();
+        if(DDSMessage !=null){
+            ddsPublisher.sendMessage(DDSMessage);
+        }
     }
 
     public void sendHeartBeat(){
@@ -47,4 +52,7 @@ public class SendExecutor {
     public void sendNetGroupMsg(){
         sendDDS(netGroupMsg);
     }
+    public void sendSDRStatusMsg(){
+        sendDDS(SDRStatusMsg);
+    }
 }

+ 19 - 2
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 {
@@ -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

+ 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");
+    }
+
+}

+ 4 - 0
src/main/resources/application.yml

@@ -13,6 +13,9 @@ server:
   port: 8081
   #  定时组件的配置,一般不改动
 
+remote:
+  client-name: SDR
+
 dds:
   connection:
   #  不知道
@@ -42,3 +45,4 @@ dds:
       - "9" #平台参数单条数据
       - "10" #平台参数集合数据
       - "101" #平台参数集合请求
+      - "120" #半实物设备状态信息