rain
2024-08-17 61b91c80f3d7526eb3caa04e6e781e591f48ec93
时间分析任务下发
3 files modified
90 ■■■■■ changed files
src/main/java/com/dji/sample/droneairport/controller/RegistController.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/droneairport/service/RegistService.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java 58 ●●●●● patch | view | raw | blame | history
src/main/java/com/dji/sample/droneairport/controller/RegistController.java
@@ -77,7 +77,7 @@
        return ResponseResult.success(200, "无人机成果获取成功!",registService.findDbFilesByTaskId(taskId));
    }
    @PostMapping("/test")
    public ResponseResult test(@RequestBody String param) {
        return ResponseResult.success(param);
    public ResponseResult test(@RequestParam String workspaceId) {
        return ResponseResult.success(registService.getDistinctTaskIdCount(workspaceId));
    }
}
src/main/java/com/dji/sample/droneairport/service/RegistService.java
@@ -9,17 +9,16 @@
public interface RegistService {
    /**
     * 注册端口
     *
     * 该方法用于在系统中注册一个设备扩展端口的信息它接收一个DeviceExpanSionEntity对象作为参数,
     * 其中包含了设备扩展端口的相关信息这个方法的主要目的是将这个端口信息添加到系统的数据库中,
     * 以便于系统能够识别和管理这个端口
     *
     * @param airport 设备扩展端口实体对象,包含了需要注册的端口信息
     * @return 注册操作的状态信息,通常是一个字符串,比如"成功"或"失败"
     * 推送无人机机场信息
     */
    String registPort(DeviceExpanSionEntity airport);
    /**
     * 推送无人机设备
     *
     * @param workspceId 接收workspaceId,自动将该工作空间的机场以及无人机设备推送
     * @return 返回推送接口后返回的信息
     */
    String addDrone(String workspceId);
    /**
@@ -34,12 +33,9 @@
    /**
     * 执行授权操作
     *
     * @param base64 经过Base64编码的字符串,通常用于身份验证
     * @param Secret 应用的密钥,用于生成签名
     * @return 返回授权结果,包括成功与否、错误信息等
     * @throws Exception 如果授权过程中出现错误,可能会抛出异常
     */
//    ResponseResult authorization(String base64, String Secret) throws Exception;
    void noAuthorization(String sn);
    void Authorization(String sn);
@@ -91,4 +87,14 @@
     * @throws Exception 如果在获取无人机状态过程中发生错误,将抛出异常
     */
    String findDbFilesByTaskId(String taskId);
    /**
     * 获取指定工作空间中不同任务的总数
     *
     * 此方法通过接收工作空间的ID,计算并返回该工作空间中不同任务的数量
     * 它用于度量工作空间中任务的多样性,帮助用户了解工作空间的任务分布情况
     *
     * @param workspaceId 工作空间的唯一标识符
     * @return 工作空间中不同任务的数量
     */
    Integer getDistinctTaskIdCount(String workspaceId);
}
src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
@@ -8,6 +8,7 @@
import com.alibaba.fastjson.JSON;
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.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.redis.RedisOpsUtils;
import com.dji.sample.droneairport.dao.DbUploadMapper;
@@ -49,9 +50,7 @@
import java.io.File;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.*;
import java.util.*;
import java.util.stream.Collectors;
@@ -284,7 +283,7 @@
                String waylineName = TimerUtil.getTimeName();
                MultipartFile multipartFile = timerUtil.getFile(waylineName, lotInfosForAirport, airport.getLat(), airport.getLon());
                WaylineFileEntity waylineFile = timerUtil.backWayline(multipartFile, waylineName, airport.getWorkspaceId(), username);
                Long time = getNextDayEightAMTimestamp(countDistinctTaskIdsForToday(airport.getWorkspaceId()));
                Long time = getNextDayEightAMTimestamp(getDistinctTaskIdCount(airport.getWorkspaceId()));
                List<List<Long>> listOfLists = new ArrayList<>();
                List<Long> sublist = new ArrayList<>();
                sublist.add(time);
@@ -356,7 +355,7 @@
                WaylineFileEntity waylineFile = timerUtil.backWayline(multipartFile, waylineName, airport.getWorkspaceId(), username);
                // 将为规划的图斑状态更新为已规划
                Long time = getNextDayEightAMTimestamp(countDistinctTaskIdsForToday(airport.getWorkspaceId()));
                Long time = getNextDayEightAMTimestamp(getDistinctTaskIdCount(airport.getWorkspaceId()));
                List<List<Long>> listOfLists = new ArrayList<>();
                List<Long> sublist = new ArrayList<>();
                sublist.add(time);
@@ -429,9 +428,9 @@
    public String findDbFilesByTaskId(String taskId) {
        DbUploadEntity entity = dbUploadMapper.selectOne(new LambdaQueryWrapper<DbUploadEntity>()
                .eq(DbUploadEntity::getTaskId, taskId));
        if (entity!=null){
            DbUploadDto dto=DbEntityToDto(entity);
           return SM4Util.encrypt("jsimjrby3wqb7dbq",buildRequestBody(dto));
        if (entity != null) {
            DbUploadDto dto = DbEntityToDto(entity);
            return SM4Util.encrypt("jsimjrby3wqb7dbq", buildRequestBody(dto));
        }
        return null;
@@ -474,6 +473,7 @@
        dto.setUrl(entity.getUrl());
        return dto;
    }
    public void delTaskInfo(String taskId) {
        taskInfoMapper.delete(new LambdaUpdateWrapper<TaskInfo>().eq(TaskInfo::getTaskId, taskId));
    }
@@ -748,19 +748,37 @@
        // 调用 update 方法进行更新操作
        waylineJobMapper.update(null, updateWrapper);
    }
    public int countDistinctTaskIdsForToday(String workspaceId) {
        // 获取当天的开始和结束时间戳
        long startOfDay = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
        long startOfNextDay = LocalDate.now().plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
        // 查询数据库,计算不同 taskId 的数量
        return patchesMapper.selectCount(new LambdaQueryWrapper<LotInfo>()
                .eq(LotInfo::getWorkspaceId, workspaceId)
                .ge(LotInfo::getCreateTime, startOfDay)
                .lt(LotInfo::getCreateTime, startOfNextDay)
                .select(LotInfo::getTaskId)
                .groupBy(LotInfo::getTaskId)
        );
    /**
     * 统计给定工作空间下,创建时间为当天的不同 taskId 的数量。
     *
     * @param workspaceId 工作空间 ID
     * @return 不同 taskId 的数量
     */
    public Integer getDistinctTaskIdCount(String workspaceId) {
        // 获取当前日期的开始和结束时间
        LocalDate today = LocalDate.now();
        LocalDateTime startTime = today.atStartOfDay();
        LocalDateTime endTime = today.plusDays(1).atStartOfDay();
        // 转换为毫秒时间戳
        long startTimestamp = startTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        long endTimestamp = endTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        // 使用 LambdaQueryWrapper 进行查询
        LambdaQueryWrapper<LotInfo> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(LotInfo::getWorkspaceId, workspaceId)
                .ge(LotInfo::getCreateTime, startTimestamp)
                .lt(LotInfo::getCreateTime, endTimestamp);
        // 获取符合条件的所有 taskId
        Set<String> taskIdSet = patchesMapper.selectList(queryWrapper).stream()
                .map(LotInfo::getTaskId)
                .collect(Collectors.toSet());
        // 返回不同 taskId 的数量
        return taskIdSet.size();
    }
}