diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/control/api/AbstractControlService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/control/api/AbstractControlService.java index b6cbce4..c89ec69 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/control/api/AbstractControlService.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/control/api/AbstractControlService.java @@ -436,7 +436,6 @@ public abstract class AbstractControlService { * @param request data * @return services_reply */ - @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_2, include = GatewayTypeEnum.DOCK) public TopicServicesResponse irMeteringModeSet(GatewayManager gateway, IrMeteringModeSetRequest request) { return servicesPublish.publish( gateway.getGatewaySn(), @@ -450,7 +449,6 @@ public abstract class AbstractControlService { * @param request data * @return services_reply */ - @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_2, include = GatewayTypeEnum.DOCK) public TopicServicesResponse irMeteringPointSet(GatewayManager gateway, IrMeteringPointSetRequest request) { return servicesPublish.publish( gateway.getGatewaySn(), @@ -464,7 +462,6 @@ public abstract class AbstractControlService { * @param request data * @return services_reply */ - @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_2, include = GatewayTypeEnum.DOCK) public TopicServicesResponse irMeteringAreaSet(GatewayManager gateway, IrMeteringAreaSetRequest request) { return servicesPublish.publish( gateway.getGatewaySn(), diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java index c851c1c..ae36205 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java @@ -76,5 +76,9 @@ public enum DeviceVideoEnum { .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey)); } + public static void main(String[] args) { + System.out.println(DeviceVideoEnum.find("Matrice 30T").getDevice()); + } + } diff --git a/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 311ac1f..5ec82f0 100644 --- a/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -309,6 +309,29 @@ public class OssClient { } } + public long downloadZip(String key, OutputStream out) { + try { + // 构建下载请求 + DownloadRequest> downloadRequest = DownloadRequest.builder() + // 文件对象 + .getObjectRequest(y -> y.bucket(properties.getBucketName()) + .key(key) + .build()) + .addTransferListener(LoggingTransferListener.create()) + // 使用订阅转换器 + .responseTransformer(AsyncResponseTransformer.toBlockingInputStream()) + .build(); + // 使用 S3TransferManager 下载文件 + Download> responseFuture = transferManager.download(downloadRequest); + // 输出到流中 + try (ResponseInputStream responseStream = responseFuture.completionFuture().join().result()) { // auto-closeable stream + return responseStream.transferTo(out); // 阻塞调用线程 blocks the calling thread + } + } catch (Exception e) { + throw new OssException("文件下载失败,错误信息:[" + e.getMessage() + "]"); + } + } + /** * 删除云存储服务中指定路径下文件 * diff --git a/dk-common/common-websocket/pom.xml b/dk-common/common-websocket/pom.xml index ac54281..0a7c953 100644 --- a/dk-common/common-websocket/pom.xml +++ b/dk-common/common-websocket/pom.xml @@ -48,6 +48,11 @@ org.springframework.boot spring-boot-starter-websocket + org.dromara common-cloudsdk diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DockController.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DockController.java index 4e7e0ef..bfba184 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DockController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DockController.java @@ -71,5 +71,23 @@ public class DockController { return controlService.payloadCommands(param); } + @PostMapping("/{sn}/payload/irMeteringModeSet") + public HttpResultResponse irMeteringModeSet(@PathVariable String sn, @Valid @RequestBody PayloadCommandsParam param) throws Exception { + param.setSn(sn); + return controlService.irMeteringModeSet(param); + } + + + @PostMapping("/{sn}/payload/irMeteringPointSet") + public HttpResultResponse irMeteringPointSet(@PathVariable String sn, @Valid @RequestBody PayloadCommandsParam param) throws Exception { + param.setSn(sn); + return controlService.irMeteringPointSet(param); + } + + @PostMapping("/{sn}/payload/irMeteringAreaSet") + public HttpResultResponse irMeteringAreaSet(@PathVariable String sn, @Valid @RequestBody PayloadCommandsParam param) throws Exception { + param.setSn(sn); + return controlService.irMeteringAreaSet(param); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/PayloadCommandsEnum.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/PayloadCommandsEnum.java index 0b25499..5b24a74 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/PayloadCommandsEnum.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/PayloadCommandsEnum.java @@ -2,6 +2,8 @@ package org.dromara.sample.control.model.enums; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import org.dromara.common.sdk.cloudapi.control.ControlMethodEnum; +import org.dromara.common.sdk.cloudapi.control.IrMeteringModeSetRequest; import org.dromara.common.sdk.cloudapi.control.PayloadControlMethodEnum; import java.util.Arrays; @@ -25,7 +27,13 @@ public enum PayloadCommandsEnum { CAMERA_FOCAL_LENGTH_SET(PayloadControlMethodEnum.CAMERA_FOCAL_LENGTH_SET, org.dromara.sample.control.service.impl.CameraFocalLengthSetImpl.class), - GIMBAL_RESET(PayloadControlMethodEnum.GIMBAL_RESET, org.dromara.sample.control.service.impl.GimbalResetImpl.class); + GIMBAL_RESET(PayloadControlMethodEnum.GIMBAL_RESET, org.dromara.sample.control.service.impl.GimbalResetImpl.class), + + IR_METERING_MODE_SET(PayloadControlMethodEnum.IR_METERING_MODE_SET, org.dromara.sample.control.service.impl.IrMeteringModeSetImpl.class), + + IR_METERING_POINT_SET(PayloadControlMethodEnum.IR_METERING_POINT_SET, org.dromara.sample.control.service.impl.IrMeteringPointSetImpl.class), + + IR_METERING_AREA_SET(PayloadControlMethodEnum.IR_METERING_AREA_SET, org.dromara.sample.control.service.impl.IrMeteringAreaSetImpl.class); PayloadControlMethodEnum cmd; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DronePayloadParam.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DronePayloadParam.java index 5738863..3069ccc 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DronePayloadParam.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DronePayloadParam.java @@ -1,6 +1,8 @@ package org.dromara.sample.control.model.param; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import lombok.Data; @@ -29,6 +31,18 @@ public class DronePayloadParam { private CameraModeEnum cameraMode; + private Integer mode; + + @Min(0) + @Max(1) + private Float width; + + /** + * Temperature measurement area height + */ + @Min(0) + @Max(1) + private Float height; /** * true: Lock the gimbal, the gimbal and the drone rotate together. * false: Only the gimbal rotates, but the drone does not. diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java index ee64f0d..78aa6a3 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java @@ -70,4 +70,10 @@ public interface IControlService { * @return */ HttpResultResponse payloadCommands(PayloadCommandsParam param) throws Exception; + + HttpResultResponse irMeteringModeSet(PayloadCommandsParam param) throws Exception; + + HttpResultResponse irMeteringPointSet(PayloadCommandsParam param) throws Exception; + + HttpResultResponse irMeteringAreaSet(PayloadCommandsParam param) throws Exception; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java index 263f291..7032db1 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java @@ -301,4 +301,58 @@ public class ControlServiceImpl implements IControlService { HttpResultResponse.success() : HttpResultResponse.error(serviceReply.getResult()); } + + @Override + public HttpResultResponse irMeteringModeSet(PayloadCommandsParam param) throws Exception { + param.getCmd().getClazz() + .getDeclaredConstructor(DronePayloadParam.class) + .newInstance(param.getData()) + .checkCondition(param.getSn()); + + TopicServicesResponse response = abstractControlService.irMeteringModeSet( + SDKManager.getDeviceSDK(param.getSn()), + mapper.convertValue(param.getData(), IrMeteringModeSetRequest.class)); + + ServicesReplyData serviceReply = response.getData(); + + return serviceReply.getResult().isSuccess() ? + HttpResultResponse.success() + : HttpResultResponse.error(serviceReply.getResult()); + } + + @Override + public HttpResultResponse irMeteringPointSet(PayloadCommandsParam param) throws Exception { + param.getCmd().getClazz() + .getDeclaredConstructor(DronePayloadParam.class) + .newInstance(param.getData()) + .checkCondition(param.getSn()); + + TopicServicesResponse response = abstractControlService.irMeteringPointSet( + SDKManager.getDeviceSDK(param.getSn()), + mapper.convertValue(param.getData(), IrMeteringPointSetRequest.class)); + + ServicesReplyData serviceReply = response.getData(); + + return serviceReply.getResult().isSuccess() ? + HttpResultResponse.success() + : HttpResultResponse.error(serviceReply.getResult()); + } + + @Override + public HttpResultResponse irMeteringAreaSet(PayloadCommandsParam param) throws Exception { + param.getCmd().getClazz() + .getDeclaredConstructor(DronePayloadParam.class) + .newInstance(param.getData()) + .checkCondition(param.getSn()); + + TopicServicesResponse response = abstractControlService.irMeteringAreaSet( + SDKManager.getDeviceSDK(param.getSn()), + mapper.convertValue(param.getData(), IrMeteringAreaSetRequest.class)); + + ServicesReplyData serviceReply = response.getData(); + + return serviceReply.getResult().isSuccess() ? + HttpResultResponse.success() + : HttpResultResponse.error(serviceReply.getResult()); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringAreaSetImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringAreaSetImpl.java new file mode 100644 index 0000000..0c162c4 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringAreaSetImpl.java @@ -0,0 +1,22 @@ +package org.dromara.sample.control.service.impl; + + +import org.dromara.sample.control.model.param.DronePayloadParam; + +/** + * @author sean + * @version 1.4 + * @date 2023/4/23 + */ +public class IrMeteringAreaSetImpl extends PayloadCommandsHandler { + + public IrMeteringAreaSetImpl(DronePayloadParam param) { + super(param); + } + + @Override + public boolean canPublish(String deviceSn) { + super.canPublish(deviceSn); + return true; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringModeSetImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringModeSetImpl.java new file mode 100644 index 0000000..f1bd86d --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringModeSetImpl.java @@ -0,0 +1,23 @@ +package org.dromara.sample.control.service.impl; + + +import org.dromara.common.sdk.cloudapi.device.CameraStateEnum; +import org.dromara.sample.control.model.param.DronePayloadParam; + +/** + * @author sean + * @version 1.4 + * @date 2023/4/23 + */ +public class IrMeteringModeSetImpl extends PayloadCommandsHandler { + + public IrMeteringModeSetImpl(DronePayloadParam param) { + super(param); + } + + @Override + public boolean canPublish(String deviceSn) { + super.canPublish(deviceSn); + return true; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringPointSetImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringPointSetImpl.java new file mode 100644 index 0000000..bf45348 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/IrMeteringPointSetImpl.java @@ -0,0 +1,22 @@ +package org.dromara.sample.control.service.impl; + + +import org.dromara.sample.control.model.param.DronePayloadParam; + +/** + * @author sean + * @version 1.4 + * @date 2023/4/23 + */ +public class IrMeteringPointSetImpl extends PayloadCommandsHandler { + + public IrMeteringPointSetImpl(DronePayloadParam param) { + super(param); + } + + @Override + public boolean canPublish(String deviceSn) { + super.canPublish(deviceSn); + return true; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java index a95ce9b..194b144 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java @@ -257,4 +257,18 @@ public class DeviceController { return PropertySetReplyResultEnum.SUCCESS.getResult() == result ? HttpResultResponse.success() : HttpResultResponse.error(result, String.valueOf(result)); } + + @Operation(summary = "设置无人机的属性参数。", description = "设置无人机的属性参数。") + @PutMapping("/{workspace_id}/devices/{device_sn}/propertyData") + public HttpResultResponse devicePropertySetData(@PathVariable("workspace_id") String workspaceId, + @PathVariable("device_sn") String dockSn, + @RequestBody JsonNode param) { + if (param.size() != 1) { + return HttpResultResponse.error(CloudSDKErrorEnum.INVALID_PARAMETER); + } + + int result = deviceService.devicePropertySetData(workspaceId, dockSn, param); + return PropertySetReplyResultEnum.SUCCESS.getResult() == result ? + HttpResultResponse.success() : HttpResultResponse.error(result, String.valueOf(result)); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/enums/PropertySetFieldEnum.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/enums/PropertySetFieldEnum.java index 94dab47..4007bef 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/enums/PropertySetFieldEnum.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/enums/PropertySetFieldEnum.java @@ -27,15 +27,15 @@ public enum PropertySetFieldEnum { // EXIT_WAYLINE_WHEN_RC_LOST(PropertySetEnum.EXIT_WAYLINE_WHEN_RC_LOST, .class), // -// THERMAL_CURRENT_PALETTE_STYLE(PropertySetEnum.THERMAL_CURRENT_PALETTE_STYLE, .class), + THERMAL_CURRENT_PALETTE_STYLE(PropertySetEnum.THERMAL_CURRENT_PALETTE_STYLE, ThermalCurrentPaletteStyleReceiver.class), // -// THERMAL_GAIN_MODE(PropertySetEnum.THERMAL_GAIN_MODE, .class), + THERMAL_GAIN_MODE(PropertySetEnum.THERMAL_GAIN_MODE, ThermalGaiModeReceiver.class), // -// THERMAL_ISOTHERM_STATE(PropertySetEnum.THERMAL_ISOTHERM_STATE, .class), + THERMAL_ISOTHERM_STATE(PropertySetEnum.THERMAL_ISOTHERM_STATE, ThermalIsothermStateReceiver.class), // -// THERMAL_ISOTHERM_UPPER_LIMIT(PropertySetEnum.THERMAL_ISOTHERM_UPPER_LIMIT, .class), + THERMAL_ISOTHERM_UPPER_LIMIT(PropertySetEnum.THERMAL_ISOTHERM_UPPER_LIMIT, ThermalIsothermUpperLimitReceiver.class), // -// THERMAL_ISOTHERM_LOWER_LIMIT(PropertySetEnum.THERMAL_ISOTHERM_LOWER_LIMIT, .class), + THERMAL_ISOTHERM_LOWER_LIMIT(PropertySetEnum.THERMAL_ISOTHERM_LOWER_LIMIT, ThermalIsothermLowerLimitReceiver.class), ; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalCurrentPaletteStyleReceiver.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalCurrentPaletteStyleReceiver.java new file mode 100644 index 0000000..b78b974 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalCurrentPaletteStyleReceiver.java @@ -0,0 +1,41 @@ +package org.dromara.sample.manage.model.receiver; + +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; +import org.dromara.common.sdk.cloudapi.device.PayloadIndex; +import org.dromara.common.sdk.cloudapi.device.ThermalPaletteStyleEnum; +import org.dromara.common.sdk.cloudapi.property.ThermalCurrentPaletteStyleSet; + +import java.util.Map; +import java.util.Objects; + +/** + * @author sean.zhou + * @date 2021/11/18 + * @version 0.1 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ThermalCurrentPaletteStyleReceiver extends BasicDeviceProperty { + + private String payloadIndex; + + private int thermalCurrentPaletteStyle; + + @Override + public boolean valid() { + return Objects.nonNull(payloadIndex) && Objects.nonNull(thermalCurrentPaletteStyle); + } + + @Override + public boolean canPublish(OsdDockDrone osd) { + return true; + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalGaiModeReceiver.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalGaiModeReceiver.java new file mode 100644 index 0000000..7eb6fdc --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalGaiModeReceiver.java @@ -0,0 +1,36 @@ +package org.dromara.sample.manage.model.receiver; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; + +import java.util.Objects; + +/** + * @author sean.zhou + * @date 2021/11/18 + * @version 0.1 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ThermalGaiModeReceiver extends BasicDeviceProperty { + + private String payloadIndex; + + private int thermalGainMde; + + @Override + public boolean valid() { + return Objects.nonNull(payloadIndex) && Objects.nonNull(thermalGainMde); + } + + @Override + public boolean canPublish(OsdDockDrone osd) { + return true; + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermLowerLimitReceiver.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermLowerLimitReceiver.java new file mode 100644 index 0000000..f171bad --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermLowerLimitReceiver.java @@ -0,0 +1,36 @@ +package org.dromara.sample.manage.model.receiver; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; + +import java.util.Objects; + +/** + * @author sean.zhou + * @date 2021/11/18 + * @version 0.1 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ThermalIsothermLowerLimitReceiver extends BasicDeviceProperty { + + private String payloadIndex; + + private int thermalIsothermLowerLimit; + + @Override + public boolean valid() { + return Objects.nonNull(payloadIndex) && Objects.nonNull(thermalIsothermLowerLimit); + } + + @Override + public boolean canPublish(OsdDockDrone osd) { + return true; + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermStateReceiver.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermStateReceiver.java new file mode 100644 index 0000000..d657528 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermStateReceiver.java @@ -0,0 +1,36 @@ +package org.dromara.sample.manage.model.receiver; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; + +import java.util.Objects; + +/** + * @author sean.zhou + * @date 2021/11/18 + * @version 0.1 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ThermalIsothermStateReceiver extends BasicDeviceProperty { + + private String payloadIndex; + + private int thermalIsothermState; + + @Override + public boolean valid() { + return Objects.nonNull(payloadIndex) && Objects.nonNull(thermalIsothermState); + } + + @Override + public boolean canPublish(OsdDockDrone osd) { + return true; + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermUpperLimitReceiver.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermUpperLimitReceiver.java new file mode 100644 index 0000000..e9ad205 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/receiver/ThermalIsothermUpperLimitReceiver.java @@ -0,0 +1,36 @@ +package org.dromara.sample.manage.model.receiver; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; + +import java.util.Objects; + +/** + * @author sean.zhou + * @date 2021/11/18 + * @version 0.1 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ThermalIsothermUpperLimitReceiver extends BasicDeviceProperty { + + private String payloadIndex; + + private int thermalIsothermUpperLimit; + + @Override + public boolean valid() { + return Objects.nonNull(payloadIndex) && Objects.nonNull(thermalIsothermUpperLimit); + } + + @Override + public boolean canPublish(OsdDockDrone osd) { + return true; + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java index 80e69e1..0067570 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java @@ -167,6 +167,8 @@ public interface IDeviceService { */ int devicePropertySet(String workspaceId, String dockSn, JsonNode param); + int devicePropertySetData(String workspaceId, String dockSn, JsonNode param); + /** * Check the working status of the dock. * @param dockSn diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java index bda7cef..c555847 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java @@ -687,12 +687,45 @@ public class DeviceServiceImpl implements IDeviceService { if (!isPublish) { return PropertySetReplyResultEnum.SUCCESS.getResult(); } - BaseModel baseModel = objectMapper.convertValue(param, propertyEnum.getProperty().getClazz()); + BaseModel baseModel = objectMapper.convertValue(param.get("thermal_current_palette_style"), propertyEnum.getProperty().getClazz()); PropertySetReplyResultEnum result = abstractPropertyService.propertySet( SDKManager.getDeviceSDK(dockSn), propertyEnum.getProperty(), baseModel); return result.getResult(); } + + @Override + public int devicePropertySetData(String workspaceId, String dockSn, JsonNode param) { + String property = param.fieldNames().next(); + PropertySetFieldEnum propertyEnum = PropertySetFieldEnum.find(property); + + Optional dockOpt = deviceRedisService.getDeviceOnline(dockSn); + if (dockOpt.isEmpty()) { + throw new RuntimeException("Dock处于脱机状态。"); + } + String childSn = dockOpt.get().getChildDeviceSn(); + Optional osdOpt = deviceRedisService.getDeviceOsd(childSn, OsdDockDrone.class); + if (osdOpt.isEmpty()) { + throw new RuntimeException("设备处于脱机状态。"); + } + + // Make sure the data is valid. + BasicDeviceProperty basicDeviceProperty = objectMapper.convertValue(param.get(property), propertyEnum.getClazz()); + boolean valid = basicDeviceProperty.valid(); + if (!valid) { + throw new IllegalArgumentException(CommonErrorEnum.ILLEGAL_ARGUMENT.getMessage()); + } + boolean isPublish = basicDeviceProperty.canPublish(osdOpt.get()); + if (!isPublish) { + return PropertySetReplyResultEnum.SUCCESS.getResult(); + } + + BaseModel baseModel = objectMapper.convertValue(param.get(property), propertyEnum.getProperty().getClazz()); + PropertySetReplyResultEnum result = abstractPropertyService.propertySet( + SDKManager.getDeviceSDK(dockSn), propertyEnum.getProperty(), baseModel); + return result.getResult(); + } + @Override public DockModeCodeEnum getDockMode(String dockSn) { return deviceRedisService.getDeviceOsd(dockSn, OsdDock.class) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java index 905b9fb..b20daaf 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java @@ -1,8 +1,11 @@ package org.dromara.sample.media.controller; +import com.amazonaws.util.IOUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import org.dromara.common.oss.core.OssClient; +import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.PaginationData; @@ -13,9 +16,12 @@ import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.io.IOException; +import java.io.*; import java.net.URL; +import java.net.URLEncoder; import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * @author sean @@ -86,6 +92,35 @@ public class FileController { return HttpResultResponse.success(filesList); } + + @GetMapping("/{workspace_id}/file/downloadZip/{job_id}") + public void downloadZip(HttpServletResponse response, @PathVariable(name = "workspace_id") String workspaceId, + @PathVariable(name = "job_id") String jobId, @RequestParam(name = "jobName", required = false) String jobName) throws UnsupportedEncodingException { + List mediaFileDTO = fileService.getFilesByWorkspaceAndJobId(workspaceId, jobId); + String fileName = "jobName.zip"; + response.setContentType("application/zip"); + response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); + try (OutputStream out = response.getOutputStream(); + ZipOutputStream zs = new ZipOutputStream(new BufferedOutputStream(out))) { + + zs.setMethod(ZipOutputStream.DEFLATED); // 设置压缩方法 + + for (MediaFileDTO mediaFile : mediaFileDTO) { + OssClient storage = OssFactory.instance("mediafile"); + //String privateUrlURL = storage.getPrivateUrl(mediaFile.getObjectKey(), 3600); + InputStream is = storage.getObjectContent(mediaFile.getObjectKey()); + String uniqueFileName = mediaFile.getFileName(); // 假设MediaFileDTO有getFileName方法 + ZipEntry entry = new ZipEntry(uniqueFileName); // 使用每个文件的实际名称 + zs.putNextEntry(entry); + IOUtils.copy(is, zs); + zs.closeEntry(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** * 根据文件id查询图片的偏航角 * @param fileId diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java index 3d0a0b9..4fcfc1a 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java @@ -109,6 +109,7 @@ public class FileServiceImpl implements IFileService { .collect(Collectors.toList()); } + @Override public PaginationData getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List proIds) { LoginUser loginUser = LoginHelper.getLoginUser(); diff --git a/dk-visual/nacos/src/main/resources/application.properties b/dk-visual/nacos/src/main/resources/application.properties index 972740f..44fe8a3 100644 --- a/dk-visual/nacos/src/main/resources/application.properties +++ b/dk-visual/nacos/src/main/resources/application.properties @@ -40,9 +40,9 @@ spring.sql.init.platform=mysql db.num=1 ### Connect URL of DB: -db.url.0=jdbc:mysql://127.0.0.1:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true +db.url.0=jdbc:mysql://114.235.183.147:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true db.user.0=root -db.password.0=123456 +db.password.0=dkcy@yf ### the maximum retry times for push nacos.config.push.maxRetryTime=50 diff --git a/pom.xml b/pom.xml index ff3f610..e6f81b4 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ dev - dev + wuyuan 127.0.0.1:8848 DEFAULT_GROUP DEFAULT_GROUP