From 7b904663e97b4732d0c48eabe7880e1378ec08d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Wed, 3 Sep 2025 15:26:49 +0800 Subject: [PATCH] =?UTF-8?q?feat=20(farm):=20=E5=86=9C=E4=BA=8B=E8=AE=B0?= =?UTF-8?q?=E5=BD=95,=E7=94=9F=E4=BA=A7=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 基地统计信息 - 增加 实际产量字段 --- .../CropFarmingCenterController.java | 20 ++++++++--- .../vo/BasePlanOverviewRespVO.java | 29 ++++++++++++++++ .../vo/FarmRecordOverviewRespVO.java | 23 +++++++++++++ .../productionplan/ProductionPlanDO.java | 4 +++ .../dal/mysql/baseinfo/BaseInfoMapper.java | 4 +++ .../service/baseinfo/BaseInfoServiceImpl.java | 5 +-- .../CropFarmingCenterService.java | 5 +++ .../CropFarmingCenterServiceImpl.java | 33 +++++++++++++++++-- .../farmingrecord/FarmingRecordService.java | 2 ++ .../FarmingRecordServiceImpl.java | 14 ++++++++ .../productionplan/ProductionPlanService.java | 2 +- .../ProductionPlanServiceImpl.java | 7 ++-- .../mapper/baseinfo/BaseInfoMapper.xml | 13 ++++++++ .../productionplan/ProductionPlanMapper.xml | 7 +++- 14 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/BasePlanOverviewRespVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/FarmRecordOverviewRespVO.java diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java index 05550ee9..db4d9264 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/CropFarmingCenterController.java @@ -3,10 +3,7 @@ package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO; -import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPage2ReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanResp2VO; -import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanUpdateReqVO; +import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordRespVO; import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordSaveReqVO; @@ -135,6 +132,13 @@ public class CropFarmingCenterController { return success(true); } + @Operation(summary = "生产计划-统计信息") + @GetMapping("/production-plan/statistics") + @Parameter(name = "baseId", description = "基地编号") + public CommonResult getBaseOverview(@RequestParam("baseId") String baseId) { + BasePlanOverviewRespVO res = cropFarmingCenterService.getBaseOverview(baseId); + return success(res); + } // 农事记录 @GetMapping("/farming-record/page") @@ -171,4 +175,12 @@ public class CropFarmingCenterController { return success(true); } + @Operation(summary = "农事记录-统计信息") + @GetMapping("/farming-record/statistics") + @Parameter(name = "baseId", description = "基地编号") + public CommonResult getFarmRecordOverview(@RequestParam("baseId") String baseId) { + FarmRecordOverviewRespVO res = cropFarmingCenterService.getFarmRecordOverview(baseId); + return success(res); + } + } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/BasePlanOverviewRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/BasePlanOverviewRespVO.java new file mode 100644 index 00000000..aaf61da9 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/BasePlanOverviewRespVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @description: 基地统计信息 + * @author: binda + * @date: 2025/9/3 13:40 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BasePlanOverviewRespVO { + @Schema(description = "总面积") + private BigDecimal totalArea; + @Schema(description = "计划总数") + private Integer planCount; + @Schema(description = "已完成-计划个数") + private Integer planCompletedCount; + @Schema(description = "进行中-计划个数") + private Integer planInProgressCount; + @Schema(description = "逾期-计划个数") + private Integer planOverdueCount; +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/FarmRecordOverviewRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/FarmRecordOverviewRespVO.java new file mode 100644 index 00000000..ddd1c92b --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropFarmingCenter/vo/FarmRecordOverviewRespVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @description: 农事记录 统计信息 + * @author: binda + * @date: 2025/9/3 14:45 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FarmRecordOverviewRespVO { + @Schema(description = "总面积") + private BigDecimal totalArea; + @Schema(description = "农事总数") + private Integer farmRecordCount; +} 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 d005c735..fad2bd97 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 @@ -78,6 +78,10 @@ public class ProductionPlanDO extends BaseDO { * 预计产量 */ private Integer predictedYields; + /** + * 实际产量 + */ + private Integer practicalYields; /** * 总面积 */ diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/baseinfo/BaseInfoMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/baseinfo/BaseInfoMapper.java index 111dda89..5e96c61e 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/baseinfo/BaseInfoMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/baseinfo/BaseInfoMapper.java @@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoPageReq import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import org.apache.ibatis.annotations.Mapper; +import java.math.BigDecimal; + /** * 基地 Mapper * @@ -27,4 +29,6 @@ public interface BaseInfoMapper extends BaseMapperX { } int getBaseCount(Long tenantId); + + BigDecimal getTotalBaseArea(String id, Long tenantId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java index e5160245..3ea08807 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java @@ -143,8 +143,9 @@ public class BaseInfoServiceImpl implements BaseInfoService { List childList = new ArrayList<>(); for (PlotInfoDO aDo : plotInfoDOS) { if (aDo.getBaseId().equals(key)) { - double remainingArea = productionPlanService.getPredictedArea(aDo.getBaseId()); - childList.add(new BaseNameRespVO.PlotInfoVO(aDo.getPlotId(), aDo.getPlotName(), aDo.getPlotArea(), remainingArea)); + BigDecimal plotArea = aDo.getPlotArea(); + double remainingArea = productionPlanService.getPredictedArea(aDo.getPlotId(),plotArea); + childList.add(new BaseNameRespVO.PlotInfoVO(aDo.getPlotId(), aDo.getPlotName(), plotArea, remainingArea)); } } obj.setChildren(childList); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java index 601aeccc..61b1063f 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterService.java @@ -25,6 +25,7 @@ public interface CropFarmingCenterService { void updateProductionPlan(ProductionPlanUpdateReqVO updateReqVO); PageResult getProductionPlanPage(ProductionPlanPage2ReqVO reqVO); + PageResult getProductionPlanPage2(ProductionPlanPage2ReqVO reqVO); int getCropCount(Long tenantId); @@ -36,4 +37,8 @@ public interface CropFarmingCenterService { void reviseProductionPlan(ProductionPlanUpdateReqVO updateReqVO); void restartProductionPlan(ProductionPlanUpdateReqVO updateReqVO); + + BasePlanOverviewRespVO getBaseOverview(String baseId); + + FarmRecordOverviewRespVO getFarmRecordOverview(String baseId); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java index f48f49fe..8aeda857 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java @@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.Period; import java.time.ZoneId; @@ -297,7 +298,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { id += nodes.size(); } - return new PageResult(roots, (long) roots.size()); + return new PageResult<>(roots, (long) roots.size()); } private List loopPlanList(ProductionPlanResp2VO currentParentNode, @@ -328,7 +329,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { subNode.setPredictedYields(subPlan.getPredictedYields()); subNode.setOverdueDays(this.countOverdueDays(subPlan)); subNode.setIntervalDays(this.countIntervalDays(subPlan)); - subNode.setPlanOverview(this.getPlanOverview(subPlan)); +// subNode.setPlanOverview(this.getPlanOverview(subPlan)); subNode.setModelInfo(this.getModelManagement(subPlan, employeeNameMap)); nodes.add(subNode); @@ -370,7 +371,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { modelInfo.setCycleName(modelManagementDo.getCycleName()); modelInfo.setPredictedArea(planObj.getPredictedArea()); modelInfo.setPredictedYields(planObj.getPredictedYields()); - modelInfo.setProgressBar("1/10"); // TODO: 2025/8/30 + modelInfo.setProgressBar("1/10"); // TODO: 2025/8/30 农事记录 modelInfo.setProgressRatio("10"); // TODO: 2025/8/31 modelInfo.setProgressNumerator(1); modelInfo.setProgressDenominator(10); @@ -497,4 +498,30 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { public void restartProductionPlan(ProductionPlanUpdateReqVO updateReqVO) { } + + @Override + public BasePlanOverviewRespVO getBaseOverview(String baseId) { + LoginUser user = getLoginUser(); + Long tenantId = user.getTenantId(); + BigDecimal totalArea = baseInfoMapper.getTotalBaseArea(baseId,tenantId); + + if (totalArea != null) { + ProductionPlanRespVO.PlanOverview source = productionPlanMapper.getPlanOverview(baseId); + source.setTotalArea(totalArea); + return BeanUtils.toBean(source, BasePlanOverviewRespVO.class); + } else { + return null; + } + } + + @Override + public FarmRecordOverviewRespVO getFarmRecordOverview(String baseId) { + LoginUser user = getLoginUser(); + Long tenantId = user.getTenantId(); + + BigDecimal totalArea = baseInfoMapper.getTotalBaseArea(baseId,tenantId); + int farmRecordCount = farmingRecordService.getFarmRecordOverview(baseId); + + return new FarmRecordOverviewRespVO(totalArea,farmRecordCount); + } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java index ad030e32..d7dc299c 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java @@ -73,4 +73,6 @@ public interface FarmingRecordService { List getFarmingRecordList(); void createFarmingRecordList(List farmingRecordSaveReqVOList); + + int getFarmRecordOverview(String baseId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java index ad17f65e..27423adc 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.farm.dal.dataobject.farmingtypemaintenance.Farmin import cn.iocoder.yudao.module.farm.dal.mysql.farmingrecord.FarmingRecordMapper; import cn.iocoder.yudao.module.farm.dal.mysql.farmingrecordinput.FarmingRecordInputMapper; import cn.iocoder.yudao.module.farm.dal.mysql.farmingtypemaintenance.FarmingTypeMaintenanceMapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -227,4 +228,17 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { public void createFarmingRecordList(List farmingRecordSaveReqVOList) { } + + @Override + public int getFarmRecordOverview(String baseId) { + LoginUser user = getLoginUser(); + Long tenantId = user.getTenantId(); + + LambdaQueryWrapperX x = new LambdaQueryWrapperX<>(); + x.eqIfPresent(FarmingRecordDO::getBaseId, baseId); + x.eq(FarmingRecordDO::getTenantId, tenantId); + Long count = farmingRecordMapper.selectCount(x); + return count.intValue(); + + } } \ No newline at end of file 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 9d589cad..81bcf205 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 @@ -128,7 +128,7 @@ public interface ProductionPlanService { * @param baseId * @return */ - double getPredictedArea(String baseId); + double getPredictedArea(String plotId,BigDecimal plotArea); /** * 获取在种地块面积 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 c934a7b9..1609d1a4 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 @@ -253,13 +253,14 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { } @Override - public double getPredictedArea(String baseId) { + public double getPredictedArea(String plotId,BigDecimal plotArea) { - List planList = productionPlanMapper.selectList("base_id", baseId); - return planList.stream() + List planList = productionPlanMapper.selectList("plot_id", plotId); + double sum = planList.stream() .filter(e -> Objects.equals(e.getPlanStatus(), PLAN_STATUS_2)) .mapToDouble(ProductionPlanDO::getPredictedArea) .sum(); + return plotArea.subtract(BigDecimal.valueOf(sum)).doubleValue(); } @Override diff --git a/yudao-module-farm/src/main/resources/mapper/baseinfo/BaseInfoMapper.xml b/yudao-module-farm/src/main/resources/mapper/baseinfo/BaseInfoMapper.xml index dab7e11c..b8a614db 100644 --- a/yudao-module-farm/src/main/resources/mapper/baseinfo/BaseInfoMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/baseinfo/BaseInfoMapper.xml @@ -15,4 +15,17 @@ where tenant_id = #{tenantId} and deleted = 0 + + \ No newline at end of file diff --git a/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml b/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml index f2a8b8f9..118ce9d8 100644 --- a/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml @@ -33,7 +33,12 @@ SUM(CASE WHEN plan_status = 2 THEN 1 ELSE 0 END) AS planInProgressCount, SUM(CASE WHEN plan_status = 4 THEN 1 ELSE 0 END) AS planOverdueCount FROM farm_production_plan - WHERE base_id IS NOT NULL AND deleted = 0 AND base_id = #{baseId} + + deleted = 0 + + AND base_id = #{baseId} + + GROUP BY base_id \ No newline at end of file