From 64fe243e5a223a09bb07c90958ecfd436ed018ea Mon Sep 17 00:00:00 2001
From: shenyijian <1178253012@qq.com>
Date: Thu, 09 Nov 2023 16:50:07 +0800
Subject: [PATCH] 无人机 - 新增统计飞行记录、收藏媒体任务接口

---
 src/main/java/com/dji/sample/media/service/IMediaService.java                |    8 +
 src/main/java/com/dji/sample/media/controller/FileController.java            |   10 +
 src/main/java/com/dji/sample/media/controller/MediaController.java           |   22 ++++
 src/main/java/com/dji/sample/media/model/param/SearchMediaParam.java         |   16 +++
 src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java |   28 +++++
 src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java      |    6 +
 src/main/java/com/dji/sample/media/dao/IFileMapper.xml                       |   47 +++++++++
 src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java         |   15 ++-
 src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java        |   26 ++++
 src/main/java/com/dji/sample/media/model/MediaFileEntity.java                |    6 +
 src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java    |   24 ++++
 src/main/java/com/dji/sample/wayline/model/dto/WaylineJobCountDTO.java       |   10 ++
 src/main/java/com/dji/sample/media/model/MediaJobDTO.java                    |   17 +++
 src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java         |    5 +
 src/main/java/com/dji/sample/media/dao/IFileMapper.java                      |    9 +
 15 files changed, 238 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/dji/sample/media/controller/FileController.java b/src/main/java/com/dji/sample/media/controller/FileController.java
index 6b0c8e8..e2daa1b 100644
--- a/src/main/java/com/dji/sample/media/controller/FileController.java
+++ b/src/main/java/com/dji/sample/media/controller/FileController.java
@@ -1,5 +1,6 @@
 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;
@@ -9,9 +10,12 @@
 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
@@ -40,8 +44,10 @@
         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));
     }
 
diff --git a/src/main/java/com/dji/sample/media/controller/MediaController.java b/src/main/java/com/dji/sample/media/controller/MediaController.java
index a448dcf..3acd920 100644
--- a/src/main/java/com/dji/sample/media/controller/MediaController.java
+++ b/src/main/java/com/dji/sample/media/controller/MediaController.java
@@ -1,9 +1,13 @@
 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;
@@ -71,4 +75,22 @@
         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);
+    }
+
+
 }
diff --git a/src/main/java/com/dji/sample/media/dao/IFileMapper.java b/src/main/java/com/dji/sample/media/dao/IFileMapper.java
index 6b39bd5..81beb14 100644
--- a/src/main/java/com/dji/sample/media/dao/IFileMapper.java
+++ b/src/main/java/com/dji/sample/media/dao/IFileMapper.java
@@ -2,8 +2,12 @@
 
 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;
 
 /**
@@ -13,4 +17,9 @@
  */
 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);
 }
diff --git a/src/main/java/com/dji/sample/media/dao/IFileMapper.xml b/src/main/java/com/dji/sample/media/dao/IFileMapper.xml
index cd40598..0b6ed2e 100644
--- a/src/main/java/com/dji/sample/media/dao/IFileMapper.xml
+++ b/src/main/java/com/dji/sample/media/dao/IFileMapper.xml
@@ -32,4 +32,51 @@
         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')  &gt;=  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')   &lt;= 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>
diff --git a/src/main/java/com/dji/sample/media/model/MediaFileEntity.java b/src/main/java/com/dji/sample/media/model/MediaFileEntity.java
index 78a747c..5f234a0 100644
--- a/src/main/java/com/dji/sample/media/model/MediaFileEntity.java
+++ b/src/main/java/com/dji/sample/media/model/MediaFileEntity.java
@@ -64,5 +64,11 @@
 
     @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
+
+    @TableField("collect_status")
+    private Boolean collectStatus;
+
+    @TableField("user_id")
+    private String userId;
 }
 
diff --git a/src/main/java/com/dji/sample/media/model/MediaJobDTO.java b/src/main/java/com/dji/sample/media/model/MediaJobDTO.java
new file mode 100644
index 0000000..1620ba5
--- /dev/null
+++ b/src/main/java/com/dji/sample/media/model/MediaJobDTO.java
@@ -0,0 +1,17 @@
+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;
+}
diff --git a/src/main/java/com/dji/sample/media/model/param/SearchMediaParam.java b/src/main/java/com/dji/sample/media/model/param/SearchMediaParam.java
new file mode 100644
index 0000000..3c08b6b
--- /dev/null
+++ b/src/main/java/com/dji/sample/media/model/param/SearchMediaParam.java
@@ -0,0 +1,16 @@
+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;
+}
diff --git a/src/main/java/com/dji/sample/media/service/IMediaService.java b/src/main/java/com/dji/sample/media/service/IMediaService.java
index 15a80cc..f5b01fc 100644
--- a/src/main/java/com/dji/sample/media/service/IMediaService.java
+++ b/src/main/java/com/dji/sample/media/service/IMediaService.java
@@ -1,6 +1,11 @@
 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;
 
@@ -42,4 +47,7 @@
      */
     List<String> getExistTinyFingerprints(String workspaceId, List<String> tinyFingerprints);
 
+    PaginationData<MediaJobDTO> mediaPage(String workspaceId, SearchMediaParam param);
+
+    PaginationData<MediaJobDTO> mediaDetail(String jobId,Long page, Long pageSize);
 }
diff --git a/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java b/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
index 6a00eb0..af03ad9 100644
--- a/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
+++ b/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
@@ -3,6 +3,7 @@
 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;
@@ -126,12 +127,16 @@
     @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;
     }
 
     /**
diff --git a/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java b/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java
index 77dd969..a24c418 100644
--- a/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java
+++ b/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java
@@ -1,5 +1,8 @@
 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;
@@ -13,10 +16,9 @@
 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;
@@ -27,6 +29,7 @@
 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;
@@ -64,6 +67,9 @@
     @Autowired
     private IDeviceRedisService deviceRedisService;
 
+    @Autowired
+    private IFileMapper mapper;
+
     @Override
     public Boolean fastUpload(String workspaceId, String fingerprint) {
         return fileService.checkExist(workspaceId, fingerprint);
@@ -92,6 +98,18 @@
 
     }
 
+    @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报告的媒体文件消息。
diff --git a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
index 1da52e6..da5b60b 100644
--- a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
+++ b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
@@ -4,6 +4,7 @@
 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;
@@ -137,4 +138,27 @@
         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();
+    }
 }
diff --git a/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobCountDTO.java b/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobCountDTO.java
new file mode 100644
index 0000000..6ab8977
--- /dev/null
+++ b/src/main/java/com/dji/sample/wayline/model/dto/WaylineJobCountDTO.java
@@ -0,0 +1,10 @@
+package com.dji.sample.wayline.model.dto;
+
+import lombok.Data;
+
+@Data
+public class WaylineJobCountDTO {
+    private Integer totalNumber;
+    private String totalDuration;
+    private Integer totalDistance;
+}
diff --git a/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java b/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java
index feca1fa..2c80622 100644
--- a/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java
+++ b/src/main/java/com/dji/sample/wayline/model/entity/WaylineJobEntity.java
@@ -117,4 +117,10 @@
      */
     @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;
 }
diff --git a/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java b/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
index e41b145..3dd5d63 100644
--- a/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
+++ b/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
@@ -4,6 +4,7 @@
 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;
@@ -164,4 +165,8 @@
      * @return
      */
     WaylineJobEntity getLatestJob(String workspaceId, WaylineJobQueryParam waylineJobQueryParam);
+
+    WaylineJobCountDTO patrolStatistics(String workspaceId);
+
+    void updateJobCollect(WaylineJobEntity waylineJob);
 }
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
index c149023..e86e4c6 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -2,6 +2,8 @@
 
 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;
@@ -689,6 +691,32 @@
        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);

--
Gitblit v1.9.3