From ca7744a37ad3f1ff5bda988644c44841ebc304ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Thu, 16 Oct 2025 11:29:10 +0800 Subject: [PATCH] =?UTF-8?q?fix=20(farm):=20=E5=86=9C=E4=BA=8B=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PC端/微信端 --- .../CropFarmingCenterController.java | 8 +++ .../vo/ProductionPlanReportReqVO.java | 28 +++++++++ .../vo/ProductionPlanReportRespVO.java | 43 ++++++++++++++ .../controller/admin/wx/WxController.java | 1 - .../CropFarmingCenterService.java | 9 +++ .../CropFarmingCenterServiceImpl.java | 58 ++++++++++++++++++- 6 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportReqVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportRespVO.java 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 115a6212..0146f9f4 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 @@ -25,6 +25,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -109,6 +110,13 @@ public class CropFarmingCenterController { private LocalDate maxDate; } + @GetMapping("/production-plan/report") + @Operation(summary = "生产计划-报表") + public CommonResult> getPpReport(ProductionPlanReportReqVO req) { + List res = cropFarmingCenterService.getPpReport(req); + return success(res); + } + @GetMapping("/production-plan/get/{id}") @Operation(summary = "生产计划-查看") public CommonResult getProductionPlan(@PathVariable("id") String id) { diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportReqVO.java new file mode 100644 index 00000000..03d1631a --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo; + +import com.mysql.cj.x.protobuf.MysqlxDatatypes; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: TODO + * @author: binda + * @date: 2025/10/16 10:36 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProductionPlanReportReqVO { + + @Schema(description = "基地ID") + private String baseId; + @Schema(description = "地块ID") + private String plotId; + @Schema(description = "计划状态 1:未开始;2:进行中;3:已完成;4:逾期;") + private String planStatus; + @Schema(description = "年份") + private String year; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportRespVO.java new file mode 100644 index 00000000..6dde0993 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/ProductionPlanReportRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +/** + * @description: TODO + * @author: binda + * @date: 2025/10/16 10:36 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProductionPlanReportRespVO { + + @Schema(description = "基地名称") + private String baseName; + @Schema(description = "模型物种集合") + private List models; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Models { + @Schema(description = "物种名称") + private String plantSpeciesName; + @Schema(description = "排产开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate productionStartDate; + @Schema(description = "排产结束日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate productionEndDate; + @Schema(description = "计划状态") + private String planStatusName; + } + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/wx/WxController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/wx/WxController.java index 693af156..edd246de 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/wx/WxController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/wx/WxController.java @@ -82,7 +82,6 @@ public class WxController { @Parameter(name = "baseId", description = "基地编号") public CommonResult> getDeviceStatisticsList(@RequestParam("baseId") String baseId) { List res = deviceInfoService.getDeviceStatisticsList(baseId); - return success(res); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java index 52735811..3f0b5f3d 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java @@ -9,6 +9,8 @@ import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.Farmin import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO; import jakarta.validation.Valid; +import java.util.List; + /** * @description: 种植中心 * @author: binda @@ -58,4 +60,11 @@ public interface CropFarmingCenterService { void updateFarmingRecord(@Valid FarmingRecordSaveReqVO updateReqVO); void deleteFarmingRecord(String id); + + /** + * 农事报表 + * @param req + * @return + */ + List getPpReport(ProductionPlanReportReqVO req); } 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 b98d18c9..ce871e4e 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 @@ -1,8 +1,10 @@ package cn.iocoder.yudao.module.farm.service.cropFarmingCenter; import cn.hutool.core.util.IdUtil; +import cn.idev.excel.util.StringUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordCreateReqVO; @@ -31,6 +33,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.service.specieslibrary.SpeciesLibraryService; import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil; import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -71,11 +74,12 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { private final FarmingRecordService farmingRecordService; private final FarmingRecordInputService farmingRecordInputService; private final PlotInfoService plotInfoService; + private final SpeciesLibraryService speciesLibraryService; public CropFarmingCenterServiceImpl(SpeciesLibraryMapper speciesLibraryMapper, PersonnelManagementMapper personnelManagementMapper, BaseInfoMapper baseInfoMapper, ProductionPlanMapper productionPlanMapper, ModelManagementService modelManagementService, FarmingRecordService farmingRecordService, - FarmingRecordInputService farmingRecordInputService, PlotInfoService plotInfoService) { + FarmingRecordInputService farmingRecordInputService, PlotInfoService plotInfoService, SpeciesLibraryService speciesLibraryService) { this.speciesLibraryMapper = speciesLibraryMapper; this.personnelManagementMapper = personnelManagementMapper; this.baseInfoMapper = baseInfoMapper; @@ -84,6 +88,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { this.farmingRecordService = farmingRecordService; this.farmingRecordInputService = farmingRecordInputService; this.plotInfoService = plotInfoService; + this.speciesLibraryService = speciesLibraryService; } @Override @@ -616,4 +621,55 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { farmingRecordService.deleteFarmingRecord(id); } + @Override + public List getPpReport(ProductionPlanReportReqVO req) { + LambdaQueryWrapperX x = new LambdaQueryWrapperX<>(); + x.eqIfPresent(ProductionPlanDO::getBaseId, req.getBaseId()); + x.eqIfPresent(ProductionPlanDO::getPlotId, req.getPlotId()); + x.eqIfPresent(ProductionPlanDO::getPlanStatus, req.getPlanStatus()); + x.eq(ProductionPlanDO::getTenantId, getLoginUser().getTenantId()); + x.eq(ProductionPlanDO::getDeleted, NO_CODE); + if (StringUtils.isNotBlank(req.getYear())) { + try { + int year = Integer.parseInt(req.getYear()); + x.between(ProductionPlanDO::getProductionStartDate, + LocalDate.of(year, 1, 1), + LocalDate.of(year, 12, 31)); + } catch (NumberFormatException e) { + // 处理格式错误 + throw new IllegalArgumentException("year格式错误,应为yyyy格式"); + } + } + List pList = productionPlanMapper.selectList(x); + + Map speciesName = speciesLibraryService.getSpeciesName(); + + return pList.stream() + .collect(Collectors.groupingBy(ProductionPlanDO::getBaseName)) + .entrySet().stream() + .map(entry -> { + String baseName = entry.getKey(); + List plans = entry.getValue(); + + List models = plans.stream() + .map(e -> convertToModel(e,speciesName)) + .collect(Collectors.toList()); + + return new ProductionPlanReportRespVO(baseName, models); + }) + .collect(Collectors.toList()); + } + + private ProductionPlanReportRespVO.Models convertToModel(ProductionPlanDO plan,Map speciesName) { + String plantSpeciesName = speciesName.get(plan.getPlantSpeciesCode()); + String planStatusName = PLAN_MAP.get(plan.getPlanStatus()); + + return new ProductionPlanReportRespVO.Models( + plantSpeciesName, + plan.getProductionStartDate(), + plan.getProductionEndDate(), + planStatusName + ); + } + }