feat (farm): 农事记录-新增
- 基地,地块,计划 三级联动
This commit is contained in:
@@ -97,11 +97,4 @@ public class BaseInfoController {
|
|||||||
BeanUtils.toBean(list, BaseInfoRespVO.class));
|
BeanUtils.toBean(list, BaseInfoRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/get/baser-name-list")
|
|
||||||
@Operation(summary = "获得基地名称-下拉列表")
|
|
||||||
public CommonResult<List<BaseNameRespVO>> getBaseNameList() {
|
|
||||||
List<BaseNameRespVO> res = baseInfoService.getBaseNameList();
|
|
||||||
return success(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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<PlotInfoVO> children;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public static class PlotInfoVO {
|
||||||
|
@Schema(description = "地块ID")
|
||||||
|
private String plotId;
|
||||||
|
@Schema(description = "地块名称")
|
||||||
|
private String plotName;
|
||||||
|
private List<PlanInfoVO> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.*;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.sys.SysDictRespVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.sys.SysDictRespVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.sys.SysDictTypeCodeRespVO;
|
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.farmingnamemaintenance.FarmingNameMaintenanceDO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.FarmingTypeMaintenanceDO;
|
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.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.dataobject.specieslibrary.SpeciesLibraryDO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.sysDict.SysDictDO;
|
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.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.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.speciesclassifylibrary.SpeciesClassifyLibraryService;
|
||||||
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
|
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
|
||||||
import cn.iocoder.yudao.module.farm.service.sysDict.SysDictService;
|
import cn.iocoder.yudao.module.farm.service.sysDict.SysDictService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import org.redisson.misc.Hash;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
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
|
@Validated
|
||||||
public class DictController {
|
public class DictController {
|
||||||
|
|
||||||
private final FarmingTypeMaintenanceService farmingTypeMaintenanceService;
|
|
||||||
private final FarmingNameMaintenanceService farmingNameMaintenanceService;
|
|
||||||
private final SpeciesLibraryService speciesLibraryService;
|
private final SpeciesLibraryService speciesLibraryService;
|
||||||
private final SpeciesClassifyLibraryService speciesClassifyLibraryService;
|
private final SpeciesClassifyLibraryService speciesClassifyLibraryService;
|
||||||
private final InputLibraryService inputLibraryService;
|
private final InputLibraryService inputLibraryService;
|
||||||
private final DisasterDataService disasterDataService;
|
private final DisasterDataService disasterDataService;
|
||||||
private final SysDictService sysDictService;
|
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) {
|
public DictController(SpeciesLibraryService speciesLibraryService, SpeciesClassifyLibraryService speciesClassifyLibraryService, InputLibraryService inputLibraryService, DisasterDataService disasterDataService, SysDictService sysDictService, ProductionPlanService productionPlanService, BaseInfoService baseInfoService) {
|
||||||
this.farmingTypeMaintenanceService = farmingTypeMaintenanceService;
|
|
||||||
this.farmingNameMaintenanceService = farmingNameMaintenanceService;
|
|
||||||
this.speciesLibraryService = speciesLibraryService;
|
this.speciesLibraryService = speciesLibraryService;
|
||||||
this.speciesClassifyLibraryService = speciesClassifyLibraryService;
|
this.speciesClassifyLibraryService = speciesClassifyLibraryService;
|
||||||
this.inputLibraryService = inputLibraryService;
|
this.inputLibraryService = inputLibraryService;
|
||||||
this.disasterDataService = disasterDataService;
|
this.disasterDataService = disasterDataService;
|
||||||
this.sysDictService = sysDictService;
|
this.sysDictService = sysDictService;
|
||||||
|
this.productionPlanService = productionPlanService;
|
||||||
|
this.baseInfoService = baseInfoService;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 农事类型
|
// 农事类型
|
||||||
@@ -265,12 +262,6 @@ public class DictController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 下拉框列表
|
// 下拉框列表
|
||||||
@Operation(summary = "字典数据维护-下拉框列表-农事类型")
|
|
||||||
@GetMapping("/list/farming-type")
|
|
||||||
public CommonResult<List<FarmingTypeRespVO>> getFarmingTypeList() {
|
|
||||||
List<FarmingTypeMaintenanceDO> res = farmingTypeMaintenanceService.getFarmingTypeList();
|
|
||||||
return success(BeanUtils.toBean(res, FarmingTypeRespVO.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "字典数据维护-下拉框列表-物种类别")
|
@Operation(summary = "字典数据维护-下拉框列表-物种类别")
|
||||||
@GetMapping("/list/species-classify-library")
|
@GetMapping("/list/species-classify-library")
|
||||||
@@ -284,6 +275,20 @@ public class DictController {
|
|||||||
return success(sysDictService.getSpeciesClassifyAndModelList());
|
return success(sysDictService.getSpeciesClassifyAndModelList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list/base-name")
|
||||||
|
@Operation(summary = "字典数据维护-下拉框列表-基地,地块二级联动")
|
||||||
|
public CommonResult<List<BaseNameRespVO>> getBaseNameList() {
|
||||||
|
List<BaseNameRespVO> res = baseInfoService.getBaseNameList();
|
||||||
|
return success(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list/base-name-plan")
|
||||||
|
@Operation(summary = "字典数据维护-下拉框列表-基地,地块,任务三级联动")
|
||||||
|
public CommonResult<List<BaseNamePlanRespVO>> getBaseNameAndPlanList() {
|
||||||
|
List<BaseNamePlanRespVO> res = productionPlanService.getBaseNameAndPlanList();
|
||||||
|
return success(res);
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(summary = "字典数据维护-下拉框列表-通用字典分类查询")
|
@Operation(summary = "字典数据维护-下拉框列表-通用字典分类查询")
|
||||||
@GetMapping("/list/{dictTypeCode}")
|
@GetMapping("/list/{dictTypeCode}")
|
||||||
public CommonResult<List<SysDictRespVO>> getSysDictList(@PathVariable("dictTypeCode") String dictTypeCode) {
|
public CommonResult<List<SysDictRespVO>> getSysDictList(@PathVariable("dictTypeCode") String dictTypeCode) {
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public interface BaseInfoService {
|
|||||||
int getBaseCount(Long tenantId);
|
int getBaseCount(Long tenantId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基地名称-下拉列表
|
* 基地,地块-下拉列表(两级联动)
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<BaseNameRespVO> getBaseNameList();
|
List<BaseNameRespVO> getBaseNameList();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.productionplan;
|
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.ProductionPlanPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO;
|
import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO;
|
||||||
@@ -67,5 +68,10 @@ public interface ProductionPlanService {
|
|||||||
*/
|
*/
|
||||||
PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO);
|
PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基地,地块,计划 - 下拉列表(三级联动)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<BaseNamePlanRespVO> getBaseNameAndPlanList();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,8 +2,10 @@ package cn.iocoder.yudao.module.farm.service.productionplan;
|
|||||||
|
|
||||||
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
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.ProductionPlanPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanSaveReqVO;
|
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 org.springframework.stereotype.Service;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
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 cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||||
@@ -93,4 +98,62 @@ public class ProductionPlanServiceImpl implements ProductionPlanService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BaseNamePlanRespVO> getBaseNameAndPlanList() {
|
||||||
|
LoginUser user = getLoginUser();
|
||||||
|
if (user == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryWrapper<ProductionPlanDO> qw = new QueryWrapper<>();
|
||||||
|
qw.eq("tenant_id", user.getTenantId());
|
||||||
|
List<ProductionPlanDO> productionPlanDOS = productionPlanMapper.selectList(qw);
|
||||||
|
|
||||||
|
// 按基地ID分组
|
||||||
|
Map<String, List<ProductionPlanDO>> baseGroup = productionPlanDOS.stream().collect(Collectors.groupingBy(ProductionPlanDO::getBaseId));
|
||||||
|
|
||||||
|
List<BaseNamePlanRespVO> result = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<ProductionPlanDO>> baseEntry : baseGroup.entrySet()) {
|
||||||
|
String baseId = baseEntry.getKey();
|
||||||
|
List<ProductionPlanDO> basePlans = baseEntry.getValue();
|
||||||
|
|
||||||
|
// 创建基地响应对象
|
||||||
|
BaseNamePlanRespVO baseVO = new BaseNamePlanRespVO();
|
||||||
|
baseVO.setId(baseId);
|
||||||
|
baseVO.setName(basePlans.get(0).getBaseName()); // 取第一个计划的基地名称
|
||||||
|
baseVO.setChildren(new ArrayList<>());
|
||||||
|
|
||||||
|
// 按地块ID分组
|
||||||
|
Map<String, List<ProductionPlanDO>> plotGroup = basePlans.stream().collect(Collectors.groupingBy(ProductionPlanDO::getPlotId));
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<ProductionPlanDO>> plotEntry : plotGroup.entrySet()) {
|
||||||
|
String plotId = plotEntry.getKey();
|
||||||
|
List<ProductionPlanDO> 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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user