diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java index a9f7bc84..a3130e92 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java @@ -97,11 +97,4 @@ public class BaseInfoController { BeanUtils.toBean(list, BaseInfoRespVO.class)); } - @GetMapping("/get/baser-name-list") - @Operation(summary = "获得基地名称-下拉列表") - public CommonResult> getBaseNameList() { - List res = baseInfoService.getBaseNameList(); - return success(res); - } - } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseNamePlanRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseNamePlanRespVO.java new file mode 100644 index 00000000..aeea5367 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseNamePlanRespVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.farm.controller.admin.baseinfo.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 org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * @description: 基地,地块,计划 + * @author: binda + * @date: 2025/8/21 21:47 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BaseNamePlanRespVO { + + @Schema(description = "基地id") + private String id; + @Schema(description = "基地名称") + private String name; + private List children; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class PlotInfoVO { + @Schema(description = "地块ID") + private String plotId; + @Schema(description = "地块名称") + private String plotName; + private List children; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class PlanInfoVO { + @Schema(description = "计划编号") + private String planNumber; + @JsonFormat(pattern = "yyyy-MM-dd") + @Schema(description = "排产开始日期") + private LocalDate productionStartDate; + @JsonFormat(pattern = "yyyy-MM-dd") + @Schema(description = "排产结束日期") + private LocalDate productionEndDate; + } + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/dict/DictController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/dict/DictController.java index a618dcb7..f301773b 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/dict/DictController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/dict/DictController.java @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.farm.controller.admin.dict; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNamePlanRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNameRespVO; import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.sys.SysDictRespVO; import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.sys.SysDictTypeCodeRespVO; @@ -25,27 +27,22 @@ import cn.iocoder.yudao.module.farm.dal.dataobject.disasterdata.DisasterDataDO; import cn.iocoder.yudao.module.farm.dal.dataobject.farmingnamemaintenance.FarmingNameMaintenanceDO; import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO; import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputLibraryDO; -import cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO; import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO; import cn.iocoder.yudao.module.farm.dal.mysql.sysDict.SysDictDO; -import cn.iocoder.yudao.module.farm.enums.CommonConstants; +import cn.iocoder.yudao.module.farm.service.baseinfo.BaseInfoService; import cn.iocoder.yudao.module.farm.service.disasterdata.DisasterDataService; -import cn.iocoder.yudao.module.farm.service.farmingnamemaintenance.FarmingNameMaintenanceService; -import cn.iocoder.yudao.module.farm.service.farmingtypemaintenance.FarmingTypeMaintenanceService; import cn.iocoder.yudao.module.farm.service.inputlibrary.InputLibraryService; +import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; import cn.iocoder.yudao.module.farm.service.speciesclassifylibrary.SpeciesClassifyLibraryService; import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService; import cn.iocoder.yudao.module.farm.service.sysDict.SysDictService; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import org.redisson.misc.Hash; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.*; -import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -66,22 +63,22 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Validated public class DictController { - private final FarmingTypeMaintenanceService farmingTypeMaintenanceService; - private final FarmingNameMaintenanceService farmingNameMaintenanceService; private final SpeciesLibraryService speciesLibraryService; private final SpeciesClassifyLibraryService speciesClassifyLibraryService; private final InputLibraryService inputLibraryService; private final DisasterDataService disasterDataService; private final SysDictService sysDictService; + private final ProductionPlanService productionPlanService; + private final BaseInfoService baseInfoService; - public DictController(FarmingTypeMaintenanceService farmingTypeMaintenanceService, FarmingNameMaintenanceService farmingNameMaintenanceService, SpeciesLibraryService speciesLibraryService, SpeciesClassifyLibraryService speciesClassifyLibraryService, InputLibraryService inputLibraryService, DisasterDataService disasterDataService, SysDictService sysDictService) { - this.farmingTypeMaintenanceService = farmingTypeMaintenanceService; - this.farmingNameMaintenanceService = farmingNameMaintenanceService; + public DictController(SpeciesLibraryService speciesLibraryService, SpeciesClassifyLibraryService speciesClassifyLibraryService, InputLibraryService inputLibraryService, DisasterDataService disasterDataService, SysDictService sysDictService, ProductionPlanService productionPlanService, BaseInfoService baseInfoService) { this.speciesLibraryService = speciesLibraryService; this.speciesClassifyLibraryService = speciesClassifyLibraryService; this.inputLibraryService = inputLibraryService; this.disasterDataService = disasterDataService; this.sysDictService = sysDictService; + this.productionPlanService = productionPlanService; + this.baseInfoService = baseInfoService; } // 农事类型 @@ -265,12 +262,6 @@ public class DictController { } // 下拉框列表 - @Operation(summary = "字典数据维护-下拉框列表-农事类型") - @GetMapping("/list/farming-type") - public CommonResult> getFarmingTypeList() { - List res = farmingTypeMaintenanceService.getFarmingTypeList(); - return success(BeanUtils.toBean(res, FarmingTypeRespVO.class)); - } @Operation(summary = "字典数据维护-下拉框列表-物种类别") @GetMapping("/list/species-classify-library") @@ -284,6 +275,20 @@ public class DictController { return success(sysDictService.getSpeciesClassifyAndModelList()); } + @GetMapping("/list/base-name") + @Operation(summary = "字典数据维护-下拉框列表-基地,地块二级联动") + public CommonResult> getBaseNameList() { + List res = baseInfoService.getBaseNameList(); + return success(res); + } + + @GetMapping("/list/base-name-plan") + @Operation(summary = "字典数据维护-下拉框列表-基地,地块,任务三级联动") + public CommonResult> getBaseNameAndPlanList() { + List res = productionPlanService.getBaseNameAndPlanList(); + return success(res); + } + @Operation(summary = "字典数据维护-下拉框列表-通用字典分类查询") @GetMapping("/list/{dictTypeCode}") public CommonResult> getSysDictList(@PathVariable("dictTypeCode") String dictTypeCode) { diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java index 151e5252..9c01a179 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java @@ -64,7 +64,7 @@ public interface BaseInfoService { int getBaseCount(Long tenantId); /** - * 基地名称-下拉列表 + * 基地,地块-下拉列表(两级联动) * @return */ List getBaseNameList(); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java index 163b3e2b..6f06e0b0 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.service.productionplan; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNamePlanRespVO; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; @@ -67,5 +68,10 @@ public interface ProductionPlanService { */ PageResult getProductionPlanPage(ProductionPlanPageReqVO pageReqVO); + /** + * 基地,地块,计划 - 下拉列表(三级联动) + * @return + */ + List getBaseNameAndPlanList(); } \ No newline at end of file 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 3e79157c..29751a80 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 @@ -2,8 +2,10 @@ package cn.iocoder.yudao.module.farm.service.productionplan; import cn.hutool.core.util.IdUtil; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNamePlanRespVO; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -17,7 +19,10 @@ import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +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; @@ -93,4 +98,62 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { return null; } + @Override + public List getBaseNameAndPlanList() { + LoginUser user = getLoginUser(); + if (user == null) { + return new ArrayList<>(); + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("tenant_id", user.getTenantId()); + List productionPlanDOS = productionPlanMapper.selectList(qw); + + // 按基地ID分组 + Map> baseGroup = productionPlanDOS.stream().collect(Collectors.groupingBy(ProductionPlanDO::getBaseId)); + + List result = new ArrayList<>(); + + for (Map.Entry> baseEntry : baseGroup.entrySet()) { + String baseId = baseEntry.getKey(); + List basePlans = baseEntry.getValue(); + + // 创建基地响应对象 + BaseNamePlanRespVO baseVO = new BaseNamePlanRespVO(); + baseVO.setId(baseId); + baseVO.setName(basePlans.get(0).getBaseName()); // 取第一个计划的基地名称 + baseVO.setChildren(new ArrayList<>()); + + // 按地块ID分组 + Map> plotGroup = basePlans.stream().collect(Collectors.groupingBy(ProductionPlanDO::getPlotId)); + + for (Map.Entry> plotEntry : plotGroup.entrySet()) { + String plotId = plotEntry.getKey(); + List plotPlans = plotEntry.getValue(); + + // 创建地块响应对象 + BaseNamePlanRespVO.PlotInfoVO plotVO = new BaseNamePlanRespVO.PlotInfoVO(); + plotVO.setPlotId(plotId); + plotVO.setPlotName(plotPlans.get(0).getPlotName()); // 取第一个计划的地块名称 + plotVO.setChildren(new ArrayList<>()); + + // 创建计划信息列表 + for (ProductionPlanDO plan : plotPlans) { + BaseNamePlanRespVO.PlanInfoVO planVO = new BaseNamePlanRespVO.PlanInfoVO(); + planVO.setPlanNumber(plan.getPlanNumber()); + planVO.setProductionStartDate(plan.getProductionStartDate()); + planVO.setProductionEndDate(plan.getProductionEndDate()); + plotVO.getChildren().add(planVO); + } + + baseVO.getChildren().add(plotVO); + } + + result.add(baseVO); + } + + return result; + + } + } \ No newline at end of file