ard-work/src/main/java/com/ard/tianyu/controller/UavWayLineController.java
@@ -4,7 +4,7 @@ import com.ard.tianyu.model.dto.speaker.SpeakModeSwitchDTO; import com.ard.tianyu.model.dto.speaker.StopSpeakDTO; import com.ard.tianyu.model.dto.speaker.TextSpeakDTO; import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO; import com.ard.tianyu.model.dto.wayline.*; import com.ard.tianyu.service.ITyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -35,5 +35,29 @@ tyService.wayLineUpload(wayLineUploadDTO); return AjaxResult.success(); } @ApiOperation("上传航线") @PostMapping("/wayLineBegin") public AjaxResult wayLineBegin(@RequestBody WayLineBeginDTO wayLineBeginDTO) { tyService.wayLineBegin(wayLineBeginDTO); return AjaxResult.success(); } @ApiOperation("暂停航线") @PostMapping("/wayLinePause") public AjaxResult wayLinePause(@RequestBody WayLinePauseDTO wayLinePauseDTO) { tyService.wayLinePause(wayLinePauseDTO); return AjaxResult.success(); } @ApiOperation("恢复航线") @PostMapping("/wayLineResume") public AjaxResult wayLineResume(@RequestBody WayLineResumeDTO wayLineResumeDTO) { tyService.wayLineResume(wayLineResumeDTO); return AjaxResult.success(); } @ApiOperation("结束航线") @PostMapping("/wayLineEnd") public AjaxResult wayLineEnd(@RequestBody WayLineEndDTO wayLineEndDTO) { tyService.wayLineEnd(wayLineEndDTO); return AjaxResult.success(); } } ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineBeginDTO.java
New file @@ -0,0 +1,20 @@ package com.ard.tianyu.model.dto.wayline; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * 开始航线实体对象 * * @author liusuyi * @date 2024年11月01日10:55 **/ @Data @Builder @AllArgsConstructor @NoArgsConstructor public class WayLineBeginDTO { private String boxSn; } ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineEndDTO.java
New file @@ -0,0 +1,20 @@ package com.ard.tianyu.model.dto.wayline; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * 结束航线实体对象 * * @author liusuyi * @date 2024年11月01日10:55 **/ @Data @Builder @AllArgsConstructor @NoArgsConstructor public class WayLineEndDTO { private String boxSn; } ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLinePauseDTO.java
New file @@ -0,0 +1,20 @@ package com.ard.tianyu.model.dto.wayline; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * 暂停航线实体对象 * * @author liusuyi * @date 2024年11月01日10:55 **/ @Data @Builder @AllArgsConstructor @NoArgsConstructor public class WayLinePauseDTO { private String boxSn; } ard-work/src/main/java/com/ard/tianyu/model/dto/wayline/WayLineResumeDTO.java
New file @@ -0,0 +1,20 @@ package com.ard.tianyu.model.dto.wayline; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * 恢复航线实体对象 * * @author liusuyi * @date 2024年11月01日10:55 **/ @Data @Builder @AllArgsConstructor @NoArgsConstructor public class WayLineResumeDTO { private String boxSn; } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginCmd.java
New file @@ -0,0 +1,35 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter; import com.ard.tianyu.model.dto.wayline.PlanLineData; import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO; import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO; import com.ard.tianyu.netty.command.BaseCmd; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import io.netty.buffer.ByteBuf; /** * 开始航线指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLineBeginCmd extends BaseCmd { public WayLineBeginCmd(WayLineBeginDTO wayLineBeginDTO) { setDataHeader((short) 0x7479); setDataLength((short) 18); setBoxSn(wayLineBeginDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD1); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x17); // 写入动作编号 } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineBeginReplyCmd.java
New file @@ -0,0 +1,32 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 开始航线回复指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLineBeginReplyCmd extends BaseCmd { private final byte encryptFlag = 0x00; // 加密标志 private final byte actionCode = 0x17; // 动作编号 private final byte result; // 执行结果 private final Integer errorCode; // 错误码 public WayLineBeginReplyCmd(String boxSn, Byte result, Integer errorCode) { setDataHeader((short) 0x6A77); //setDataLength((short) 18); setCmdCode((byte) 0xD1); setBoxSn(boxSn.getBytes()); this.result = result; this.errorCode = errorCode; } public void encode(ByteBuf out) { } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndCmd.java
New file @@ -0,0 +1,32 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO; import com.ard.tianyu.model.dto.wayline.WayLineEndDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 结束航线指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLineEndCmd extends BaseCmd { public WayLineEndCmd(WayLineEndDTO wayLineEndDTO) { setDataHeader((short) 0x7479); setDataLength((short) 18); setBoxSn(wayLineEndDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD1); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x20); // 写入动作编号 } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineEndReplyCmd.java
New file @@ -0,0 +1,31 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 结束航线回复指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLineEndReplyCmd extends BaseCmd { private final byte encryptFlag = 0x00; // 加密标志 private final byte actionCode = 0x20; // 动作编号 private final byte result; // 执行结果 private final Integer errorCode; // 错误码 public WayLineEndReplyCmd(String boxSn, Byte result, Integer errorCode) { setDataHeader((short) 0x6A77); //setDataLength((short) 18); setCmdCode((byte) 0xD1); setBoxSn(boxSn.getBytes()); this.result = result; this.errorCode = errorCode; } public void encode(ByteBuf out) { } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseCmd.java
New file @@ -0,0 +1,32 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.model.dto.wayline.WayLineBeginDTO; import com.ard.tianyu.model.dto.wayline.WayLinePauseDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 暂停航线指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLinePauseCmd extends BaseCmd { public WayLinePauseCmd(WayLinePauseDTO wayLinePauseDTO) { setDataHeader((short) 0x7479); setDataLength((short) 18); setBoxSn(wayLinePauseDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD1); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x18); // 写入动作编号 } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLinePauseReplyCmd.java
New file @@ -0,0 +1,31 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 暂停航线回复指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLinePauseReplyCmd extends BaseCmd { private final byte encryptFlag = 0x00; // 加密标志 private final byte actionCode = 0x18; // 动作编号 private final byte result; // 执行结果 private final Integer errorCode; // 错误码 public WayLinePauseReplyCmd(String boxSn, Byte result, Integer errorCode) { setDataHeader((short) 0x6A77); //setDataLength((short) 18); setCmdCode((byte) 0xD1); setBoxSn(boxSn.getBytes()); this.result = result; this.errorCode = errorCode; } public void encode(ByteBuf out) { } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeCmd.java
New file @@ -0,0 +1,30 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.model.dto.wayline.WayLineResumeDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 恢复航线指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLineResumeCmd extends BaseCmd { public WayLineResumeCmd(WayLineResumeDTO wayLineResumeDTO) { setDataHeader((short) 0x7479); setDataLength((short) 18); setBoxSn(wayLineResumeDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD1); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x19); // 写入动作编号 } } ard-work/src/main/java/com/ard/tianyu/netty/command/wayline/WayLineResumeReplyCmd.java
New file @@ -0,0 +1,31 @@ package com.ard.tianyu.netty.command.wayline; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 恢复航线回复指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class WayLineResumeReplyCmd extends BaseCmd { private final byte encryptFlag = 0x00; // 加密标志 private final byte actionCode = 0x19; // 动作编号 private final byte result; // 执行结果 private final Integer errorCode; // 错误码 public WayLineResumeReplyCmd(String boxSn, Byte result, Integer errorCode) { setDataHeader((short) 0x6A77); //setDataLength((short) 18); setCmdCode((byte) 0xD1); setBoxSn(boxSn.getBytes()); this.result = result; this.errorCode = errorCode; } public void encode(ByteBuf out) { } } ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
@@ -12,7 +12,7 @@ import com.ard.tianyu.model.dto.speaker.*; import com.ard.tianyu.model.dto.state.UavState; import com.ard.tianyu.model.dto.telemetry.TelemetryData; import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO; import com.ard.tianyu.model.dto.wayline.*; import com.ard.tianyu.model.receiver.*; import com.ard.tianyu.netty.command.BaseCmd; import com.dtflys.forest.annotation.Var; @@ -235,6 +235,26 @@ void wayLineUpload(WayLineUploadDTO wayLineUploadDTO); /** * 开始航线 */ void wayLineBegin(WayLineBeginDTO wayLineBeginDTO); /** * 暂停航线 */ void wayLinePause(WayLinePauseDTO wayLinePauseDTO); /** * 恢复航线 */ void wayLineResume(WayLineResumeDTO wayLineResumeDTO); /** * 结束航线 */ void wayLineEnd(WayLineEndDTO wayLineEndDTO); /** * 处理回复消息 */ void processReplyMessage(String key, BaseCmd tyMessage); ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -23,8 +23,7 @@ import com.ard.tianyu.model.dto.speaker.*; import com.ard.tianyu.model.dto.state.UavState; import com.ard.tianyu.model.dto.telemetry.TelemetryData; import com.ard.tianyu.model.dto.wayline.PlanLineData; import com.ard.tianyu.model.dto.wayline.WayLineUploadDTO; import com.ard.tianyu.model.dto.wayline.*; import com.ard.tianyu.model.receiver.*; import com.ard.tianyu.netty.command.*; import com.ard.tianyu.netty.TyNettyTcpClient; @@ -41,8 +40,7 @@ import com.ard.tianyu.netty.command.real.UavTelemetryDataCmd; import com.ard.tianyu.netty.command.register.*; import com.ard.tianyu.netty.command.speaker.*; import com.ard.tianyu.netty.command.wayline.WayLineUploadCmd; import com.ard.tianyu.netty.command.wayline.WayLineUploadReplyCmd; import com.ard.tianyu.netty.command.wayline.*; import com.ard.tianyu.netty.handler.ErrorCodeEnum; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import com.ard.tianyu.service.ITyService; @@ -501,6 +499,42 @@ } /** * 航线开始 */ @Override public void wayLineBegin(WayLineBeginDTO wayLineBeginDTO) { WayLineBeginCmd wayLineBeginCmd = new WayLineBeginCmd(wayLineBeginDTO); this.sendMessage(tyConfiguration.getIpPort(), wayLineBeginCmd); } /** * 航线暂停 */ @Override public void wayLinePause(WayLinePauseDTO wayLinePauseDTO) { WayLinePauseCmd wayLinePauseCmd = new WayLinePauseCmd(wayLinePauseDTO); this.sendMessage(tyConfiguration.getIpPort(), wayLinePauseCmd); } /** * 航线恢复 */ @Override public void wayLineResume(WayLineResumeDTO wayLineResumeDTO) { WayLineResumeCmd wayLineResumeCmd = new WayLineResumeCmd(wayLineResumeDTO); this.sendMessage(tyConfiguration.getIpPort(), wayLineResumeCmd); } /** * 航线结束 */ @Override public void wayLineEnd(WayLineEndDTO wayLineEndDTO) { WayLineEndCmd wayLineEndCmd = new WayLineEndCmd(wayLineEndDTO); this.sendMessage(tyConfiguration.getIpPort(), wayLineEndCmd); } /** * 处理天宇服务器返回的消息 */ @Override @@ -676,8 +710,7 @@ */ @Scheduled(fixedRate = 3000) public void sendHeartBeat() { if(!TyTcpServerCache.getTcpServerCache(tyConfiguration.getTcpserver() + ":" + tyConfiguration.getTcpport())) { if (!TyTcpServerCache.getTcpServerCache(tyConfiguration.getTcpserver() + ":" + tyConfiguration.getTcpport())) { return; } long timestamp = System.currentTimeMillis();