Browse Source

Merge branch 'master' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone

# Conflicts:
#	dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java
pull/1/head
李克 3 months ago
parent
commit
2b0314e0bb
  1. 12
      dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/RemoteRocketmqMessageService.java
  2. 12
      dk-api/api-rocketmq/src/main/java/org/dromara/rocketmq/api/domain/vo/RemoteProductMessageVo.java
  3. 26
      dk-api/api-sample/pom.xml
  4. 19
      dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java
  5. 17
      dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessTaskService.java
  6. 1
      dk-api/pom.xml
  7. 18
      dk-common/common-bus/pom.xml
  8. 10
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java
  9. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/OsdDock.java
  10. 12
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallback.java
  11. 11
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FileUploadCallbackFile.java
  12. 36
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FilghtTypeEnum.java
  13. 54
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/FlightTask.java
  14. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileExtension.java
  15. 7
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaFileMetadata.java
  16. 15
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java
  17. 8
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/UploadCallbackFileMetadata.java
  18. 12
      dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
  19. 12
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  20. 10
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  21. 3
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java
  22. 56
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  23. 9
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  24. 17
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceQrtzController.java
  25. 3
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java
  26. 1
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzEntity.java
  27. 16
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzFileEntity.java
  28. 5
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceQrtzService.java
  29. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java
  30. 78
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  31. 22
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  32. 45
      dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java
  33. 3
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  34. 27
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  35. 8
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  36. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  37. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java
  38. 6
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java
  39. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java
  40. 16
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  41. 28
      dk-visual/rocketmq/pom.xml
  42. 32
      dk-visual/rocketmq/src/main/java/com/ruoyi/rocketmq/dubbo/RemoteRocketmqMessageServiceImpl.java
  43. 2
      pom.xml

12
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<String,Object> sendSynchronizeMessage(RemoteProductMessageVo remoteProductMessageVo);
}

12
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;
}

26
dk-api/api-sample/pom.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>dk-api</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api-sample</artifactId>
<description>api-sample无人机接口模块
</description>
<dependencies>
<!-- RuoYi Common Core-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-core</artifactId>
</dependency>
</dependencies>
</project>

19
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);
}

17
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);
}

1
dk-api/pom.xml

@ -14,6 +14,7 @@
<module>api-resource</module> <module>api-resource</module>
<module>api-workflow</module> <module>api-workflow</module>
<module>api-business</module> <module>api-business</module>
<module>api-rocketmq</module>
</modules> </modules>
<artifactId>dk-api</artifactId> <artifactId>dk-api</artifactId>

18
dk-common/common-bus/pom.xml

@ -16,20 +16,20 @@
</description> </description>
<dependencies> <dependencies>
<!-- rabbitmq --> <!-- &lt;!&ndash; rabbitmq &ndash;&gt;-->
<dependency> <!-- <dependency>-->
<groupId>org.springframework.cloud</groupId> <!-- <groupId>org.springframework.cloud</groupId>-->
<artifactId>spring-cloud-starter-bus-amqp</artifactId> <!-- <artifactId>spring-cloud-starter-bus-amqp</artifactId>-->
</dependency> <!-- </dependency>-->
<!-- kafka --> <!-- kafka -->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>--> <!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-bus-kafka</artifactId>--> <!-- <artifactId>spring-cloud-starter-bus-kafka</artifactId>-->
<!-- </dependency>--> <!-- </dependency>-->
<!-- rocketmq --> <!-- rocketmq -->
<!-- <dependency>--> <dependency>
<!-- <groupId>com.alibaba.cloud</groupId>--> <groupId>com.alibaba.cloud</groupId>
<!-- <artifactId>spring-cloud-starter-bus-rocketmq</artifactId>--> <artifactId>spring-cloud-starter-bus-rocketmq</artifactId>
<!-- </dependency>--> </dependency>
</dependencies> </dependencies>
</project> </project>

10
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.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.sdk.exception.CloudSDKException; import org.dromara.common.sdk.exception.CloudSDKException;
import java.util.Arrays; import java.util.Arrays;
@ -133,7 +134,12 @@ public enum DeviceEnum {
@JsonCreator @JsonCreator
public static DeviceEnum find(String key) { public static DeviceEnum find(String key) {
return Arrays.stream(values()).filter(device -> device.getDevice().equals(key)) if(StringUtils.isEmpty(key)){
.findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, 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));
} }
} }

2
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; private DrcStateEnum drcState;
/** /**
* User experience improvement program * User experience improvement program
*/ */

12
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 FileUploadCallbackFile file;
private FlightTask flightTask;
public FileUploadCallback() { public FileUploadCallback() {
} }
@ -22,6 +25,7 @@ public class FileUploadCallback {
"result=" + result + "result=" + result +
", progress=" + progress + ", progress=" + progress +
", file=" + file + ", file=" + file +
", flightTask =" + flightTask +
'}'; '}';
} }
@ -51,4 +55,12 @@ public class FileUploadCallback {
this.file = file; this.file = file;
return this; return this;
} }
public FlightTask getFlightTask() {
return flightTask;
}
public void setFlightTask(FlightTask flightTask) {
this.flightTask = flightTask;
}
} }

11
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 String objectKey;
private UploadCallbackFileMetadata metadata; private UploadCallbackFileMetadata metadata;
private String cloudToCloudId;
public FileUploadCallbackFile() { public FileUploadCallbackFile() {
} }
@ -28,6 +29,7 @@ public class FileUploadCallbackFile {
", path='" + path + '\'' + ", path='" + path + '\'' +
", objectKey='" + objectKey + '\'' + ", objectKey='" + objectKey + '\'' +
", metadata=" + metadata + ", metadata=" + metadata +
", cloudToCloudId= " + cloudToCloudId +
'}'; '}';
} }
@ -75,4 +77,13 @@ public class FileUploadCallbackFile {
this.metadata = metadata; this.metadata = metadata;
return this; return this;
} }
public String getCloudToCloudId() {
return cloudToCloudId;
}
public FileUploadCallbackFile setCloudToCloudId(String cloudToCloudId) {
this.cloudToCloudId = cloudToCloudId;
return this;
}
} }

36
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));
}
}

54
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;
}
}

2
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") @Schema(description = "drone device product enum")
private DeviceEnum droneModelKey; private DeviceEnum droneModelKey;
@NotNull
@JsonProperty("file_group_id") @JsonProperty("file_group_id")
@Schema(description = "If the media file was shot during the wayline, this value will not be null.", format = "uuid") @Schema(description = "If the media file was shot during the wayline, this value will not be null.", format = "uuid")
private String fileGroupId; private String fileGroupId;
@JsonProperty("is_original") @JsonProperty("is_original")
@NotNull
@Schema(description = "Whether the image is the original image.") @Schema(description = "Whether the image is the original image.")
private Boolean original; private Boolean original;

7
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 jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
/** /**
* @author sean * @author sean
@ -25,7 +26,7 @@ public class MediaFileMetadata {
@NotNull @NotNull
@Schema(description = "media create time", example = "2023-01-01T20:00:00+08:00") @Schema(description = "media create time", example = "2023-01-01T20:00:00+08:00")
@JsonProperty("created_time") @JsonProperty("created_time")
private LocalDateTime createdTime; private Date createdTime;
@NotNull @NotNull
@JsonProperty("gimbal_yaw_degree") @JsonProperty("gimbal_yaw_degree")
@ -66,11 +67,11 @@ public class MediaFileMetadata {
return this; return this;
} }
public LocalDateTime getCreatedTime() { public Date getCreatedTime() {
return createdTime; return createdTime;
} }
public MediaFileMetadata setCreatedTime(LocalDateTime createdTime) { public MediaFileMetadata setCreatedTime(Date createdTime) {
this.createdTime = createdTime; this.createdTime = createdTime;
return this; return this;
} }

15
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java

@ -43,6 +43,9 @@ public class MediaUploadCallbackRequest {
@NotNull @NotNull
private MediaFileMetadata metadata; private MediaFileMetadata metadata;
private String cloudToCloudId;
public MediaUploadCallbackRequest() { public MediaUploadCallbackRequest() {
} }
@ -56,7 +59,8 @@ public class MediaUploadCallbackRequest {
", objectKey='" + objectKey + '\'' + ", objectKey='" + objectKey + '\'' +
", subFileType=" + subFileType + ", subFileType=" + subFileType +
", metadata=" + metadata + ", metadata=" + metadata +
'}'; ", cloudToCloudId= " + cloudToCloudId +
"}";
} }
public MediaFileExtension getExt() { public MediaFileExtension getExt() {
@ -121,4 +125,13 @@ public class MediaUploadCallbackRequest {
this.metadata = metadata; this.metadata = metadata;
return this; return this;
} }
public String getCloudToCloudId() {
return cloudToCloudId;
}
public MediaUploadCallbackRequest setCloudToCloudId(String cloudToCloudId) {
this.cloudToCloudId = cloudToCloudId;
return this;
}
} }

8
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 io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
/** /**
* @author sean * @author sean
@ -15,8 +16,7 @@ public class UploadCallbackFileMetadata {
private Double absoluteAltitude; private Double absoluteAltitude;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssVV") private Date createdTime;
private LocalDateTime createdTime;
private Double gimbalYawDegree; private Double gimbalYawDegree;
@ -47,11 +47,11 @@ public class UploadCallbackFileMetadata {
return this; return this;
} }
public LocalDateTime getCreatedTime() { public Date getCreatedTime() {
return createdTime; return createdTime;
} }
public UploadCallbackFileMetadata setCreatedTime(LocalDateTime createdTime) { public UploadCallbackFileMetadata setCreatedTime(Date createdTime) {
this.createdTime = createdTime; this.createdTime = createdTime;
return this; return this;
} }

12
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(); ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
String jsonString = mapper.writeValueAsString(message); WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
WebSocketSessionHolder.getSessionsAll().forEach(key -> { broadcastMessage.setMessage(mapper.writeValueAsString(message));
WebSocketSession session = WebSocketSessionHolder.getSessions(key); RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
sendMessage(session, jsonString); log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
}); });
// WebSocketSessionHolder.getSessionsAll().forEach(key -> {
// WebSocketSession session = WebSocketSessionHolder.getSessions(key);
// sendMessage(session, jsonString);
// });
}catch (Exception e) { }catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

12
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java

@ -1,5 +1,6 @@
package org.dromara.business.controller; package org.dromara.business.controller;
import cn.hutool.core.lang.Dict;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -80,7 +81,16 @@ public class BusinessAlertStatisticsController extends BaseController {
} }
/**
* 出警效率
* @param businessAlertBo
* @return
*/
@Operation(summary="出警效率", description="出警效率")
@GetMapping(value = "/handler/rate")
public R<List<StatObj>> handlerRate(BusinessAlertBo businessAlertBo,Dict dict) {
return R.ok(statisticsService.handlerRate(businessAlertBo));
}

10
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java

@ -69,11 +69,13 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
List<Map<String, Object>> countAlertTypeCompare(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> countAlertTypeCompare(@Param("param") BusinessAlertBo businessAlertBo);
Integer countFromOldToCurrent(BusinessAlertBo businessAlertBo); Integer countFromOldToCurrent(@Param("param") BusinessAlertBo businessAlertBo);
Map<String, Object> countCurrentAlert(BusinessAlertBo businessAlertBo); Map<String, Object> countCurrentAlert(@Param("param") BusinessAlertBo businessAlertBo);
Map<String, Object> countMonthAlert(BusinessAlertBo businessAlertBo); Map<String, Object> countMonthAlert(@Param("param") BusinessAlertBo businessAlertBo);
Map<String, Object> countCurrentDayAlert(BusinessAlertBo businessAlertBo); Map<String, Object> countCurrentDayAlert(@Param("param") BusinessAlertBo businessAlertBo);
Map<String, Object> handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("month") String month);
} }

3
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java

@ -29,4 +29,7 @@ public interface IBusinessAlertStatisticsService {
Map<String,Object> countPostDayAlert(BusinessAlertBo businessAlertBo); Map<String,Object> countPostDayAlert(BusinessAlertBo businessAlertBo);
List<StatObj> countPostAlert(BusinessAlertBo businessAlertBo); List<StatObj> countPostAlert(BusinessAlertBo businessAlertBo);
List<StatObj> handlerRate(BusinessAlertBo businessAlertBo);
} }

56
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.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -222,7 +224,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
} }
postVoList.forEach(postVo -> { postVoList.forEach(postVo -> {
List<String> labelList = getAiLabel(businessAlertBo.getPostCode()); List<String> labelList = getAiLabel(postVo.getPostCode());
businessAlertBo.setAiLabelEnList(labelList); businessAlertBo.setAiLabelEnList(labelList);
Map<String, Object> dayMap = this.baseMapper.countCurrentDayAlert(businessAlertBo); Map<String, Object> dayMap = this.baseMapper.countCurrentDayAlert(businessAlertBo);
result.put(postVo.getPostName(), dayMap.get("total")); result.put(postVo.getPostName(), dayMap.get("total"));
@ -248,7 +250,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
} }
postVoList.forEach(postVo -> { postVoList.forEach(postVo -> {
List<String> labelList = getAiLabel(businessAlertBo.getPostCode()); List<String> labelList = getAiLabel(postVo.getPostCode());
businessAlertBo.setAiLabelEnList(labelList); businessAlertBo.setAiLabelEnList(labelList);
Map<String, Object> dateMap = switch (businessAlertBo.getDateType()) { Map<String, Object> dateMap = switch (businessAlertBo.getDateType()) {
case 1 -> baseMapper.countCurrentAlert(businessAlertBo); case 1 -> baseMapper.countCurrentAlert(businessAlertBo);
@ -269,6 +271,56 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
return result; return result;
} }
/**
* 出警效率
* @param businessAlertBo
* @return
*/
@Override
public List<StatObj> handlerRate(BusinessAlertBo businessAlertBo) {
//查询所有的职能岗位
List<RemotePostVo> postVoList = remotePostService.listPost();
List<String> monthList = getLastSixMonths();
List<StatObj> result = new ArrayList<>();
monthList.forEach(month -> {
StatObj statObj = new StatObj();
statObj.setStatKey(month);
List<StatObj> statObjs = new ArrayList<>();
postVoList.forEach(postVo -> {
List<String> labelList = getAiLabel(postVo.getPostCode());
businessAlertBo.setAiLabelEnList(labelList);
Map<String,Object> 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<String> getLastSixMonths() {
List<String> 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<String> buildDateList(BusinessAlertBo businessAlertBo) { private List<String> buildDateList(BusinessAlertBo businessAlertBo) {
List<String> resultList = new ArrayList<>(); List<String> resultList = new ArrayList<>();
String currentYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); String currentYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));

9
dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml

@ -428,4 +428,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="searchSql"></include> <include refid="searchSql"></include>
</select> </select>
<select id="handlerRate" resultType="java.util.Map">
select
SUM(TIMESTAMPDIFF(HOUR, ba.create_time, ba.complete_date)) / COUNT(*) AS avgInfo
from business_alert ba
where 1=1
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m') = DATE_FORMAT(#{month}, '%Y-%m') ]]>
<include refid="searchSql"></include>
</select>
</mapper> </mapper>

17
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") @SaCheckPermission("devict:qrtz:edit")
@Log(title = "自动飞行任务启停", businessType = BusinessType.UPDATE) @Log(title = "自动飞行任务启停", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("status") @GetMapping("status")
public R<Void> status(@Validated@NotNull(message = "任务id不能为空") Long id ,@NotNull(message = "状态不能为空") Integer status) { public R<Void> status(@Validated@NotNull(message = "任务id不能为空") Long id ,@NotNull(message = "状态不能为空") Integer status) {
return toAjax(deviceQrtzService.update(id,status)); return toAjax(deviceQrtzService.update(id,status));
} }
@ -133,16 +133,16 @@ public class DeviceQrtzController extends BaseController {
@Log(title = "自动飞行新增航线", businessType = BusinessType.INSERT) @Log(title = "自动飞行新增航线", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/addFileList") @PostMapping("/addFileList")
public R<Void> addFileList(@Validated(AddGroup.class) @RequestBody DeviceQrtzFileDTO deviceQrtzFileDTO) { public R<Void> addFileList(@RequestBody Map<String,Object>map) {
return toAjax(deviceQrtzService.addFileList(deviceQrtzFileDTO)); return toAjax(deviceQrtzService.addFileList(map));
} }
/** 自动飞行-复制航线*/ /** 自动飞行-复制航线*/
@SaCheckPermission("devict:qrtz:copy") @SaCheckPermission("devict:qrtz:copy")
@Log(title = "自动飞行新增航线", businessType = BusinessType.INSERT) @Log(title = "自动飞行复制航线", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/copy") @GetMapping("/copy")
public R<Void> copy(@Validated@NotNull(message = "任务id不能为空") Long qrtzId ,@NotNull(message = "请选择原来的时间") String starDate,@NotNull(message ="请选择新的时间") String endDate) { public R<Void> copy(@Validated@NotNull(message = "任务id不能为空") Long qrtzId ,@NotNull(message = "请选择原来的时间") String starDate,@NotNull(message ="请选择新的时间") String endDate) {
return toAjax(deviceQrtzService.copy(qrtzId,starDate,endDate)); return toAjax(deviceQrtzService.copy(qrtzId,starDate,endDate));
} }
@ -154,9 +154,8 @@ public class DeviceQrtzController extends BaseController {
*/ */
@SaCheckPermission("devict:qrtz:remove") @SaCheckPermission("devict:qrtz:remove")
@Log(title = "自动飞行航线删除", businessType = BusinessType.DELETE) @Log(title = "自动飞行航线删除", businessType = BusinessType.DELETE)
@DeleteMapping("/fileRemove/{id}") @DeleteMapping("/fileRemove")
public R<Void> fileRemove(@NotEmpty(message = "主键不能为空") public R<Void> fileRemove(@NotNull(message = "主键不能为空")Long id) {
@PathVariable Long id) {
return toAjax(deviceQrtzService.fileRemove(id)); return toAjax(deviceQrtzService.fileRemove(id));
} }
@ -169,7 +168,7 @@ public class DeviceQrtzController extends BaseController {
@SaCheckPermission("devict:qrtz:edit") @SaCheckPermission("devict:qrtz:edit")
@Log(title = "自动飞行编辑航线排序", businessType = BusinessType.UPDATE) @Log(title = "自动飞行编辑航线排序", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/fileSort") @GetMapping("/fileSort")
public R<Void> fileSort(@Validated@NotNull(message = "主键id不能为空") Long id ,@NotNull(message = "排序") Integer sort) { public R<Void> fileSort(@Validated@NotNull(message = "主键id不能为空") Long id ,@NotNull(message = "排序") Integer sort) {
return toAjax(deviceQrtzService.fileSort(id,sort)); return toAjax(deviceQrtzService.fileSort(id,sort));
} }

3
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") @TableField("create_time")
private Date createTime; private Date createTime;
@TableField("update_time")
private Date updateTime;
@Override @Override
public DeviceHmsEntity clone() { public DeviceHmsEntity clone() {
@ -71,7 +69,6 @@ public class DeviceHmsEntity implements Serializable, Cloneable {
.bid(this.getBid()) .bid(this.getBid())
.tid(this.getTid()) .tid(this.getTid())
.createTime(this.getCreateTime()) .createTime(this.getCreateTime())
.updateTime(this.getUpdateTime())
.sn(this.getSn()) .sn(this.getSn())
.build(); .build();
} }

1
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceQrtzEntity.java

@ -28,7 +28,6 @@ import java.util.List;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@JsonNaming() // 设置为驼峰命名风格
public class DeviceQrtzEntity extends BaseEntity { public class DeviceQrtzEntity extends BaseEntity {
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)

16
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 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 Date updateTime;
private Long createDept;
/**
* 部门名称 */
private String deptName;
/**
* 用户名称 */
private String nickName;
/** /**
* 删除 0 正常 1已删除 * 删除 0 正常 1已删除
*/ */

5
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 add( DeviceQrtzDTO deviceQrtzDTO);
Boolean deleteIds(Collection<Long> ids); Boolean deleteIds(Collection<Long> ids);
Boolean fileRemove(Long id); Boolean fileRemove(Long id);
Boolean addFileList(DeviceQrtzFileDTO deviceQrtzFileDTO); Boolean addFileList(Map<String,Object>map);
Boolean copy(Long qrtzId ,String starDate,String endDate); Boolean copy(Long qrtzId ,String starDate,String endDate);
Boolean fileSort(Long id ,Integer sort); Boolean fileSort(Long id ,Integer sort);
//通知启用飞行任务
DeviceQrtzFileEntity getDeviceQrtzFileEntity(String deviceSn);
} }

8
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()) .bid(response.getBid())
.tid(response.getTid()) .tid(response.getTid())
.createTime(new Date(response.getTimestamp())) .createTime(new Date(response.getTimestamp()))
.updateTime(null)
.sn(sn) .sn(sn)
.build(); .build();
// Query all unread hms messages of the device in redis. // 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())) .and(wrapper -> param.getDeviceSn().forEach(sn -> wrapper.eq(DeviceHmsEntity::getSn, sn).or()))
.between(param.getBeginTime() != null && param.getEndTime() != null, .between(param.getBeginTime() != null && param.getEndTime() != null,
DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime()) DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime())
.eq(param.getUpdateTime() != null, DeviceHmsEntity::getUpdateTime, param.getUpdateTime())
.eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel()) .eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel())
.like(StringUtils.hasText(param.getMessage()) && .like(StringUtils.hasText(param.getMessage()) &&
HmsMessageLanguageEnum.ZH.getLanguage().equals(param.getLanguage()), HmsMessageLanguageEnum.ZH.getLanguage().equals(param.getLanguage()),
@ -136,10 +134,9 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
@Override @Override
public void updateUnreadHms(String deviceSn) { public void updateUnreadHms(String deviceSn) {
mapper.update(DeviceHmsEntity.builder().updateTime(new Date()).build(), mapper.update(DeviceHmsEntity.builder().build(),
new LambdaUpdateWrapper<DeviceHmsEntity>() new LambdaUpdateWrapper<DeviceHmsEntity>()
.eq(DeviceHmsEntity::getSn, deviceSn) .eq(DeviceHmsEntity::getSn, deviceSn));
.eq(DeviceHmsEntity::getUpdateTime, 0L));
// Delete unread messages cached in redis. // Delete unread messages cached in redis.
deviceRedisService.delHmsKeysBySn(deviceSn); deviceRedisService.delHmsKeysBySn(deviceSn);
} }
@ -152,7 +149,6 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
.bid(entity.getBid()) .bid(entity.getBid())
.tid(entity.getTid()) .tid(entity.getTid())
.createTime(entity.getCreateTime()) .createTime(entity.getCreateTime())
.updateTime(entity.getUpdateTime())
.sn(entity.getSn()) .sn(entity.getSn())
.hmsId(entity.getHmsId()) .hmsId(entity.getHmsId())
.key(entity.getHmsKey()) .key(entity.getHmsKey())

78
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.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.core.constant.DeviceQrtzConstants; 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.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; 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.IDeviceQrtzDateMapper;
import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper;
import org.dromara.sample.manage.mapper.IDeviceQrtzMapper; 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.DeviceQrtzEntity;
import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity; import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity;
import org.dromara.sample.manage.service.IDeviceQrtzDateService; 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.IDeviceQrtzService;
import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.sample.wayline.mapper.IWaylineFileMapper; import org.dromara.sample.wayline.mapper.IWaylineFileMapper;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
@ -32,6 +32,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.text.ParseException; 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.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -174,29 +178,37 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
} }
@Override @Override
public Boolean addFileList(DeviceQrtzFileDTO deviceQrtzFileDTO) { public Boolean addFileList(Map<String,Object>map) {
int sort=1; 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<DeviceQrtzFileEntity> selectList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>() List<DeviceQrtzFileEntity> selectList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>()
.eq("qrtz_id", deviceQrtzFileDTO.getQrtzId()).eq("exec_date",deviceQrtzFileDTO.getExecDate()) .eq("qrtz_id", qrtzId).eq("exec_date",execDate).orderByDesc("sort"));
.orderByDesc("sort"));
if(!CollectionUtils.isEmpty(selectList)){ if(!CollectionUtils.isEmpty(selectList)){
Integer number =selectList.get(0).getSort(); Integer number =selectList.get(0).getSort();
if(ObjectUtil.isNotEmpty(number)){ if(ObjectUtil.isNotEmpty(number)){
sort=number+1; sort=number+1;
} }
} }
for (String waylineId : deviceQrtzFileDTO.getWaylineIdStr().split(",")) { for (String waylineId : waylineIdStr.split(",")) {
DeviceQrtzFileEntity entity = new DeviceQrtzFileEntity(); DeviceQrtzFileEntity entity = new DeviceQrtzFileEntity();
QueryWrapper<WaylineFileEntity> queryWrapper = new QueryWrapper<WaylineFileEntity>().eq("wayline_id", waylineId); QueryWrapper<WaylineFileEntity> queryWrapper = new QueryWrapper<WaylineFileEntity>().eq("wayline_id", waylineId);
WaylineFileEntity fileEntity = waylineFileMapper.selectOne(queryWrapper); WaylineFileEntity fileEntity = waylineFileMapper.selectOne(queryWrapper);
entity.setQrtzId(deviceQrtzFileDTO.getQrtzId()); entity.setDeviceSn(fileEntity.getDeviceSn());
entity.setQrtzId(qrtzId);
entity.setWaylineId(waylineId); entity.setWaylineId(waylineId);
entity.setWaylineName(fileEntity.getName()); entity.setWaylineName(fileEntity.getName());
try { try {
entity.setSort(sort); entity.setSort(sort);
entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1); 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; sort=sort+1;
deviceQrtzFileMapper.insert(entity); deviceQrtzFileMapper.insert(entity);
}catch (Exception e){ }catch (Exception e){
@ -220,6 +232,12 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
entity.setSort(e.getSort()); entity.setSort(e.getSort());
entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1); entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1);
entity.setExecDate(Convert.toDate(endDate)); 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; return entity;
}).toList(); }).toList();
return deviceQrtzFileMapper.insert(entityList).size()>0; return deviceQrtzFileMapper.insert(entityList).size()>0;
@ -236,4 +254,40 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
entity.setId(id); entity.setId(id);
return deviceQrtzFileMapper.updateById(entity)>0; 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<DeviceQrtzFileEntity> qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>().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<DeviceQrtzDateEntity> 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;
}
} }

22
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.dto.DevicePayloadReceiver;
import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum; import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum;
import org.dromara.sample.manage.model.param.DeviceQueryParam; import org.dromara.sample.manage.model.param.DeviceQueryParam;
import org.dromara.sample.manage.service.IDeviceDictionaryService; import org.dromara.sample.manage.service.*;
import org.dromara.sample.manage.service.IDevicePayloadService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.MessageHeaders;
@ -30,6 +27,8 @@ import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -53,6 +52,11 @@ public class SDKDeviceService extends AbstractDeviceService {
@Autowired @Autowired
private IDevicePayloadService devicePayloadService; private IDevicePayloadService devicePayloadService;
@Autowired
private IDeviceQrtzService deviceQrtzService;
private ExecutorService executor = Executors.newFixedThreadPool(5);
@Override @Override
public TopicStatusResponse<MqttReply> updateTopoOnline(TopicStatusRequest<UpdateTopo> request, MessageHeaders headers) { public TopicStatusResponse<MqttReply> updateTopoOnline(TopicStatusRequest<UpdateTopo> request, MessageHeaders headers) {
UpdateTopoSubDevice updateTopoSubDevice = request.getData().getSubDevices().get(0); UpdateTopoSubDevice updateTopoSubDevice = request.getData().getSubDevices().get(0);
@ -147,6 +151,16 @@ public class SDKDeviceService extends AbstractDeviceService {
if (StringUtils.hasText(device.getChildDeviceSn())) { if (StringUtils.hasText(device.getChildDeviceSn())) {
deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren); 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); deviceRedisService.setDeviceOnline(device);
fillDockOsd(from, request.getData()); fillDockOsd(from, request.getData());

45
dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
/** /**
@ -65,5 +66,49 @@ public class MediaFileEntity implements Serializable {
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime; 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;
/**
* 文件类型jpegmp4RTKOBSNAVMRKDAT
*/
@TableField("file_type")
private String fileType;
/**
* 后缀类型广角 W广角 V红外 T变焦 ZRTCM文件 D PPK
*/
@TableField("file_status")
private String fileStatus;
private Integer fileIndex;
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java

@ -1,5 +1,6 @@
package org.dromara.sample.media.service; 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.cloudapi.media.MediaUploadCallbackRequest;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
@ -28,7 +29,7 @@ public interface IFileService {
* @param file * @param file
* @return * @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. * Query information about all files in this workspace based on the workspace id.

27
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.core.OssClient;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum; 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.MediaSubFileTypeEnum;
import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest;
import org.dromara.common.sdk.common.Pagination; import org.dromara.common.sdk.common.Pagination;
@ -20,9 +21,11 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.net.URL; import java.net.URL;
import java.sql.Time;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
@ -65,10 +68,16 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file) { public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask) {
MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file); MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file,flightTask);
fileEntity.setWorkspaceId(workspaceId); fileEntity.setWorkspaceId(workspaceId);
fileEntity.setFileId(UUID.randomUUID().toString()); 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); return mapper.insert(fileEntity);
} }
@ -120,7 +129,7 @@ public class FileServiceImpl implements IFileService {
* @param file * @param file
* @return * @return
*/ */
private MediaFileEntity fileUploadConvertToEntity(MediaUploadCallbackRequest file) { private MediaFileEntity fileUploadConvertToEntity(MediaUploadCallbackRequest file,FlightTask flightTask) {
MediaFileEntity.MediaFileEntityBuilder builder = MediaFileEntity.builder(); MediaFileEntity.MediaFileEntityBuilder builder = MediaFileEntity.builder();
if (file != null) { if (file != null) {
@ -133,7 +142,17 @@ public class FileServiceImpl implements IFileService {
.jobId(file.getExt().getFileGroupId()) .jobId(file.getExt().getFileGroupId())
.drone(file.getExt().getSn()) .drone(file.getExt().getSn())
.tinnyFingerprint(file.getExt().getTinnyFingerprint()) .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 // domain-type-subType
DeviceEnum payloadModelKey = file.getExt().getPayloadModelKey(); DeviceEnum payloadModelKey = file.getExt().getPayloadModelKey();

8
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 @Override
public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file) { public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file) {
return fileService.saveFile(workspaceId, file); return fileService.saveFile(workspaceId, file,null);
} }
@Override @Override
@ -156,8 +156,9 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile")) file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile"))
.filter(index -> index > 0).map(index -> index++).orElse(0), .filter(index -> index > 0).map(index -> index++).orElse(0),
objectKey.lastIndexOf("/"))); 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<FileUploadCallback> request, String jobId, DeviceDTO dock) { private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock) {
@ -208,6 +209,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
.get()) .get())
.setName(file.getName()) .setName(file.getName())
.setObjectKey(file.getObjectKey()) .setObjectKey(file.getObjectKey())
.setPath(file.getPath()); .setPath(file.getPath())
.setCloudToCloudId(file.getCloudToCloudId());
} }
} }

4
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") @PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/upload")
@Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。") @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)) { if (Objects.isNull(file)) {
return HttpResultResponse.error("未收到文件。"); return HttpResultResponse.error("未收到文件。");
} }
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername(); String creator = loginUser.getUsername();
waylineFileService.importKmzFile(file, workspaceId, creator); waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn);
return HttpResultResponse.success(); return HttpResultResponse.success();
} }

2
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 String deviceName;
private Integer fileNo;
} }

6
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") @TableField("wayline_id")
private String waylineId; private String waylineId;
@TableField("device_sn")
private String deviceSn;
@TableField("drone_model_key") @TableField("drone_model_key")
private String droneModelKey; private String droneModelKey;
@ -60,6 +63,9 @@ public class WaylineFileEntity implements Serializable {
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime; private Date updateTime;
@TableField(value = "file_no")
private String fileNo;
@TableField(exist = false) @TableField(exist = false)
private String deviceName; private String deviceName;

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java

@ -81,7 +81,7 @@ public interface IWaylineFileService {
* @param creator * @param creator
* @return * @return
*/ */
void importKmzFile(MultipartFile file, String workspaceId, String creator); void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn);
String getWaylineIdByFileId(Integer fileId); String getWaylineIdByFileId(Integer fileId);

16
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java

@ -197,12 +197,18 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
} }
@Override @Override
public void importKmzFile(MultipartFile file, String workspaceId, String creator) { public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn) {
Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file); Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file);
if (waylineFileOpt.isEmpty()) { if (waylineFileOpt.isEmpty()) {
throw new RuntimeException("文件格式不正确。"); throw new RuntimeException("文件格式不正确。");
} }
if (!StringUtils.hasText(deviceSn)) {
throw new RuntimeException("文件格式不正确。");
}
try { try {
List<WaylineFileEntity> waylineFileEntities = mapper.selectList(new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getDeviceSn, deviceSn).orderBy(true, false, WaylineFileEntity::getFileNo).last(" limit 1"));
WaylineFileDTO waylineFile = waylineFileOpt.get(); WaylineFileDTO waylineFile = waylineFileOpt.get();
waylineFile.setUsername(creator); waylineFile.setUsername(creator);
OssClient storage = OssFactory.instance("waylinefile"); 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()); String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
waylineFile.setObjectKey(uploadResult.getFilename()); waylineFile.setObjectKey(uploadResult.getFilename());
List<String> 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); this.saveWaylineFile(workspaceId, waylineFile);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

28
dk-visual/rocketmq/pom.xml

@ -62,6 +62,34 @@
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>common-web</artifactId> <artifactId>common-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-seata</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-workflow</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-resource</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-rocketmq</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

32
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<String,Object> sendSynchronizeMessage(RemoteProductMessageVo remoteProductMessageVo){
MessageProducer messageProducer = new MessageProducer();
//调用MessageProducer配置好的消息方法
SendResult sendResult = messageProducer.sendSynchronizeMessage(remoteProductMessageVo.getTopic(),"order_message_tag","title",remoteProductMessageVo.getMessage());
Map<String,Object> result = new HashMap<>();
result.put("data",sendResult);
return result;
}
}

2
pom.xml

@ -85,7 +85,7 @@
<id>dev</id> <id>dev</id>
<properties> <properties>
<!-- 环境标识,需要与配置文件的名称相对应 --> <!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active> <profiles.active>wuyuan</profiles.active>
<nacos.server>127.0.0.1:8848</nacos.server> <nacos.server>127.0.0.1:8848</nacos.server>
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group> <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
<nacos.config.group>DEFAULT_GROUP</nacos.config.group> <nacos.config.group>DEFAULT_GROUP</nacos.config.group>

Loading…
Cancel
Save