diff --git a/dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/RemoteRocketmqMessageService.java b/dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/RemoteRocketmqMessageService.java new file mode 100644 index 0000000..813c8a2 --- /dev/null +++ b/dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/RemoteRocketmqMessageService.java @@ -0,0 +1,12 @@ +package org.dromara.rocketmq.api; + + +import org.dromara.rocketmq.api.domain.vo.RemoteProductMessageVo; + +import java.util.Map; + +public interface RemoteRocketmqMessageService { + + Map sendSynchronizeMessage(RemoteProductMessageVo remoteProductMessageVo); + +} diff --git a/dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/domain/vo/RemoteProductMessageVo.java b/dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/domain/vo/RemoteProductMessageVo.java new file mode 100644 index 0000000..3466c0a --- /dev/null +++ b/dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/domain/vo/RemoteProductMessageVo.java @@ -0,0 +1,12 @@ +package org.dromara.rocketmq.api.domain.vo; + +import lombok.Data; + +@Data +public class RemoteProductMessageVo { + + private String topic; + + private String message; + +} diff --git a/dk-api/api-sample/pom.xml b/dk-api/api-sample/pom.xml new file mode 100644 index 0000000..156e0ac --- /dev/null +++ b/dk-api/api-sample/pom.xml @@ -0,0 +1,26 @@ + + + + org.dromara + dk-api + ${revision} + + 4.0.0 + + api-sample + + api-sample无人机接口模块 + + + + + + + org.dromara + common-core + + + + diff --git a/dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java b/dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java new file mode 100644 index 0000000..88b19c7 --- /dev/null +++ b/dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java @@ -0,0 +1,19 @@ +package org.dromara.business.api; + + + +/** + * 预警服务 + * + * @author Lion Li + */ +public interface RemoteBusinessAlertService { + + + /** + * 更新此条预警审批时候的状态 + * @param businessId 业务id(预警、工单) + * @param flowStatus 流程状态 + */ + void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType,String message,String assignName); +} diff --git a/dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessTaskService.java b/dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessTaskService.java new file mode 100644 index 0000000..c0780ec --- /dev/null +++ b/dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessTaskService.java @@ -0,0 +1,17 @@ +package org.dromara.business.api; + +/** + * @auther yq + * @data 2025/3/18 + */ +public interface RemoteBusinessTaskService { + + + /** + * 更新预约工单状态 + * @param fileId 航线id + * @param jobId 飞行记录id + * @param isJobStatus 飞行状态 + */ + void updateTaskStatus(String fileId, String jobId,Boolean isJobStatus); +} diff --git a/dk-api/pom.xml b/dk-api/pom.xml index 273f93e..b68ef7c 100644 --- a/dk-api/pom.xml +++ b/dk-api/pom.xml @@ -14,6 +14,7 @@ api-resource api-workflow api-business + api-rocketmq dk-api diff --git a/dk-common/common-bus/pom.xml b/dk-common/common-bus/pom.xml index a22b19c..4a04b67 100644 --- a/dk-common/common-bus/pom.xml +++ b/dk-common/common-bus/pom.xml @@ -16,20 +16,20 @@ - - - org.springframework.cloud - spring-cloud-starter-bus-amqp - + + + + + - - - - + + com.alibaba.cloud + spring-cloud-starter-bus-rocketmq + diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java index c3b8806..d63bcc3 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java @@ -3,6 +3,7 @@ package org.dromara.common.sdk.cloudapi.device; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.v3.oas.annotations.media.Schema; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.sdk.exception.CloudSDKException; import java.util.Arrays; @@ -133,7 +134,12 @@ public enum DeviceEnum { @JsonCreator public static DeviceEnum find(String key) { - return Arrays.stream(values()).filter(device -> device.getDevice().equals(key)) - .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, key)); + if(StringUtils.isEmpty(key)){ + key = DeviceEnum.M3TD.getDevice(); + } + String finalKey = key; + String finalKey1 = key; + return Arrays.stream(values()).filter(device -> device.getDevice().equals(finalKey)) + .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); } } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/OsdDock.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/OsdDock.java index 42b5e8d..f8b1f73 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/OsdDock.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/OsdDock.java @@ -86,6 +86,8 @@ public class OsdDock { private DrcStateEnum drcState; + + /** * User experience improvement program */ diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallback.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallback.java index 59a44a2..8639886 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallback.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallback.java @@ -13,6 +13,9 @@ public class FileUploadCallback { private FileUploadCallbackFile file; + private FlightTask flightTask; + + public FileUploadCallback() { } @@ -22,6 +25,7 @@ public class FileUploadCallback { "result=" + result + ", progress=" + progress + ", file=" + file + + ", flightTask =" + flightTask + '}'; } @@ -51,4 +55,12 @@ public class FileUploadCallback { this.file = file; return this; } + + public FlightTask getFlightTask() { + return flightTask; + } + + public void setFlightTask(FlightTask flightTask) { + this.flightTask = flightTask; + } } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallbackFile.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallbackFile.java index 1062730..ac0216f 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallbackFile.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallbackFile.java @@ -16,6 +16,7 @@ public class FileUploadCallbackFile { private String objectKey; private UploadCallbackFileMetadata metadata; + private String cloudToCloudId; public FileUploadCallbackFile() { } @@ -28,6 +29,7 @@ public class FileUploadCallbackFile { ", path='" + path + '\'' + ", objectKey='" + objectKey + '\'' + ", metadata=" + metadata + + ", cloudToCloudId= " + cloudToCloudId + '}'; } @@ -75,4 +77,13 @@ public class FileUploadCallbackFile { this.metadata = metadata; return this; } + + public String getCloudToCloudId() { + return cloudToCloudId; + } + + public FileUploadCallbackFile setCloudToCloudId(String cloudToCloudId) { + this.cloudToCloudId = cloudToCloudId; + return this; + } } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FilghtTypeEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FilghtTypeEnum.java new file mode 100644 index 0000000..388b98b --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FilghtTypeEnum.java @@ -0,0 +1,36 @@ +package org.dromara.common.sdk.cloudapi.media; + +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.3 + * @date 2022/11/14 + */ +public enum FilghtTypeEnum { + + ROUTE(0), + + ONECLIKE(1); + + private final int type; + + FilghtTypeEnum(int type) { + this.type = type; + } + + @JsonValue + public int getType() { + return type; + } + + @JsonCreator + public static FilghtTypeEnum find(int type) { + return Arrays.stream(values()).filter(subFile -> subFile.type == type).findAny() + .orElseThrow(() -> new CloudSDKException(MediaSubFileTypeEnum.class, type)); + } +} diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FlightTask.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FlightTask.java new file mode 100644 index 0000000..688c6c4 --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FlightTask.java @@ -0,0 +1,54 @@ +package org.dromara.common.sdk.cloudapi.media; + +/** + * @author sean + * @version 1.1 + * @date 2022/6/9 + */ +public class FlightTask { + + private Integer uploadedFileCount; + + private Integer expectedFileCount; + + private FilghtTypeEnum flightType; + + + public FlightTask() { + } + + @Override + public String toString() { + return "FlightTask{" + + "uploadedFileCount=" + uploadedFileCount + + ", expectedFileCount=" + expectedFileCount + + ", flightType=" + flightType + + '}'; + } + + public Integer getUploadedFileCount() { + return uploadedFileCount; + } + + public void setUploadedFileCount(Integer uploadedFileCount) { + this.uploadedFileCount = uploadedFileCount; + } + + public Integer getExpectedFileCount() { + return expectedFileCount; + } + + public void setExpectedFileCount(Integer expectedFileCount) { + this.expectedFileCount = expectedFileCount; + } + + public FilghtTypeEnum getFlightType() { + return flightType; + } + + public void setFlightType(FilghtTypeEnum flightType) { + this.flightType = flightType; + } + + +} diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileExtension.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileExtension.java index 1f2b168..49e53bf 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileExtension.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileExtension.java @@ -19,13 +19,11 @@ public class MediaFileExtension { @Schema(description = "drone device product enum") private DeviceEnum droneModelKey; - @NotNull @JsonProperty("file_group_id") @Schema(description = "If the media file was shot during the wayline, this value will not be null.", format = "uuid") private String fileGroupId; @JsonProperty("is_original") - @NotNull @Schema(description = "Whether the image is the original image.") private Boolean original; diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileMetadata.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileMetadata.java index 1d072aa..f2e092a 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileMetadata.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileMetadata.java @@ -7,6 +7,7 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import java.time.LocalDateTime; +import java.util.Date; /** * @author sean @@ -25,7 +26,7 @@ public class MediaFileMetadata { @NotNull @Schema(description = "media create time", example = "2023-01-01T20:00:00+08:00") @JsonProperty("created_time") - private LocalDateTime createdTime; + private Date createdTime; @NotNull @JsonProperty("gimbal_yaw_degree") @@ -66,11 +67,11 @@ public class MediaFileMetadata { return this; } - public LocalDateTime getCreatedTime() { + public Date getCreatedTime() { return createdTime; } - public MediaFileMetadata setCreatedTime(LocalDateTime createdTime) { + public MediaFileMetadata setCreatedTime(Date createdTime) { this.createdTime = createdTime; return this; } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java index ca2de94..a3a6bf7 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java @@ -43,6 +43,9 @@ public class MediaUploadCallbackRequest { @NotNull private MediaFileMetadata metadata; + + private String cloudToCloudId; + public MediaUploadCallbackRequest() { } @@ -56,7 +59,8 @@ public class MediaUploadCallbackRequest { ", objectKey='" + objectKey + '\'' + ", subFileType=" + subFileType + ", metadata=" + metadata + - '}'; + ", cloudToCloudId= " + cloudToCloudId + + "}"; } public MediaFileExtension getExt() { @@ -121,4 +125,13 @@ public class MediaUploadCallbackRequest { this.metadata = metadata; return this; } + + public String getCloudToCloudId() { + return cloudToCloudId; + } + + public MediaUploadCallbackRequest setCloudToCloudId(String cloudToCloudId) { + this.cloudToCloudId = cloudToCloudId; + return this; + } } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/UploadCallbackFileMetadata.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/UploadCallbackFileMetadata.java index 4440af8..1889849 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/UploadCallbackFileMetadata.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/UploadCallbackFileMetadata.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDateTime; +import java.util.Date; /** * @author sean @@ -15,8 +16,7 @@ public class UploadCallbackFileMetadata { private Double absoluteAltitude; - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssVV") - private LocalDateTime createdTime; + private Date createdTime; private Double gimbalYawDegree; @@ -47,11 +47,11 @@ public class UploadCallbackFileMetadata { return this; } - public LocalDateTime getCreatedTime() { + public Date getCreatedTime() { return createdTime; } - public UploadCallbackFileMetadata setCreatedTime(LocalDateTime createdTime) { + public UploadCallbackFileMetadata setCreatedTime(Date createdTime) { this.createdTime = createdTime; return this; } diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java index bf6b127..c7e9c95 100644 --- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java +++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java @@ -98,11 +98,15 @@ public class WebSocketUtils { ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String jsonString = mapper.writeValueAsString(message); - WebSocketSessionHolder.getSessionsAll().forEach(key -> { - WebSocketSession session = WebSocketSessionHolder.getSessions(key); - sendMessage(session, jsonString); + WebSocketMessageDto broadcastMessage = new WebSocketMessageDto(); + broadcastMessage.setMessage(mapper.writeValueAsString(message)); + RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> { + log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message); }); +// WebSocketSessionHolder.getSessionsAll().forEach(key -> { +// WebSocketSession session = WebSocketSessionHolder.getSessions(key); +// sendMessage(session, jsonString); +// }); }catch (Exception e) { e.printStackTrace(); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java index c5b490e..279dbd9 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java @@ -1,5 +1,6 @@ package org.dromara.business.controller; +import cn.hutool.core.lang.Dict; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -80,7 +81,16 @@ public class BusinessAlertStatisticsController extends BaseController { } - + /** + * 出警效率 + * @param businessAlertBo + * @return + */ + @Operation(summary="出警效率", description="出警效率") + @GetMapping(value = "/handler/rate") + public R> handlerRate(BusinessAlertBo businessAlertBo,Dict dict) { + return R.ok(statisticsService.handlerRate(businessAlertBo)); + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java index 58392b0..335f53a 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java @@ -69,11 +69,13 @@ public interface BusinessAlertMapper extends BaseMapperPlus> countAlertTypeCompare(@Param("param") BusinessAlertBo businessAlertBo); - Integer countFromOldToCurrent(BusinessAlertBo businessAlertBo); + Integer countFromOldToCurrent(@Param("param") BusinessAlertBo businessAlertBo); - Map countCurrentAlert(BusinessAlertBo businessAlertBo); + Map countCurrentAlert(@Param("param") BusinessAlertBo businessAlertBo); - Map countMonthAlert(BusinessAlertBo businessAlertBo); + Map countMonthAlert(@Param("param") BusinessAlertBo businessAlertBo); - Map countCurrentDayAlert(BusinessAlertBo businessAlertBo); + Map countCurrentDayAlert(@Param("param") BusinessAlertBo businessAlertBo); + + Map handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("month") String month); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java index 95b6d9e..11b8a2c 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java @@ -29,4 +29,7 @@ public interface IBusinessAlertStatisticsService { Map countPostDayAlert(BusinessAlertBo businessAlertBo); List countPostAlert(BusinessAlertBo businessAlertBo); + + List handlerRate(BusinessAlertBo businessAlertBo); + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java index bcb4690..5736142 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java @@ -19,6 +19,8 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -222,7 +224,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist } postVoList.forEach(postVo -> { - List labelList = getAiLabel(businessAlertBo.getPostCode()); + List labelList = getAiLabel(postVo.getPostCode()); businessAlertBo.setAiLabelEnList(labelList); Map dayMap = this.baseMapper.countCurrentDayAlert(businessAlertBo); result.put(postVo.getPostName(), dayMap.get("total")); @@ -248,7 +250,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist } postVoList.forEach(postVo -> { - List labelList = getAiLabel(businessAlertBo.getPostCode()); + List labelList = getAiLabel(postVo.getPostCode()); businessAlertBo.setAiLabelEnList(labelList); Map dateMap = switch (businessAlertBo.getDateType()) { case 1 -> baseMapper.countCurrentAlert(businessAlertBo); @@ -269,6 +271,56 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist return result; } + /** + * 出警效率 + * @param businessAlertBo + * @return + */ + @Override + public List handlerRate(BusinessAlertBo businessAlertBo) { + //查询所有的职能岗位 + List postVoList = remotePostService.listPost(); + + List monthList = getLastSixMonths(); + + List result = new ArrayList<>(); + + monthList.forEach(month -> { + StatObj statObj = new StatObj(); + statObj.setStatKey(month); + List statObjs = new ArrayList<>(); + postVoList.forEach(postVo -> { + List labelList = getAiLabel(postVo.getPostCode()); + businessAlertBo.setAiLabelEnList(labelList); + Map rateMap = baseMapper.handlerRate(businessAlertBo,month); + StatObj statObj1 = new StatObj(); + statObj1.setStatKey(postVo.getPostName()); + statObj1.setStatVal(rateMap.get("avgInfo")); + statObjs.add(statObj1); + }); + statObj.setNextStatList(statObjs); + + result.add(statObj); + }); + return result; + } + + /** + * 获取近6个月的月份集合(格式:yyyy-MM) + */ + public static List getLastSixMonths() { + List months = new ArrayList<>(6); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + + for (int i = 0; i < 6; i++) { + LocalDate date = currentDate.minusMonths(i); + months.add(date.format(formatter)); + } + + return months; + } + private List buildDateList(BusinessAlertBo businessAlertBo) { List resultList = new ArrayList<>(); String currentYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index 353353d..9009c93 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -428,4 +428,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java index 79cabc0..ec7273a 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java @@ -97,7 +97,7 @@ public class DeviceQrtzController extends BaseController { @SaCheckPermission("devict:qrtz:edit") @Log(title = "自动飞行任务启停", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PostMapping("status") + @GetMapping("status") public R status(@Validated@NotNull(message = "任务id不能为空") Long id ,@NotNull(message = "状态不能为空") Integer status) { return toAjax(deviceQrtzService.update(id,status)); } @@ -133,16 +133,16 @@ public class DeviceQrtzController extends BaseController { @Log(title = "自动飞行新增航线", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/addFileList") - public R addFileList(@Validated(AddGroup.class) @RequestBody DeviceQrtzFileDTO deviceQrtzFileDTO) { - return toAjax(deviceQrtzService.addFileList(deviceQrtzFileDTO)); + public R addFileList(@RequestBody Mapmap) { + return toAjax(deviceQrtzService.addFileList(map)); } /** 自动飞行-复制航线*/ @SaCheckPermission("devict:qrtz:copy") - @Log(title = "自动飞行新增航线", businessType = BusinessType.INSERT) + @Log(title = "自动飞行复制航线", businessType = BusinessType.INSERT) @RepeatSubmit() - @PostMapping("/copy") + @GetMapping("/copy") public R copy(@Validated@NotNull(message = "任务id不能为空") Long qrtzId ,@NotNull(message = "请选择原来的时间") String starDate,@NotNull(message ="请选择新的时间") String endDate) { return toAjax(deviceQrtzService.copy(qrtzId,starDate,endDate)); } @@ -154,9 +154,8 @@ public class DeviceQrtzController extends BaseController { */ @SaCheckPermission("devict:qrtz:remove") @Log(title = "自动飞行航线删除", businessType = BusinessType.DELETE) - @DeleteMapping("/fileRemove/{id}") - public R fileRemove(@NotEmpty(message = "主键不能为空") - @PathVariable Long id) { + @DeleteMapping("/fileRemove") + public R fileRemove(@NotNull(message = "主键不能为空")Long id) { return toAjax(deviceQrtzService.fileRemove(id)); } @@ -169,7 +168,7 @@ public class DeviceQrtzController extends BaseController { @SaCheckPermission("devict:qrtz:edit") @Log(title = "自动飞行编辑航线排序", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PostMapping("/fileSort") + @GetMapping("/fileSort") public R fileSort(@Validated@NotNull(message = "主键id不能为空") Long id ,@NotNull(message = "排序") Integer sort) { return toAjax(deviceQrtzService.fileSort(id,sort)); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java index 8f0f83d..8340f37 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java @@ -59,8 +59,6 @@ public class DeviceHmsEntity implements Serializable, Cloneable { @TableField("create_time") private Date createTime; - @TableField("update_time") - private Date updateTime; @Override public DeviceHmsEntity clone() { @@ -71,7 +69,6 @@ public class DeviceHmsEntity implements Serializable, Cloneable { .bid(this.getBid()) .tid(this.getTid()) .createTime(this.getCreateTime()) - .updateTime(this.getUpdateTime()) .sn(this.getSn()) .build(); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzEntity.java index 61bb001..9c7cd82 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzEntity.java @@ -28,7 +28,6 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -@JsonNaming() // 设置为驼峰命名风格 public class DeviceQrtzEntity extends BaseEntity { @TableId(type = IdType.AUTO) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzFileEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzFileEntity.java index 6f43149..77a4773 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzFileEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzFileEntity.java @@ -44,8 +44,7 @@ public class DeviceQrtzFileEntity implements Serializable { private Integer status; - - + private String deviceSn; /** * 飞行时间 @@ -64,7 +63,7 @@ public class DeviceQrtzFileEntity implements Serializable { */ - private String createBy; + private Long createBy; /** * 创建时间 @@ -83,6 +82,17 @@ public class DeviceQrtzFileEntity implements Serializable { private Date updateTime; + private Long createDept; + /** + * 部门名称 */ + + private String deptName; + + + /** + * 用户名称 */ + + private String nickName; /** * 删除 0 正常 1已删除 */ 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 bcd2f01..f40df20 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 @@ -47,8 +47,11 @@ public interface IDeviceQrtzService { Boolean add( DeviceQrtzDTO deviceQrtzDTO); Boolean deleteIds(Collection ids); Boolean fileRemove(Long id); - Boolean addFileList(DeviceQrtzFileDTO deviceQrtzFileDTO); + Boolean addFileList(Mapmap); Boolean copy(Long qrtzId ,String starDate,String endDate); Boolean fileSort(Long id ,Integer sort); + + //通知启用飞行任务 + DeviceQrtzFileEntity getDeviceQrtzFileEntity(String deviceSn); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java index a1eedb0..924bd64 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java @@ -74,7 +74,6 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH .bid(response.getBid()) .tid(response.getTid()) .createTime(new Date(response.getTimestamp())) - .updateTime(null) .sn(sn) .build(); // Query all unread hms messages of the device in redis. @@ -113,7 +112,6 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH .and(wrapper -> param.getDeviceSn().forEach(sn -> wrapper.eq(DeviceHmsEntity::getSn, sn).or())) .between(param.getBeginTime() != null && param.getEndTime() != null, DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime()) - .eq(param.getUpdateTime() != null, DeviceHmsEntity::getUpdateTime, param.getUpdateTime()) .eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel()) .like(StringUtils.hasText(param.getMessage()) && HmsMessageLanguageEnum.ZH.getLanguage().equals(param.getLanguage()), @@ -136,10 +134,9 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH @Override public void updateUnreadHms(String deviceSn) { - mapper.update(DeviceHmsEntity.builder().updateTime(new Date()).build(), + mapper.update(DeviceHmsEntity.builder().build(), new LambdaUpdateWrapper() - .eq(DeviceHmsEntity::getSn, deviceSn) - .eq(DeviceHmsEntity::getUpdateTime, 0L)); + .eq(DeviceHmsEntity::getSn, deviceSn)); // Delete unread messages cached in redis. deviceRedisService.delHmsKeysBySn(deviceSn); } @@ -152,7 +149,6 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH .bid(entity.getBid()) .tid(entity.getTid()) .createTime(entity.getCreateTime()) - .updateTime(entity.getUpdateTime()) .sn(entity.getSn()) .hmsId(entity.getHmsId()) .key(entity.getHmsKey()) 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 ba62b61..b7b2827 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 @@ -4,13 +4,13 @@ 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.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; + import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.core.constant.DeviceQrtzConstants; -import org.dromara.common.core.utils.MapstructUtils; + import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.sample.manage.mapper.IDeviceMapper; + import org.dromara.sample.manage.mapper.IDeviceQrtzDateMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzMapper; @@ -21,9 +21,9 @@ import org.dromara.sample.manage.model.entity.DeviceQrtzDateEntity; import org.dromara.sample.manage.model.entity.DeviceQrtzEntity; import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity; import org.dromara.sample.manage.service.IDeviceQrtzDateService; -import org.dromara.sample.manage.service.IDeviceQrtzFileService; + import org.dromara.sample.manage.service.IDeviceQrtzService; -import org.dromara.sample.manage.service.IDeviceService; + import org.dromara.sample.wayline.mapper.IWaylineFileMapper; import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.system.api.model.LoginUser; @@ -32,6 +32,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; 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; @@ -174,29 +178,37 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { } @Override - public Boolean addFileList(DeviceQrtzFileDTO deviceQrtzFileDTO) { + public Boolean addFileList(Mapmap) { int sort=1; + Long qrtzId = Convert.toLong(map.get("qrtzId")); + Date execDate = Convert.toDate(map.get("execDate")); + String waylineIdStr = Convert.toStr(map.get("waylineIdStr")); List selectList = deviceQrtzFileMapper.selectList(new QueryWrapper() - .eq("qrtz_id", deviceQrtzFileDTO.getQrtzId()).eq("exec_date",deviceQrtzFileDTO.getExecDate()) - .orderByDesc("sort")); + .eq("qrtz_id", qrtzId).eq("exec_date",execDate).orderByDesc("sort")); if(!CollectionUtils.isEmpty(selectList)){ Integer number =selectList.get(0).getSort(); if(ObjectUtil.isNotEmpty(number)){ sort=number+1; } } - for (String waylineId : deviceQrtzFileDTO.getWaylineIdStr().split(",")) { + for (String waylineId : waylineIdStr.split(",")) { DeviceQrtzFileEntity entity = new DeviceQrtzFileEntity(); QueryWrapper queryWrapper = new QueryWrapper().eq("wayline_id", waylineId); WaylineFileEntity fileEntity = waylineFileMapper.selectOne(queryWrapper); - entity.setQrtzId(deviceQrtzFileDTO.getQrtzId()); + entity.setDeviceSn(fileEntity.getDeviceSn()); + entity.setQrtzId(qrtzId); entity.setWaylineId(waylineId); entity.setWaylineName(fileEntity.getName()); try { entity.setSort(sort); entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1); - entity.setExecDate(deviceQrtzFileDTO.getExecDate()); - + entity.setExecDate(execDate); + LoginUser loginUser = LoginHelper.getLoginUser(); + entity.setCreateBy(loginUser.getUserId()); + entity.setCreateTime(new Date()); + entity.setNickName(loginUser.getNickname()); + entity.setCreateDept(loginUser.getDeptId()); + entity.setDeptName(loginUser.getDeptName()); sort=sort+1; deviceQrtzFileMapper.insert(entity); }catch (Exception e){ @@ -220,6 +232,12 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { entity.setSort(e.getSort()); entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1); entity.setExecDate(Convert.toDate(endDate)); + LoginUser loginUser = LoginHelper.getLoginUser(); + entity.setCreateBy(loginUser.getUserId()); + entity.setCreateTime(new Date()); + entity.setNickName(loginUser.getNickname()); + entity.setCreateDept(loginUser.getDeptId()); + entity.setDeptName(loginUser.getDeptName()); return entity; }).toList(); return deviceQrtzFileMapper.insert(entityList).size()>0; @@ -236,4 +254,40 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { entity.setId(id); return deviceQrtzFileMapper.updateById(entity)>0; } + + + @Override + public DeviceQrtzFileEntity getDeviceQrtzFileEntity(String deviceSn) { + if(StrUtil.isNotEmpty(deviceSn)){ + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + // 格式化当前日期 + 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")); + if(!qrtzFileEntityList.isEmpty()){ + DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0); + List qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId()); + if(!qrtzDateEntityList.isEmpty()){ + // 获取当前日期和时间 + LocalDateTime currentDateTime = LocalDateTime.now(); + for (DeviceQrtzDateEntity qrtzDate : qrtzDateEntityList) { + if (!currentDateTime.isBefore(Convert.toLocalDateTime(qrtzDate.getStartDate())) && !currentDateTime.isAfter(Convert.toLocalDateTime(qrtzDate.getEndDate()))){ + //获取航线数据发送之类 + //获取是否是工单航线,是修改状态 + + } + + + } + + } + } + + } + return null; + } } 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 38f62fa..6357e53 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 @@ -16,10 +16,7 @@ import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DevicePayloadReceiver; import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum; import org.dromara.sample.manage.model.param.DeviceQueryParam; -import org.dromara.sample.manage.service.IDeviceDictionaryService; -import org.dromara.sample.manage.service.IDevicePayloadService; -import org.dromara.sample.manage.service.IDeviceRedisService; -import org.dromara.sample.manage.service.IDeviceService; +import org.dromara.sample.manage.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.MessageHeaders; @@ -30,6 +27,8 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.stream.Collectors; /** @@ -53,6 +52,11 @@ public class SDKDeviceService extends AbstractDeviceService { @Autowired private IDevicePayloadService devicePayloadService; + @Autowired + private IDeviceQrtzService deviceQrtzService; + + private ExecutorService executor = Executors.newFixedThreadPool(5); + @Override public TopicStatusResponse updateTopoOnline(TopicStatusRequest request, MessageHeaders headers) { UpdateTopoSubDevice updateTopoSubDevice = request.getData().getSubDevices().get(0); @@ -147,6 +151,16 @@ public class SDKDeviceService extends AbstractDeviceService { if (StringUtils.hasText(device.getChildDeviceSn())) { deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren); } + if(request.getData().getDroneChargeState() != null + && request.getData().getDroneChargeState().getState() == false + && request.getData().getDroneChargeState().getCapacityPercent() >= 80){ + executor.execute(new Runnable() { + @Override + public void run() { + deviceQrtzService.getDeviceQrtzFileEntity(device.getDeviceSn()); + } + }); + } deviceRedisService.setDeviceOnline(device); fillDockOsd(from, request.getData()); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java index e86035e..d24b1bf 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.time.LocalDateTime; import java.util.Date; /** @@ -65,5 +66,49 @@ public class MediaFileEntity implements Serializable { @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private Date updateTime; + + @TableField("lat") + private Double lat; + + @TableField("lng") + private Double lng; + + @TableField("absolute_altitude") + private Double absoluteAltitude; + + @TableField("relative_altitude") + private Double relativeAltitude; + + @TableField("shoot_time") + private Date shootTime; + + @TableField("gimbal_yaw_degree") + private Double gimbalYawDegree; + + @TableField("cloud_to_cloud_id") + private String cloudToCloudId; + + @TableField("uploaded_file_count") + private Integer uploadedFileCount; + + @TableField("expected_file_count") + private Integer expectedFileCount; + + @TableField("flight_type") + private Integer flightType; + + /** + * 文件类型jpeg、mp4、RTK、OBS、NAV、MRK、DAT + */ + @TableField("file_type") + private String fileType; + + /** + * 后缀类型广角 W、广角 V、红外 T、变焦 Z、RTCM文件 D 、PPK + */ + @TableField("file_status") + private String fileStatus; + + private Integer fileIndex; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index 63fa171..eaeb25d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -1,5 +1,6 @@ package org.dromara.sample.media.service; +import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.PaginationData; import org.dromara.sample.media.model.MediaFileDTO; @@ -28,7 +29,7 @@ public interface IFileService { * @param file * @return */ - Integer saveFile(String workspaceId, MediaUploadCallbackRequest file); + Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask); /** * Query information about all files in this workspace based on the workspace id. 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 b288c68..a150e93 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.sdk.cloudapi.device.DeviceEnum; +import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.Pagination; @@ -20,9 +21,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.net.URL; +import java.sql.Time; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -65,10 +68,16 @@ public class FileServiceImpl implements IFileService { } @Override - public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file) { - MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file); + public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask) { + MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file,flightTask); fileEntity.setWorkspaceId(workspaceId); fileEntity.setFileId(UUID.randomUUID().toString()); + fileEntity.setFileType(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf(".")+1)); + fileEntity.setFileStatus(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf("_")+1, fileEntity.getFileName().lastIndexOf("."))); + int firstUnderscore = fileEntity.getFileName().indexOf("_"); + int secondUnderscore = fileEntity.getFileName().indexOf("_", firstUnderscore + 1); + int thirdUnderscore = fileEntity.getFileName().indexOf("_", secondUnderscore + 1); + fileEntity.setFileIndex(Integer.parseInt(fileEntity.getFileName().substring(secondUnderscore+1,thirdUnderscore))); return mapper.insert(fileEntity); } @@ -120,7 +129,7 @@ public class FileServiceImpl implements IFileService { * @param file * @return */ - private MediaFileEntity fileUploadConvertToEntity(MediaUploadCallbackRequest file) { + private MediaFileEntity fileUploadConvertToEntity(MediaUploadCallbackRequest file,FlightTask flightTask) { MediaFileEntity.MediaFileEntityBuilder builder = MediaFileEntity.builder(); if (file != null) { @@ -133,7 +142,17 @@ public class FileServiceImpl implements IFileService { .jobId(file.getExt().getFileGroupId()) .drone(file.getExt().getSn()) .tinnyFingerprint(file.getExt().getTinnyFingerprint()) - .payload(file.getExt().getPayloadModelKey().getDevice()); + .payload(file.getExt().getPayloadModelKey().getDevice()) + .lat(file.getMetadata().getShootPosition().getLat()) + .lng(file.getMetadata().getShootPosition().getLng()) + .gimbalYawDegree(file.getMetadata().getGimbalYawDegree()) + .absoluteAltitude(file.getMetadata().getAbsoluteAltitude()) + .relativeAltitude(file.getMetadata().getRelativeAltitude()) + .shootTime(file.getMetadata().getCreatedTime()) + .cloudToCloudId(file.getCloudToCloudId()) + .flightType(flightTask.getFlightType().getType()) + .uploadedFileCount(flightTask != null ? flightTask.getUploadedFileCount() : null) + .expectedFileCount(flightTask != null ? flightTask.getExpectedFileCount() : null); // domain-type-subType DeviceEnum payloadModelKey = file.getExt().getPayloadModelKey(); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java index d95693a..81880ee 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java @@ -64,7 +64,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ @Override public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file) { - return fileService.saveFile(workspaceId, file); + return fileService.saveFile(workspaceId, file,null); } @Override @@ -156,8 +156,9 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile")) .filter(index -> index > 0).map(index -> index++).orElse(0), objectKey.lastIndexOf("/"))); + Integer fileFlag = fileService.saveFile(device.getWorkspaceId(), file, callback.getFlightTask()); - return fileService.saveFile(device.getWorkspaceId(), file) > 0; + return fileFlag> 0; } private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest request, String jobId, DeviceDTO dock) { @@ -208,6 +209,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ .get()) .setName(file.getName()) .setObjectKey(file.getObjectKey()) - .setPath(file.getPath()); + .setPath(file.getPath()) + .setCloudToCloudId(file.getCloudToCloudId()); } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java index 89d7c2b..543e794 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java @@ -65,13 +65,13 @@ public class WaylineFileController implements IHttpWaylineService { */ @PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/upload") @Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。") - public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file) { + public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,String deviceSn) { if (Objects.isNull(file)) { return HttpResultResponse.error("未收到文件。"); } LoginUser loginUser = LoginHelper.getLoginUser(); String creator = loginUser.getUsername(); - waylineFileService.importKmzFile(file, workspaceId, creator); + waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn); return HttpResultResponse.success(); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java index e83206b..828b018 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java @@ -45,4 +45,6 @@ public class WaylineFileDTO { private String deviceName; + private Integer fileNo; + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java index dfce95c..32ac78d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java @@ -30,6 +30,9 @@ public class WaylineFileEntity implements Serializable { @TableField("wayline_id") private String waylineId; + @TableField("device_sn") + private String deviceSn; + @TableField("drone_model_key") private String droneModelKey; @@ -60,6 +63,9 @@ public class WaylineFileEntity implements Serializable { @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private Date updateTime; + @TableField(value = "file_no") + private String fileNo; + @TableField(exist = false) private String deviceName; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java index 95a5a08..0c16986 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java @@ -81,7 +81,7 @@ public interface IWaylineFileService { * @param creator * @return */ - void importKmzFile(MultipartFile file, String workspaceId, String creator); + void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn); String getWaylineIdByFileId(Integer fileId); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java index 938c67d..f140aee 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java @@ -197,12 +197,18 @@ public class WaylineFileServiceImpl implements IWaylineFileService { } @Override - public void importKmzFile(MultipartFile file, String workspaceId, String creator) { + public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn) { Optional waylineFileOpt = validKmzFile(file); if (waylineFileOpt.isEmpty()) { throw new RuntimeException("文件格式不正确。"); } + if (!StringUtils.hasText(deviceSn)) { + throw new RuntimeException("文件格式不正确。"); + } try { + List waylineFileEntities = mapper.selectList(new LambdaQueryWrapper() + .eq(WaylineFileEntity::getDeviceSn, deviceSn).orderBy(true, false, WaylineFileEntity::getFileNo).last(" limit 1")); + WaylineFileDTO waylineFile = waylineFileOpt.get(); waylineFile.setUsername(creator); OssClient storage = OssFactory.instance("waylinefile"); @@ -210,6 +216,14 @@ public class WaylineFileServiceImpl implements IWaylineFileService { String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); waylineFile.setObjectKey(uploadResult.getFilename()); + List deviceSns = new ArrayList<>(); + deviceSns.add(deviceSn); + waylineFile.setDeviceSns(deviceSns); + if(CollectionUtils.isNotEmpty(waylineFileEntities)) { + waylineFile.setFileNo(waylineFileEntities.size()+1); + }else { + waylineFile.setFileNo(1); + } this.saveWaylineFile(workspaceId, waylineFile); } catch (IOException e) { e.printStackTrace(); diff --git a/dk-visual/rocketmq/pom.xml b/dk-visual/rocketmq/pom.xml index 9252d69..d222fc2 100644 --- a/dk-visual/rocketmq/pom.xml +++ b/dk-visual/rocketmq/pom.xml @@ -62,6 +62,34 @@ org.dromara common-web + + + org.dromara + common-dubbo + + + + org.dromara + common-seata + + + + org.dromara + api-workflow + + + + org.dromara + api-resource + + + org.dromara + api-rocketmq + 2.2.2 + compile + + + diff --git a/dk-visual/rocketmq/src/main/java/com/ruoyi/rocketmq/dubbo/RemoteRocketmqMessageServiceImpl.java b/dk-visual/rocketmq/src/main/java/com/ruoyi/rocketmq/dubbo/RemoteRocketmqMessageServiceImpl.java new file mode 100644 index 0000000..1a88289 --- /dev/null +++ b/dk-visual/rocketmq/src/main/java/com/ruoyi/rocketmq/dubbo/RemoteRocketmqMessageServiceImpl.java @@ -0,0 +1,32 @@ +package com.ruoyi.rocketmq.dubbo; + +import com.ruoyi.rocketmq.producer.MessageProducer; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.apache.rocketmq.client.producer.SendResult; +import org.dromara.rocketmq.api.RemoteRocketmqMessageService; +import org.dromara.rocketmq.api.domain.vo.RemoteProductMessageVo; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@DubboService +@Service +@RequiredArgsConstructor +public class RemoteRocketmqMessageServiceImpl implements RemoteRocketmqMessageService { + + /** + * + * @return + */ + @Override + public Map sendSynchronizeMessage(RemoteProductMessageVo remoteProductMessageVo){ + MessageProducer messageProducer = new MessageProducer(); + //调用MessageProducer配置好的消息方法 + SendResult sendResult = messageProducer.sendSynchronizeMessage(remoteProductMessageVo.getTopic(),"order_message_tag","title",remoteProductMessageVo.getMessage()); + Map result = new HashMap<>(); + result.put("data",sendResult); + return result; + } +} diff --git a/pom.xml b/pom.xml index 63a9d40..e2c75c9 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ dev - dev + wuyuan 127.0.0.1:8848 DEFAULT_GROUP DEFAULT_GROUP