Merge remote-tracking branch 'origin/main'
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.LocalDate;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
@@ -49,6 +47,10 @@ public class ProductionPlanDO extends BaseDO {
|
|||||||
* 采收开始日期
|
* 采收开始日期
|
||||||
*/
|
*/
|
||||||
private LocalDate harvestStartDate;
|
private LocalDate harvestStartDate;
|
||||||
|
/**
|
||||||
|
* 预计产量
|
||||||
|
*/
|
||||||
|
private Integer estimatedOutput;
|
||||||
/**
|
/**
|
||||||
* 种植区域ID
|
* 种植区域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.controller.admin.plotinfo.vo.PlotInfoSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO;
|
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.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -52,7 +51,7 @@ public interface PlotInfoService {
|
|||||||
* @return 地块
|
* @return 地块
|
||||||
*/
|
*/
|
||||||
PlotInfoDO getPlotInfo(String id);
|
PlotInfoDO getPlotInfo(String id);
|
||||||
|
List<PlotInfoDO> getPlotInfos(String baseId);
|
||||||
/**
|
/**
|
||||||
* 获得地块分页
|
* 获得地块分页
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.plotinfo;
|
package cn.iocoder.yudao.module.farm.service.plotinfo;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
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.PlotInfoPageReqVO;
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.plotinfo.vo.PlotInfoSaveReqVO;
|
import cn.iocoder.yudao.module.farm.controller.admin.plotinfo.vo.PlotInfoSaveReqVO;
|
||||||
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;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO;
|
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.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
||||||
|
|
||||||
@@ -84,6 +81,11 @@ private void validatePlotInfoExists(String id) {
|
|||||||
return plotInfoMapper.selectById(id);
|
return plotInfoMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlotInfoDO> getPlotInfos(String baseId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<PlotInfoDO> getPlotInfoPage(PlotInfoPageReqVO pageReqVO) {
|
public PageResult<PlotInfoDO> getPlotInfoPage(PlotInfoPageReqVO pageReqVO) {
|
||||||
return plotInfoMapper.selectPage(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.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;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -53,6 +52,13 @@ public interface ProductionPlanService {
|
|||||||
*/
|
*/
|
||||||
ProductionPlanDO getProductionPlan(String id);
|
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);
|
PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -82,6 +82,11 @@ private void validateProductionPlanExists(String id) {
|
|||||||
return productionPlanMapper.selectById(id);
|
return productionPlanMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ProductionPlanDO> getProductionPlans(String plotId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO) {
|
public PageResult<ProductionPlanDO> getProductionPlanPage(ProductionPlanPageReqVO pageReqVO) {
|
||||||
return productionPlanMapper.selectPage(pageReqVO);
|
return productionPlanMapper.selectPage(pageReqVO);
|
||||||
|
|||||||
Reference in New Issue
Block a user