feat (farm): 农事报表

- 农事任务分类统计
- 种植类信息
- 投入品分类统计/金额统计
This commit is contained in:
达富斌
2025-10-27 00:39:50 +08:00
parent a710dead4c
commit 582be72c0c
14 changed files with 306 additions and 10 deletions

View File

@@ -8,6 +8,10 @@ import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.Farmin
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordRespVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordCreateReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordCreateReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.FarmTypeChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.InputUsageChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.PlantingAreaChartRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO; import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO;
import cn.iocoder.yudao.module.farm.enums.CommonConstants; import cn.iocoder.yudao.module.farm.enums.CommonConstants;
import cn.iocoder.yudao.module.farm.service.cropFarmingCenter.CropFarmingCenterService; import cn.iocoder.yudao.module.farm.service.cropFarmingCenter.CropFarmingCenterService;
@@ -263,8 +267,29 @@ public class CropFarmingCenterController {
@Operation(summary = "农事报表") @Operation(summary = "农事报表")
@GetMapping("/farming-report/1") @GetMapping("/farming-report/1")
public CommonResult<FarmingReport1RespVO> getFarmReport(FarmingReport1ReqVO req) { public CommonResult<List<FarmingReport1RespVO>> getFarmReport(FarmingReport1ReqVO req) {
FarmingReport1RespVO res = null; List<FarmingReport1RespVO> res = cropFarmingCenterService.getFarmReport(req);
return success(res);
}
@Operation(summary = "农事报表-农事任务分类统计")
@GetMapping("/farming-report/chart/farm-type")
public CommonResult<List<FarmTypeChartRespVO>> getFarmTypeChart(ChartCommonReqVO req) {
List<FarmTypeChartRespVO> res = cropFarmingCenterService.getFarmTypeChart(req);
return success(res);
}
@Operation(summary = "农事报表-种植类信息")
@GetMapping("/farming-report/chart/species")
public CommonResult<List<PlantingAreaChartRespVO>> getPlantingAreaChart(ChartCommonReqVO req) {
List<PlantingAreaChartRespVO> res = cropFarmingCenterService.getPlantingAreaChart(req);
return success(res);
}
@Operation(summary = "农事报表-投入品分类统计")
@GetMapping("/farming-report/chart/input-type")
public CommonResult<List<InputUsageChartRespVO>> getInputUsageChart(ChartCommonReqVO req) {
List<InputUsageChartRespVO> res = cropFarmingCenterService.getInputUsageChart(req);
return success(res); return success(res);
} }

View File

@@ -17,20 +17,20 @@ import java.time.LocalDate;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class FarmingReport1RespVO { public class FarmingReport1RespVO {
private String id;
private String baseId; private String baseId;
private String baseName; private String baseName;
@Schema(description = "计划编号") @Schema(description = "计划编号")
private String planNumber; private String planNumber;
@Schema(description = "排产开始日期") @Schema(description = "开始日期")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate productionStartDate; private LocalDate taskStartDate;
@Schema(description = "排产结束日期") @Schema(description = "结束日期")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate productionEndDate; private LocalDate taskEndDate;
@Schema(description = "持续天数") @Schema(description = "持续天数")
private Integer intervalDays; private Integer intervalDays;
@@ -42,7 +42,6 @@ public class FarmingReport1RespVO {
@Schema(description = "投入品总价") @Schema(description = "投入品总价")
private Double inputTotalPrice; private Double inputTotalPrice;
@Schema(description = "详情-用量") @Schema(description = "详情-用量")
private Integer usageAmount; private Integer usageAmount;

View File

@@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description:
* @author: binda
* @date: 2025/10/26 21:31
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChartCommonReqVO {
private String baseId;
private String plotId;
private Integer yearDate;
private String state;
private String tenantId;
}

View File

@@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description:
* @author: binda
* @date: 2025/10/26 21:08
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FarmTypeChartRespVO {
@Schema(description = "农事类型-名称")
private String farmTypeName;
@Schema(description = "农事记录数量")
private Integer recordCount;
}

View File

@@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @description: TODO
* @author: binda
* @date: 2025/10/27 00:10
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class InputUsageChartRespVO {
@Schema(description = "投入品名称")
private String inputName;
@Schema(description = "用量")
private Integer usageAmount;
@Schema(description = "单位")
private Integer unit;
@Schema(description = "总金额")
private BigDecimal totalPrice;
}

View File

@@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description: TODO
* @author: binda
* @date: 2025/10/26 22:19
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PlantingAreaChartRespVO {
@Schema(description = "物种名称")
private String speciesName;
@Schema(description = "种植面积")
private Double plantingArea;
@Schema(description = "种植面积占比")
private String areaPercentage;
}

View File

@@ -6,9 +6,13 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.FarmingDistributionReqVO; import cn.iocoder.yudao.module.farm.controller.admin.api.vo.FarmingDistributionReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.FarmingDistributionRespVO; import cn.iocoder.yudao.module.farm.controller.admin.api.vo.FarmingDistributionRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordPageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.FarmTypeChartRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO; import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* 种植中心-农事基地-农事记录 Mapper * 种植中心-农事基地-农事记录 Mapper
* *
@@ -41,4 +45,6 @@ public interface FarmingRecordMapper extends BaseMapperX<FarmingRecordDO> {
} }
FarmingDistributionRespVO getFarmingDistributionChart(FarmingDistributionReqVO req); FarmingDistributionRespVO getFarmingDistributionChart(FarmingDistributionReqVO req);
List<FarmTypeChartRespVO> getFarmTypeChart(ChartCommonReqVO req);
} }

View File

@@ -4,10 +4,14 @@ package cn.iocoder.yudao.module.farm.dal.mysql.inputlibrary;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.InputUsageChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.usagerecords.InputUsageRecordsPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.usagerecords.InputUsageRecordsPageReqVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputUsageRecordsDO; import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputUsageRecordsDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* 投入品使用记录 Mapper * 投入品使用记录 Mapper
* *
@@ -28,4 +32,5 @@ public interface InputUsageRecordsMapper extends BaseMapperX<InputUsageRecordsDO
.orderByDesc(InputUsageRecordsDO::getCreateTime)); .orderByDesc(InputUsageRecordsDO::getCreateTime));
} }
List<InputUsageChartRespVO> getInputUsageChart(ChartCommonReqVO req);
} }

View File

@@ -7,6 +7,8 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.farm.controller.admin.api.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.api.vo.*;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.ProductionPlanPage2ReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.ProductionPlanPage2ReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.ProductionPlanRespVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.ProductionPlanRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.PlantingAreaChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.productionplan.ProductionPlanPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.productionplan.ProductionPlanPageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.CropStatisticsRespVO; import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.CropStatisticsRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO;
@@ -86,4 +88,6 @@ public interface ProductionPlanMapper extends BaseMapperX<ProductionPlanDO> {
PlantingPlanCompletionRespVO getPlantingPlanCompletionChart(PlantingPlanCompletionReqVO req); PlantingPlanCompletionRespVO getPlantingPlanCompletionChart(PlantingPlanCompletionReqVO req);
List<CropStatisticsRespVO> getCultivatingAreaInfo(@Param("baseId") String baseId, @Param("year") String year); List<CropStatisticsRespVO> getCultivatingAreaInfo(@Param("baseId") String baseId, @Param("year") String year);
List<PlantingAreaChartRespVO> getPlantingAreaChart(ChartCommonReqVO req);
} }

View File

@@ -6,6 +6,10 @@ import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.Farmin
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordPageReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordRespVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.FarmTypeChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.InputUsageChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.PlantingAreaChartRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO; import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -69,4 +73,12 @@ public interface CropFarmingCenterService {
List<ProductionPlanReportRespVO> getPpReport(ProductionPlanReportReqVO req); List<ProductionPlanReportRespVO> getPpReport(ProductionPlanReportReqVO req);
List<FarmingRecordReportRespVO> getFcReport(FarmingRecordReportReqVO req); List<FarmingRecordReportRespVO> getFcReport(FarmingRecordReportReqVO req);
List<FarmingReport1RespVO> getFarmReport(FarmingReport1ReqVO req);
List<FarmTypeChartRespVO> getFarmTypeChart(ChartCommonReqVO req);
List<PlantingAreaChartRespVO> getPlantingAreaChart(ChartCommonReqVO req);
List<InputUsageChartRespVO> getInputUsageChart(ChartCommonReqVO req);
} }

View File

@@ -12,12 +12,15 @@ import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.Farmin
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordRespVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.farmingrecordinput.vo.FarmingRecordInputSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.farmingrecordinput.vo.FarmingRecordInputSaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.FarmTypeChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.InputUsageChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.PlantingAreaChartRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelcycle.vo.ModelCycleRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelcycle.vo.ModelCycleRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelfarmingoperation.vo.ModelFarmingOperationRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelfarmingoperation.vo.ModelFarmingOperationRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.models.vo.ModelManagementRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.models.vo.ModelManagementRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO; import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecordinput.FarmingRecordInputDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.modelfarmingoperationinput.ModelFarmingOperationInputDO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelfarmingoperationinput.ModelFarmingOperationInputDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.personnelmanagement.PersonnelManagementDO; import cn.iocoder.yudao.module.farm.dal.dataobject.personnelmanagement.PersonnelManagementDO;
@@ -26,6 +29,7 @@ import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlan
import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO; import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO;
import cn.iocoder.yudao.module.farm.dal.mysql.baseinfo.BaseInfoMapper; import cn.iocoder.yudao.module.farm.dal.mysql.baseinfo.BaseInfoMapper;
import cn.iocoder.yudao.module.farm.dal.mysql.farmingrecord.FarmingRecordMapper; import cn.iocoder.yudao.module.farm.dal.mysql.farmingrecord.FarmingRecordMapper;
import cn.iocoder.yudao.module.farm.dal.mysql.inputlibrary.InputUsageRecordsMapper;
import cn.iocoder.yudao.module.farm.dal.mysql.personnelmanagement.PersonnelManagementMapper; import cn.iocoder.yudao.module.farm.dal.mysql.personnelmanagement.PersonnelManagementMapper;
import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper; import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper;
import cn.iocoder.yudao.module.farm.dal.mysql.specieslibrary.SpeciesLibraryMapper; import cn.iocoder.yudao.module.farm.dal.mysql.specieslibrary.SpeciesLibraryMapper;
@@ -73,6 +77,8 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
private final BaseInfoMapper baseInfoMapper; private final BaseInfoMapper baseInfoMapper;
private final ProductionPlanMapper productionPlanMapper; private final ProductionPlanMapper productionPlanMapper;
private final FarmingRecordMapper farmingRecordMapper; private final FarmingRecordMapper farmingRecordMapper;
private final InputUsageRecordsMapper inputUsageRecordsMapper;
private final ModelManagementService modelManagementService; private final ModelManagementService modelManagementService;
private final FarmingRecordService farmingRecordService; private final FarmingRecordService farmingRecordService;
@@ -82,7 +88,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
private final FarmingTypeMaintenanceService farmingTypeMaintenanceService; private final FarmingTypeMaintenanceService farmingTypeMaintenanceService;
public CropFarmingCenterServiceImpl(SpeciesLibraryMapper speciesLibraryMapper, PersonnelManagementMapper personnelManagementMapper, BaseInfoMapper baseInfoMapper, ProductionPlanMapper productionPlanMapper, public CropFarmingCenterServiceImpl(SpeciesLibraryMapper speciesLibraryMapper, PersonnelManagementMapper personnelManagementMapper, BaseInfoMapper baseInfoMapper, ProductionPlanMapper productionPlanMapper,
FarmingRecordMapper farmingRecordMapper, ModelManagementService modelManagementService, FarmingRecordMapper farmingRecordMapper, InputUsageRecordsMapper inputUsageRecordsMapper, ModelManagementService modelManagementService,
FarmingRecordService farmingRecordService, FarmingRecordService farmingRecordService,
FarmingRecordInputService farmingRecordInputService, PlotInfoService plotInfoService, SpeciesLibraryService speciesLibraryService, FarmingTypeMaintenanceService farmingTypeMaintenanceService) { FarmingRecordInputService farmingRecordInputService, PlotInfoService plotInfoService, SpeciesLibraryService speciesLibraryService, FarmingTypeMaintenanceService farmingTypeMaintenanceService) {
this.speciesLibraryMapper = speciesLibraryMapper; this.speciesLibraryMapper = speciesLibraryMapper;
@@ -90,6 +96,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
this.baseInfoMapper = baseInfoMapper; this.baseInfoMapper = baseInfoMapper;
this.productionPlanMapper = productionPlanMapper; this.productionPlanMapper = productionPlanMapper;
this.farmingRecordMapper = farmingRecordMapper; this.farmingRecordMapper = farmingRecordMapper;
this.inputUsageRecordsMapper = inputUsageRecordsMapper;
this.modelManagementService = modelManagementService; this.modelManagementService = modelManagementService;
this.farmingRecordService = farmingRecordService; this.farmingRecordService = farmingRecordService;
this.farmingRecordInputService = farmingRecordInputService; this.farmingRecordInputService = farmingRecordInputService;
@@ -704,6 +711,34 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Override
public List<FarmingReport1RespVO> getFarmReport(FarmingReport1ReqVO req) {
List<FarmingReport1RespVO> res = new ArrayList<>();
List<FarmingRecordDO> farmingRecordDOS = farmingRecordMapper.selectList();
for (FarmingRecordDO f : farmingRecordDOS) {
}
return res;
}
@Override
public List<FarmTypeChartRespVO> getFarmTypeChart(ChartCommonReqVO req) {
return farmingRecordMapper.getFarmTypeChart(req);
}
@Override
public List<PlantingAreaChartRespVO> getPlantingAreaChart(ChartCommonReqVO req) {
return productionPlanMapper.getPlantingAreaChart(req);
}
@Override
public List<InputUsageChartRespVO> getInputUsageChart(ChartCommonReqVO req) {
return inputUsageRecordsMapper.getInputUsageChart(req);
}
private ProductionPlanReportRespVO.Models convertToModel(ProductionPlanDO plan,Map<String, String> speciesName) { private ProductionPlanReportRespVO.Models convertToModel(ProductionPlanDO plan,Map<String, String> speciesName) {
String plantSpeciesName = speciesName.get(plan.getPlantSpeciesCode()); String plantSpeciesName = speciesName.get(plan.getPlantSpeciesCode());
String planStatusName = PLAN_MAP.get(plan.getPlanStatus()); String planStatusName = PLAN_MAP.get(plan.getPlanStatus());

View File

@@ -24,4 +24,34 @@
<if test="tenantId != null and tenantId != ''">AND tenant_id = #{tenantId}</if> <if test="tenantId != null and tenantId != ''">AND tenant_id = #{tenantId}</if>
</where> </where>
</select> </select>
<select id="getFarmTypeChart"
parameterType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO"
resultType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.FarmTypeChartRespVO">
SELECT
fftm.farming_name AS farmTypeName,
COUNT(ffr.id) AS recordCount
FROM farm_farming_record ffr
LEFT JOIN farm_farming_type_maintenance fftm ON ffr.task_type = fftm.id
<where>
fftm.deleted = 0
<if test="tenantId != null">
AND ffr.tenant_id = #{tenantId}
</if>
<if test="yearDate != null">
AND YEAR(ffr.task_start_date) = #{yearDate}
</if>
<if test="baseId != null and baseId != ''">
AND ffr.base_id = #{baseId}
</if>
<if test="plotId != null and plotId != ''">
AND ffr.plot_id = #{plotId}
</if>
</where>
GROUP BY fftm.farming_name
ORDER BY recordCount DESC
</select>
</mapper> </mapper>

View File

@@ -9,4 +9,39 @@
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
--> -->
<select id="getInputUsageChart"
parameterType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO"
resultType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.InputUsageChartRespVO">
SELECT
fiur.input_name AS inputName,
SUM(fiur.usage_amount) AS usageAmount,
CASE
WHEN fiur.current_spec_type = 1 THEN fiur.unit
WHEN fiur.current_spec_type = 2 THEN fiur.spec
ELSE fiur.unit
END AS unit,
SUM(fiur.total_price) AS totalPrice
FROM farm_input_usage_records fiur
<where>
fiur.deleted = 0
<if test="tenantId != null">
AND fiur.tenant_id = #{tenantId}
</if>
<if test="baseId != null and baseId != ''">
AND fiur.base_id = #{baseId}
</if>
<if test="plotId != null and plotId != ''">
AND fiur.plot_id = #{plotId}
</if>
</where>
GROUP BY fiur.input_name,
CASE
WHEN fiur.current_spec_type = 1 THEN fiur.unit
WHEN fiur.current_spec_type = 2 THEN fiur.spec
ELSE fiur.unit
END
ORDER BY usageAmount DESC
</select>
</mapper> </mapper>

View File

@@ -110,5 +110,55 @@
GROUP BY plant_species_code GROUP BY plant_species_code
</select> </select>
<select id="getPlantingAreaChart"
parameterType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO"
resultType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.PlantingAreaChartRespVO">
SELECT
fsl.cultivar_name AS speciesName,
SUM(fpp.predicted_area) AS plantingArea,
CASE
WHEN #{plotId} IS NOT NULL AND #{plotId} != '' THEN
CONCAT(ROUND(SUM(fpp.predicted_area) / MAX(fpp.total_area) * 100, 2), '%')
WHEN #{baseId} IS NOT NULL AND #{baseId} != '' AND (#{plotId} IS NULL OR #{plotId} = '') THEN
CONCAT(ROUND(SUM(fpp.predicted_area) / (
SELECT SUM(total_area)
FROM farm_production_plan
WHERE base_id = #{baseId}
AND tenant_id = #{tenantId}
AND deleted = 0
GROUP BY base_id
) * 100, 2), '%')
ELSE
CONCAT(ROUND(SUM(fpp.predicted_area) / (
SELECT SUM(total_area)
FROM farm_production_plan
WHERE tenant_id = #{tenantId}
AND deleted = 0
) * 100, 2), '%')
END AS areaPercentage
FROM farm_production_plan fpp
LEFT JOIN farm_species_library fsl ON fpp.plant_species_code = fsl.id
WHERE
fpp.deleted = 0 AND fsl.deleted = 0
<if test="tenantId != null">
AND fpp.tenant_id = #{tenantId}
</if>
<if test="yearDate != null">
AND YEAR(fpp.production_start_date) = #{yearDate}
</if>
<if test="baseId != null and baseId != ''">
AND fpp.base_id = #{baseId}
</if>
<if test="plotId != null and plotId != ''">
AND fpp.plot_id = #{plotId}
</if>
<if test="state != null and state != ''">
AND fpp.plan_status = #{state}
</if>
GROUP BY fsl.cultivar_name
ORDER BY plantingArea DESC
</select>
</mapper> </mapper>