diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/TopicConst.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/TopicConst.java index c89a4d6..cef713b 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/TopicConst.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/TopicConst.java @@ -44,7 +44,6 @@ public class TopicConst { // 比对 public static final String COMPARE = "compare"; - //画框 public static final String FRAME = "frame"; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/constant/MinIOConstants.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/constant/MinIOConstants.java new file mode 100644 index 0000000..91d8b98 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/constant/MinIOConstants.java @@ -0,0 +1,23 @@ +package org.dromara.sample.media.constant; + +/** + * @auther yq + * @data 2025/3/28 + */ +public interface MinIOConstants { + + + //桶名称 无人机图片 + String BUCKET_MEDIAFILE = "mediafile"; + + //桶名称 默认数据 + String BUCKET_MINIO = "minio"; + + //桶名称 航线文件 + String BUCKET_WAYLINEFILE = "waylinefile"; + + //桶名称 预警文件 + String BUCKET_ALERT = "alert"; + //桶名称 图斑 + String BUCKET_PATTERN = "pattern"; +} 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 df29c68..dead30b 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 @@ -73,4 +73,11 @@ public interface IFileService { */ PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId); + + /** + * 算法专用 + */ + URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds); + + } 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 b37e442..524fa2b 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 @@ -143,6 +143,12 @@ public class FileServiceImpl implements IFileService { return new PaginationData(records, new Pagination(pageData.getCurrent(), pageData.getSize(), pageData.getTotal())); } + @Override + public URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds) { + OssClient storage = OssFactory.instance(bucket); + return storage.getPrivateUrlURL(pathUrl,seconds); + } + /** * Convert the received file object into a database entity object. * @param file diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java index e845892..2d12af7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java @@ -16,6 +16,7 @@ import org.dromara.common.web.core.BaseController; import org.dromara.sample.wayline.model.dto.AiCompareDTO; import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; +import org.dromara.sample.wayline.model.dto.FrameDTO; import org.dromara.sample.wayline.model.entity.AiCompareEntity; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; import org.dromara.sample.wayline.model.entity.WaylineJobEntity; @@ -74,7 +75,7 @@ public class AiCompareController extends BaseController { } /** - * 对比编辑 + * 对比编辑详情 * @param id 主键 */ @SaCheckPermission("sample:compare:query") @@ -119,13 +120,24 @@ public class AiCompareController extends BaseController { /** - * 画框 提交 + * 画框 + * 参数:jobId */ @SaCheckPermission("sample:compare:add") - @Log(title = "算法比对", businessType = BusinessType.INSERT) + @Log(title = "预警画框", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/pictureFrame") - public R pictureFrame(@Validated(AddGroup.class) @RequestBody Map compare) { - return toAjax(aiCompareService.pictureFrame(compare)); + public R pictureFrame(@RequestBody FrameDTO frameDTO) { + return toAjax(aiCompareService.pictureFrame(frameDTO)); + } + + /** + * 算法预警生成 + */ + @Log(title = "算法预警生成", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/expose") + public R pictureFrame(@RequestBody Map map) { + return toAjax(aiCompareService.expose(map)); } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiComparePlateMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiComparePlateMapper.java new file mode 100644 index 0000000..be4f769 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiComparePlateMapper.java @@ -0,0 +1,12 @@ +package org.dromara.sample.wayline.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.dromara.sample.wayline.model.entity.AiComparePlateEntity; + +/** + * @auther yq + * @data 2025/3/28 + */ +public interface IAiComparePlateMapper extends BaseMapper { + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java index 358f608..4232c42 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java @@ -17,6 +17,7 @@ import java.io.Serial; import java.io.Serializable; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -121,4 +122,5 @@ public class AiCompareDTO implements Serializable { @JsonInclude(JsonInclude.Include.NON_EMPTY) private Map params = new HashMap<>(); + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java index 0b9761e..a515216 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java @@ -35,7 +35,7 @@ public class AiCompareMediaFileDTO { @Schema(description = "文件所属的工作区") private String workspaceId; - + private String objectKey; private Date createTime; private String jobId; @@ -47,6 +47,8 @@ public class AiCompareMediaFileDTO { @Schema(description = "模板图url") private String mateFilePath; + @Schema(description = "模板图") + private String mateObjectKey; @Schema(description = "模板拍照时间") private Date mateFileDate; @@ -56,5 +58,5 @@ public class AiCompareMediaFileDTO { private Integer mateFileIndex; @Schema(description = "算法图班") - private Integer patternUrl; + private String patternUrl; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiComparePlateDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiComparePlateDTO.java new file mode 100644 index 0000000..2a00f8f --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiComparePlateDTO.java @@ -0,0 +1,34 @@ +package org.dromara.sample.wayline.model.dto; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import org.dromara.sample.wayline.model.entity.AiComparePlateEntity; + +/** + * @auther yq + * @data 2025/3/28 + */ + +@Data +@EqualsAndHashCode() +@AutoMapper(target = AiComparePlateEntity.class, reverseConvertGenerate = false) +public class AiComparePlateDTO{ + + private Long id; + /** + * 任务id + * */ + private String jobId; + + /** + * 图片id + * */ + private String fileId; + + /** + * 图斑地址 + * */ + private String patternName; +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java new file mode 100644 index 0000000..908171f --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java @@ -0,0 +1,47 @@ +package org.dromara.sample.wayline.model.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; +import java.util.Map; + +/** + * @auther yq + * @data 2025/3/28 + */ +@Data +@EqualsAndHashCode() +public class FrameDTO { + + + /** + * 比对列表主键id + */ + + private Long compareId; + + /** + * 图片id + * */ + + private String fileId; + + /** + * jobId + */ + + private String jobId; + /** + * + * 像素坐标集合 + * */ + private List> frameList; + + + /** + * 图片地址 + */ + + private String fileUrl; +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiComparePlateEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiComparePlateEntity.java new file mode 100644 index 0000000..7265301 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiComparePlateEntity.java @@ -0,0 +1,31 @@ +package org.dromara.sample.wayline.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @auther yq + * @data 2025/3/28 + */ + +@Data +@EqualsAndHashCode() +@TableName("ai_compare_plate") +public class AiComparePlateEntity { + + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 图片id + * */ + private String fileId; + + /** + * 图斑地址 + * */ + private String patternName; +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java index 9c08aef..cc87f8e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java @@ -4,6 +4,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sample.wayline.model.dto.AiCompareDTO; import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; +import org.dromara.sample.wayline.model.dto.FrameDTO; import org.dromara.sample.wayline.model.entity.AiCompareEntity; import java.util.List; @@ -24,6 +25,6 @@ public interface IAiCompareService { AiCompareEntity getInfo(Long id); List queryById(Long id); - Boolean pictureFrame(Map compare); - + Boolean pictureFrame(FrameDTO frameDTO); + Boolean expose(Map map); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index 37dd8e1..8761a46 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.BatchResult; import org.dromara.common.core.constant.AiCompareStatusConstants; +import org.dromara.common.core.constant.BusinessConstants; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -19,15 +20,19 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.mqtt.CommonTopicRequest; import org.dromara.common.sdk.mqtt.MqttGatewayPublish; import org.dromara.common.sdk.mqtt.TopicConst; +import org.dromara.sample.media.constant.MinIOConstants; import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.sample.media.model.MediaFileEntity; import org.dromara.sample.media.service.IFileService; import org.dromara.sample.media.service.IMediaService; import org.dromara.sample.wayline.mapper.IAiCompareMapper; +import org.dromara.sample.wayline.mapper.IAiComparePlateMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.model.dto.AiCompareDTO; import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; +import org.dromara.sample.wayline.model.dto.FrameDTO; import org.dromara.sample.wayline.model.entity.AiCompareEntity; +import org.dromara.sample.wayline.model.entity.AiComparePlateEntity; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.dromara.sample.wayline.service.IAiCompareQueueService; @@ -56,6 +61,7 @@ public class AiCompareServiceImpl implements IAiCompareService { private final IWaylineJobMapper waylineJobMapper; private final IFileService fileService; private final MqttGatewayPublish mqttGatewayPublish; + private final IAiComparePlateMapper aiComparePlateMapper; @Override public TableDataInfo queryPageList(AiCompareDTO bo, PageQuery pageQuery) { return TableDataInfo.build(aiCompareMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo))); @@ -120,7 +126,7 @@ public class AiCompareServiceImpl implements IAiCompareService { } } String topic = TopicConst.IMAGE +TopicConst.COMPARE; - List mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId()); + List mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId(),43200,false); mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); insertList.add(aiCompareEntity); } @@ -128,12 +134,17 @@ public class AiCompareServiceImpl implements IAiCompareService { List list =compareDTOList.stream().map(e->Convert.toLong(e.get("queueId"))).collect(Collectors.toList()); return aiCompareQueueService.updateStatus(list,AiCompareStatusConstants.QUEUW_TYPE_1); } - public List listMediaFile(String jobId){ + public List listMediaFile(String jobId,Integer seconds ,boolean isIllegal){ List mediaFileDTOList = aiCompareMapper.listMediaFile(jobId); if(!mediaFileDTOList.isEmpty()){ mediaFileDTOList.stream().forEach(e->{ - e.setFilePath(fileService.getObjectUrl(e.getWorkspaceId(),e.getFileId()).toString()); - e.setMateFilePath(fileService.getObjectUrl(e.getMateWorkspaceId(),e.getMateFileId()).toString()); + e.setFilePath(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,e.getObjectKey(),seconds).toString()); + e.setMateFilePath(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,e.getObjectKey(),seconds).toString()); + if(isIllegal){ + QueryWrapper queryWrapper = new QueryWrapper().eq("file_id", e.getFileId()); + AiComparePlateEntity plateEntity = aiComparePlateMapper.selectOne(queryWrapper); + e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_PATTERN,plateEntity.getPatternName(),seconds).toString()); + } }); } return mediaFileDTOList; @@ -149,10 +160,11 @@ public class AiCompareServiceImpl implements IAiCompareService { if(StrUtil.isNotEmpty(templateId)){ aiCompareEntity.setTemplateId(templateId); } + aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_1); int i = aiCompareMapper.updateById(aiCompareEntity); AiCompareEntity compareEntity = aiCompareMapper.selectById(id); String topic = TopicConst.IMAGE +TopicConst.COMPARE; - List mediaFileDTOS = listMediaFile(compareEntity.getJobId()); + List mediaFileDTOS = listMediaFile(compareEntity.getJobId(),43200,false); mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); return i>0; } @@ -165,13 +177,21 @@ public class AiCompareServiceImpl implements IAiCompareService { @Override public List queryById(Long id) { AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id); - List mediaFileDTOList = aiCompareMapper.listMediaFile(aiCompareEntity.getJobId()); - return mediaFileDTOList; + return listMediaFile(aiCompareEntity.getJobId(),3600,true); } - @Override - public Boolean pictureFrame(Map compare) { + public Boolean pictureFrame(FrameDTO frameDTO) { + if(!frameDTO.getFrameList().isEmpty()){ + throw new RuntimeException("未获取到违建数据"); + } + String topic = TopicConst.IMAGE +TopicConst.FRAME; + List mediaFileDTOS = listMediaFile(frameDTO.getJobId(),3600,false); + mqttGatewayPublish.publish(topic,new CommonTopicRequest().setData(mediaFileDTOS),1); + return true; + } + @Override + public Boolean expose(Map map) { return true; } diff --git a/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml b/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml index 3b7b48d..3bb9880 100644 --- a/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml +++ b/dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml @@ -12,13 +12,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT mf.file_index, mf.file_id, - mf.workspace_id, mf.file_name, - mf.file_path, + mf.object_key, + mf.job_id, mfi.file_id as mateFileId, mfi.file_name as mateFileName, - mfi.workspace_id AS mateWorkspaceId, - mfi.file_path AS mateFilePath, + mfi.object_key AS mateObjectKey, mfi.file_index AS mateFileIndex, mfi.create_time AS mateFileDate FROM diff --git a/pom.xml b/pom.xml index e2c75c9..63a9d40 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ dev - wuyuan + dev 127.0.0.1:8848 DEFAULT_GROUP DEFAULT_GROUP