liusuyi
2024-11-02 a1a81473ab7c7c73016b1b3b79fae0beac571704
优化
7 files modified
3 files renamed
125 ■■■■■ changed files
ard-work/pom.xml 32 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java 9 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java 3 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java 14 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java 13 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java 16 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java 28 ●●●●● patch | view | raw | blame | history
ard-work/pom.xml
@@ -46,7 +46,7 @@
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <version>1.18.28</version>
        </dependency>
        <!--protobuf的依赖-->
@@ -61,35 +61,5 @@
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.15</version>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>${project.artifactId}</warName>
                </configuration>
           </plugin>
        </plugins>
        <finalName>${project.artifactId}</finalName>
    </build>
</project>
ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
@@ -9,7 +9,6 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.DigestUtils;
import javax.annotation.Resource;
import java.util.Date;
@@ -45,11 +44,9 @@
    private String encryptstr;
    public String getEncryptStr() {
        String sb = new StringBuilder()
                .append(accesskeyid)
                .append(accesskeysecret)
                .append(getTimeStamp())
                .toString();
        String sb = accesskeyid +
                accesskeysecret +
                getTimeStamp();
        encryptstr = DigestUtils.md5DigestAsHex(sb.getBytes());
        return encryptstr;
    }
ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/UavSignalInfoConverter.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.converter;
package com.ard.tianyu.model.dto.converter.realdata;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/UavStateConverter.java
@@ -1,4 +1,4 @@
package com.ard.tianyu.model.dto.converter;
package com.ard.tianyu.model.dto.converter.realdata;
import com.ard.tianyu.model.dto.state.*;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/UavTelemetryDataConverter.java
@@ -1,6 +1,5 @@
package com.ard.tianyu.model.dto.converter;
package com.ard.tianyu.model.dto.converter.realdata;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import org.springframework.beans.BeanUtils;
ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
@@ -1,5 +1,6 @@
package com.ard.tianyu.netty.command.real;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
@@ -8,12 +9,13 @@
@Data
public class SignalInfoCmd extends BaseCmd {
    private int delayTime;
    private TelemetryDataPB.SignalInfo signalInfo;
    private SignalInfo signalInfo;
    // 构造函数
    public SignalInfoCmd(TelemetryDataPB.SignalInfo signalInfo) {
    public SignalInfoCmd(SignalInfo signalInfo) {
        setDataHeader((short) 0x6A77); // 设置帧头
       // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
        setBoxSn(signalInfo.getBoxSn().getBytes());
        setCmdCode((byte) 0x0C); // 设置命令编号
        this.signalInfo = signalInfo;
    }
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
@@ -1,25 +1,23 @@
package com.ard.tianyu.netty.command.real;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
import lombok.Data;
@Data
public class UavStateCmd extends BaseCmd {
    private TelemetryDataPB.UavState uavState;  // ProtoBuf 数据类
    private UavState uavState;  // ProtoBuf 数据类
    // 构造函数
    public UavStateCmd(TelemetryDataPB.UavState uavState) {
    public UavStateCmd(UavState uavState) {
        setDataHeader((short) 0x6A77); // 设置帧头
        setBoxSn(uavState.getBoxSn().getBytes()); // 设置云盒编号
       // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
        setCmdCode((byte) 0xA8); // 设置命令编号
        this.uavState = uavState;
    }
    // 获取无人机状态数据
    public TelemetryDataPB.UavState getUavState() {
        return uavState;
    }
    // 实现 encode 方法,如果需要
    @Override
    public void encode(ByteBuf out) {
ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
@@ -1,8 +1,10 @@
package com.ard.tianyu.netty.command.real;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
import io.netty.buffer.ByteBuf;
import lombok.Data;
/**
 * UavDataCommand
@@ -10,19 +12,16 @@
 * @author liusuyi
 * @date 2024年10月23日9:33
 **/
@Data
public class UavTelemetryDataCmd extends BaseCmd {
    private TelemetryDataPB.TelemetryData telemetryData;
    private TelemetryData telemetryData;
    // 构造函数
    public UavTelemetryDataCmd(TelemetryDataPB.TelemetryData telemetryData) {
    public UavTelemetryDataCmd(TelemetryData telemetryData) {
        setDataHeader((short) 0x6A77); // 设置帧头
        // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
        setBoxSn(telemetryData.getBoxSn().getBytes());
        setCmdCode((byte) 0xA9); // 设置命令编号
        this.telemetryData = telemetryData;
    }
    // 获取无人机状态数据
    public TelemetryDataPB.TelemetryData getTelemetryData() {
        return telemetryData;
    }
    // 实现 encode 方法,如果需要
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -1,6 +1,12 @@
package com.ard.tianyu.netty.handler;// MessageProtocolDecoder.java
import com.ard.common.utils.ByteUtils;
import com.ard.tianyu.model.dto.converter.realdata.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavStateConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavTelemetryDataConverter;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.netty.command.BaseCmd;
import com.ard.tianyu.netty.command.camera.CameraModeReplyCmd;
import com.ard.tianyu.netty.command.camera.CapturePicReplyCmd;
@@ -70,15 +76,16 @@
            case (byte) 0xA8:
                byte[] uavStatus = new byte[dataLength - 1];
                in.readBytes(uavStatus);  // 读取 ProtoBuf 数据
                TelemetryDataPB.UavState uavState = TelemetryDataPB.UavState.parseFrom(uavStatus);
                TelemetryDataPB.UavState uavStatePB = TelemetryDataPB.UavState.parseFrom(uavStatus);
                UavState uavState = UavStateConverter.convertProtoToEntity(uavStatePB);
                baseCmd = new UavStateCmd(uavState);
                log.debug("无人机状态数据: {}", uavState.getBoxSn());
                break;
            case (byte) 0xA9:
                byte[] telemetryDataBytes = new byte[dataLength - 1];
                in.readBytes(telemetryDataBytes);
                TelemetryDataPB.TelemetryData telemetryData = TelemetryDataPB.TelemetryData.parseFrom(telemetryDataBytes);
                TelemetryDataPB.TelemetryData telemetryDataPB = TelemetryDataPB.TelemetryData.parseFrom(telemetryDataBytes);
                TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(telemetryDataPB);
                baseCmd = new UavTelemetryDataCmd(telemetryData);
                log.debug("遥测数据: {}", telemetryData.getBoxSn());
                break;
@@ -88,7 +95,8 @@
                in.readBytes(signalInfoBytes);
                signalInfoBytes = new byte[dataLength - 20];
                in.readBytes(signalInfoBytes);
                TelemetryDataPB.SignalInfo signalInfo = TelemetryDataPB.SignalInfo.parseFrom(signalInfoBytes);
                TelemetryDataPB.SignalInfo signalInfoPB = TelemetryDataPB.SignalInfo.parseFrom(signalInfoBytes);
                SignalInfo signalInfo =UavSignalInfoConverter.convertProtoToEntity(signalInfoPB);
                baseCmd = new SignalInfoCmd(signalInfo);
                log.debug("信道质量数据: {}", delayTime);
                break;
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -14,9 +14,9 @@
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.converter.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.UavStateConverter;
import com.ard.tianyu.model.dto.converter.UavTelemetryDataConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavStateConverter;
import com.ard.tianyu.model.dto.converter.realdata.UavTelemetryDataConverter;
import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter;
import com.ard.tianyu.model.dto.manual.*;
import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
@@ -58,10 +58,7 @@
import javax.annotation.Resource;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * TyServiceImpl
@@ -599,26 +596,23 @@
            case (byte) 0xA8:
                // 处理无人机状态消息
                UavStateCmd uavStateCmd = (UavStateCmd) tyCommand;
                UavState uavState = UavStateConverter.convertProtoToEntity(uavStateCmd.getUavState());
                UavStateCache.putUavState(uavState);
                logPrint("无人机状态", uavState.getBoxSn());
               // WebSocketUtil.sendMessageAll(uavState);
                UavStateCache.putUavState(uavStateCmd.getUavState());
                logPrint("无人机状态", uavStateCmd.getUavState().getBoxSn());
                WebSocketUtil.sendMessageAll(uavStateCmd.getUavState());
                break;
            case (byte) 0xA9:
                // 处理无人机遥测消息
                UavTelemetryDataCmd uavTelemetryDataCmd = (UavTelemetryDataCmd) tyCommand;
                TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(uavTelemetryDataCmd.getTelemetryData());
                UavTelemetryDataCache.putUavTelemetryData(telemetryData);
                logPrint("无人机遥测", telemetryData.getBoxSn());
                WebSocketUtil.sendMessageAll(telemetryData);
                UavTelemetryDataCache.putUavTelemetryData(uavTelemetryDataCmd.getTelemetryData());
                logPrint("无人机遥测", uavTelemetryDataCmd.getTelemetryData().getBoxSn());
                WebSocketUtil.sendMessageAll(uavTelemetryDataCmd.getTelemetryData());
                break;
            case (byte) 0x0C:
                // 处理无人机信道质量数据
                SignalInfoCmd signalInfoCmd = (SignalInfoCmd) tyCommand;
                SignalInfo signalInfo = UavSignalInfoConverter.convertProtoToEntity(signalInfoCmd.getSignalInfo());
                UavSignalInfoCache.putUavSignalInfoCache(signalInfo);
                logPrint("无人机信道质量", signalInfo.getBoxSn());
                UavSignalInfoCache.putUavSignalInfoCache(signalInfoCmd.getSignalInfo());
                logPrint("无人机信道质量", signalInfoCmd.getSignalInfo().getBoxSn());
                break;
            case (byte) 0xD1:
                // 处理无人机