12 files modified
3 files added
| | |
| | | package com.dji.sample.media.controller; |
| | | |
| | | import com.dji.sample.common.model.CustomClaim; |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.common.model.ResponseResult; |
| | | import com.dji.sample.media.model.MediaFileDTO; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.net.URL; |
| | | |
| | | import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM; |
| | | |
| | | /** |
| | | * @author sean |
| | |
| | | return ResponseResult.success(filesList); |
| | | } |
| | | |
| | | @GetMapping("/{workspace_id}/updateFile") |
| | | public ResponseResult updateFile(@PathVariable(name = "workspace_id") String workspaceId, MediaFileEntity mediaFileEntity) { |
| | | @PostMapping("/{workspace_id}/updateFile") |
| | | public ResponseResult updateFile(HttpServletRequest request, @PathVariable(name = "workspace_id") String workspaceId, @RequestBody MediaFileEntity mediaFileEntity) { |
| | | CustomClaim claims = (CustomClaim) request.getAttribute(TOKEN_CLAIM); |
| | | mediaFileEntity.setUserId(claims.getId()); |
| | | return ResponseResult.success(fileService.updateMediaFile(workspaceId, mediaFileEntity)); |
| | | } |
| | | |
| | |
| | | package com.dji.sample.media.controller; |
| | | |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.common.model.ResponseResult; |
| | | import com.dji.sample.component.mqtt.model.MapKeyConst; |
| | | import com.dji.sample.media.model.FileUploadDTO; |
| | | import com.dji.sample.media.model.MediaJobDTO; |
| | | import com.dji.sample.media.model.param.SearchMediaParam; |
| | | import com.dji.sample.media.service.IMediaService; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobDTO; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | return ResponseResult.success(new ConcurrentHashMap<>(Map.of(MapKeyConst.TINY_FINGERPRINTS, existingList))); |
| | | } |
| | | |
| | | @GetMapping("/{workspace_id}/files/media_page") |
| | | public ResponseResult<PaginationData<MediaJobDTO>> mediaPage( |
| | | @PathVariable(name = "workspace_id") String workspaceId, @RequestBody SearchMediaParam param) { |
| | | |
| | | PaginationData<MediaJobDTO> data = mediaService.mediaPage(workspaceId, param); |
| | | return ResponseResult.success(data); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/files/detail/{job_id}") |
| | | public ResponseResult<PaginationData<MediaJobDTO>> mediaDetail( |
| | | @PathVariable(name = "job_id") String jobId, @RequestParam Long page, @RequestParam Long pageSize) { |
| | | |
| | | PaginationData<MediaJobDTO> data = mediaService.mediaDetail(jobId, page, pageSize); |
| | | return ResponseResult.success(data); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.media.model.MediaFileEntity; |
| | | import com.dji.sample.media.model.MediaFileQueryParam; |
| | | import com.dji.sample.media.model.MediaJobDTO; |
| | | import com.dji.sample.media.model.param.SearchMediaParam; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobDTO; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | /** |
| | |
| | | */ |
| | | public interface IFileMapper extends BaseMapper<MediaFileEntity> { |
| | | Page<MediaFileEntity> getPage(@Param("page") Page<MediaFileEntity> mediaFileEntityPage, @Param("workspaceId") String workspaceId,@Param("query") MediaFileQueryParam mediaFileQueryParam); |
| | | |
| | | Page<MediaJobDTO> mediaPage(@Param("page") Page<MediaJobDTO> mediaFileEntityPage, @Param("workspaceId") String workspaceId, @Param("param") SearchMediaParam param); |
| | | |
| | | |
| | | Page<MediaJobDTO> mediaDetail(Page<MediaJobDTO> mediaJobDTOPage, @Param("jobId") String jobId); |
| | | } |
| | |
| | | ORDER BY create_time DESC |
| | | |
| | | </select> |
| | | <select id="mediaPage" resultType="com.dji.sample.media.model.MediaJobDTO"> |
| | | SELECT |
| | | j.collect_status, |
| | | m.job_id, |
| | | COUNT( CASE WHEN m.file_name LIKE '%.mp4' THEN 1 END) AS videoCount, |
| | | COUNT( CASE WHEN m.file_name LIKE '%.jpeg' THEN 1 END ) AS picCount, |
| | | DATE_FORMAT(FROM_UNIXTIME(j.create_time/1000,'%Y-%m-%d'),'%Y-%m-%d') as create_time |
| | | FROM |
| | | media_file m LEFT JOIN wayline_job j ON m.job_id = j.job_id |
| | | where 1=1 |
| | | <if test="workspaceId != null and workspaceId != ''"> |
| | | and j.workspace_id = #{workspaceId} |
| | | </if> |
| | | <if test="param.dockSn !=null and param.dockSn != ''"> |
| | | and j.dock_sn = #{param.dockSn} |
| | | </if> |
| | | <if test="param.startTime !=null and param.endTime !=null"> |
| | | AND DATE_FORMAT(FROM_UNIXTIME(j.create_time/1000,'%Y-%m-%d'),'%Y-%m-%d') >= DATE_FORMAT(#{param.startTime},'%Y-%m-%d') |
| | | </if> |
| | | |
| | | <if test="param.endTime !=null and param.endTime !=null"> |
| | | AND DATE_FORMAT(FROM_UNIXTIME(j.create_time/1000,'%Y-%m-%d'),'%Y-%m-%d') <= DATE_FORMAT(#{param.endTime},'%Y-%m-%d') |
| | | </if> |
| | | <if test="param.sort != null and param.sort = 2"> |
| | | and j.collect_status = 1 |
| | | </if> |
| | | <if test="param.sort != null and param.sort = 3"> |
| | | and m.collect_status = 1 |
| | | </if> |
| | | GROUP BY m.job_id |
| | | </select> |
| | | <select id="mediaDetail" resultType="com.dji.sample.media.model.MediaJobDTO"> |
| | | SELECT |
| | | m.collect_status, |
| | | m.job_id, |
| | | m.file_id, |
| | | m.file_path as url, |
| | | CASE WHEN m.file_name LIKE '%.mp4' THEN "视频" ELSE "图片" END AS type, |
| | | DATE_FORMAT( FROM_UNIXTIME( m.create_time / 1000, '%Y-%m-%d' ), '%Y-%m-%d' ) AS create_time |
| | | FROM |
| | | media_file m |
| | | WHERE |
| | | 1 = 1 |
| | | <if test="jobId != null and jobId != ''"> |
| | | and m.job_id = #{jobId} |
| | | </if> |
| | | </select> |
| | | </mapper> |
| | |
| | | |
| | | @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) |
| | | private Long updateTime; |
| | | |
| | | @TableField("collect_status") |
| | | private Boolean collectStatus; |
| | | |
| | | @TableField("user_id") |
| | | private String userId; |
| | | } |
| | | |
| New file |
| | |
| | | package com.dji.sample.media.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | @Data |
| | | public class MediaJobDTO { |
| | | private String jobId; |
| | | private Integer picCount; |
| | | private Integer videoCount; |
| | | private Boolean collectStatus; |
| | | private LocalDate createTime; |
| | | private String fileId; |
| | | private String type; |
| | | private String url; |
| | | } |
| New file |
| | |
| | | package com.dji.sample.media.model.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Data |
| | | public class SearchMediaParam { |
| | | private Integer sort; |
| | | private LocalDateTime startTime; |
| | | private LocalDateTime endTime; |
| | | private String waylineFileId; |
| | | private Long page; |
| | | private Long pageSize; |
| | | private String dockSn; |
| | | } |
| | |
| | | package com.dji.sample.media.service; |
| | | |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.media.model.FileUploadDTO; |
| | | import com.dji.sample.media.model.MediaJobDTO; |
| | | import com.dji.sample.media.model.param.SearchMediaParam; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobDTO; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | */ |
| | | List<String> getExistTinyFingerprints(String workspaceId, List<String> tinyFingerprints); |
| | | |
| | | PaginationData<MediaJobDTO> mediaPage(String workspaceId, SearchMediaParam param); |
| | | |
| | | PaginationData<MediaJobDTO> mediaDetail(String jobId,Long page, Long pageSize); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.dji.sample.common.model.Pagination; |
| | | import com.dji.sample.common.model.PaginationData; |
| | |
| | | @Override |
| | | public Boolean updateMediaFile(String workspaceId, MediaFileEntity mediaFileEntity) { |
| | | |
| | | MediaFileEntity params = new MediaFileEntity(); |
| | | /*MediaFileEntity params = new MediaFileEntity(); |
| | | params.setFileId(mediaFileEntity.getFileId()); |
| | | params.setWorkspaceId(mediaFileEntity.getWorkspaceId()); |
| | | |
| | | int update = mapper.update(mediaFileEntity, Wrappers.update(params)); |
| | | return update>0; |
| | | params.setWorkspaceId(mediaFileEntity.getWorkspaceId());*/ |
| | | boolean update1 = new LambdaUpdateChainWrapper<>(mapper).eq(MediaFileEntity::getFileId, mediaFileEntity.getFileId()) |
| | | .set(MediaFileEntity::getFileName, mediaFileEntity.getFileName()) |
| | | .set(MediaFileEntity::getCollectStatus,mediaFileEntity.getCollectStatus()) |
| | | .set(MediaFileEntity::getUserId,mediaFileEntity.getUserId()) |
| | | .update(); |
| | | // int update = mapper.update(mediaFileEntity, Wrappers.update(params)); |
| | | return update1; |
| | | } |
| | | |
| | | /** |
| | |
| | | package com.dji.sample.media.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.dji.sample.common.model.Pagination; |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.common.model.ResponseResult; |
| | | import com.dji.sample.component.mqtt.model.ChannelName; |
| | | import com.dji.sample.component.mqtt.model.CommonTopicReceiver; |
| | |
| | | import com.dji.sample.manage.model.enums.UserTypeEnum; |
| | | import com.dji.sample.manage.service.IDeviceRedisService; |
| | | import com.dji.sample.manage.service.IDeviceService; |
| | | import com.dji.sample.media.model.FileUploadCallback; |
| | | import com.dji.sample.media.model.FileUploadDTO; |
| | | import com.dji.sample.media.model.MediaFileCountDTO; |
| | | import com.dji.sample.media.model.MediaFileDTO; |
| | | import com.dji.sample.media.dao.IFileMapper; |
| | | import com.dji.sample.media.model.*; |
| | | import com.dji.sample.media.model.param.SearchMediaParam; |
| | | import com.dji.sample.media.service.IFileService; |
| | | import com.dji.sample.media.service.IMediaService; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobDTO; |
| | |
| | | import org.springframework.integration.annotation.ServiceActivator; |
| | | import org.springframework.messaging.MessageHeaders; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | @Autowired |
| | | private IDeviceRedisService deviceRedisService; |
| | | |
| | | @Autowired |
| | | private IFileMapper mapper; |
| | | |
| | | @Override |
| | | public Boolean fastUpload(String workspaceId, String fingerprint) { |
| | | return fileService.checkExist(workspaceId, fingerprint); |
| | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public PaginationData<MediaJobDTO> mediaPage(String workspaceId, SearchMediaParam param) { |
| | | Page<MediaJobDTO> waylineJobDTOPage = mapper.mediaPage(new Page<MediaJobDTO>(param.getPage(), param.getPageSize()), workspaceId, param); |
| | | return new PaginationData<MediaJobDTO>(waylineJobDTOPage.getRecords(), new Pagination(waylineJobDTOPage)); |
| | | } |
| | | |
| | | @Override |
| | | public PaginationData<MediaJobDTO> mediaDetail( String jobId,Long page, Long pageSize) { |
| | | Page<MediaJobDTO> waylineJobDTOPage = mapper.mediaDetail(new Page<MediaJobDTO>(page, pageSize), jobId); |
| | | return new PaginationData<MediaJobDTO>(waylineJobDTOPage.getRecords(), new Pagination(waylineJobDTOPage)); |
| | | } |
| | | |
| | | /** |
| | | * Handle media files messages reported by dock. |
| | | * 处理由dock报告的媒体文件消息。 |
| | |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.common.model.ResponseResult; |
| | | import com.dji.sample.log.aspect.SysLogAnnotation; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobCountDTO; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobDTO; |
| | | import com.dji.sample.wayline.model.entity.WaylineJobEntity; |
| | | import com.dji.sample.wayline.model.param.CreateJobParam; |
| | |
| | | waylineJobService.updateJobStatus(workspaceId, jobId, param); |
| | | return ResponseResult.success(); |
| | | } |
| | | |
| | | /** |
| | | * 统计飞行次数 |
| | | */ |
| | | @PostMapping("/{workspace_id}/patrol_statistics") |
| | | public ResponseResult<WaylineJobCountDTO> patrolStatistics(@PathVariable(name = "workspace_id") String workspaceId){ |
| | | |
| | | WaylineJobCountDTO waylineJobCountDTO = waylineJobService.patrolStatistics(workspaceId); |
| | | |
| | | return ResponseResult.success(waylineJobCountDTO); |
| | | } |
| | | |
| | | /** |
| | | * 收藏媒体库 |
| | | */ |
| | | @PostMapping("/update_job_collect") |
| | | public ResponseResult updateJobCollect(HttpServletRequest request, @RequestBody WaylineJobEntity waylineJob){ |
| | | CustomClaim claims = (CustomClaim) request.getAttribute(TOKEN_CLAIM); |
| | | waylineJob.setUserId(claims.getId()); |
| | | waylineJobService.updateJobCollect(waylineJob); |
| | | |
| | | return ResponseResult.success(); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.dji.sample.wayline.model.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class WaylineJobCountDTO { |
| | | private Integer totalNumber; |
| | | private String totalDuration; |
| | | private Integer totalDistance; |
| | | } |
| | |
| | | */ |
| | | @TableField(value = "execute_start_time_arr",typeHandler = FastjsonTypeHandler.class) |
| | | private List<List<Long>> executeStartTimeArr; |
| | | |
| | | @TableField("collect_status") |
| | | private Boolean collectStatus; |
| | | |
| | | @TableField("user_id") |
| | | private String userId; |
| | | } |
| | |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.common.model.ResponseResult; |
| | | import com.dji.sample.component.mqtt.model.CommonTopicReceiver; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobCountDTO; |
| | | import com.dji.sample.wayline.model.dto.WaylineJobDTO; |
| | | import com.dji.sample.wayline.model.entity.WaylineJobEntity; |
| | | import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum; |
| | |
| | | * @return |
| | | */ |
| | | WaylineJobEntity getLatestJob(String workspaceId, WaylineJobQueryParam waylineJobQueryParam); |
| | | |
| | | WaylineJobCountDTO patrolStatistics(String workspaceId); |
| | | |
| | | void updateJobCollect(WaylineJobEntity waylineJob); |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.dji.sample.common.error.CommonErrorEnum; |
| | | import com.dji.sample.common.model.CustomClaim; |
| | |
| | | return waylineJobEntity; |
| | | } |
| | | |
| | | @Override |
| | | public WaylineJobCountDTO patrolStatistics(String workspaceId) { |
| | | WaylineJobCountDTO waylineJobCountDTO = new WaylineJobCountDTO(); |
| | | List<WaylineJobEntity> list = new LambdaQueryChainWrapper<>(mapper).eq(WaylineJobEntity::getStatus, 3).list(); |
| | | if (!CollectionUtils.isEmpty(list)){ |
| | | waylineJobCountDTO.setTotalNumber(list.size()); |
| | | long totalTime = list.stream().mapToLong(s -> s.getEndTime() - s.getBeginTime()).sum() / 1000; |
| | | StringBuffer buffer = new StringBuffer(); |
| | | long h = totalTime / 3600; |
| | | long m = (totalTime % 3600) / 60; |
| | | buffer.append(h).append(" h "); |
| | | buffer.append(m).append(" min"); |
| | | waylineJobCountDTO.setTotalDuration(buffer.toString()); |
| | | } |
| | | return waylineJobCountDTO; |
| | | } |
| | | |
| | | @Override |
| | | public void updateJobCollect(WaylineJobEntity waylineJob) { |
| | | new LambdaUpdateChainWrapper<>(mapper) |
| | | .eq(WaylineJobEntity::getJobId,waylineJob.getJobId()) |
| | | .set(WaylineJobEntity::getCollectStatus,waylineJob.getCollectStatus()) |
| | | .set(WaylineJobEntity::getUserId,waylineJob.getUserId()) |
| | | .update(); |
| | | } |
| | | |
| | | private void pauseJob(String workspaceId, String dockSn, String jobId, WaylineJobStatusEnum statusEnum) { |
| | | if (WaylineJobStatusEnum.PAUSED == statusEnum && jobId.equals(waylineRedisService.getPausedWaylineJobId(dockSn))) { |
| | | waylineRedisService.setPausedWaylineJob(dockSn, jobId); |