From 9d3a5a25cf9ed777df76b86ef023941512534f8a Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Thu, 27 Mar 2025 09:32:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=98=A0=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloudapi/wayline/WaylineJobTypeEnum.java | 42 ++++++++++++++++++ .../manage/service/IDeviceQrtzService.java | 3 +- .../service/impl/DeviceQrtzServiceImpl.java | 43 +++++++++++++++---- .../manage/service/impl/SDKDeviceService.java | 2 +- .../controller/WaylineJobController.java | 3 +- .../model/entity/WaylineJobEntity.java | 4 ++ .../wayline/model/param/CreateJobParam.java | 7 ++- .../service/impl/FlightTaskServiceImpl.java | 1 + 8 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/WaylineJobTypeEnum.java diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/WaylineJobTypeEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/WaylineJobTypeEnum.java new file mode 100644 index 0000000..1ca456e --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/WaylineJobTypeEnum.java @@ -0,0 +1,42 @@ +package org.dromara.common.sdk.cloudapi.wayline; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.dromara.common.sdk.exception.CloudSDKException; + +import java.util.Arrays; + +/** + * @author sean + * @version 1.7 + * @date 2023/10/19 + */ +public enum WaylineJobTypeEnum { + + PEOPLE_TASK(1), + + WISDOM_TASK(2), + + INSTRUCT(3), + + WORK(4) + ; + + private final int type; + + WaylineJobTypeEnum(int type) { + this.type = type; + } + + @JsonValue + public int getType() { + return type; + } + + @JsonCreator + public static WaylineJobTypeEnum find(int type) { + return Arrays.stream(values()).filter(typeEnum -> typeEnum.type == type).findAny() + .orElseThrow(() -> new CloudSDKException(WaylineJobTypeEnum.class, type)); + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceQrtzService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceQrtzService.java index f40df20..f2785df 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceQrtzService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceQrtzService.java @@ -9,6 +9,7 @@ import org.dromara.sample.manage.model.dto.DeviceQrtzFileDTO; import org.dromara.sample.manage.model.entity.DeviceQrtzEntity; import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity; +import java.sql.SQLException; import java.text.ParseException; import java.util.Collection; import java.util.List; @@ -53,5 +54,5 @@ public interface IDeviceQrtzService { Boolean fileSort(Long id ,Integer sort); //通知启用飞行任务 - DeviceQrtzFileEntity getDeviceQrtzFileEntity(String deviceSn); + DeviceQrtzFileEntity getDeviceQrtzFileEntity(DeviceDTO device) throws SQLException; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java index b7b2827..d7e6da8 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.sample.manage.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -11,6 +12,7 @@ import org.dromara.common.core.constant.DeviceQrtzConstants; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.sample.manage.mapper.IDeviceQrtzDateMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzMapper; @@ -25,21 +27,23 @@ import org.dromara.sample.manage.service.IDeviceQrtzDateService; import org.dromara.sample.manage.service.IDeviceQrtzService; import org.dromara.sample.wayline.mapper.IWaylineFileMapper; +import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.model.entity.WaylineFileEntity; +import org.dromara.sample.wayline.model.param.CreateJobParam; +import org.dromara.sample.wayline.service.IFlightTaskService; +import org.dromara.sample.wayline.service.IWaylineJobService; import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.sql.SQLException; import java.text.ParseException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @auther yq @@ -57,6 +61,8 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { private IDeviceQrtzDateService deviceQrtzDateService; @Autowired private IWaylineFileMapper waylineFileMapper; + @Autowired + private IFlightTaskService flightTaskService; @Override public TableDataInfo listManageDeviceQrtz(Page page, DeviceQrtzDTO deviceQrtzDTO) { @@ -257,17 +263,18 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { @Override - public DeviceQrtzFileEntity getDeviceQrtzFileEntity(String deviceSn) { - if(StrUtil.isNotEmpty(deviceSn)){ + public DeviceQrtzFileEntity getDeviceQrtzFileEntity(DeviceDTO device) { + if(StrUtil.isNotEmpty(device.getDeviceSn())){ // 获取当前日期 LocalDate currentDate = LocalDate.now(); // 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 格式化当前日期 String formattedDate = currentDate.format(formatter); - List qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper().eq("device_sn", deviceSn).eq("exec_date", formattedDate).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort")); + List qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper().eq("device_sn", device.getDeviceSn()).eq("exec_date", formattedDate).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort")); if(!qrtzFileEntityList.isEmpty()){ DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0); List qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId()); @@ -277,8 +284,28 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { for (DeviceQrtzDateEntity qrtzDate : qrtzDateEntityList) { if (!currentDateTime.isBefore(Convert.toLocalDateTime(qrtzDate.getStartDate())) && !currentDateTime.isAfter(Convert.toLocalDateTime(qrtzDate.getEndDate()))){ //获取航线数据发送之类 + WaylineFileEntity waylineFileEntity = waylineFileMapper.selectOne(new LambdaQueryWrapper().eq(WaylineFileEntity::getWaylineId, deviceQrtzFileEntity.getWaylineId())); + if(waylineFileEntity == null){//更改为异常,当前航线不存在 + continue; + } //获取是否是工单航线,是修改状态 - + CreateJobParam createJobParam = new CreateJobParam(); + try { + createJobParam.setName(deviceQrtzFileEntity.getWaylineName()+""+currentDateTime.format(formatterS)); + createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId()); + createJobParam.setDockSn(device.getDeviceSn()); + createJobParam.setWaylineType(WaylineTypeEnum.find(waylineFileEntity.getTemplateTypes())); + createJobParam.setTaskType(TaskTypeEnum.IMMEDIATE); + createJobParam.setJobId(UUID.randomUUID().toString()); + //createJobParam.setRthAltitude(); + createJobParam.setMinBatteryCapacity(50); + createJobParam.setJobType(WaylineJobTypeEnum.WISDOM_TASK); + createJobParam.setWaylinePrecisionType(WaylinePrecisionTypeEnum.RTK); + createJobParam.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME); + flightTaskService.publishFlightTask(device.getWorkspaceId(),createJobParam); + }catch (Exception e){ + e.printStackTrace(); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java index 6357e53..a7f48d1 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java @@ -157,7 +157,7 @@ public class SDKDeviceService extends AbstractDeviceService { executor.execute(new Runnable() { @Override public void run() { - deviceQrtzService.getDeviceQrtzFileEntity(device.getDeviceSn()); + deviceQrtzService.getDeviceQrtzFileEntity(device); } }); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index dd21073..bc05f0f 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.PaginationData; import org.dromara.sample.wayline.model.dto.WaylineJobDTO; @@ -48,7 +49,7 @@ public class WaylineJobController { @Operation(summary = "创建一个航路任务。", description = "创建一个航路任务") public HttpResultResponse createJob(HttpServletRequest request, @Valid @RequestBody CreateJobParam param ,@PathVariable(name = "workspace_id") String workspaceId) throws SQLException { - + param.setJobType(WaylineJobTypeEnum.PEOPLE_TASK); return flighttaskService.publishFlightTask(workspaceId,param); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java index 738dab8..88458c9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java @@ -6,6 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.dromara.common.sdk.cloudapi.wayline.ProgressExtBreakPoint; +import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import java.io.Serializable; import java.util.Date; @@ -85,6 +86,9 @@ public class WaylineJobEntity implements Serializable { @TableField("parent_id") private String parentId; + @TableField("job_type") + private WaylineJobTypeEnum waylineJobTypeEnum; + @TableField(exist = false) private ProgressExtBreakPoint breakPoint; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/param/CreateJobParam.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/param/CreateJobParam.java index cb0e60d..adcfa01 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/param/CreateJobParam.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/param/CreateJobParam.java @@ -37,7 +37,6 @@ public class CreateJobParam { private WaylineTypeEnum waylineType; @NotNull - @Schema(description = "航线类型:IMMEDIATE 立即执行") private TaskTypeEnum taskType; @@ -58,6 +57,12 @@ public class CreateJobParam { @Schema(description = "最小存储空间") private Integer minStorageCapacity; + @Schema(description = "0:GPS 任务,1:高精度 RTK 任务") + private WaylinePrecisionTypeEnum waylinePrecisionType; + + @Schema(description = "1:手动任务,2:自动任务,3:指令飞行,4:工单飞行") + private WaylineJobTypeEnum jobType; + @Schema(description = "定时飞行(占时不用)") private List taskDays; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java index c0a7dd9..b94a0f7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java @@ -254,6 +254,7 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl return HttpResultResponse.success(); } + public HttpResultResponse publishOneFlightTask(WaylineJobDTO waylineJob) throws SQLException { boolean isOnline = deviceRedisService.checkDeviceOnline(waylineJob.getDockSn());