Browse Source

提交

pull/1/head
袁强 5 months ago
parent
commit
6093d33f50
  1. 1
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/TopicConst.java
  2. 23
      dk-modules/sample/src/main/java/org/dromara/sample/media/constant/MinIOConstants.java
  3. 7
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  4. 6
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  5. 22
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java
  6. 12
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiComparePlateMapper.java
  7. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java
  8. 6
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java
  9. 34
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiComparePlateDTO.java
  10. 47
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java
  11. 31
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AiComparePlateEntity.java
  12. 5
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java
  13. 38
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  14. 7
      dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml
  15. 2
      pom.xml

1
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";
}

23
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";
}

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

@ -73,4 +73,11 @@ public interface IFileService {
*/
PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId);
/**
* 算法专用
*/
URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds);
}

6
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<MediaFileDTO>(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

22
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<Void> pictureFrame(@Validated(AddGroup.class) @RequestBody Map<String,Object> compare) {
return toAjax(aiCompareService.pictureFrame(compare));
public R<Void> pictureFrame(@RequestBody FrameDTO frameDTO) {
return toAjax(aiCompareService.pictureFrame(frameDTO));
}
/**
* 算法预警生成
*/
@Log(title = "算法预警生成", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/expose")
public R<Void> pictureFrame(@RequestBody Map<String,Object> map) {
return toAjax(aiCompareService.expose(map));
}
}

12
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<AiComparePlateEntity> {
}

2
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<String, Object> params = new HashMap<>();
}

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

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

47
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<Map<String,Object>> frameList;
/**
* 图片地址
*/
private String fileUrl;
}

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

5
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<AiCompareMediaFileDTO> queryById(Long id);
Boolean pictureFrame(Map<String,Object> compare);
Boolean pictureFrame(FrameDTO frameDTO);
Boolean expose(Map<String,Object> map);
}

38
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<AiCompareEntity> 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<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId());
List<AiCompareMediaFileDTO> 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<Long> list =compareDTOList.stream().map(e->Convert.toLong(e.get("queueId"))).collect(Collectors.toList());
return aiCompareQueueService.updateStatus(list,AiCompareStatusConstants.QUEUW_TYPE_1);
}
public List<AiCompareMediaFileDTO> listMediaFile(String jobId){
public List<AiCompareMediaFileDTO> listMediaFile(String jobId,Integer seconds ,boolean isIllegal){
List<AiCompareMediaFileDTO> 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<AiComparePlateEntity> queryWrapper = new QueryWrapper<AiComparePlateEntity>().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<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(compareEntity.getJobId());
List<AiCompareMediaFileDTO> 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<AiCompareMediaFileDTO> queryById(Long id) {
AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id);
List<AiCompareMediaFileDTO> mediaFileDTOList = aiCompareMapper.listMediaFile(aiCompareEntity.getJobId());
return mediaFileDTOList;
return listMediaFile(aiCompareEntity.getJobId(),3600,true);
}
@Override
public Boolean pictureFrame(Map<String, Object> compare) {
public Boolean pictureFrame(FrameDTO frameDTO) {
if(!frameDTO.getFrameList().isEmpty()){
throw new RuntimeException("未获取到违建数据");
}
String topic = TopicConst.IMAGE +TopicConst.FRAME;
List<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(frameDTO.getJobId(),3600,false);
mqttGatewayPublish.publish(topic,new CommonTopicRequest().setData(mediaFileDTOS),1);
return true;
}
@Override
public Boolean expose(Map<String, Object> map) {
return true;
}

7
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

2
pom.xml

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

Loading…
Cancel
Save