From cd6b05f5531c06b7af3d8f49a4ad3802261ca006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Tue, 26 Aug 2025 16:11:28 +0800 Subject: [PATCH] =?UTF-8?q?feat=20(farm):=20=E7=A7=8D=E6=A4=8D=E4=B8=AD?= =?UTF-8?q?=E5=BF=83-=E7=94=9F=E4=BA=A7=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 开始, 结束 ,重启, 删除 按钮 --- .../CropFarmingCenterController.java | 41 +++++++++++++++--- .../vo/ProductionPlanPageRespVO.java | 31 ++++---------- .../vo/ProductionPlanRespVO.java | 35 +++++++++++++++- .../vo/ProductionPlanUpdateReqVO.java | 6 +++ .../productionplan/ProductionPlanDO.java | 8 ++++ .../productionplan/ProductionPlanMapper.java | 10 +++-- .../module/farm/enums/CommonConstants.java | 15 ++++--- .../CropFarmingCenterService.java | 5 ++- .../CropFarmingCenterServiceImpl.java | 42 +++++++++++++++---- .../productionplan/ProductionPlanMapper.xml | 2 +- 10 files changed, 148 insertions(+), 47 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 e51f17be..7b1de431 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 @@ -9,9 +9,11 @@ import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRec import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordRespVO; import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordSaveReqVO; 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 io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; @@ -45,14 +47,11 @@ public class CropFarmingCenterController { this.farmingRecordService = farmingRecordService; } - - // 生产计划 @GetMapping("/production-plan/page") @Operation(summary = "生产计划-分页") - public CommonResult getProductionPlanPage(@Valid cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageReqVO pageReqVO) { - ProductionPlanPageRespVO pageResult = cropFarmingCenterService.getProductionPlanPage(pageReqVO); - return success(pageResult); + public CommonResult> getProductionPlanPage(@Valid cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageReqVO pageReqVO) { + return success(cropFarmingCenterService.getProductionPlanPage(pageReqVO)); } @GetMapping("/production-plan/get/{id}") @@ -77,6 +76,38 @@ public class CropFarmingCenterController { } + @DeleteMapping("/production-plan/delete") + @Operation(summary = "删除种植中心-生产计划-生产计划") + @Parameter(name = "id", description = "编号", required = true) + public CommonResult deleteProductionPlan(@RequestParam("id") String id) { + cropFarmingCenterService.deleteProductionPlan(id); + return success(true); + } + + @Operation(summary = "生产计划-重启按钮") + @PutMapping("/production-plan/restart") + public CommonResult restartPlanning(@RequestBody ProductionPlanUpdateReqVO updateReqVO) { + updateReqVO.setPlanStatus(CommonConstants.PLAN_STATUS_2); + cropFarmingCenterService.updateProductionPlan(updateReqVO); + return success(true); + } + @Operation(summary = "生产计划-开始按钮") + @PutMapping("/production-plan/start") + public CommonResult startPlanning(@RequestBody ProductionPlanUpdateReqVO updateReqVO) { + updateReqVO.setPlanStatus(CommonConstants.PLAN_STATUS_2); + cropFarmingCenterService.updateProductionPlan(updateReqVO); + return success(true); + } + + @Operation(summary = "生产计划-结束按钮") + @PutMapping("/production-plan/finish") + public CommonResult finishPlanning(@RequestBody ProductionPlanUpdateReqVO updateReqVO) { + updateReqVO.setPlanStatus(CommonConstants.PLAN_STATUS_3); + cropFarmingCenterService.updateProductionPlan(updateReqVO); + return success(true); + } + + // 农事记录 @GetMapping("/farming-record/page") @Operation(summary = "农事记录-分页") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageRespVO.java index 84ecf5dd..fa4e8576 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageRespVO.java @@ -1,12 +1,11 @@ package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.math.BigDecimal; +import java.util.List; /** * @description: 分页响应实体 @@ -18,27 +17,11 @@ import java.math.BigDecimal; @NoArgsConstructor public class ProductionPlanPageRespVO { - - @Schema(description = "分页数据") - private PageResult list; - - @Schema(description = "计划概括信息") - private PlanOverview planOverview; - - @Data - @AllArgsConstructor - @NoArgsConstructor - public static class PlanOverview{ - @Schema(description = "总面积") - private BigDecimal totalArea; - @Schema(description = "计划总数") - private Integer planCount; - @Schema(description = "已完成-计划个数") - private Integer planCompletedCount; - @Schema(description = "进行中-计划个数") - private Integer planInProgressCount; - @Schema(description = "逾期-计划个数") - private Integer planOverdueCount; - } + @Schema(description = "基地ID") + private String baseId; + @Schema(description = "基地名称") + private String baseName; + @Schema(description = "生产计划集合") + private List plans; } 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 052a9119..88f290b6 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 @@ -1,11 +1,13 @@ package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO; +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.math.BigDecimal; import java.time.LocalDate; /** @@ -31,14 +33,25 @@ public class ProductionPlanRespVO { private String speciesModelId; @Schema(description = "排产开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate productionStartDate; @Schema(description = "排产结束日期") + @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate productionEndDate; @Schema(description = "采收开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate harvestStartDate; + @Schema(description = "计划开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate plantingStartDate; + + @Schema(description = "计划结束日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate plantingEndDate; + @Schema(description = "计划执行状态") private Integer planStatus; @Schema(description = "计划执行状态-名称") @@ -60,6 +73,7 @@ public class ProductionPlanRespVO { * 种植区域信息 */ @Schema(description = "种植日期") + @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate plantingDate; @Schema(description = "种植株数") private Integer plantingQuantity; @@ -76,7 +90,26 @@ public class ProductionPlanRespVO { @Schema(description = "备注") private String remark; - @Schema(description = "模型", example = "芋艿") + @Schema(description = "模型") private ModelManagementRespVO modelManagementRespVO; + @Schema(description = "计划概括信息") + private ProductionPlanRespVO.PlanOverview planOverview; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class PlanOverview{ + @Schema(description = "总面积") + private BigDecimal totalArea; + @Schema(description = "计划总数") + private Integer planCount; + @Schema(description = "已完成-计划个数") + private Integer planCompletedCount; + @Schema(description = "进行中-计划个数") + private Integer planInProgressCount; + @Schema(description = "逾期-计划个数") + private Integer planOverdueCount; + } + } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanUpdateReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanUpdateReqVO.java index 2091a749..916f756f 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanUpdateReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanUpdateReqVO.java @@ -35,6 +35,12 @@ public class ProductionPlanUpdateReqVO { @Schema(description = "采收开始日期") private LocalDate harvestStartDate; + @Schema(description = "计划开始日期") + private LocalDate plantingStartDate; + + @Schema(description = "计划结束日期") + private LocalDate plantingEndDate; + @Schema(description = "计划执行状态 (1:未开始;2:进行中;3:已完成;4:逾期)") private Integer planStatus; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/productionplan/ProductionPlanDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/productionplan/ProductionPlanDO.java index 47cf896e..4f84da7c 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/productionplan/ProductionPlanDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/productionplan/ProductionPlanDO.java @@ -52,6 +52,14 @@ public class ProductionPlanDO extends BaseDO { * 采收开始日期 */ private LocalDate harvestStartDate; + /** + * 计划开始日期 + */ + private LocalDate plantingStartDate; + /** + * 计划结束日期 + */ + private LocalDate plantingEndDate; /** * 执行状态 */ 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 dbceb505..642cdce9 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 @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.farm.dal.mysql.productionplan; 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; -import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanPageReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import org.apache.ibatis.annotations.Mapper; @@ -36,12 +36,16 @@ public interface ProductionPlanMapper extends BaseMapperX { default PageResult selectPage2(cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .betweenIfPresent(ProductionPlanDO::getProductionStartDate, reqVO.getProductionStartDate()) + .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()) .orderByDesc(ProductionPlanDO::getCreateTime) ); } - ProductionPlanPageRespVO.PlanOverview getPlanOverview(@Param("baseId") String baseId); + ProductionPlanRespVO.PlanOverview getPlanOverview(@Param("baseId") String baseId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java index e34f9b7f..d5ed636b 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java @@ -24,14 +24,19 @@ public class CommonConstants { public final static Integer PLAN_STATUS_2 = 2; public final static Integer PLAN_STATUS_3 = 3; public final static Integer PLAN_STATUS_4 = 4; + public final static Integer PLAN_STATUS_5 = 5; + public final static Integer PLAN_STATUS_6 = 6; + public final static Integer PLAN_STATUS_7 = 7; public static Map PLAN_MAP = new HashMap<>(); static{ - PLAN_MAP.put(1, "未开始"); - PLAN_MAP.put(2, "进行中"); - PLAN_MAP.put(3, "已完成"); - PLAN_MAP.put(4, "逾期"); - PLAN_MAP.put(5, "已结束"); + PLAN_MAP.put(PLAN_STATUS_1, "未开始"); + PLAN_MAP.put(PLAN_STATUS_2, "进行中"); + PLAN_MAP.put(PLAN_STATUS_3, "已完成"); + PLAN_MAP.put(PLAN_STATUS_4, "逾期"); + PLAN_MAP.put(PLAN_STATUS_5, "逾期未开始"); + PLAN_MAP.put(PLAN_STATUS_6, "逾期未结束"); + PLAN_MAP.put(PLAN_STATUS_7, "已结束"); } // 模型类型 (1:模型模板; 2:引用案例) 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 bf423029..f5a40c6d 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.service.cropFarmingCenter; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.*; /** @@ -23,9 +24,11 @@ public interface CropFarmingCenterService { void updateProductionPlan(ProductionPlanUpdateReqVO updateReqVO); - ProductionPlanPageRespVO getProductionPlanPage(ProductionPlanPageReqVO reqVO); + PageResult getProductionPlanPage(ProductionPlanPageReqVO reqVO); int getCropCount(Long tenantId); Double getTotalArea(Long tenantId); + + void deleteProductionPlan(String id); } 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 29ccdde3..9d3448b7 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 @@ -25,11 +25,14 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.time.LocalDate; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.List; +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.CommonConstants.PLAN_MAP; import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.PRODUCTION_PLAN_NOT_EXISTS; /** @@ -208,22 +211,39 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { } @Override - public ProductionPlanPageRespVO getProductionPlanPage(ProductionPlanPageReqVO reqVO) { + public PageResult getProductionPlanPage(ProductionPlanPageReqVO reqVO) { PageResult productionPlanDOPageResult = productionPlanMapper.selectPage2(reqVO); PageResult resultData = BeanUtils.toBean(productionPlanDOPageResult, ProductionPlanRespVO.class); resultData.getList().forEach(e -> { - + // 计划状态-名称 + e.setPlanStatusName(PLAN_MAP.get(e.getPlanStatus())); + // 模型 ModelManagementRespVO modelManagementRespVO = modelManagementService.getModelManagement(e.getSpeciesModelId()); e.setModelManagementRespVO(modelManagementRespVO); + // 计划概述 + BaseInfoDO baseObj = baseInfoMapper.selectOne("id", e.getBaseId()); + ProductionPlanRespVO.PlanOverview planOverview = productionPlanMapper.getPlanOverview(e.getBaseId()); + planOverview.setTotalArea(baseObj.getArea()); + e.setPlanOverview(planOverview); }); - // 计划概述 - BaseInfoDO baseObj = baseInfoMapper.selectOne("base_id", reqVO.getBaseId()); - ProductionPlanPageRespVO.PlanOverview planOverview = productionPlanMapper.getPlanOverview(reqVO.getBaseId()); - planOverview.setTotalArea(baseObj.getArea()); - return new ProductionPlanPageRespVO(resultData,planOverview); + // 响应结构包装 (包装成符合前端需要的格式) + List collect = resultData.getList().stream() + .collect(Collectors.groupingBy(plan -> new AbstractMap.SimpleEntry<>(plan.getBaseId(), plan.getBaseName()), Collectors.toList())) + .entrySet().stream() + .map(entry -> { + ProductionPlanPageRespVO groupedVO = new ProductionPlanPageRespVO(); + groupedVO.setBaseId(entry.getKey().getKey()); + groupedVO.setBaseName(entry.getKey().getValue()); + groupedVO.setPlans(entry.getValue()); + return groupedVO; + }) + .collect(Collectors.toList()); + + long size = collect.size(); + return new PageResult<>(collect,size); } @@ -237,6 +257,14 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { return productionPlanMapper.getTotalArea(tenantId); } + @Override + public void deleteProductionPlan(String id) { + // 校验存在 + validateProductionPlanExists(id); + // 删除 + productionPlanMapper.deleteById(id); + } + private void validateProductionPlanExists(String id) { if (productionPlanMapper.selectById(id) == null) { throw exception(PRODUCTION_PLAN_NOT_EXISTS); diff --git a/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml b/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml index 546d4581..f2a8b8f9 100644 --- a/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml @@ -25,7 +25,7 @@