Browse Source

提交:图片比对逻辑

pull/1/head
袁强 3 months ago
parent
commit
967a3ee262
  1. 26
      dk-api/api-sample/pom.xml
  2. 19
      dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java
  3. 17
      dk-api/api-sample/src/main/java/org/dromara/business/api/RemoteBusinessTaskService.java
  4. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareMapper.java
  5. 29
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java
  6. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareQueueService.java
  7. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java
  8. 30
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java
  9. 36
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  10. 30
      dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml

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

@ -1,26 +0,0 @@
<?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

@ -1,19 +0,0 @@
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

@ -1,17 +0,0 @@
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);
}

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAiCompareMapper.java

@ -11,5 +11,5 @@ import java.util.List;
*/
public interface IAiCompareMapper extends BaseMapper<AiCompareEntity> {
List<AiCompareMediaFileDTO>listMediaFile(AiCompareEntity aiCompareEntity);
List<AiCompareMediaFileDTO>listMediaFile(String jobId);
}

29
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareMediaFileDTO.java

@ -23,7 +23,6 @@ import java.util.Date;
public class AiCompareMediaFileDTO {
private String id;
/**上云文件id*/
private String fileId;
@ -36,31 +35,12 @@ public class AiCompareMediaFileDTO {
@Schema(description = "文件所属的工作区")
private String workspaceId;
@Schema(description = "桶中文件的关链字")
private String objectKey;
@Schema(description = "此属性仅适用于由Pilot上传的图像文件。0:正常图片;1:全景。")
private String subFileType;
@Schema(description = "是否原始图像")
private Boolean isOriginal;
@Schema(description = "创建文件的无人机的sn。")
private String drone;
@Schema(description = "创建文件的无人机有效载荷的名称。")
private String payload;
@Schema(description = "文件的小指纹。此属性仅适用于由Pilot上传的媒体文件")
private String tinnyFingerprint;
@Schema(description = "文件的指纹。此属性仅适用于由Pilot上传的媒体文件。")
private String fingerprint;
private Date createTime;
private String jobId;
private String mateFileId;
@Schema(description = "模板图片名称")
private String mateFileName;
@ -70,6 +50,11 @@ public class AiCompareMediaFileDTO {
@Schema(description = "模板拍照时间")
private Date mateFileDate;
@Schema(description = "文件所属的工作区")
private String mateWorkspaceId;
@Schema(description = "下标")
private Integer mateFileIndex;
@Schema(description = "算法图班")
private Integer patternUrl;
}

4
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareQueueService.java

@ -18,4 +18,8 @@ public interface IAiCompareQueueService {
List<WaylineJobEntity>templateList(String waylineId, Date createTime);
AiCompareQueueEntity getInfo(Long queueId);
Boolean updateStatus(List<Long> ids,String queueType);
//用于无人机飞行处理后通知,将航线加入到未比对列表
Boolean addWaylineJobToQueue(String jobId);
}

1
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java

@ -25,4 +25,5 @@ public interface IAiCompareService {
List<AiCompareMediaFileDTO> queryById(Long id);
Boolean pictureFrame(Map<String,Object> compare);
}

30
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java

@ -9,11 +9,17 @@ import com.tdunning.math.stats.Sort;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.poi.ss.formula.functions.T;
import org.dromara.business.api.RemoteBusinessTaskService;
import org.dromara.common.core.constant.AiCompareStatusConstants;
import org.dromara.common.core.constant.BusinessConstants;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.media.model.MediaFileEntity;
import org.dromara.sample.wayline.mapper.IAiCompareQueueMapper;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
import org.dromara.sample.wayline.model.dto.AiCompareDTO;
@ -41,6 +47,9 @@ public class AiCompareQueueServiceImpl implements IAiCompareQueueService {
private final IAiCompareQueueMapper aiCompareQueueMapper;
private final IWaylineJobMapper waylineJobMapper;
private final IFileMapper fileMapper;
@DubboReference
private final RemoteBusinessTaskService remoteBusinessTaskService;
@Override
public TableDataInfo<AiCompareQueueEntity> queueList(AiCompareQueueDTO bo, PageQuery pageQuery) {
return TableDataInfo.build(aiCompareQueueMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo)));
@ -81,4 +90,25 @@ public class AiCompareQueueServiceImpl implements IAiCompareQueueService {
public Boolean updateStatus(List<Long> ids,String queueType) {
return aiCompareQueueMapper.updateStatus(ids,queueType);
}
@Override
public Boolean addWaylineJobToQueue(String jobId) {
boolean flag = false;
WaylineJobEntity waylineJob = waylineJobMapper.selectOne(Wrappers.<WaylineJobEntity>lambdaQuery().eq(WaylineJobEntity::getJobId, jobId));
if(waylineJob!=null){
AiCompareQueueEntity aiCompareQueueEntity = new AiCompareQueueEntity();
aiCompareQueueEntity.setWaylineId(waylineJob.getFileId());
aiCompareQueueEntity.setWaylineName(waylineJob.getName());
aiCompareQueueEntity.setJobId(jobId);
aiCompareQueueEntity.setJobName(waylineJob.getName());
Long selectCount = fileMapper.selectCount(Wrappers.<MediaFileEntity>lambdaQuery().eq(MediaFileEntity::getJobId, jobId).eq(MediaFileEntity::getFileType, "jpeg"));
aiCompareQueueEntity.setPictureNumber(selectCount.intValue());
aiCompareQueueEntity.setCreateTime(new Date());
aiCompareQueueEntity.setQueueType(AiCompareStatusConstants.QUEUW_TYPE_0);
flag= aiCompareQueueMapper.insert(aiCompareQueueEntity)>0;
//去查询当前的航线是否是预约工单的是就更改完成
remoteBusinessTaskService.updateTaskStatus(waylineJob.getFileId(), BusinessConstants.TASK_STATUS_3,null,null);
}
return flag;
}
}

36
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java

@ -3,6 +3,7 @@ package org.dromara.sample.wayline.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -15,8 +16,13 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
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.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.IWaylineJobMapper;
import org.dromara.sample.wayline.model.dto.AiCompareDTO;
@ -48,6 +54,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
private final IAiCompareQueueService aiCompareQueueService;
private final IAiCompareMapper aiCompareMapper;
private final IWaylineJobMapper waylineJobMapper;
private final IFileService fileService;
private final MqttGatewayPublish mqttGatewayPublish;
@Override
public TableDataInfo<AiCompareEntity> queryPageList(AiCompareDTO bo, PageQuery pageQuery) {
@ -113,18 +120,23 @@ public class AiCompareServiceImpl implements IAiCompareService {
}
}
String topic = TopicConst.IMAGE +TopicConst.COMPARE;
// mqttGatewayPublish.publish(topic,byId,1);
List<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId());
mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1);
insertList.add(aiCompareEntity);
}
List<BatchResult> resultList = aiCompareMapper.insertOrUpdate(insertList, 10);
System.out.println(resultList);
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<Map<String,Object>> listMediaFile(AiCompareEntity aiCompareEntity){
return null;
public List<AiCompareMediaFileDTO> listMediaFile(String jobId){
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());
});
}
return mediaFileDTOList;
}
@ -137,8 +149,12 @@ public class AiCompareServiceImpl implements IAiCompareService {
if(StrUtil.isNotEmpty(templateId)){
aiCompareEntity.setTemplateId(templateId);
}
return aiCompareMapper.updateById(aiCompareEntity)>0;
int i = aiCompareMapper.updateById(aiCompareEntity);
AiCompareEntity compareEntity = aiCompareMapper.selectById(id);
String topic = TopicConst.IMAGE +TopicConst.COMPARE;
List<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(compareEntity.getJobId());
mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1);
return i>0;
}
@Override
@ -149,7 +165,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
@Override
public List<AiCompareMediaFileDTO> queryById(Long id) {
AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id);
List<AiCompareMediaFileDTO> mediaFileDTOList = aiCompareMapper.listMediaFile(aiCompareEntity);
List<AiCompareMediaFileDTO> mediaFileDTOList = aiCompareMapper.listMediaFile(aiCompareEntity.getJobId());
return mediaFileDTOList;
}
@ -158,4 +174,6 @@ public class AiCompareServiceImpl implements IAiCompareService {
return true;
}
}

30
dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml

@ -9,17 +9,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="listMediaFile" resultType="org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO">
SELECT mf.*,
SELECT
mf.file_index,
mf.file_id,
mf.workspace_id,
mf.file_name,
mf.file_path,
mfi.file_id as mateFileId,
mfi.file_name as mateFileName,
mfi.file_path as mateFilePath,
mfi.create_time as mateFileDate,
CAST( SUBSTRING_INDEX( SUBSTRING_INDEX( mf.file_name, '_', 3 ), '_', - 1 ) AS UNSIGNED ) AS suffix
mfi.workspace_id AS mateWorkspaceId,
mfi.file_path AS mateFilePath,
mfi.file_index AS mateFileIndex,
mfi.create_time AS mateFileDate
FROM
media_file mf
LEFT JOIN ai_compare ai ON ai.job_id = mf.job_id
LEFT JOIN media_file mfi ON mfi.job_id = ai.template_id
WHERE mfi.job_id=#{jobId}
ORDER BY suffix asc
media_file AS mf
JOIN
media_file AS mfi
ON
mf.file_index = mfi.file_index and mf.file_type='jpeg' and mfi.file_type='jpeg'
JOIN ai_compare ai ON ai.template_id = mfi.job_id
WHERE
mf.job_id = #{jobId}
ORDER BY
mf.file_index;
</select>
</mapper>

Loading…
Cancel
Save