吴远 2 months ago
parent
commit
6095947d8f
  1. 4
      dk-api/api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java
  2. 9
      dk-api/api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java
  3. 3
      dk-common/common-mybatis/src/main/resources/spy.properties
  4. 8
      dk-modules/resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java
  5. 6
      dk-modules/sample/pom.xml
  6. 1
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  7. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java
  8. 26
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  9. 17
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAudioFileMapper.java
  10. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java
  11. 68
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AudioFileEntity.java
  12. 3
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java
  13. 3
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/param/CreateJobParam.java
  14. 21
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAudioFileService.java
  15. 9
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java
  16. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java
  17. 9
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  18. 68
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AudioFileServiceImpl.java
  19. 29
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java
  20. 139
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  21. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java
  22. 4
      dk-visual/nacos/src/main/resources/application.properties

4
dk-api/api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java

@ -3,6 +3,7 @@ package org.dromara.resource.api;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.resource.api.domain.RemoteFile; import org.dromara.resource.api.domain.RemoteFile;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -35,4 +36,7 @@ public interface RemoteFileService {
* @return 列表 * @return 列表
*/ */
List<RemoteFile> selectByIds(String ossIds); List<RemoteFile> selectByIds(String ossIds);
Boolean remove(Collection<Long> ids, Boolean isValid) throws ServiceException;
} }

9
dk-api/api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java

@ -1,9 +1,11 @@
package org.dromara.resource.api; package org.dromara.resource.api;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.resource.api.domain.RemoteFile; import org.dromara.resource.api.domain.RemoteFile;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -50,4 +52,11 @@ public class RemoteFileServiceMock implements RemoteFileService {
return List.of(); return List.of();
} }
@Override
public Boolean remove(Collection<Long> ids, Boolean isValid) throws ServiceException {
log.warn("服务调用异常 -> 降级处理");
return null;
}
} }

3
dk-common/common-mybatis/src/main/resources/spy.properties

@ -3,7 +3,8 @@ modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6
# 自定义日志打印 # 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台 #日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger #??sql????
#appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql # 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger #appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 取消JDBC URL前缀 # 取消JDBC URL前缀

8
dk-modules/resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java

@ -18,6 +18,7 @@ import org.dromara.resource.service.ISysOssService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -96,4 +97,11 @@ public class RemoteFileServiceImpl implements RemoteFileService {
return remoteFile; return remoteFile;
}).toList(); }).toList();
} }
@Override
public Boolean remove(Collection<Long> ids, Boolean isValid) throws ServiceException{
sysOssService.deleteWithValidByIds(ids,isValid);
return null;
}
} }

6
dk-modules/sample/pom.xml

@ -131,7 +131,11 @@
<artifactId>aws-java-sdk-sts</artifactId> <artifactId>aws-java-sdk-sts</artifactId>
<version>1.12.261</version> <version>1.12.261</version>
</dependency> </dependency>
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>api-workflow</artifactId> <artifactId>api-workflow</artifactId>

1
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java

@ -311,6 +311,7 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
CreateJobParam createJobParam = new CreateJobParam(); CreateJobParam createJobParam = new CreateJobParam();
try { try {
createJobParam.setName(deviceQrtzFileEntity.getWaylineName() + "" + currentDate.format(formatterS)); createJobParam.setName(deviceQrtzFileEntity.getWaylineName() + "" + currentDate.format(formatterS));
createJobParam.setWaylineName(deviceQrtzFileEntity.getWaylineName());
createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId()); createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId());
createJobParam.setDockSn(device.getDeviceSn()); createJobParam.setDockSn(device.getDeviceSn());
createJobParam.setWaylineType(WaylineTypeEnum.find(Integer.parseInt(waylineFileEntity.getTemplateTypes()))); createJobParam.setWaylineType(WaylineTypeEnum.find(Integer.parseInt(waylineFileEntity.getTemplateTypes())));

4
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java

@ -184,8 +184,8 @@ public class AiCompareController extends BaseController {
* * */ * * */
@SaCheckPermission("sample:compare:delAlertList") @SaCheckPermission("sample:compare:delAlertList")
@DeleteMapping("/delAlertList") @DeleteMapping("/delAlertList")
public R<Void> delAlertList(List<Long>ids) { public R<Void> delAlertList(Long ids) {
return toAjax(aiCompareService.delAlertList(ids)); return toAjax(aiCompareService.delAlertList(List.of(ids)));
} }
/** /**

26
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java

@ -18,6 +18,7 @@ import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.mapper.IDeviceProUserMapper; import org.dromara.sample.manage.mapper.IDeviceProUserMapper;
import org.dromara.sample.manage.service.IDeviceProService; import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineFileService;
@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
@ -203,4 +205,28 @@ public class WaylineFileController implements IHttpWaylineService {
} }
return HttpResultResponse.error(); return HttpResultResponse.error();
} }
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/audio/add")
@Operation(summary = "添加音频文件", description = "添加音频文件。")
public HttpResultResponse<AudioFileEntity> audioAdd(@PathVariable(name = "workspace_id") String workspaceId, MultipartFile file) {
if (Objects.isNull(file)) {
return HttpResultResponse.error("未收到文件。");
}
return HttpResultResponse.success(waylineFileService.transformation(file, workspaceId));
}
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/audio/{fileId}")
@Operation(summary = "删除音频文件", description = "删除音频文件。")
public HttpResultResponse audioDeleted(@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "fileId")String fileId) {
waylineFileService.audioDeleted(workspaceId,fileId);
return HttpResultResponse.success();
}
@GetMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/audio/page")
@Operation(summary = "音频文件列表", description = "音频文件列表。")
public HttpResultResponse<PaginationData<AudioFileEntity>> getAudioPage(@RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize, @PathVariable(name = "workspace_id") String workspaceId) {
PaginationData<AudioFileEntity> data = waylineFileService.getAudioPage(workspaceId, pageNum,pageSize);
return HttpResultResponse.success(data);
}
} }

17
dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/IAudioFileMapper.java

@ -0,0 +1,17 @@
package org.dromara.sample.wayline.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListRequest;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
/**
* @author sean
* @version 0.3
* @date 2021/12/22
*/
public interface IAudioFileMapper extends BaseMapper<AudioFileEntity> {
}

1
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java

@ -29,6 +29,7 @@ public class WaylineJobDTO {
private String fileId; private String fileId;
private String fileName; private String fileName;
private String waylineName;
private String dockSn; private String dockSn;

68
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/AudioFileEntity.java

@ -0,0 +1,68 @@
package org.dromara.sample.wayline.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author sean
* @version 0.3
* @date 2021/12/22
*/
@Data
@TableName("audio_file")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class AudioFileEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
@TableField("file_id")
private String fileId;
@TableField("file_name")
private String fileName;
@TableField("old_name")
private String oldName;
@TableField("file_path")
private String filePath;
@TableField("sign")
private String sign;
@TableField("workspace_id")
private String workspaceId;
@TableField("fingerprint")
private String fingerprint;
@TableField("tinny_fingerprint")
private String tinnyFingerprint;
@TableField("object_key")
private String objectKey;
@TableField("user_name")
private String username;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField("oss_id")
private Long ossId;
@TableField("input_stream_base")
private String inputStreamBase;
@TableField(exist = false)
private byte[] inputStream;
}

3
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java

@ -32,6 +32,9 @@ public class WaylineJobEntity implements Serializable {
@TableField("name") @TableField("name")
private String name; private String name;
@TableField("wayline_name")
private String waylineName;
@TableField("file_id") @TableField("file_id")
private String fileId; private String fileId;

3
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/param/CreateJobParam.java

@ -28,6 +28,9 @@ public class CreateJobParam {
@Schema(description = "航线id") @Schema(description = "航线id")
private String fileId; private String fileId;
@NotBlank
@Schema(description = "航线名称")
private String waylineName;
@NotBlank @NotBlank
@Schema(description = "机场sn") @Schema(description = "机场sn")
private String dockSn; private String dockSn;

21
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAudioFileService.java

@ -0,0 +1,21 @@
package org.dromara.sample.wayline.service;
import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListRequest;
import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.springframework.web.multipart.MultipartFile;
import java.net.URL;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;
/**
* @author sean
* @version 0.3
* @date 2021/12/22
*/
public interface IAudioFileService {
}

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

@ -4,8 +4,10 @@ import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListRequest;
import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse; import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.net.URL; import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
@ -93,4 +95,11 @@ public interface IWaylineFileService {
* @return * @return
*/ */
PaginationData<GetWaylineListResponse> getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param); PaginationData<GetWaylineListResponse> getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param);
AudioFileEntity transformation(MultipartFile file, String workspaceId);
void audioDeleted(String workspaceId, String fileId);
PaginationData<AudioFileEntity> getAudioPage(String workspaceId, int pageNum, int pageSize);
} }

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

@ -105,7 +105,7 @@ public class AiCompareQueueServiceImpl implements IAiCompareQueueService {
if(waylineJob!=null){ if(waylineJob!=null){
AiCompareQueueEntity aiCompareQueueEntity = new AiCompareQueueEntity(); AiCompareQueueEntity aiCompareQueueEntity = new AiCompareQueueEntity();
aiCompareQueueEntity.setWaylineId(waylineJob.getFileId()); aiCompareQueueEntity.setWaylineId(waylineJob.getFileId());
aiCompareQueueEntity.setWaylineName(waylineJob.getName()); aiCompareQueueEntity.setWaylineName(waylineJob.getWaylineName());
aiCompareQueueEntity.setJobId(jobId); aiCompareQueueEntity.setJobId(jobId);
aiCompareQueueEntity.setJobName(waylineJob.getName()); aiCompareQueueEntity.setJobName(waylineJob.getName());
Long selectCount = fileMapper.selectCount(Wrappers.<MediaFileEntity>lambdaQuery().eq(MediaFileEntity::getJobId, jobId).eq(MediaFileEntity::getFileType, "jpeg")); Long selectCount = fileMapper.selectCount(Wrappers.<MediaFileEntity>lambdaQuery().eq(MediaFileEntity::getJobId, jobId).eq(MediaFileEntity::getFileType, "jpeg"));
@ -115,7 +115,7 @@ public class AiCompareQueueServiceImpl implements IAiCompareQueueService {
flag= aiCompareQueueMapper.insert(aiCompareQueueEntity)>0; flag= aiCompareQueueMapper.insert(aiCompareQueueEntity)>0;
//去查询当前的航线是否是预约工单的是就更改完成 //去查询当前的航线是否是预约工单的是就更改完成
//remoteBusinessTaskService.updateTaskStatus(waylineJob.getFileId(), BusinessConstants.TASK_STATUS_3,null,null); //remoteBusinessTaskService.updateTaskStatus(waylineJob.getFileId(), BusinessConstants.TASK_STATUS_3,null,null);
remoteBusinessTaskFeign.updateTaskStatus(waylineJob.getFileId(), BusinessConstants.TASK_STATUS_3, null, null); remoteBusinessTaskFeign.updateTaskStatus(waylineJob.getFileId(), BusinessConstants.TASK_STATUS_3, jobId, waylineJob.getName());
} }
return flag; return flag;
} }

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

@ -87,7 +87,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
.like(StringUtils.isNotBlank(bo.getDeptName()), "lower(dept_name)", StringUtils.lowerCase(bo.getDeptName())) .like(StringUtils.isNotBlank(bo.getDeptName()), "lower(dept_name)", StringUtils.lowerCase(bo.getDeptName()))
.like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName())) .like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName()))
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
"create_time", params.get("beginTime"), params.get("endTime")); "create_time", params.get("beginTime"), params.get("endTime")).orderByDesc("create_time");
return wrapper; return wrapper;
} }
@Override @Override
@ -96,7 +96,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
if(compareDTOList.isEmpty()){ if(compareDTOList.isEmpty()){
throw new RuntimeException("未选择比对数据"); throw new RuntimeException("未选择比对数据");
} }
List<AiCompareEntity> insertList =new ArrayList<>(); // List<AiCompareEntity> insertList =new ArrayList<>();
for (Map<String,Object> bo : compareDTOList) { for (Map<String,Object> bo : compareDTOList) {
Long queueId = bo.containsKey("queueId") ? Convert.toLong(bo.get("queueId")) : null; Long queueId = bo.containsKey("queueId") ? Convert.toLong(bo.get("queueId")) : null;
String waylineId = bo.containsKey("waylineId") ? Convert.toStr(bo.get("waylineId")) : null; String waylineId = bo.containsKey("waylineId") ? Convert.toStr(bo.get("waylineId")) : null;
@ -137,12 +137,13 @@ public class AiCompareServiceImpl implements IAiCompareService {
aiCompareEntity.setTemplateId(jobEntityList.get(0).getJobId()); aiCompareEntity.setTemplateId(jobEntityList.get(0).getJobId());
} }
} }
aiCompareMapper.insert(aiCompareEntity);
String topic = TopicConst.IMAGE +TopicConst.COMPARE; String topic = TopicConst.IMAGE +TopicConst.COMPARE;
List<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId(),aiCompareEntity.getId(),43200,false); List<AiCompareMediaFileDTO> mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId(),aiCompareEntity.getId(),43200,false);
mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1);
insertList.add(aiCompareEntity); // insertList.add(aiCompareEntity);
} }
List<BatchResult> resultList = aiCompareMapper.insertOrUpdate(insertList, 10); // List<BatchResult> resultList = aiCompareMapper.insertOrUpdate(insertList, 10);
List<Long> list =compareDTOList.stream().map(e->Convert.toLong(e.get("queueId"))).collect(Collectors.toList()); List<Long> list =compareDTOList.stream().map(e->Convert.toLong(e.get("queueId"))).collect(Collectors.toList());
return aiCompareQueueService.updateStatus(list,AiCompareStatusConstants.QUEUW_TYPE_1); return aiCompareQueueService.updateStatus(list,AiCompareStatusConstants.QUEUW_TYPE_1);
} }

68
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AudioFileServiceImpl.java

@ -0,0 +1,68 @@
package org.dromara.sample.wayline.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.seata.common.util.CollectionUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListRequest;
import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.resource.api.RemoteFileService;
import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.sample.wayline.mapper.IWaylineFileMapper;
import org.dromara.sample.wayline.model.dto.KmzFileProperties;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.service.IAudioFileService;
import org.dromara.sample.wayline.service.IWaylineFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import static org.dromara.sample.wayline.model.dto.KmzFileProperties.WAYLINE_FILE_SUFFIX;
/**
* @author sean
* @version 0.3
* @date 2021/12/22
*/
@Service
@Transactional
public class AudioFileServiceImpl implements IAudioFileService {
}

29
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java

@ -1,5 +1,8 @@
package org.dromara.sample.wayline.service.impl; package org.dromara.sample.wayline.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants;
import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService; import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService;
import org.dromara.common.sdk.mqtt.MqttReply; import org.dromara.common.sdk.mqtt.MqttReply;
@ -11,7 +14,9 @@ import org.dromara.common.sdk.mqtt.requests.TopicRequestsResponse;
import org.dromara.common.websocket.dto.BizCodeEnum; import org.dromara.common.websocket.dto.BizCodeEnum;
import org.dromara.sample.common.error.CommonErrorEnum; import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity;
import org.dromara.sample.manage.model.enums.UserTypeEnum; import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.media.model.MediaFileCountDTO; import org.dromara.sample.media.model.MediaFileCountDTO;
@ -31,7 +36,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.net.URL; import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Wrapper;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@ -58,7 +65,8 @@ public class SDKWaylineService extends AbstractWaylineService {
@Autowired @Autowired
private IWaylineFileService waylineFileService; private IWaylineFileService waylineFileService;
@Autowired
private IDeviceQrtzFileMapper deviceQrtzFileMapper;
@Autowired @Autowired
private IWebSocketMessageService webSocketMessageService; private IWebSocketMessageService webSocketMessageService;
@ -105,14 +113,33 @@ public class SDKWaylineService extends AbstractWaylineService {
.jobId(response.getBid()).mediaCount(job.getMediaCount()).uploadedCount(0).fileId(job.getFileId()).build()); .jobId(response.getBid()).mediaCount(job.getMediaCount()).uploadedCount(0).fileId(job.getFileId()).build());
} }
LambdaQueryWrapper<DeviceQrtzFileEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_1).eq(DeviceQrtzFileEntity::getDeviceSn,response.getGateway());
List<DeviceQrtzFileEntity> fileEntityList = deviceQrtzFileMapper.selectList(wrapper);
if (FlighttaskStatusEnum.OK != statusEnum) { if (FlighttaskStatusEnum.OK != statusEnum) {
job.setCode(eventsReceiver.getResult().getCode()); job.setCode(eventsReceiver.getResult().getCode());
job.setStatus(WaylineJobStatusEnum.FAILED.getVal()); job.setStatus(WaylineJobStatusEnum.FAILED.getVal());
//异常
if(!fileEntityList.isEmpty()){
fileEntityList.forEach(f->{
f.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0);
});
}
}else if(FlighttaskStatusEnum.OK == statusEnum){
//正常
if(!fileEntityList.isEmpty()){
fileEntityList.forEach(f->{
f.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_3);
});
}
} }
waylineJobService.updateJob(job); waylineJobService.updateJob(job);
waylineRedisService.delRunningWaylineJob(response.getGateway()); waylineRedisService.delRunningWaylineJob(response.getGateway());
waylineRedisService.delPausedWaylineJob(response.getBid()); waylineRedisService.delPausedWaylineJob(response.getBid());
deviceQrtzFileMapper.updateById(fileEntityList);
} }
webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(),UserTypeEnum.WEB.getVal(), webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(),UserTypeEnum.WEB.getVal(),
BizCodeEnum.FLIGHT_TASK_PROGRESS.getCode(), eventsReceiver); BizCodeEnum.FLIGHT_TASK_PROGRESS.getCode(), eventsReceiver);

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

@ -1,10 +1,15 @@
package org.dromara.sample.wayline.service.impl; package org.dromara.sample.wayline.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.seata.common.util.CollectionUtils; import io.seata.common.util.CollectionUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.DocumentException; import org.dom4j.DocumentException;
import org.dom4j.Node; import org.dom4j.Node;
@ -21,9 +26,13 @@ import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import org.dromara.common.sdk.common.Pagination; import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.resource.api.RemoteFileService;
import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.sample.wayline.mapper.IAudioFileMapper;
import org.dromara.sample.wayline.mapper.IWaylineFileMapper; import org.dromara.sample.wayline.mapper.IWaylineFileMapper;
import org.dromara.sample.wayline.model.dto.KmzFileProperties; import org.dromara.sample.wayline.model.dto.KmzFileProperties;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineFileService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -32,12 +41,16 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils; import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import java.io.File; import java.io.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -58,6 +71,12 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
@Autowired @Autowired
private IWaylineFileMapper mapper; private IWaylineFileMapper mapper;
@Autowired
private IAudioFileMapper audioFileMapper;
@DubboReference
private RemoteFileService remoteFileService;
@Override @Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,Integer proId) { public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,Integer proId) {
// Paging Query // Paging Query
@ -81,7 +100,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
wrapper.eq(WaylineFileEntity::getDroneModelKey, type.getType()).or(); wrapper.eq(WaylineFileEntity::getDroneModelKey, type.getType()).or();
} }
}) })
.and(param.getDeviceSn() != null, wrapper -> { .and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> {
wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or(); wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or();
}) })
.and(proId != null, wrapper -> { .and(proId != null, wrapper -> {
@ -243,6 +262,118 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal())); return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal()));
} }
@Override
public AudioFileEntity transformation(MultipartFile multipartFile, String workspaceId) {
File file = new File(multipartFile.getOriginalFilename());
AudioFileEntity audioFileEntity = new AudioFileEntity();
RemoteFile upload = new RemoteFile();
try {
// multipartFile.transferTo(file);
// 1. 获取项目根目录路径
String projectRoot = System.getProperty("user.dir");
// 2. 创建目标文件对象
file = new File(projectRoot + File.separator + multipartFile.getOriginalFilename());
// 3. 写入MP3文件(这里假设已有字节数据)
Files.write(file.toPath(), multipartFile.getBytes());
// 4. 这里使用文件(例如播放、处理等操作)
System.out.println("文件已保存至:" + file.getAbsolutePath());
// TODO: 在此处添加实际使用文件的代码
} catch (IOException e) {
throw new RuntimeException("保存到本地失败");
}
try {
File target = new File(multipartFile.getOriginalFilename().replaceAll("\\.[^.]*$", "") +".opus");
audioFileEntity.setOldName(multipartFile.getOriginalFilename());
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libopus");
audio.setBitRate(32_000); // 32kbps
audio.setChannels(2);
audio.setSamplingRate(48000);
EncodingAttributes attrs = new EncodingAttributes();
attrs.setOutputFormat("opus");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(new MultimediaObject(file), target, attrs);
System.out.println("转换成功");
upload = remoteFileService.upload(target.getName(), target.getName(), multipartFile.getContentType(), Files.readAllBytes(target.toPath()));
//转md5
MessageDigest md = MessageDigest.getInstance("MD5");
try (FileInputStream fis = new FileInputStream(target)) {
byte[] buffer = new byte[8192]; // 缓冲区大小
int bytesRead;
// 分块更新哈希值
while ((bytesRead = fis.read(buffer)) != -1) {
md.update(buffer, 0, bytesRead);
}
}
// 转换为十六进制字符串
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
String md5 = sb.toString();
//转流
audioFileEntity.setInputStream(Files.readAllBytes(target.toPath()));
//刪除臨時文件
Files.delete(file.toPath());
Files.delete(target.toPath());
//插入文件数据库
audioFileEntity.setFileId(UUID.randomUUID().toString());
audioFileEntity.setFileName(upload.getOriginalName());
audioFileEntity.setFilePath(upload.getUrl());
audioFileEntity.setSign(md5);
audioFileEntity.setWorkspaceId(workspaceId);
audioFileEntity.setObjectKey(upload.getName());
audioFileEntity.setOssId(upload.getOssId());
if (audioFileEntity.getInputStream() != null){
String base64Data = Base64.getEncoder().encodeToString(audioFileEntity.getInputStream());
audioFileEntity.setInputStreamBase(base64Data);
}
audioFileMapper.insert(audioFileEntity);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("转换file失败");
}
return audioFileEntity;
}
@Override
public void audioDeleted(String workspaceId, String fileId) {
AudioFileEntity audioFileEntity = audioFileMapper.selectOne(new QueryWrapper<AudioFileEntity>().eq("workspace_id", workspaceId).eq("file_id", fileId));
List<Long> list = new ArrayList<>();
list.add(audioFileEntity.getOssId());
remoteFileService.remove(list, true);
audioFileMapper.delete(new QueryWrapper<AudioFileEntity>().eq("workspace_id",workspaceId).eq("file_id",fileId));
}
@Override
public PaginationData<AudioFileEntity> getAudioPage(String workspaceId, int pageNum, int pageSize) {
Page<AudioFileEntity> pageQuery = new Page<>(pageNum, pageSize);
Page<AudioFileEntity> page1 = audioFileMapper.selectPage(
pageQuery,
new QueryWrapper<AudioFileEntity>()
.eq("workspace_id", workspaceId));
// Wrap the results of a paging query into a custom paging object.
List<AudioFileEntity> records = page1.getRecords();
for (AudioFileEntity audioFileEntity : records){
if (io.seata.common.util.StringUtils.isNotBlank(audioFileEntity.getInputStreamBase())){
byte[] data = Base64.getDecoder().decode(audioFileEntity.getInputStreamBase());
audioFileEntity.setInputStream(data);
}
}
return new PaginationData<>(records, new Pagination(page1.getCurrent(), page1.getSize(), page1.getTotal()));
}
private Optional<WaylineFileDTO> validKmzFile(MultipartFile file) { private Optional<WaylineFileDTO> validKmzFile(MultipartFile file) {
String filename = file.getOriginalFilename(); String filename = file.getOriginalFilename();
if (Objects.nonNull(filename) && !filename.endsWith(WAYLINE_FILE_SUFFIX)) { if (Objects.nonNull(filename) && !filename.endsWith(WAYLINE_FILE_SUFFIX)) {

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

@ -90,6 +90,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
.name(param.getName()) .name(param.getName())
.dockSn(param.getDockSn()) .dockSn(param.getDockSn())
.fileId(param.getFileId()) .fileId(param.getFileId())
.waylineName(param.getWaylineName())
.username(username) .username(username)
.workspaceId(workspaceId) .workspaceId(workspaceId)
.jobId(StringUtils.hasText(param.getJobId())?param.getJobId():UUID.randomUUID().toString()) .jobId(StringUtils.hasText(param.getJobId())?param.getJobId():UUID.randomUUID().toString())

4
dk-visual/nacos/src/main/resources/application.properties

@ -40,9 +40,9 @@ spring.sql.init.platform=mysql
db.num=1 db.num=1
### Connect URL of DB: ### Connect URL of DB:
db.url.0=jdbc:mysql://114.235.183.147:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true db.url.0=jdbc:mysql://127.0.0.1:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.user.0=root db.user.0=root
db.password.0=dkcy@yf db.password.0=123456
### the maximum retry times for push ### the maximum retry times for push
nacos.config.push.maxRetryTime=50 nacos.config.push.maxRetryTime=50

Loading…
Cancel
Save