From ea4761845d6bacb557929cfb756ea53e5f993ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Thu, 21 Aug 2025 09:22:20 +0800 Subject: [PATCH] =?UTF-8?q?feat=20(farm):=20=E4=B8=9A=E5=8A=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 种植中心 - 生产计划 --- .../CropFarmingCenterController.java | 6 +- .../vo/ProductionPlanPageReqVO.java | 18 ++++++ .../vo/ProductionPlanSaveReqVO.java | 19 +++--- .../ProductionPlanController.java | 2 - .../productionplan/ProductionPlanDO.java | 51 +++++++++++++--- .../disasterdata/DisasterDataMapper.java | 3 - .../productionplan/ProductionPlanMapper.java | 30 +++++----- .../module/farm/enums/CommonConstants.java | 9 +++ .../CropFarmingCenterService.java | 4 +- .../CropFarmingCenterServiceImpl.java | 60 ++++++++++++++----- .../farm/service/home/HomeServiceImpl.java | 6 +- .../ProductionPlanServiceImpl.java | 15 ++--- 12 files changed, 157 insertions(+), 66 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageReqVO.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 a3a8da1a..25ca706a 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 @@ -70,9 +70,9 @@ public class CropFarmingCenterController { @PostMapping("/production-plan/create") @Operation(summary = "生产计划-创建") - public CommonResult createProductionPlan(@Valid @RequestBody cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO createReqVO) { - String res = cropFarmingCenterService.createProductionPlan(createReqVO); - return success(res); + public CommonResult createProductionPlan(@Valid @RequestBody cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO createReqVO) { + cropFarmingCenterService.createProductionPlan(createReqVO); + return success(true); } @PutMapping("/production-plan/update") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageReqVO.java new file mode 100644 index 00000000..bae6e2fd --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanPageReqVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo; + +import lombok.Data; + +/** + * @description: 分页请求实体 + * @author: binda + * @date: 2025/8/20 17:58 + */ +@Data +public class ProductionPlanPageReqVO { + + + + + + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanSaveReqVO.java index b791a4e0..885a06c3 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/ProductionPlanSaveReqVO.java @@ -14,11 +14,6 @@ import java.util.List; @Data public class ProductionPlanSaveReqVO { - @Schema(description = "UUID") - private String id; - - @Schema(description = "计划编号") - private String planNumber; @Schema(description = "种植物种-编码") private String plantSpeciesCode; @@ -61,19 +56,23 @@ public class ProductionPlanSaveReqVO { /** * 种植区域信息 */ + @Schema(description = "种植日期") private LocalDate plantingDate; @Schema(description = "种植株数") - private LocalDate plantingQuantity; + private Integer plantingQuantity; @Schema(description = "预计产量") - private Long predictedYields; + private Integer predictedYields; + @Schema(description = "总面积") + private Double totalArea; @Schema(description = "计划面积") - private Long predictedArea; + private Double predictedArea; @Schema(description = "剩余面积") - private Long remainingArea; + private Double remainingArea; @Schema(description = "占地面积") private Integer usagePercentage; - + @Schema(description = "备注") + private String remark; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/productionplan/ProductionPlanController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/productionplan/ProductionPlanController.java index 2c34e38f..611a8297 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/productionplan/ProductionPlanController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/productionplan/ProductionPlanController.java @@ -5,8 +5,6 @@ import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.Productio import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO; import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; -import jakarta.validation.Valid; -import jakarta.validation.Valid; import jakarta.servlet.http.HttpServletResponse; import java.util.List; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; 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 4f4f90ef..47cf896e 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.dal.dataobject.productionplan; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDate; @@ -23,18 +24,22 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; public class ProductionPlanDO extends BaseDO { /** - * 基础id + * ID */ @TableId(type = IdType.INPUT) private String id; + /** + * 计划编号 + */ + private String planNumber; /** * 种植物种 */ - private String plantSpecies; + private String plantSpeciesCode; /** * 物种模型 */ - private String speciesModel; + private String speciesModelId; /** * 排产开始日期 */ @@ -47,14 +52,44 @@ public class ProductionPlanDO extends BaseDO { * 采收开始日期 */ private LocalDate harvestStartDate; + /** + * 执行状态 + */ + private Integer planStatus; + + /** + * 种植日期 + */ + private LocalDate plantingDate; + /** + * 种植株数 + */ + private Integer plantingQuantity; /** * 预计产量 */ - private Integer estimatedOutput; + private Integer predictedYields; /** - * 种植区域ID + * 总面积 */ - private String cultivationAreaId; + private Double totalArea; + /** + * 计划面积 + */ + private Double predictedArea; + /** + * 剩余面积 + */ + private Double remainingArea; + /** + * 占地面积 + */ + private Integer usagePercentage; + /** + * 备注 + */ + private String remark; + /** * 基地id */ @@ -71,6 +106,8 @@ public class ProductionPlanDO extends BaseDO { * 地块 */ private String plotName; - + /** + * 租户ID + */ private String tenantId; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/disasterdata/DisasterDataMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/disasterdata/DisasterDataMapper.java index 1d5675a6..d37a5f45 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/disasterdata/DisasterDataMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/disasterdata/DisasterDataMapper.java @@ -1,8 +1,5 @@ package cn.iocoder.yudao.module.farm.dal.mysql.disasterdata; -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.disasterdata.vo.DisasterDataPageReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.disasterdata.DisasterDataDO; import org.apache.ibatis.annotations.Mapper; 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 0ade6321..58030db2 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 @@ -15,20 +15,20 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProductionPlanMapper extends BaseMapperX { - default PageResult selectPage(ProductionPlanPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ProductionPlanDO::getPlantSpecies, reqVO.getPlantSpecies()) - .eqIfPresent(ProductionPlanDO::getSpeciesModel, reqVO.getSpeciesModel()) - .betweenIfPresent(ProductionPlanDO::getProductionStartDate, reqVO.getProductionStartDate()) - .betweenIfPresent(ProductionPlanDO::getProductionEndDate, reqVO.getProductionEndDate()) - .betweenIfPresent(ProductionPlanDO::getHarvestStartDate, reqVO.getHarvestStartDate()) - .eqIfPresent(ProductionPlanDO::getCultivationAreaId, reqVO.getCultivationAreaId()) - .eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId()) - .likeIfPresent(ProductionPlanDO::getBaseName, reqVO.getBaseName()) - .eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId()) - .likeIfPresent(ProductionPlanDO::getPlotName, reqVO.getPlotName()) - .betweenIfPresent(ProductionPlanDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(ProductionPlanDO::getCreateTime)); - } +// default PageResult selectPage(ProductionPlanPageReqVO reqVO) { +// return selectPage(reqVO, new LambdaQueryWrapperX() +// .eqIfPresent(ProductionPlanDO::getPlantSpecies, reqVO.getPlantSpecies()) +// .eqIfPresent(ProductionPlanDO::getSpeciesModel, reqVO.getSpeciesModel()) +// .betweenIfPresent(ProductionPlanDO::getProductionStartDate, reqVO.getProductionStartDate()) +// .betweenIfPresent(ProductionPlanDO::getProductionEndDate, reqVO.getProductionEndDate()) +// .betweenIfPresent(ProductionPlanDO::getHarvestStartDate, reqVO.getHarvestStartDate()) +// .eqIfPresent(ProductionPlanDO::getCultivationAreaId, reqVO.getCultivationAreaId()) +// .eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId()) +// .likeIfPresent(ProductionPlanDO::getBaseName, reqVO.getBaseName()) +// .eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId()) +// .likeIfPresent(ProductionPlanDO::getPlotName, reqVO.getPlotName()) +// .betweenIfPresent(ProductionPlanDO::getCreateTime, reqVO.getCreateTime()) +// .orderByDesc(ProductionPlanDO::getCreateTime)); +// } } \ 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 59c1d726..b2a425b4 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 @@ -12,4 +12,13 @@ public class CommonConstants { public final static Integer NO_CODE = 0; public final static String NO_NAME = "否"; + + + // 1:未开始;2:进行中;3:已完成;4:逾期 + public final static Integer PLAN_STATUS_1 = 1; + public final static Integer PLAN_STATUS_2 = 2; + public final static Integer PLAN_STATUS_3 = 3; + public final static Integer PLAN_STATUS_4 = 4; + + } 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 313d9228..bb3d8c8d 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 @@ -11,8 +11,10 @@ public interface CropFarmingCenterService { /** * 生产计划-新增 + * 1份生产计划 -> n种植区域 (区域: 一个基地的某个地块,划分为多亩地,交叉种植) + * -> 1模型案例(可以修改,不影响原有模版) * @param createReqVO * @return */ - String createProductionPlan(ProductionPlanSaveReqVO createReqVO); + void createProductionPlan(ProductionPlanSaveReqVO createReqVO); } 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 4a939b53..77d5b5e0 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,13 +1,19 @@ package cn.iocoder.yudao.module.farm.service.cropFarmingCenter; +import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO; -import cn.iocoder.yudao.module.farm.service.cultivationarea.CultivationAreaService; -import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; +import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; +import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper; +import cn.iocoder.yudao.module.farm.enums.CommonConstants; +import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + /** - * @description: + * @description: 种植中心 * @author: binda * @date: 2025/8/19 11:34 */ @@ -15,26 +21,50 @@ import org.springframework.stereotype.Service; @Slf4j public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { - private final CultivationAreaService cultivationAreaService; - private final ProductionPlanService productionPlanService; + private final ProductionPlanMapper productionPlanMapper; - public CropFarmingCenterServiceImpl(CultivationAreaService cultivationAreaService, ProductionPlanService productionPlanService) { - this.cultivationAreaService = cultivationAreaService; - this.productionPlanService = productionPlanService; + public CropFarmingCenterServiceImpl(ProductionPlanMapper productionPlanMapper) { + this.productionPlanMapper = productionPlanMapper; } - - // 创建 - // 1份生产计划 -> n种植区域; 1个种植区域 -> 1基地的n个地块(种植区域) - - @Override - public String createProductionPlan(ProductionPlanSaveReqVO createReqVO) { + public void createProductionPlan(ProductionPlanSaveReqVO reqVO) { + List cultivationAreaList = reqVO.getCultivationAreaList(); + List list = new ArrayList<>(); + cultivationAreaList.forEach(e -> { + ProductionPlanDO obj = new ProductionPlanDO(); + obj.setPlantSpeciesCode(reqVO.getPlantSpeciesCode()); + obj.setSpeciesModelId(reqVO.getSpeciesModelId()); + obj.setProductionStartDate(reqVO.getProductionStartDate()); + obj.setProductionEndDate(reqVO.getProductionEndDate()); + obj.setHarvestStartDate(reqVO.getHarvestStartDate()); + obj.setPlanStatus(CommonConstants.PLAN_STATUS_1); + obj.setPlantingDate(e.getPlantingDate()); + obj.setPlantingQuantity(e.getPlantingQuantity()); + obj.setPredictedYields(e.getPredictedYields()); + obj.setTotalArea(e.getTotalArea()); + obj.setPredictedArea(e.getPredictedArea()); + obj.setRemainingArea(e.getRemainingArea()); + obj.setUsagePercentage(e.getUsagePercentage()); + obj.setRemark(e.getRemark()); + obj.setBaseId(e.getBaseId()); + obj.setBaseName(e.getBaseName()); + obj.setPlotId(e.getPlotId()); + obj.setPlotName(e.getPlotName()); + obj.setTenantId(e.getTenantId()); + + // 随机字符串 + 地块名称 + obj.setId(IdUtil.fastUUID()); + obj.setPlanNumber(StrHelperUtil.generate() + e.getPlotName()); + list.add(obj); + }); + productionPlanMapper.insertBatch(list); - return null; } + + } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java index 0b23a9ed..35b1fc90 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java @@ -85,12 +85,12 @@ public class HomeServiceImpl implements HomeService { productionPlanInfos.forEach(ee -> { HomeInfoVO.ProductionPlanVO planVO = new HomeInfoVO.ProductionPlanVO(); planVO.setId(ee.getId()); - planVO.setPlantSpecies(ee.getPlantSpecies()); - planVO.setCultivationAreaId(ee.getCultivationAreaId()); +// planVO.setPlantSpecies(ee.getPlantSpecies()); +// planVO.setCultivationAreaId(ee.getCultivationAreaId()); planVO.setManagementCycleName(""); // todo 当前管理周期名称 planVO.setManagementCyclePlan(""); // todo 当前管理周期计划进度 planVO.setCultivatedArea(0); // todo 种植面积 - planVO.setEstimatedOutput(ee.getEstimatedOutput()); // todo 预产数量 +// planVO.setEstimatedOutput(ee.getEstimatedOutput()); // todo 预产数量 planVO.setTaskCount(0); // todo 任务数量 planVO.setManager(""); // plans.add(planVO); // todo 任务负责人 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java index 56ed9345..74568351 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java @@ -1,17 +1,17 @@ package cn.iocoder.yudao.module.farm.service.productionplan; - + import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; - + import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; - + import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -66,12 +66,12 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { } @Override - public void deleteProductionPlanListByIds(List ids) { + public void deleteProductionPlanListByIds(List ids) { // 删除 productionPlanMapper.deleteByIds(ids); - } + } -private void validateProductionPlanExists(String id) { + private void validateProductionPlanExists(String id) { if (productionPlanMapper.selectById(id) == null) { throw exception(PRODUCTION_PLAN_NOT_EXISTS); } @@ -89,7 +89,8 @@ private void validateProductionPlanExists(String id) { @Override public PageResult getProductionPlanPage(ProductionPlanPageReqVO pageReqVO) { - return productionPlanMapper.selectPage(pageReqVO); +// productionPlanMapper.selectPage(pageReqVO); + return null; } } \ No newline at end of file