diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml index 10ce24e1..331ce93e 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml @@ -336,8 +336,8 @@ ys7: app-key: 3acf9f1a43dc4209841e0893003db0a2 app-secret: 09e29c70ae1161fbc3ce2030fc09ba2e job: - capture-enabled: true # 控制是否启用萤石抓拍任务 - device-sync-enabled: true # 控制是否同步萤石设备 + capture-enabled: false # 控制是否启用萤石抓拍任务 + device-sync-enabled: false # 控制是否同步萤石设备 # 斯巴达算法 sparta: url: http://119.3.204.120:8040 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneBigPicture.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneBigPicture.java index feb4d9da..7d346d3c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneBigPicture.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneBigPicture.java @@ -33,6 +33,11 @@ public class DroDroneBigPicture extends BaseEntity { */ private Long projectId; + /** + * 任务ID + */ + private String taskId; + /** * 任务名称 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneBigPictureBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneBigPictureBo.java index 5e8f4db7..3799a2a3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneBigPictureBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneBigPictureBo.java @@ -35,13 +35,18 @@ public class DroDroneBigPictureBo extends BaseEntity { /** * 项目ID */ - @NotNull(message = "项目ID不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotNull(message = "项目ID不能为空", groups = {AddGroup.class}) private Long projectId; + /** + * 任务ID + */ + private String taskId; + /** * 任务名称 */ - @NotBlank(message = "任务名称不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotBlank(message = "任务名称不能为空", groups = {AddGroup.class}) private String taskName; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/vo/DroDroneBigPictureVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/vo/DroDroneBigPictureVo.java index e121e521..f8deaacb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/vo/DroDroneBigPictureVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/vo/DroDroneBigPictureVo.java @@ -38,6 +38,12 @@ public class DroDroneBigPictureVo implements Serializable { @ExcelProperty(value = "项目ID") private Long projectId; + /** + * 任务ID + */ + @ExcelProperty(value = "任务ID") + private String taskId; + /** * 任务名称 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/IDroDroneBigPictureService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/IDroDroneBigPictureService.java index 0149d6e9..5d81c4e5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/IDroDroneBigPictureService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/IDroDroneBigPictureService.java @@ -75,4 +75,18 @@ public interface IDroDroneBigPictureService extends IService * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 是否合成完成 + * + * @param picture 大图信息 + */ + String isSynthesisCompleted(DroDroneBigPicture picture); + + /** + * 是否合成完成 + * + * @param pictureVo 大图信息 + */ + String isSynthesisCompleted(DroDroneBigPictureVo pictureVo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneBigPictureServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneBigPictureServiceImpl.java index b92fce62..50760aab 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneBigPictureServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneBigPictureServiceImpl.java @@ -1,11 +1,13 @@ package org.dromara.drone.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -16,11 +18,16 @@ import org.dromara.drone.domain.bo.DroDroneBigPictureBo; import org.dromara.drone.domain.vo.DroDroneBigPictureVo; import org.dromara.drone.mapper.DroDroneBigPictureMapper; import org.dromara.drone.service.IDroDroneBigPictureService; +import org.dromara.manager.dronemanager.DroneManager; +import org.dromara.manager.dronemanager.vo.DroneImgMergeProgressVo; +import org.dromara.manager.dronemanager.vo.DroneImgMergeUrlVo; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailAINumberReq; import org.dromara.progress.service.IPgsProgressPlanDetailService; +import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.Collection; import java.util.List; import java.util.Map; @@ -31,6 +38,7 @@ import java.util.Map; * @author lilemy * @date 2025-11-15 */ +@Slf4j @RequiredArgsConstructor @Service public class DroDroneBigPictureServiceImpl extends ServiceImpl @@ -40,6 +48,9 @@ public class DroDroneBigPictureServiceImpl extends ServiceImpl queryPageList(DroDroneBigPictureBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + if (CollUtil.isNotEmpty(records)) { + // 处理数据,判断合成中的图片是否完成合成 + for (DroDroneBigPictureVo pictureVo : records) { + try { + String synthesisCompleted = this.isSynthesisCompleted(pictureVo); + if (StringUtils.isNotBlank(synthesisCompleted)) { + pictureVo.setStatus(synthesisCompleted); + } + } catch (Exception e) { + pictureVo.setStatus("4"); + pictureVo.setRemark(e.getMessage()); + log.error("查询图片合成进度异常", e); + } + } + } + result.setRecords(records); return TableDataInfo.build(result); } @@ -133,11 +173,32 @@ public class DroDroneBigPictureServiceImpl extends ServiceImpl 0; } + + /** + * 是否合成完成 + * + * @param picture 大图信息 + */ + @Override + public String isSynthesisCompleted(DroDroneBigPicture picture) { + String newStatus = ""; + String status = picture.getStatus(); + String taskId = picture.getTaskId(); + if (taskId == null) { + return newStatus; + } + if (!status.equals("2")) { + return newStatus; + } + DroneImgMergeProgressVo progress = droneManager.getImgMergeProgress(taskId); + if (progress == null) { + return newStatus; + } + BigDecimal msg = progress.getMsg(); + if (msg != null && msg.compareTo(BigDecimal.ONE) == 0) { + newStatus = "3"; + picture.setStatus(newStatus); + } else if (msg != null && msg.compareTo(BigDecimal.ZERO) >= 0 && msg.compareTo(BigDecimal.ONE) < 0) { + return newStatus; + } else { + newStatus = "4"; + picture.setStatus(newStatus); + } + // 修改状态 + boolean b = this.updateById(picture); + if (!b) { + log.error("修改无人机大图信息状态失败"); + } + return newStatus; + } + + /** + * 是否合成完成 + * + * @param pictureVo 大图信息 + */ + @Override + public String isSynthesisCompleted(DroDroneBigPictureVo pictureVo) { + DroDroneBigPicture picture = new DroDroneBigPicture(); + BeanUtils.copyProperties(pictureVo, picture); + return this.isSynthesisCompleted(picture); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java index 24e2aac6..ca99bee1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java @@ -44,7 +44,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -825,7 +824,6 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan * @param coordinateList 识别结果 * @param type 类型 */ - @Async @Override @Transactional(rollbackFor = Exception.class) public void updateFinishNumberByCoordinate(List projectIds, diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java index f50d02c6..297ca6dc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java @@ -50,7 +50,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -764,7 +763,6 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl projectIds, @@ -791,17 +789,18 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl> mapByCategory = finishPanelList.stream() .collect(Collectors.groupingBy(FacPhotovoltaicPanel::getProgressCategoryId)); // 判断当天是否有存在的计划 - LocalDate now = LocalDate.now(); for (Map.Entry> entry : mapByCategory.entrySet()) { Long categoryId = entry.getKey(); PgsProgressCategory category = progressCategoryService.getById(categoryId); @@ -836,9 +835,10 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl imageUrls) { - DroneRequestUtils.createImgMergeTask(droneProperties.getUrl(), businessName, imageUrls); - } - - /** - * 获取图片合成结果 - * - * @param taskId 任务ID - * @param fileType 文件类型(png/tif) - */ - public void downloadMergedFile(String taskId, String fileType) { - DroneRequestUtils.downloadMergedFile(droneProperties.getUrl(), taskId, fileType); + public String createImageMergeTask(String businessName, List imageUrls) { + return DroneRequestUtils.createImgMergeTask(droneProperties.getUrl(), businessName, imageUrls); } /** @@ -52,8 +44,17 @@ public class DroneManager { * * @param taskId 任务ID */ - public void getImgMergeProgress(String taskId) { - DroneRequestUtils.getImgMergeProgress(droneProperties.getUrl(), taskId); + public DroneImgMergeUrlVo getMergedFileUrl(String taskId) { + return DroneRequestUtils.getMergedFileUrl(droneProperties.getUrl(), taskId); + } + + /** + * 获取图片合成结果 + * + * @param taskId 任务ID + */ + public DroneImgMergeProgressVo getImgMergeProgress(String taskId) { + return DroneRequestUtils.getImgMergeProgress(droneProperties.getUrl(), taskId); } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java index 8a7d4a0b..4c5c9f07 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java @@ -10,6 +10,8 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; +import org.dromara.manager.dronemanager.vo.DroneImgMergeProgressVo; +import org.dromara.manager.dronemanager.vo.DroneImgMergeUrlVo; import java.util.List; @@ -66,7 +68,7 @@ public class DroneRequestUtils { * @param businessName 业务名称 * @param imageUrls 图片URL列表 */ - public static void createImgMergeTask(String url, String businessName, List imageUrls) { + public static String createImgMergeTask(String url, String businessName, List imageUrls) { if (StringUtils.isBlank(businessName) || CollUtil.isEmpty(imageUrls)) { throw new ServiceException("创建图片合成任务请求参数错误", HttpStatus.BAD_REQUEST); } @@ -89,28 +91,24 @@ public class DroneRequestUtils { log.error("{},状态码:{},错误信息:{}", errorMsg, obj.get("code"), obj.get("msg")); throw new ServiceException(errorMsg + obj.get("msg")); } - log.info("创建图片合成任务请求成功"); + log.info("创建图片合成任务请求成功:taskId => {}", obj.get("data")); + return obj.getStr("data"); } } /** * 下载图片合成结果 * - * @param taskId 任务ID - * @param fileType 文件类型(png/tif) + * @param taskId 任务ID */ - public static void downloadMergedFile(String url, String taskId, String fileType) { - if (StringUtils.isAnyBlank(taskId, fileType)) { + public static DroneImgMergeUrlVo getMergedFileUrl(String url, String taskId) { + if (StringUtils.isAnyBlank(taskId)) { throw new ServiceException("下载图片合成结果请求参数错误", HttpStatus.BAD_REQUEST); } - if (!fileType.equals("png") && !fileType.equals("tif")) { - throw new ServiceException("无此文件类型", HttpStatus.BAD_REQUEST); - } // 完整 URL - String fullUrl = url + DroneConstant.DOWNLOAD_MERGED_FILE + "/" + taskId + "/" + fileType; + String fullUrl = url + DroneConstant.GET_MERGED_FILE_URL + "/" + taskId; String errorMsg = "下载图片合成结果请求失败"; - try (HttpResponse response = HttpRequest.get(fullUrl) - .execute()) { + try (HttpResponse response = HttpRequest.get(fullUrl).execute()) { if (!response.isOk()) { log.error("{}:{}", errorMsg, response.getStatus()); throw new ServiceException(errorMsg + response.getStatus()); @@ -121,7 +119,10 @@ public class DroneRequestUtils { log.error("{},状态码:{},错误信息:{}", errorMsg, obj.get("code"), obj.get("msg")); throw new ServiceException(errorMsg + obj.get("msg")); } - log.info("下载图片合成结果请求成功"); + String data = obj.getStr("data"); + DroneImgMergeUrlVo mergeUrlVo = JSONUtil.toBean(data, DroneImgMergeUrlVo.class); + log.info("下载图片合成结果请求成功:{}", mergeUrlVo); + return mergeUrlVo; } } @@ -130,7 +131,7 @@ public class DroneRequestUtils { * * @param taskId 任务ID */ - public static void getImgMergeProgress(String url, String taskId) { + public static DroneImgMergeProgressVo getImgMergeProgress(String url, String taskId) { if (StringUtils.isBlank(taskId)) { throw new ServiceException("查询图片合成进度请求参数错误", HttpStatus.BAD_REQUEST); } @@ -141,15 +142,20 @@ public class DroneRequestUtils { .execute()) { if (!response.isOk()) { log.error("{}:{}", errorMsg, response.getStatus()); - throw new ServiceException(errorMsg + response.getStatus()); + throw new ServiceException(errorMsg + ":" + response.getStatus()); } String body = response.body(); JSONObject obj = JSONUtil.parseObj(body); if (!obj.getStr("code").equals("200")) { log.error("{},状态码:{},错误信息:{}", errorMsg, obj.get("code"), obj.get("msg")); - throw new ServiceException(errorMsg + obj.get("msg")); + throw new ServiceException(errorMsg + ":" + obj.get("msg")); } - log.info("查询图片合成进度请求成功"); + DroneImgMergeProgressVo progress = JSONUtil.toBean(obj, DroneImgMergeProgressVo.class); + if (progress == null) { + throw new ServiceException(errorMsg); + } + log.info("查询图片合成进度请求成功:{}", progress); + return progress; } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/vo/DroneImgMergeProgressVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/vo/DroneImgMergeProgressVo.java new file mode 100644 index 00000000..22ace146 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/vo/DroneImgMergeProgressVo.java @@ -0,0 +1,27 @@ +package org.dromara.manager.dronemanager.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-11-17 14:41 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DroneImgMergeProgressVo { + + /** + * 进度 + */ + private BigDecimal msg; + + /** + * 状态 + */ + private String code; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/vo/DroneImgMergeUrlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/vo/DroneImgMergeUrlVo.java new file mode 100644 index 00000000..47d6e653 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/vo/DroneImgMergeUrlVo.java @@ -0,0 +1,25 @@ +package org.dromara.manager.dronemanager.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lilemy + * @date 2025-11-17 17:13 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DroneImgMergeUrlVo { + + /** + * png url + */ + private String pngUrl; + + /** + * tif url + */ + private String tifUrl; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java index 229ccb0a..391c1fff 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java @@ -64,7 +64,7 @@ public class PgsProgressPlanDetailController extends BaseController { */ @PostMapping("/insert/numberAI") public R insertNumberDetailByAI(@Validated @RequestBody PgsProgressPlanDetailAINumberReq req) { - return toAjax(pgsProgressPlanDetailService.insertNumberDetailByAI(req)); + return toAjax(pgsProgressPlanDetailService.insertNumberDetailByAI(req, null)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailAINumberReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailAINumberReq.java index 749972e2..6ddeb0c5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailAINumberReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progressplandetail/PgsProgressPlanDetailAINumberReq.java @@ -1,6 +1,5 @@ package org.dromara.progress.domain.dto.progressplandetail; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -20,7 +19,6 @@ public class PgsProgressPlanDetailAINumberReq implements Serializable { /** * 大图 */ - @NotBlank(message = "大图不能为空") private String file; /** @@ -31,7 +29,6 @@ public class PgsProgressPlanDetailAINumberReq implements Serializable { /** * tif文件 */ - @NotBlank(message = "tif文件不能为空") private String tif; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryByDayVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryByDayVo.java index 2b1bd8ad..b36a19b7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryByDayVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryByDayVo.java @@ -54,4 +54,9 @@ public class PgsProgressCategoryByDayVo { * 总数 */ private Integer size; + + /** + * 下日计划 + */ + private String nextPlanStr; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryDetailByDayVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryDetailByDayVo.java index b89bdda8..3757e751 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryDetailByDayVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryDetailByDayVo.java @@ -54,4 +54,9 @@ public class PgsProgressCategoryDetailByDayVo { * 施工完成 */ private BigDecimal constructionCompleted; + + /** + * 下日计划 + */ + private BigDecimal nextDayPlan; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java index b2de11d3..c1da8e85 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.drone.domain.DroDroneBigPicture; import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.domain.dto.progressplandetail.*; import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailFinishedVo; @@ -14,6 +15,7 @@ import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailVo import java.time.LocalDate; import java.util.List; +import java.util.concurrent.CompletableFuture; /** * 进度计划详情Service接口 @@ -132,8 +134,20 @@ public interface IPgsProgressPlanDetailService extends IService recognizeAsync(Long bigPictureId, String fileUrl, String tifUrl, List projectIds); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java index 6a2a7303..a69e19e2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java @@ -2296,6 +2296,11 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl nextDayDetailList = progressPlanDetailService.lambdaQuery() + .in(PgsProgressPlanDetail::getProjectId, allProjectIds) + .eq(PgsProgressPlanDetail::getDate, date.plusDays(1)) + .list(); // 根据项目id进行分类 Map projectMap = projects.stream() .collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName)); @@ -2328,8 +2333,18 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl planDetailList = detailList.stream() .filter(detail -> childIds.contains(detail.getProgressCategoryId())) .toList(); + List nextPlanDetailList = nextDayDetailList.stream() + .filter(detail -> childIds.contains(detail.getProgressCategoryId())) + .toList(); // 将子类根据名称进行分类 - List detail = this.getChildrenDetailByName(children, planDetailList); + List detail = this.getChildrenDetailByName(children, planDetailList, nextPlanDetailList); + String nextDayPlanStr = ""; + if (CollUtil.isNotEmpty(detail)) { + nextDayPlanStr = detail.stream() + .map(item -> item.getName() + item.getNextDayPlan().stripTrailingZeros().toPlainString() + item.getUnit()) + .collect(Collectors.joining(",")); + } + vo.setNextPlanStr(nextDayPlanStr); vo.setSize(detail.size()); switch (PgsProgressCategoryTypeEnum.fromText(nameKey)) { case BOOSTER_STATION: @@ -2998,12 +3013,14 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl getChildrenDetailByName(List children, - List planList) { + List planList, + List nextPlanList) { // 将子类根据名称进行分类 Map> childrenMap = children.stream() .collect(Collectors.groupingBy(PgsProgressCategory::getName)); @@ -3013,6 +3030,12 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl> finalDetailMap = detailMap; + Map> nextDetailMap = new HashMap<>(); + if (CollUtil.isNotEmpty(nextPlanList)) { + nextDetailMap = nextPlanList.stream() + .collect(Collectors.groupingBy(PgsProgressPlanDetail::getProgressCategoryId)); + } + Map> finalNextDetailMap = detailMap; return childrenMap.entrySet().stream() .map(c -> { String name = c.getKey(); @@ -3034,12 +3057,15 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl ids = list.stream() + .map(PgsProgressCategory::getId) + .filter(Objects::nonNull) + .toList(); // 获取施工计划数量 BigDecimal constructionPlan = BigDecimal.ZERO; if (CollUtil.isNotEmpty(finalDetailMap)) { - constructionPlan = list.stream() - .map(PgsProgressCategory::getId) - .filter(Objects::nonNull) + constructionPlan = ids.stream() .map(finalDetailMap::get) .filter(Objects::nonNull) .flatMap(Collection::stream) @@ -3050,9 +3076,7 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl projects = projectService.lambdaQuery() .eq(BusProject::getPId, projectId) .list(); if (CollUtil.isEmpty(projects)) { - return true; + return false; } List projectIds = projects.stream().map(BusProject::getId).distinct().toList(); + // 保存识别数据 + Long id; + if (bigPicture != null) { + bigPicture.setBigPic(fileUrl); + bigPicture.setTifFile(tifUrl); + bigPicture.setStatus("5"); + boolean update = droDroneBigPictureService.updateById(bigPicture); + if (!update) { + throw new ServiceException("保存识别数据失败,数据库异常", HttpStatus.ERROR); + } + id = bigPicture.getId(); + } else { + DroDroneBigPicture droDroneBigPicture = new DroDroneBigPicture(); + droDroneBigPicture.setTaskName("无人机任务 - " + RandomUtil.randomString(12)); + droDroneBigPicture.setProjectId(projectId); + droDroneBigPicture.setBigPic(fileUrl); + droDroneBigPicture.setTifFile(tifUrl); + droDroneBigPicture.setStatus("5"); + boolean save = droDroneBigPictureService.save(droDroneBigPicture); + if (!save) { + throw new ServiceException("保存识别数据失败,数据库异常", HttpStatus.ERROR); + } + id = droDroneBigPicture.getId(); + } + // 异步执行数据同步 + self.recognizeAsync(id, fileUrl, tifUrl, projectIds) + .thenAccept(result -> log.info("识别数据[{}]异步执行成功", id)) + .exceptionally(ex -> { + log.error("识别数据[{}]异步执行失败", id, ex); + // 修改状态 + droDroneBigPictureService.lambdaUpdate() + .eq(DroDroneBigPicture::getId, id) + .set(DroDroneBigPicture::getStatus, "7") + .update(); + return null; + }); + return true; + } + + /** + * 使用AI识别计划详情设施数量 + * + * @param bigPictureId 大图id + * @param fileUrl 文件url + * @param tifUrl tif文件url + * @param projectIds 项目id列表 + * @return 是否成功 + */ + @Async + @Override + public CompletableFuture recognizeAsync(Long bigPictureId, String fileUrl, String tifUrl, List projectIds) { // 调用识别算法 RecognizeVo recognizeVo = null; try { @@ -1167,11 +1229,11 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl targets = recognizeVo.getTargets(); @@ -1182,7 +1244,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl value = entry.getValue(); // 调用工具获取经纬度 - List coordinateList = new ArrayList<>(); + List coordinateList; try { coordinateList = recognizerManager.convertCoordinate(tifUrl, targets); if (CollUtil.isEmpty(coordinateList)) { @@ -1190,6 +1252,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl