diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java new file mode 100644 index 0000000..1acdc66 --- /dev/null +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.system.utils; + +import java.util.Locale; + +/** + * @author a203 + */ +public class ByteUtils { + public static String bytesToHexString(byte[] data) { + int[] unsignedBytes = bytesToUnsigned(data); + StringBuilder builder = new StringBuilder(); + for (int datum : unsignedBytes) { + String hex = Integer.toHexString(datum); + if (hex.length() < 2) { + builder.append(0); + } + builder.append(hex); + } + return builder.toString().toUpperCase(Locale.ROOT); + } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int[] bytesToUnsigned(byte[] data) { + int[] array = new int[data.length]; + for (int i = 0; i < data.length; i++) { + byte datum = data[i]; + int temp; + if (datum < 0) { + temp = 0xFF & datum; + } else { + temp = datum; + } + array[i] = temp; + } + return array; + } +} diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java new file mode 100644 index 0000000..1acdc66 --- /dev/null +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.system.utils; + +import java.util.Locale; + +/** + * @author a203 + */ +public class ByteUtils { + public static String bytesToHexString(byte[] data) { + int[] unsignedBytes = bytesToUnsigned(data); + StringBuilder builder = new StringBuilder(); + for (int datum : unsignedBytes) { + String hex = Integer.toHexString(datum); + if (hex.length() < 2) { + builder.append(0); + } + builder.append(hex); + } + return builder.toString().toUpperCase(Locale.ROOT); + } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int[] bytesToUnsigned(byte[] data) { + int[] array = new int[data.length]; + for (int i = 0; i < data.length; i++) { + byte datum = data[i]; + int temp; + if (datum < 0) { + temp = 0xFF & datum; + } else { + temp = datum; + } + array[i] = temp; + } + return array; + } +} diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java index ea22e0b..4f53f43 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java @@ -9,6 +9,7 @@ */ public class CommandManager { private static final String CMD_HEADER = "*AT^IOTDATA="; + private static final String CMD_SIGNAL = "*XF,S5,#"; /** * *AT^IOTDATA=21,"^$CC1,11,LOGIN,d, D$^" @@ -21,4 +22,11 @@ String cmd = CMD_HEADER + data.length() + "," + "\"" + data + "\""; return cmd.getBytes(StandardCharsets.UTF_8); } + + /** + * 获取天通卫星信号指令 + */ + public static byte[] createSignalCmd() { + return CMD_SIGNAL.getBytes(StandardCharsets.UTF_8); + } } diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java new file mode 100644 index 0000000..1acdc66 --- /dev/null +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.system.utils; + +import java.util.Locale; + +/** + * @author a203 + */ +public class ByteUtils { + public static String bytesToHexString(byte[] data) { + int[] unsignedBytes = bytesToUnsigned(data); + StringBuilder builder = new StringBuilder(); + for (int datum : unsignedBytes) { + String hex = Integer.toHexString(datum); + if (hex.length() < 2) { + builder.append(0); + } + builder.append(hex); + } + return builder.toString().toUpperCase(Locale.ROOT); + } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int[] bytesToUnsigned(byte[] data) { + int[] array = new int[data.length]; + for (int i = 0; i < data.length; i++) { + byte datum = data[i]; + int temp; + if (datum < 0) { + temp = 0xFF & datum; + } else { + temp = datum; + } + array[i] = temp; + } + return array; + } +} diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java index ea22e0b..4f53f43 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java @@ -9,6 +9,7 @@ */ public class CommandManager { private static final String CMD_HEADER = "*AT^IOTDATA="; + private static final String CMD_SIGNAL = "*XF,S5,#"; /** * *AT^IOTDATA=21,"^$CC1,11,LOGIN,d, D$^" @@ -21,4 +22,11 @@ String cmd = CMD_HEADER + data.length() + "," + "\"" + data + "\""; return cmd.getBytes(StandardCharsets.UTF_8); } + + /** + * 获取天通卫星信号指令 + */ + public static byte[] createSignalCmd() { + return CMD_SIGNAL.getBytes(StandardCharsets.UTF_8); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java index c8eecd8..84c3e72 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -16,5 +16,12 @@ public static final int MIN_AGE = 1; public static final int BAUD_RATE = 115200; - public static final String USB_SERIAL = "/dev/tty.usbserial-1120"; + /** + * 天通客户端串口名 + * */ + public static final String USB_CLIENT_SERIAL = "/dev/tty.usbserial-FTAQ6T45"; + /** + * 天通指挥机串口名 + * */ + public static final String USB_SERVER_SERIAL = "/dev/tty.usbserial-1120"; } diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java new file mode 100644 index 0000000..1acdc66 --- /dev/null +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.system.utils; + +import java.util.Locale; + +/** + * @author a203 + */ +public class ByteUtils { + public static String bytesToHexString(byte[] data) { + int[] unsignedBytes = bytesToUnsigned(data); + StringBuilder builder = new StringBuilder(); + for (int datum : unsignedBytes) { + String hex = Integer.toHexString(datum); + if (hex.length() < 2) { + builder.append(0); + } + builder.append(hex); + } + return builder.toString().toUpperCase(Locale.ROOT); + } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int[] bytesToUnsigned(byte[] data) { + int[] array = new int[data.length]; + for (int i = 0; i < data.length; i++) { + byte datum = data[i]; + int temp; + if (datum < 0) { + temp = 0xFF & datum; + } else { + temp = datum; + } + array[i] = temp; + } + return array; + } +} diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java index ea22e0b..4f53f43 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java @@ -9,6 +9,7 @@ */ public class CommandManager { private static final String CMD_HEADER = "*AT^IOTDATA="; + private static final String CMD_SIGNAL = "*XF,S5,#"; /** * *AT^IOTDATA=21,"^$CC1,11,LOGIN,d, D$^" @@ -21,4 +22,11 @@ String cmd = CMD_HEADER + data.length() + "," + "\"" + data + "\""; return cmd.getBytes(StandardCharsets.UTF_8); } + + /** + * 获取天通卫星信号指令 + */ + public static byte[] createSignalCmd() { + return CMD_SIGNAL.getBytes(StandardCharsets.UTF_8); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java index c8eecd8..84c3e72 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -16,5 +16,12 @@ public static final int MIN_AGE = 1; public static final int BAUD_RATE = 115200; - public static final String USB_SERIAL = "/dev/tty.usbserial-1120"; + /** + * 天通客户端串口名 + * */ + public static final String USB_CLIENT_SERIAL = "/dev/tty.usbserial-FTAQ6T45"; + /** + * 天通指挥机串口名 + * */ + public static final String USB_SERVER_SERIAL = "/dev/tty.usbserial-1120"; } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java index b623041..e0b6af3 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java @@ -3,9 +3,9 @@ import gnu.io.NRSerialPort; import lombok.extern.slf4j.Slf4j; -import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; /** @@ -20,7 +20,7 @@ * @param order 待发送数据 */ public static void sendToPort(NRSerialPort serialPort, byte[] order) { - log.info("往串口发送数据===>" + Arrays.toString(order)); + log.info("串口发送数据 ===> " + Arrays.toString(order)); DataOutputStream outs = null; try { outs = new DataOutputStream(serialPort.getOutputStream()); @@ -44,24 +44,33 @@ * * @param serialPort 串口对象 */ - public static String readFromPort(NRSerialPort serialPort) { - DataInputStream inputStream = new DataInputStream(serialPort.getInputStream()); - String data = ""; + public static byte[] readFromPort(NRSerialPort serialPort) { + InputStream inputStream = null; + byte[] buffer = {}; try { - while (inputStream.available() > 0) { - char read = (char) inputStream.read(); - data = data.concat(Character.toString(read)); + inputStream = serialPort.getInputStream(); + //获得数据长度 + int sum = inputStream.available(); + while (sum != 0) { + //如果缓冲区读取结束,且数组长度为7(防止串口数据发送缓慢读取到空数据),跳出循环 + if (inputStream.available() > 0) { + buffer = new byte[sum]; + inputStream.read(buffer); + sum = inputStream.available(); + } } - return data; + return buffer; } catch (IOException e) { e.printStackTrace(); } finally { try { - inputStream.close(); + if (inputStream != null) { + inputStream.close(); + } } catch (IOException e) { e.printStackTrace(); } } - return data; + return buffer; } } diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java new file mode 100644 index 0000000..1acdc66 --- /dev/null +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.system.utils; + +import java.util.Locale; + +/** + * @author a203 + */ +public class ByteUtils { + public static String bytesToHexString(byte[] data) { + int[] unsignedBytes = bytesToUnsigned(data); + StringBuilder builder = new StringBuilder(); + for (int datum : unsignedBytes) { + String hex = Integer.toHexString(datum); + if (hex.length() < 2) { + builder.append(0); + } + builder.append(hex); + } + return builder.toString().toUpperCase(Locale.ROOT); + } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int[] bytesToUnsigned(byte[] data) { + int[] array = new int[data.length]; + for (int i = 0; i < data.length; i++) { + byte datum = data[i]; + int temp; + if (datum < 0) { + temp = 0xFF & datum; + } else { + temp = datum; + } + array[i] = temp; + } + return array; + } +} diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java index ea22e0b..4f53f43 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java @@ -9,6 +9,7 @@ */ public class CommandManager { private static final String CMD_HEADER = "*AT^IOTDATA="; + private static final String CMD_SIGNAL = "*XF,S5,#"; /** * *AT^IOTDATA=21,"^$CC1,11,LOGIN,d, D$^" @@ -21,4 +22,11 @@ String cmd = CMD_HEADER + data.length() + "," + "\"" + data + "\""; return cmd.getBytes(StandardCharsets.UTF_8); } + + /** + * 获取天通卫星信号指令 + */ + public static byte[] createSignalCmd() { + return CMD_SIGNAL.getBytes(StandardCharsets.UTF_8); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java index c8eecd8..84c3e72 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -16,5 +16,12 @@ public static final int MIN_AGE = 1; public static final int BAUD_RATE = 115200; - public static final String USB_SERIAL = "/dev/tty.usbserial-1120"; + /** + * 天通客户端串口名 + * */ + public static final String USB_CLIENT_SERIAL = "/dev/tty.usbserial-FTAQ6T45"; + /** + * 天通指挥机串口名 + * */ + public static final String USB_SERVER_SERIAL = "/dev/tty.usbserial-1120"; } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java index b623041..e0b6af3 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java @@ -3,9 +3,9 @@ import gnu.io.NRSerialPort; import lombok.extern.slf4j.Slf4j; -import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; /** @@ -20,7 +20,7 @@ * @param order 待发送数据 */ public static void sendToPort(NRSerialPort serialPort, byte[] order) { - log.info("往串口发送数据===>" + Arrays.toString(order)); + log.info("串口发送数据 ===> " + Arrays.toString(order)); DataOutputStream outs = null; try { outs = new DataOutputStream(serialPort.getOutputStream()); @@ -44,24 +44,33 @@ * * @param serialPort 串口对象 */ - public static String readFromPort(NRSerialPort serialPort) { - DataInputStream inputStream = new DataInputStream(serialPort.getInputStream()); - String data = ""; + public static byte[] readFromPort(NRSerialPort serialPort) { + InputStream inputStream = null; + byte[] buffer = {}; try { - while (inputStream.available() > 0) { - char read = (char) inputStream.read(); - data = data.concat(Character.toString(read)); + inputStream = serialPort.getInputStream(); + //获得数据长度 + int sum = inputStream.available(); + while (sum != 0) { + //如果缓冲区读取结束,且数组长度为7(防止串口数据发送缓慢读取到空数据),跳出循环 + if (inputStream.available() > 0) { + buffer = new byte[sum]; + inputStream.read(buffer); + sum = inputStream.available(); + } } - return data; + return buffer; } catch (IOException e) { e.printStackTrace(); } finally { try { - inputStream.close(); + if (inputStream != null) { + inputStream.close(); + } } catch (IOException e) { e.printStackTrace(); } } - return data; + return buffer; } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java index 9bae1d5..5630f54 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java @@ -13,4 +13,9 @@ * @param msg 读取到的数据 */ void communicate(ChannelHandlerContext ctx, Object msg); + + /** + * 获取天通卫星信号强度接口 + */ + void obtainSignal(); } diff --git a/.gitignore b/.gitignore index 9e20bc1..347fe5b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/target/** logs/ *.iml +*.log diff --git a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java index 8396364..f21945c 100644 --- a/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java +++ b/casic-environment/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java @@ -3,6 +3,8 @@ import com.casic.missiles.modular.system.dto.remote.OceanDetailModel; import lombok.Data; +import java.text.DecimalFormat; + /** * @author a203 */ @@ -113,30 +115,35 @@ } public OceanDetailDTO(OceanDetailModel.DataBean data) { - this.temperature = data.getTemperature(); - this.altitude = data.getAltitude(); - this.pressure = data.getPressure(); - this.swellHeight = data.getSwellHeight(); - this.swellDir = data.getSwellDir(); - this.swellPrd = data.getSwellPrd(); - this.waveHeight = data.getWaveHeight(); - this.waveDir = data.getWaveDir(); - this.wavePrd = data.getWavePrd(); - this.speed = data.getSpeed(); - this.oceanDir = data.getOceanDir(); - this.windSpeed = data.getWindSpeed(); - this.windDir = data.getWindDir(); + this.temperature = formatValue(data.getTemperature()); + this.altitude = formatValue(data.getAltitude()); + this.pressure = formatValue(data.getPressure()); + this.swellHeight = formatValue(data.getSwellHeight()); + this.swellDir = formatValue(data.getSwellDir()); + this.swellPrd = formatValue(data.getSwellPrd()); + this.waveHeight = formatValue(data.getWaveHeight()); + this.waveDir = formatValue(data.getWaveDir()); + this.wavePrd = formatValue(data.getWavePrd()); + this.speed = formatValue(data.getSpeed()); + this.oceanDir = formatValue(data.getOceanDir()); + this.windSpeed = formatValue(data.getWindSpeed()); + this.windDir = formatValue(data.getWindDir()); OceanDetailModel.DataBean.ForecastBean forecast = data.getForecast(); PreviewBean bean = new PreviewBean(); if (forecast != null) { - bean.swellHeight = forecast.getSwellHeight(); - bean.swellDir = forecast.getSwellDir(); - bean.swellPrd = forecast.getSwellPrd(); - bean.waveHeight = forecast.getWaveHeight(); - bean.waveDir = forecast.getWaveDir(); - bean.wavePrd = forecast.getWavePrd(); + bean.swellHeight = formatValue(forecast.getSwellHeight()); + bean.swellDir = formatValue(forecast.getSwellDir()); + bean.swellPrd = formatValue(forecast.getSwellPrd()); + bean.waveHeight = formatValue(forecast.getWaveHeight()); + bean.waveDir = formatValue(forecast.getWaveDir()); + bean.wavePrd = formatValue(forecast.getWavePrd()); } this.forecast = bean; } + + private double formatValue(double value) { + DecimalFormat df = new DecimalFormat("#.00"); + return Double.parseDouble(df.format(value)); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java index a8b1579..55b0bfe 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java +++ b/casic-shelter/src/main/java/com/casic/missiles/job/SatelliteQuartzJob.java @@ -1,6 +1,6 @@ package com.casic.missiles.job; -import com.casic.missiles.modular.system.service.ISatelliteService; +import com.casic.missiles.socket.service.ISocketService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -9,14 +9,14 @@ */ @Component public class SatelliteQuartzJob { - private final ISatelliteService satelliteService; + private final ISocketService socketService; - public SatelliteQuartzJob(ISatelliteService satelliteService) { - this.satelliteService = satelliteService; + public SatelliteQuartzJob(ISocketService socketService) { + this.socketService = socketService; } @Scheduled(cron = "0/30 * * * * ? ") public void execute() { - satelliteService.saveSatellite(); + socketService.obtainSignal(); } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java index b6d56fb..f6930a0 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/ISatelliteService.java @@ -10,8 +10,10 @@ public interface ISatelliteService extends IService { /** * 保存卫星信号 + * + * @param data 卫星信号数据 */ - void saveSatellite(); + void saveSatellite(int[] data); /** * 查询卫星信号 diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java index 534aad9..81d3f58 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/service/impl/SatelliteServiceImpl.java @@ -21,16 +21,7 @@ } @Override - public void saveSatellite() { - //TODO 卫星通信获取卫星信号 - byte[] data = new byte[]{ - (byte) 0xA5, (byte) 0x5A, (byte) 0x0A, (byte) 0x05, - (byte) 0x58, - (byte) 0x00, - (byte) 0x01, - (byte) 0x02, - (byte) 0xFF, - (byte) 0xFF}; + public void saveSatellite(int[] data) { Satellite satellite = new Satellite(); satellite.setSignalValue(data[4]); diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java new file mode 100644 index 0000000..1acdc66 --- /dev/null +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.system.utils; + +import java.util.Locale; + +/** + * @author a203 + */ +public class ByteUtils { + public static String bytesToHexString(byte[] data) { + int[] unsignedBytes = bytesToUnsigned(data); + StringBuilder builder = new StringBuilder(); + for (int datum : unsignedBytes) { + String hex = Integer.toHexString(datum); + if (hex.length() < 2) { + builder.append(0); + } + builder.append(hex); + } + return builder.toString().toUpperCase(Locale.ROOT); + } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int[] bytesToUnsigned(byte[] data) { + int[] array = new int[data.length]; + for (int i = 0; i < data.length; i++) { + byte datum = data[i]; + int temp; + if (datum < 0) { + temp = 0xFF & datum; + } else { + temp = datum; + } + array[i] = temp; + } + return array; + } +} diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java index ea22e0b..4f53f43 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/CommandManager.java @@ -9,6 +9,7 @@ */ public class CommandManager { private static final String CMD_HEADER = "*AT^IOTDATA="; + private static final String CMD_SIGNAL = "*XF,S5,#"; /** * *AT^IOTDATA=21,"^$CC1,11,LOGIN,d, D$^" @@ -21,4 +22,11 @@ String cmd = CMD_HEADER + data.length() + "," + "\"" + data + "\""; return cmd.getBytes(StandardCharsets.UTF_8); } + + /** + * 获取天通卫星信号指令 + */ + public static byte[] createSignalCmd() { + return CMD_SIGNAL.getBytes(StandardCharsets.UTF_8); + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java index c8eecd8..84c3e72 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -16,5 +16,12 @@ public static final int MIN_AGE = 1; public static final int BAUD_RATE = 115200; - public static final String USB_SERIAL = "/dev/tty.usbserial-1120"; + /** + * 天通客户端串口名 + * */ + public static final String USB_CLIENT_SERIAL = "/dev/tty.usbserial-FTAQ6T45"; + /** + * 天通指挥机串口名 + * */ + public static final String USB_SERVER_SERIAL = "/dev/tty.usbserial-1120"; } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java index b623041..e0b6af3 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/SerialPortManager.java @@ -3,9 +3,9 @@ import gnu.io.NRSerialPort; import lombok.extern.slf4j.Slf4j; -import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; /** @@ -20,7 +20,7 @@ * @param order 待发送数据 */ public static void sendToPort(NRSerialPort serialPort, byte[] order) { - log.info("往串口发送数据===>" + Arrays.toString(order)); + log.info("串口发送数据 ===> " + Arrays.toString(order)); DataOutputStream outs = null; try { outs = new DataOutputStream(serialPort.getOutputStream()); @@ -44,24 +44,33 @@ * * @param serialPort 串口对象 */ - public static String readFromPort(NRSerialPort serialPort) { - DataInputStream inputStream = new DataInputStream(serialPort.getInputStream()); - String data = ""; + public static byte[] readFromPort(NRSerialPort serialPort) { + InputStream inputStream = null; + byte[] buffer = {}; try { - while (inputStream.available() > 0) { - char read = (char) inputStream.read(); - data = data.concat(Character.toString(read)); + inputStream = serialPort.getInputStream(); + //获得数据长度 + int sum = inputStream.available(); + while (sum != 0) { + //如果缓冲区读取结束,且数组长度为7(防止串口数据发送缓慢读取到空数据),跳出循环 + if (inputStream.available() > 0) { + buffer = new byte[sum]; + inputStream.read(buffer); + sum = inputStream.available(); + } } - return data; + return buffer; } catch (IOException e) { e.printStackTrace(); } finally { try { - inputStream.close(); + if (inputStream != null) { + inputStream.close(); + } } catch (IOException e) { e.printStackTrace(); } } - return data; + return buffer; } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java index 9bae1d5..5630f54 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/ISocketService.java @@ -13,4 +13,9 @@ * @param msg 读取到的数据 */ void communicate(ChannelHandlerContext ctx, Object msg); + + /** + * 获取天通卫星信号强度接口 + */ + void obtainSignal(); } diff --git a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java index 1cdc481..35e95bb 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java +++ b/casic-shelter/src/main/java/com/casic/missiles/socket/service/impl/SocketServiceImpl.java @@ -35,6 +35,7 @@ private final IRoutePlanService routePlanService; private final ITaskService taskService; private final IOperationLogService logService; + private final ISatelliteService satelliteService; private NRSerialPort serialPort; @@ -42,7 +43,7 @@ IOceanService oceanService, IShipService shipService, IShelterPositionService shelterPositionService, IRegionPlanService regionPlanService, IRoutePlanService routePlanService, ITaskService taskService, - IOperationLogService logService) { + IOperationLogService logService, ISatelliteService satelliteService) { this.robotService = robotService; this.typhoonService = typhoonService; this.oceanService = oceanService; @@ -52,21 +53,28 @@ this.routePlanService = routePlanService; this.taskService = taskService; this.logService = logService; + this.satelliteService = satelliteService; //初始化串口 Set allPorts = NRSerialPort.getAvailableSerialPorts(); if (!allPorts.isEmpty()) { - //["/dev/tty.usbserial-1120","/dev/tty.wlan-debug"] - if (allPorts.contains(Constant.USB_SERIAL)) { - serialPort = new NRSerialPort(Constant.USB_SERIAL, Constant.BAUD_RATE); + if (allPorts.contains(Constant.USB_CLIENT_SERIAL)) { + serialPort = new NRSerialPort(Constant.USB_CLIENT_SERIAL, Constant.BAUD_RATE); serialPort.connect(); //登录指挥机 - byte[] loginCmd = CommandManager.createLoginCmd("^$CC0Z06,11,LOGIN,d, D$^"); + byte[] loginCmd = CommandManager.createLoginCmd("^$TT0Z06,11,LOGIN,d, D$^"); SerialPortManager.sendToPort(serialPort, loginCmd); try { serialPort.addEventListener(serialPortEvent -> { + // 解决数据断行 + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } if (serialPortEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { - String data = SerialPortManager.readFromPort(serialPort); - log.info("读取到数据===>" + data); + byte[] data = SerialPortManager.readFromPort(serialPort); + log.info("串口收到数据 ===> " + Arrays.toString(data)); + analyzeData(data); } else { log.info("串口状态异常"); serialPort.removeEventListener(); @@ -82,6 +90,40 @@ } } + private void analyzeData(byte[] data) { + if (-91 == data[0] && 90 == data[1]) { + int[] unsignedData = ByteUtils.bytesToUnsigned(data); + log.info("卫星通信返回值 ===> " + Arrays.toString(unsignedData)); + //A55A0A050000000000F0 + //[165, 90, 10, 5, 0, 0, 0, 0, 0, 240] + int type = unsignedData[3]; + switch (type) { + case 0x05: + //当前天通信号强度 + satelliteService.saveSatellite(unsignedData); + break; + default: + break; + } + } else { + String value = new String(data); + if (value.startsWith("SN=")) { + log.info("天通设备信息 ===> " + value); + } else if (value.contains("GPS,V")) { + log.info("天通北斗终端定位无信号,请找空旷位置再试"); + } else { + log.info("其他指令返回值 ===> " + value); + } + } + } + + @Override + public void obtainSignal() { + if (serialPort.isConnected()) { + SerialPortManager.sendToPort(serialPort, CommandManager.createSignalCmd()); + } + } + private boolean isCorrectData(byte[] bytes) { if (bytes[0] != Constant.BITS_OF_HEAD) { return false;