feat (farm): 农场首页
- 拟定接口逻辑
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
/**
|
||||
* 获得地块分页
|
||||
*
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user