shenyijian
2023-11-28 a0ad613e75498fb4331b7f3eb55b60cec7896d88
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -5,6 +5,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.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;
@@ -12,6 +13,7 @@
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.common.util.MinioUrlUtils;
import com.dji.sample.common.util.SpringBeanUtils;
import com.dji.sample.component.mqtt.model.*;
import com.dji.sample.component.mqtt.service.IMessageSenderService;
@@ -25,6 +27,8 @@
import com.dji.sample.control.service.IControlService;
import com.dji.sample.control.service.IDrcService;
import com.dji.sample.geo.entity.GeoJson;
import com.dji.sample.log.dao.IDroneFlightLogMapper;
import com.dji.sample.log.model.entity.DroneFlightLogEntity;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.enums.DeviceModeCodeEnum;
import com.dji.sample.manage.model.enums.DockModeCodeEnum;
@@ -105,6 +109,9 @@
    @Autowired
    private IControlService controlService;
    @Autowired
    private IDroneFlightLogMapper flightLogMapper;
    private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) {
        int id = mapper.insert(jobEntity);
@@ -346,7 +353,6 @@
        // get file url
        //获取航线文件地址
        URL url = waylineFileService.getObjectUrl(waylineJob.getWorkspaceId(), waylineFile.get().getWaylineId());
        WaylineTaskCreateDTO flightTask = WaylineTaskCreateDTO.builder()
                .flightId(waylineJob.getJobId())
                .executeTime(waylineJob.getBeginTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())
@@ -355,7 +361,7 @@
                .rthAltitude(waylineJob.getRthAltitude())
                .outOfControlAction(waylineJob.getOutOfControlAction())
                .file(WaylineTaskFileDTO.builder()
                        .url(url.toString())
                        .url(MinioUrlUtils.getUrl(url))
                        .fingerprint(waylineFile.get().getSign())
                        .build())
                .build();
@@ -578,7 +584,7 @@
            url = waylineFileService.getObjectUrl(waylineJob.getWorkspaceId(), waylineFile.get().getWaylineId());
            builder.data(RequestsReply.success(WaylineTaskCreateDTO.builder()
                    .file(WaylineTaskFileDTO.builder()
                            .url(url.toString())
                            .url(MinioUrlUtils.getUrl(url))
                            .fingerprint(waylineFile.get().getSign())
                            .build())
                    .build()));
@@ -729,7 +735,7 @@
                List<PointDTO> pointDTOS = new ArrayList<>();
                PointDTO pointDTO = new PointDTO();
                pointDTO.setHeight(150.0);
                pointDTO.setHeight(120.0);
                pointDTO.setLongitude(targetList.get(0).getLon());
                pointDTO.setLatitude(targetList.get(0).getLat());
                pointDTOS.add(pointDTO);
@@ -894,18 +900,25 @@
    @Override
    public WaylineJobCountDTO patrolStatistics(String workspaceId, String queryTime) {
    public WaylineJobCountDTO patrolStatistics(String workspaceId, String queryTime,String deviceSn) {
        WaylineJobCountDTO waylineJobCountDTO = new WaylineJobCountDTO();
        List<WaylineJobEntity> list = mapper.patrolStatistics(workspaceId, queryTime);
      List<DroneFlightLogEntity>  list =  flightLogMapper.patrolStatistics(workspaceId,queryTime,deviceSn);
        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 totalTime = list.stream().filter(task -> task.getEndTime()!= null && task.getStartTime()!= null).mapToLong(s -> s.getEndTime() - s.getStartTime()).sum() / 1000;
            long h = totalTime / 3600;
            long m = (totalTime % 3600) / 60;
            buffer.append(h).append(" h ");
            buffer.append(m).append(" min");
            waylineJobCountDTO.setTotalDuration(buffer.toString());
            waylineJobCountDTO.setTotalDuration( String.format("%02d h %02d min", h, m));
            List<String> deviceSns = list.stream().map(DroneFlightLogEntity::getDeviceSn).distinct().collect(Collectors.toList());
            double sum = 0.0;
            for (String sn : deviceSns) {
                Double totalFlightDistance = new LambdaQueryChainWrapper<>(flightLogMapper)
                        .eq(DroneFlightLogEntity::getDeviceSn, sn).orderByDesc(DroneFlightLogEntity::getEndTime).last("limit 1").one().getTotalFlightDistance();
               if (totalFlightDistance!= null){
                   sum+=totalFlightDistance;
               }
            }
            waylineJobCountDTO.setTotalDistance((int) sum);
        }
        return waylineJobCountDTO;
    }