feat (farm): 农场首页

- 拟定接口逻辑
This commit is contained in:
达富斌
2025-08-15 14:30:57 +08:00
parent 571af9f34a
commit 69a7f48c36
10 changed files with 304 additions and 8 deletions

View File

@@ -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<HomeInfoVO> getBaseInfo(@PathVariable("baseId") String baseId) {
HomeInfoVO res = homeService.getHomeInfo(baseId);
return success(res);
}
}

View File

@@ -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<PlotInfoVO> 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<ProductionPlanVO> 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;
}
}

View File

@@ -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<PlotInfoDO> plotInfos;
private List<ProductionPlanDO> productionPlanInfos;
}

View File

@@ -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
*/

View File

@@ -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);
}

View File

@@ -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<HomeInfoVO.PlotInfoVO> 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<HomeInfoVO.PlotInfoVO> getPlots(String baseId) {
// 地块信息
List<PlotInfoDO> plotInfos = plotInfoService.getPlotInfos(baseId);
List<HomeInfoVO.PlotInfoVO> resList = new ArrayList<>();
plotInfos.forEach(e -> {
String plotId = e.getPlotId();
// 任务信息
List<ProductionPlanDO> productionPlanInfos = productionPlanService.getProductionPlans(plotId);
List<HomeInfoVO.ProductionPlanVO> 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;
}
}

View File

@@ -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<PlotInfoDO> getPlotInfos(String baseId);
/**
* 获得地块分页
*

View File

@@ -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<PlotInfoDO> getPlotInfos(String baseId) {
return null;
}
@Override
public PageResult<PlotInfoDO> getPlotInfoPage(PlotInfoPageReqVO pageReqVO) {
return plotInfoMapper.selectPage(pageReqVO);

View File

@@ -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<ProductionPlanDO> getProductionPlans(String plotId);
/**
* 获得种植中心-生产计划-生产计划分页
*
@@ -61,4 +67,5 @@ public interface ProductionPlanService {
*/
PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO);
}

View File

@@ -82,6 +82,11 @@ private void validateProductionPlanExists(String id) {
return productionPlanMapper.selectById(id);
}
@Override
public List<ProductionPlanDO> getProductionPlans(String plotId) {
return null;
}
@Override
public PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO) {
return productionPlanMapper.selectPage(pageReqVO);