From 69a7f48c362ac5c2ceb4f2dc1b63d2b3e4c928ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Fri, 15 Aug 2025 14:30:57 +0800 Subject: [PATCH] =?UTF-8?q?feat=20(farm):=20=E5=86=9C=E5=9C=BA=E9=A6=96?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 拟定接口逻辑 --- .../controller/admin/home/HomeController.java | 41 +++++++ .../controller/admin/home/vo/HomeInfoVO.java | 86 ++++++++++++++ .../farm/dal/dataobject/home/HomeInfoDO.java | 26 ++++ .../productionplan/ProductionPlanDO.java | 6 +- .../module/farm/service/home/HomeService.java | 17 +++ .../farm/service/home/HomeServiceImpl.java | 111 ++++++++++++++++++ .../service/plotinfo/PlotInfoService.java | 3 +- .../service/plotinfo/PlotInfoServiceImpl.java | 8 +- .../productionplan/ProductionPlanService.java | 9 +- .../ProductionPlanServiceImpl.java | 5 + 10 files changed, 304 insertions(+), 8 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfoVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/home/HomeInfoDO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java new file mode 100644 index 00000000..432aab32 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.farm.controller.admin.home; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfoVO; +import cn.iocoder.yudao.module.farm.dal.dataobject.home.HomeInfoDO; +import cn.iocoder.yudao.module.farm.service.home.HomeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * @description: 农场首页 + * @author: binda + * @date: 2025/8/14 19:43 + */ +@Tag(name = "弄成首页") +@RestController +@RequestMapping("/farm/home") +@Validated +public class HomeController { + + @Resource + private HomeService homeService; + + @Parameter(name = "baseId", description = "基地ID", required = true) + @Operation(summary = "农场首页") + @GetMapping("/get/{baseId}") + public CommonResult getBaseInfo(@PathVariable("baseId") String baseId) { + HomeInfoVO res = homeService.getHomeInfo(baseId); + return success(res); + } + + + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfoVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfoVO.java new file mode 100644 index 00000000..8c110535 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfoVO.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.farm.controller.admin.home.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @description: 首页信息 + * @author: binda + * @date: 2025/8/14 19:56 + */ +@Data +public class HomeInfoVO { + + private BaseInfoVO baseInfo; + private List plotInfoVOS; + + + @Data + public static class BaseInfoVO { + // 基地id + private String id; + // 基地总面积 + private BigDecimal area; + // 基地所在坐标中文名称 + private String pointName; + // 基地负责人 + private String manager; + // 基地在种地块数量 + private Integer plotCount; + // 基地所属地块数量 + private Integer plotTotalCount; + // 基地在种作物数量 + private Integer cropCount; + // 基地所属作物数据 + private Integer cropTotalCount; + } + + @Data + public static class PlotInfoVO { + // 地块id + private String plotId; + // 地块名称 + private String plotName; + // 地块面积 + private BigDecimal plotArea; + // 地块在种作物 + private String cropName; + // 地块在种作物数量 + private Integer cropCount; + // 农事任务数量 + private Integer productionPlanCount; + // 物联网设备数量 + private Integer iotCount; + // 地块负责人 + private String manager; + // 二维码Url + private String qrCodeUrl; + // 任务列表 + private List productionPlanVOS; + } + + @Data + public static class ProductionPlanVO { + private String id; + // 种植作物 + private String plantSpecies; + // 计划编号 (种植区编号) + private String cultivationAreaId; + // 当前管理周期名称 + private String managementCycleName; + // 当前管理周期计划进度 + private String managementCyclePlan; + // 种植面积 + private Integer cultivatedArea; + // 预产数量 + private Integer estimatedOutput; + // 任务数量 + private Integer taskCount; + // 任务负责人 + private String manager; + } + +} + diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/home/HomeInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/home/HomeInfoDO.java new file mode 100644 index 00000000..5e0151f0 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/home/HomeInfoDO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.farm.dal.dataobject.home; + +import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @description: 首页响应参数 + * @author: binda + * @date: 2025/8/14 19:47 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class HomeInfoDO { + + private BaseInfoDO baseInfo; + private List plotInfos; + private List productionPlanInfos; + +} 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 bed560d2..4f4f90ef 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 @@ -4,8 +4,6 @@ import lombok.*; import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -49,6 +47,10 @@ public class ProductionPlanDO extends BaseDO { * 采收开始日期 */ private LocalDate harvestStartDate; + /** + * 预计产量 + */ + private Integer estimatedOutput; /** * 种植区域ID */ diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java new file mode 100644 index 00000000..56bee17a --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.farm.service.home; + +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfoVO; + +/** + * @description: + * @author: binda + * @data: 2025/8/14 19:45 + */ +public interface HomeService { + /** + * 首页综合信息 + * @param baseId + * @return + */ + HomeInfoVO getHomeInfo(String baseId); +} 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 new file mode 100644 index 00000000..3b20b0cf --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java @@ -0,0 +1,111 @@ +package cn.iocoder.yudao.module.farm.service.home; + +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfoVO; +import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; +import cn.iocoder.yudao.module.farm.service.baseinfo.BaseInfoService; +import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService; +import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @description: 首页信息实现类 + * @author: binda + * @date: 2025/8/14 20:04 + */ +@Service +public class HomeServiceImpl implements HomeService { + + private final BaseInfoService baseInfoService; + private final PlotInfoService plotInfoService; + private final ProductionPlanService productionPlanService; + + public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService) { + this.baseInfoService = baseInfoService; + this.plotInfoService = plotInfoService; + this.productionPlanService = productionPlanService; + } + + @Override + public HomeInfoVO getHomeInfo(String baseId) { + + // 地块信息 + List plotInfoVOs = this.getPlots(baseId); + + int plotCount = 0; // 在种地块 + int plotTotalCount = 0; // 地块总数 + + // 任务信息 + int cropCount = 0; // 在种作物 + int cropTotalCount = 0; // 作物总数 + + // 基地信息 + BaseInfoDO baseInfoDO = baseInfoService.getBaseInfo(baseId); + + HomeInfoVO.BaseInfoVO baseInfoVO = new HomeInfoVO.BaseInfoVO(); + baseInfoVO.setId(baseInfoDO.getId()); + baseInfoVO.setArea(baseInfoDO.getArea()); + baseInfoVO.setPointName(""); // todo 需要从坐标json中解析坐标名称 + baseInfoVO.setManager(baseInfoDO.getManager()); + baseInfoVO.setPlotCount(plotCount); + baseInfoVO.setPlotTotalCount(plotTotalCount); + baseInfoVO.setCropCount(cropCount); + baseInfoVO.setCropTotalCount(cropTotalCount); + + HomeInfoVO res = new HomeInfoVO(); + res.setBaseInfo(baseInfoVO); + res.setPlotInfoVOS(plotInfoVOs); + return res; + } + + /** + * 构建地块信息 + * @param baseId 基地ID + * @return 地块集合 + */ + private List getPlots(String baseId) { + // 地块信息 + List plotInfos = plotInfoService.getPlotInfos(baseId); + List resList = new ArrayList<>(); + plotInfos.forEach(e -> { + String plotId = e.getPlotId(); + + // 任务信息 + List productionPlanInfos = productionPlanService.getProductionPlans(plotId); + List plans = new ArrayList<>(); + productionPlanInfos.forEach(ee -> { + HomeInfoVO.ProductionPlanVO planVO = new HomeInfoVO.ProductionPlanVO(); + planVO.setId(ee.getId()); + planVO.setPlantSpecies(ee.getPlantSpecies()); + planVO.setCultivationAreaId(ee.getCultivationAreaId()); + planVO.setManagementCycleName(""); // todo 当前管理周期名称 + planVO.setManagementCyclePlan(""); // todo 当前管理周期计划进度 + planVO.setCultivatedArea(0); // todo 种植面积 + planVO.setEstimatedOutput(ee.getEstimatedOutput()); // todo 预产数量 + planVO.setTaskCount(0); // todo 任务数量 + planVO.setManager(""); // + plans.add(planVO); // todo 任务负责人 + }); + + HomeInfoVO.PlotInfoVO plotVO = new HomeInfoVO.PlotInfoVO(); + plotVO.setPlotId(plotId); + plotVO.setPlotName(e.getPlotName()); + plotVO.setPlotArea(e.getPlotArea()); + plotVO.setCropName(""); // todo 种植作物名称,使用逗号分割 + plotVO.setCropCount(0); // todo 地块在种作物数量 + plotVO.setProductionPlanCount(0); // todo 农事任务数量 + plotVO.setIotCount(0); // todo 物联网设备数据 + plotVO.setManager(e.getEmployeeId()); // todo 负责人id -> name + plotVO.setQrCodeUrl(""); // 二维码URL + plotVO.setProductionPlanVOS(plans); + resList.add(plotVO); + }); + + return resList; + } + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java index 330f4a03..1beab8d0 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java @@ -4,7 +4,6 @@ import cn.iocoder.yudao.module.farm.controller.admin.plotinfo.vo.PlotInfoPageReq import cn.iocoder.yudao.module.farm.controller.admin.plotinfo.vo.PlotInfoSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import jakarta.validation.Valid; import java.util.List; @@ -52,7 +51,7 @@ public interface PlotInfoService { * @return 地块 */ PlotInfoDO getPlotInfo(String id); - + List getPlotInfos(String baseId); /** * 获得地块分页 * diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java index 395cf6b7..36614c70 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java @@ -1,17 +1,14 @@ package cn.iocoder.yudao.module.farm.service.plotinfo; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.module.farm.controller.admin.plotinfo.vo.PlotInfoPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.plotinfo.vo.PlotInfoSaveReqVO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -84,6 +81,11 @@ private void validatePlotInfoExists(String id) { return plotInfoMapper.selectById(id); } + @Override + public List getPlotInfos(String baseId) { + return null; + } + @Override public PageResult getPlotInfoPage(PlotInfoPageReqVO pageReqVO) { return plotInfoMapper.selectPage(pageReqVO); 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 d6b59fa9..163b3e2b 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 @@ -4,7 +4,6 @@ import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.Productio 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.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import jakarta.validation.Valid; import java.util.List; @@ -53,6 +52,13 @@ public interface ProductionPlanService { */ ProductionPlanDO getProductionPlan(String id); + /** + * 获取当前地块所属的所有生产计划 + * @param plotId 地块ID + * @return + */ + List getProductionPlans(String plotId); + /** * 获得种植中心-生产计划-生产计划分页 * @@ -61,4 +67,5 @@ public interface ProductionPlanService { */ PageResult getProductionPlanPage(ProductionPlanPageReqVO pageReqVO); + } \ 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 bd4de66d..56ed9345 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 @@ -82,6 +82,11 @@ private void validateProductionPlanExists(String id) { return productionPlanMapper.selectById(id); } + @Override + public List getProductionPlans(String plotId) { + return null; + } + @Override public PageResult getProductionPlanPage(ProductionPlanPageReqVO pageReqVO) { return productionPlanMapper.selectPage(pageReqVO);