From 90d3978771065fb6dfc9c789821594b704d31150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Wed, 10 Sep 2025 18:14:10 +0800 Subject: [PATCH] =?UTF-8?q?fix=20(farm):=20=E9=9B=86=E6=88=90=E6=B5=8B?= =?UTF-8?q?=E8=AF=95,=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 生产计划 - 模型管理 - 基地管理 --- .../CropFarmingCenterController.java | 59 ++++++++++++++++++- .../vo/ProductionPlanPage2ReqVO.java | 9 ++- .../vo/ProductionPlanResp2VO.java | 9 +-- .../vo/ProductionPlanRespVO.java | 3 +- .../ModelManagementController.java | 8 +-- .../vo/ModelManagementForPlanRespVO.java | 11 +++- .../productionplan/ProductionPlanMapper.java | 29 ++++++--- .../module/farm/enums/ErrorCodeConstants.java | 3 +- .../service/baseinfo/BaseInfoServiceImpl.java | 17 +++--- .../CropFarmingCenterServiceImpl.java | 25 +++++--- .../ModelManagementService.java | 7 +++ .../ModelManagementServiceImpl.java | 39 +++++++++++- 12 files changed, 174 insertions(+), 45 deletions(-) diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java index db4d9264..88e789a8 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java @@ -12,15 +12,25 @@ import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO import cn.iocoder.yudao.module.farm.enums.CommonConstants; import cn.iocoder.yudao.module.farm.service.cropFarmingCenter.CropFarmingCenterService; import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.time.LocalDate; +import java.util.List; +import java.util.Objects; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; /** * @description: 种植中心 @@ -55,10 +65,54 @@ public class CropFarmingCenterController { // } // 生产计划 +// @GetMapping("/production-plan/page") +// @Operation(summary = "生产计划-分页") +// public CommonResult> getProductionPlanPage(@Valid ProductionPlanPage2ReqVO pageReqVO) { +// return success(cropFarmingCenterService.getProductionPlanPage2(pageReqVO)); +// } + @GetMapping("/production-plan/page") @Operation(summary = "生产计划-分页") - public CommonResult> getProductionPlanPage(@Valid ProductionPlanPage2ReqVO pageReqVO) { - return success(cropFarmingCenterService.getProductionPlanPage2(pageReqVO)); + public TemResult getProductionPlanPage(@Valid ProductionPlanPage2ReqVO pageReqVO) { + PageResult page = cropFarmingCenterService.getProductionPlanPage2(pageReqVO); + List list = page.getList(); + LocalDate minDate = list.stream() + .map(ProductionPlanResp2VO::getProductionStartDate) + .filter(Objects::nonNull) + .min(LocalDate::compareTo) + .orElse(null); + LocalDate maxDate = list.stream() + .map(ProductionPlanResp2VO::getProductionEndDate) + .filter(Objects::nonNull) + .max(LocalDate::compareTo) + .orElse(null); + return new TemResult(0, "success", new TemPage(page.getTotal(),page.getList(),minDate,maxDate)); + } + + /** + * 前端需要 minData,maxDate 字段, 临时封装的对象 + */ + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class TemResult{ + private Integer code; + private String msg; + private TemPage data; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class TemPage{ + @Schema(description = "总量", requiredMode = Schema.RequiredMode.REQUIRED) + private Long total; + @Schema(description = "数据", requiredMode = Schema.RequiredMode.REQUIRED) + private List list; + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate minDate; + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate maxDate; } @GetMapping("/production-plan/get/{id}") @@ -107,7 +161,6 @@ public class CropFarmingCenterController { double totalArea = res.getTotalArea(); double predictedArea = res.getPredictedArea(); double usagePercentage = (predictedArea / totalArea) * 100; -// String result = String.format("%.1f%%", percentage); updateReqVO.setTotalArea(totalArea); updateReqVO.setPredictedArea(predictedArea); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPage2ReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPage2ReqVO.java index da336d6d..8e992088 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPage2ReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPage2ReqVO.java @@ -23,9 +23,12 @@ public class ProductionPlanPage2ReqVO extends PageParam { @Schema(description = "地块ID", example = "19246") private String plotId; - @Schema(description = "排产日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDate[] productionStartDate; +// @Schema(description = "排产日期") +// @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +// private LocalDate[] productionStartDate; + + @Schema(description = "排产日期-年份") + private String productionYear; @Schema(description = "计划执行状态") private Integer planStatus; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanResp2VO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanResp2VO.java index 7690b3a2..2f3e8ca3 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanResp2VO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanResp2VO.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.List; /** * @description: 针对于前端甘特图的响应实体 @@ -74,7 +75,7 @@ public class ProductionPlanResp2VO { @Schema(description = "模型名称") private String modelName; @Schema(description = "物种图片") - private String speciesImage; + private List speciesImage; @Schema(description = "种植物种-名称") private String plantSpeciesName; @Schema(description = "计划编号") @@ -87,10 +88,10 @@ public class ProductionPlanResp2VO { private Integer planSubStatus; @Schema(description = "计划执行子状态-名称") private String planSubStatusName; - @Schema(description = "生命周期-名称") - private String cycleName; + @Schema(description = "管理周期-名称") + private String managementCycleName; @Schema(description = "种植面积") - private Double predictedArea; + private Integer predictedArea; @Schema(description = "预计产量") private Integer predictedYields; @Schema(description = "任务进度",example = "1/10") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanRespVO.java index e4b52a4e..d1fd4642 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanRespVO.java @@ -55,7 +55,8 @@ public class ProductionPlanRespVO { private String planSubStatusName; @Schema(description = "逾期天数") private Integer overdueDays; - + @Schema(description = "地块负责人") + private String plotManger; @Schema(description = "租户ID") private String tenantId; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java index 8766ba13..4bfbc02a 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java @@ -133,13 +133,11 @@ public class ModelManagementController { } @GetMapping("/get/species") - @Operation(summary = "获得模型管理") + @Operation(summary = "获得模型与物种集合") @Parameter(name = "speciesId", description = "物种编号", required = true, example = "1024") public CommonResult> getModelManagementForPlan(@RequestParam String speciesId) { - - - - return success(null); + List res = modelManagementService.getModelManagementForPlan(speciesId); + return success(res); } /** diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementForPlanRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementForPlanRespVO.java index 611bfd70..ea1d41a5 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementForPlanRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementForPlanRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -14,7 +15,13 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class ModelManagementForPlanRespVO { - - private String xx; + @Schema(description = "物种ID") + private String speciesId; + @Schema(description = "模型名称") + private String modelName; + @Schema(description = "预计亩产") + private String harvest; + @Schema(description = "周期持续天数") + private Integer cycleDurationDays; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/productionplan/ProductionPlanMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/productionplan/ProductionPlanMapper.java index dcfd36e7..b3b97f67 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/productionplan/ProductionPlanMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/productionplan/ProductionPlanMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.dal.mysql.productionplan; +import cn.idev.excel.util.StringUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -12,6 +13,7 @@ import cn.iocoder.yudao.module.farm.enums.CommonConstants; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.time.LocalDate; import java.util.List; /** @@ -40,17 +42,30 @@ public interface ProductionPlanMapper extends BaseMapperX { } default PageResult selectPage2(ProductionPlanPage2ReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .betweenIfPresent(ProductionPlanDO::getProductionStartDate, - reqVO.getProductionStartDate() != null ? reqVO.getProductionStartDate()[0] : null, - reqVO.getProductionStartDate() != null ? reqVO.getProductionStartDate()[1] : null - ) + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX() +// .betweenIfPresent(ProductionPlanDO::getProductionStartDate, +// reqVO.getProductionStartDate() != null ? reqVO.getProductionStartDate()[0] : null, +// reqVO.getProductionStartDate() != null ? reqVO.getProductionStartDate()[1] : null +// ) .eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId()) .eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId()) .eqIfPresent(ProductionPlanDO::getPlanStatus, reqVO.getPlanStatus()) .eqIfPresent(ProductionPlanDO::getTenantId, reqVO.getTenantId()) - .orderByDesc(ProductionPlanDO::getCreateTime) - ); + .orderByDesc(ProductionPlanDO::getCreateTime); + + if (StringUtils.isNotBlank(reqVO.getProductionYear())) { + try { + int year = Integer.parseInt(reqVO.getProductionYear()); + // 构建该年份的开始和结束日期 + LocalDate startDate = LocalDate.of(year, 1, 1); + LocalDate endDate = LocalDate.of(year, 12, 31); + wrapperX.between(ProductionPlanDO::getProductionStartDate, startDate, endDate); + } catch (NumberFormatException e) { + // 处理格式错误 + throw new IllegalArgumentException("productionYear格式错误,应为yyyy格式"); + } + } + return selectPage(reqVO, wrapperX); } default PageResult selectPage3(FarmProductionPlanReqVO reqVO) { diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/ErrorCodeConstants.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/ErrorCodeConstants.java index 5731e988..ccf625cc 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/ErrorCodeConstants.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/ErrorCodeConstants.java @@ -118,7 +118,8 @@ public interface ErrorCodeConstants { ErrorCode TWO_DICT_NOT_EXISTS = new ErrorCode(1_050_035_000, "字典不存在"); ErrorCode PLOT_AREA_ERRORS = new ErrorCode(1_050_036_000, "地块面积总和大于基地面积"); - ErrorCode PLOT_AREA_EXISTS_ERRORS = new ErrorCode(1_050_036_001, "该基地下存在地块,不可删除"); + ErrorCode PLOT_AREA_EXISTS_ERRORS = new ErrorCode(1_050_036_001, "该基地存在地块,不可删除"); + ErrorCode BEING_PLOT_AREA_EXISTS_ERRORS = new ErrorCode(1_050_036_002, "该基地存在在种地块,不可删除"); ErrorCode INDICATOR_NAME_NOT_EXISTS = new ErrorCode(1_050_037_000, "指标名称不存在"); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java index c503be9c..bd72f292 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java @@ -46,8 +46,7 @@ import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; -import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.BASE_INFO_NOT_EXISTS; -import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.PLOT_AREA_EXISTS_ERRORS; +import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.*; /** * 基地 Service 实现类 @@ -103,8 +102,6 @@ public class BaseInfoServiceImpl implements BaseInfoService { // 更新 BaseInfoDO updateObj = BeanUtils.toBean(updateReqVO, BaseInfoDO.class); baseInfoMapper.updateById(updateObj); - // 同步 -// productionPlanService.syncBaseAreaToAllPlansByBaseId(baseId, newArea, oldArea); } @Override @@ -113,14 +110,16 @@ public class BaseInfoServiceImpl implements BaseInfoService { validateBaseInfoExists(id); // 校验: 存在在种地块时 不允许删除 boolean flag = productionPlanService.validateIncompletePlansBId("base_id", id); + if (!flag) { + throw exception(BEING_PLOT_AREA_EXISTS_ERRORS); + } boolean flag2 = plotInfoService.validatePlotExistByBaseId(id); - if (flag || flag2) { - // 删除 - baseInfoMapper.deleteById(id); - plotInfoService.deleteByBaseId(id); - }else { + if (!flag2) { throw exception(PLOT_AREA_EXISTS_ERRORS); } + // 删除 + baseInfoMapper.deleteById(id); + plotInfoService.deleteByBaseId(id); } @Override diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java index 0cf55988..6e746e1f 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java @@ -26,6 +26,7 @@ import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService; import cn.iocoder.yudao.module.farm.service.farmingrecordinput.FarmingRecordInputService; import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService; import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService; +import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil; import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; @@ -217,11 +218,15 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { if (productionPlanDO == null) { throw exception(PRODUCTION_PLAN_NOT_EXISTS); } - + Map employeeNameMap = personnelManagementMapper.selectList().stream().collect(toMap(PersonnelManagementDO::getId, PersonnelManagementDO::getName, (v1, v2) -> v1)); ModelManagementRespVO modelManagementRespVO = modelManagementService.getModelManagement(productionPlanDO.getSpeciesModelId()); ProductionPlanRespVO productionPlanRespVO = BeanUtils.toBean(productionPlanDO, ProductionPlanRespVO.class); productionPlanRespVO.setModelManagementRespVO(modelManagementRespVO); + // 地块负责人 + String plotId = productionPlanRespVO.getPlotId(); + PlotInfoDO plotIObj = plotInfoService.getPlotInfoByPlotId(plotId); + productionPlanRespVO.setPlotManger(employeeNameMap.getOrDefault(plotIObj.getEmployeeId(),"系统")); return productionPlanRespVO; } @@ -275,8 +280,10 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { public PageResult getProductionPlanPage2(ProductionPlanPage2ReqVO reqVO) { Map speciesNameMap = speciesLibraryMapper.selectList().stream().collect(toMap(SpeciesLibraryDO::getId, SpeciesLibraryDO::getCultivarName, (v1, v2) -> v1)); Map employeeNameMap = personnelManagementMapper.selectList().stream().collect(toMap(PersonnelManagementDO::getId, PersonnelManagementDO::getName, (v1, v2) -> v1)); + reqVO.setTenantId(getLoginUser().getTenantId().toString()); PageResult productionPlanDOPageResult = productionPlanMapper.selectPage2(reqVO); + List planList = productionPlanDOPageResult.getList(); Map> plansByBaseName = planList.stream().collect(Collectors.groupingBy(ProductionPlanDO::getBaseName, toList())); @@ -343,7 +350,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { BaseInfoDO baseObj = baseInfoMapper.selectOne("id", planObj.getBaseId()); if (baseObj != null) { ProductionPlanRespVO.PlanOverview source = productionPlanMapper.getPlanOverview(planObj.getBaseId(), getLoginUser().getTenantId().toString()); - source.setTotalArea(baseObj.getArea()); + source.setTotalArea(BigDecimalUtil.roundedViaMath(baseObj.getArea())); return BeanUtils.toBean(source, ProductionPlanResp2VO.PlanOverview.class); } else { return null; @@ -355,21 +362,23 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { BaseInfoDO baseObj = baseInfoMapper.selectOne("id", planObj.getBaseId()); if (baseObj != null) { String employeeId = baseObj.getManager(); - ModelManagementDO modelManagementDo = modelManagementService.getModelManagement("id", planObj.getSpeciesModelId()); + String managementCycleName = ""; + ProductionPlanResp2VO.ModelInfo modelInfo = new ProductionPlanResp2VO.ModelInfo(); modelInfo.setId(modelManagementDo.getId()); modelInfo.setModelName(modelManagementDo.getModelName()); - modelInfo.setSpeciesImage(modelManagementDo.getSpeciesImage()); + modelInfo.setSpeciesImage(modelManagementDo.getSpeciesImageList()); modelInfo.setPlantSpeciesName(modelManagementDo.getSpeciesName()); modelInfo.setPlanNumber(planObj.getPlanNumber()); modelInfo.setPlanStatus(planObj.getPlanStatus()); modelInfo.setPlanSubStatus(ObjectUtils.defaultIfNull(planObj.getPlanSubStatus(), planObj.getPlanStatus())); modelInfo.setPlanStatusName(PLAN_MAP.getOrDefault(planObj.getPlanStatus(), "")); modelInfo.setPlanSubStatusName(PLAN_MAP.getOrDefault(planObj.getPlanSubStatus(), "")); - modelInfo.setCycleName(modelManagementDo.getCycleName()); - modelInfo.setPredictedArea(planObj.getPredictedArea()); + + modelInfo.setManagementCycleName(managementCycleName); + modelInfo.setPredictedArea(planObj.getPredictedArea().intValue()); modelInfo.setPredictedYields(planObj.getPredictedYields()); modelInfo.setProgressBar("1/10"); // TODO: 2025/8/30 农事记录 modelInfo.setProgressRatio("10"); // TODO: 2025/8/31 @@ -509,7 +518,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { } ProductionPlanRespVO.PlanOverview source = productionPlanMapper.getPlanOverview(baseId, tenantId.toString()); - return new BasePlanOverviewRespVO().setTotalArea(totalArea) + return new BasePlanOverviewRespVO().setTotalArea(BigDecimalUtil.roundedViaMath(totalArea)) .setPlanCount(source.getPlanCount()) .setPlanCompletedCount(source.getPlanCompletedCount()) .setPlanInProgressCount(source.getPlanInProgressCount()) @@ -524,6 +533,6 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { BigDecimal totalArea = baseInfoMapper.getTotalBaseArea(baseId, tenantId); int farmRecordCount = farmingRecordService.getFarmRecordOverview(baseId); - return new FarmRecordOverviewRespVO(totalArea, farmRecordCount); + return new FarmRecordOverviewRespVO(BigDecimalUtil.roundedViaMath(totalArea), farmRecordCount); } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java index b6d09f27..a204f132 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.farm.service.modelmanagement; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementForPlanRespVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementSaveReqVO; @@ -89,4 +90,10 @@ public interface ModelManagementService { */ Map> getRecordList(List taskIdList); + /** + * 通过物种ID 获取 模型管理信息 + * @param speciesId + * @return + */ + List getModelManagementForPlan(String speciesId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java index f8517efc..82a90d81 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java @@ -4,9 +4,12 @@ import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.farm.controller.admin.modelcycle.vo.ModelCycleRespVO; import cn.iocoder.yudao.module.farm.controller.admin.modelfarmingoperation.vo.ModelFarmingOperationRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementForPlanRespVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementSaveReqVO; @@ -94,7 +97,6 @@ public class ModelManagementServiceImpl implements ModelManagementService { modelManagement.setSpeciesName(speciesLibrary.getSpeciesName() + "/" + speciesLibrary.getCultivarName()); modelManagement.setCycle(speciesLibrary.getLifeCycle().toString()); modelManagement.setCycleName(LIFE_CYCLE_MAP.getOrDefault(speciesLibrary.getLifeCycle().toString(),"")); - modelManagement.setSpeciesImage(speciesLibrary.getImage()); // 处理suitablePlantingAreas字段,优先使用集合 if (createReqVO.getSuitablePlantingAreas() != null && !createReqVO.getSuitablePlantingAreas().isEmpty()) { modelManagement.setSuitablePlantingAreasList(createReqVO.getSuitablePlantingAreas()); @@ -106,7 +108,7 @@ public class ModelManagementServiceImpl implements ModelManagementService { } else if (createReqVO.getSpeciesImage() != null) { modelManagement.setSpeciesImageList(libraryDO.getImageList()); } - + modelManagement.setSpeciesImage(libraryDO.getImage()); modelManagementMapper.insert(modelManagement); // 返回 @@ -487,4 +489,37 @@ public class ModelManagementServiceImpl implements ModelManagementService { return resMap; } + @Override + public List getModelManagementForPlan(String speciesId) { + + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + wrapperX.eq(ModelManagementDO::getSpeciesId, speciesId); + wrapperX.eq(ModelManagementDO::getIsRelease, YES_CODE); // 发布状态 + wrapperX.eq(ModelManagementDO::getType, MODEL_TYPE_1); // 模版类型 + wrapperX.eq(ModelManagementDO::getTenantId, getLoginUser().getTenantId()); + List modelManagementDOS = modelManagementMapper.selectList(wrapperX); + + List res = new ArrayList<>(); + for (ModelManagementDO m : modelManagementDOS) { + String modelId = m.getId(); + String modelName = m.getModelName(); + String harvest = m.getHarvest(); + List cycleDOS = getModelCycleListByModelId(modelId); + if (ObjectUtils.isEmpty(cycleDOS)) { + continue; + } + Integer sum = cycleDOS.stream().mapToInt(cycle -> cycle.getStage() != null ? cycle.getStage() : 0).sum(); + res.add(new ModelManagementForPlanRespVO(modelId,modelName,harvest,sum)); + } + return res; + + } + + private List getModelCycleListByModelId(String modelId) { + LambdaQueryWrapperX wrapperXx = new LambdaQueryWrapperX<>(); + wrapperXx.eq(ModelCycleDO::getModelId, modelId); + wrapperXx.eq(ModelCycleDO::getTenantId, getLoginUser().getTenantId()); + return modelCycleMapper.selectList(wrapperXx); + } + } \ No newline at end of file