fix (farm): 农事报表

- PC端/微信端
This commit is contained in:
达富斌
2025-10-16 11:29:10 +08:00
parent 4ce3c7dcc4
commit ca7744a37a
6 changed files with 145 additions and 2 deletions

View File

@@ -25,6 +25,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -109,6 +110,13 @@ public class CropFarmingCenterController {
private LocalDate maxDate; private LocalDate maxDate;
} }
@GetMapping("/production-plan/report")
@Operation(summary = "生产计划-报表")
public CommonResult<List<ProductionPlanReportRespVO>> getPpReport(ProductionPlanReportReqVO req) {
List<ProductionPlanReportRespVO> res = cropFarmingCenterService.getPpReport(req);
return success(res);
}
@GetMapping("/production-plan/get/{id}") @GetMapping("/production-plan/get/{id}")
@Operation(summary = "生产计划-查看") @Operation(summary = "生产计划-查看")
public CommonResult<ProductionPlanRespVO> getProductionPlan(@PathVariable("id") String id) { public CommonResult<ProductionPlanRespVO> getProductionPlan(@PathVariable("id") String id) {

View File

@@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo;
import com.mysql.cj.x.protobuf.MysqlxDatatypes;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description: TODO
* @author: binda
* @date: 2025/10/16 10:36
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductionPlanReportReqVO {
@Schema(description = "基地ID")
private String baseId;
@Schema(description = "地块ID")
private String plotId;
@Schema(description = "计划状态 1:未开始;2:进行中;3:已完成;4:逾期;")
private String planStatus;
@Schema(description = "年份")
private String year;
}

View File

@@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.List;
/**
* @description: TODO
* @author: binda
* @date: 2025/10/16 10:36
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductionPlanReportRespVO {
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "模型物种集合")
private List<Models> models;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Models {
@Schema(description = "物种名称")
private String plantSpeciesName;
@Schema(description = "排产开始日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate productionStartDate;
@Schema(description = "排产结束日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate productionEndDate;
@Schema(description = "计划状态")
private String planStatusName;
}
}

View File

@@ -82,7 +82,6 @@ public class WxController {
@Parameter(name = "baseId", description = "基地编号") @Parameter(name = "baseId", description = "基地编号")
public CommonResult<List<DeviceStatisticsInfoRespVO>> getDeviceStatisticsList(@RequestParam("baseId") String baseId) { public CommonResult<List<DeviceStatisticsInfoRespVO>> getDeviceStatisticsList(@RequestParam("baseId") String baseId) {
List<DeviceStatisticsInfoRespVO> res = deviceInfoService.getDeviceStatisticsList(baseId); List<DeviceStatisticsInfoRespVO> res = deviceInfoService.getDeviceStatisticsList(baseId);
return success(res); return success(res);
} }

View File

@@ -9,6 +9,8 @@ import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.Farmin
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;
import java.util.List;
/** /**
* @description: 种植中心 * @description: 种植中心
* @author: binda * @author: binda
@@ -58,4 +60,11 @@ public interface CropFarmingCenterService {
void updateFarmingRecord(@Valid FarmingRecordSaveReqVO updateReqVO); void updateFarmingRecord(@Valid FarmingRecordSaveReqVO updateReqVO);
void deleteFarmingRecord(String id); void deleteFarmingRecord(String id);
/**
* 农事报表
* @param req
* @return
*/
List<ProductionPlanReportRespVO> getPpReport(ProductionPlanReportReqVO req);
} }

View File

@@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.farm.service.cropFarmingCenter; package cn.iocoder.yudao.module.farm.service.cropFarmingCenter;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.idev.excel.util.StringUtils;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.*;
import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordCreateReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordCreateReqVO;
@@ -31,6 +33,7 @@ import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService;
import cn.iocoder.yudao.module.farm.service.farmingrecordinput.FarmingRecordInputService; import cn.iocoder.yudao.module.farm.service.farmingrecordinput.FarmingRecordInputService;
import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService; import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService;
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService; import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil; import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil;
import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import cn.iocoder.yudao.module.farm.utils.StrHelperUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -71,11 +74,12 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
private final FarmingRecordService farmingRecordService; private final FarmingRecordService farmingRecordService;
private final FarmingRecordInputService farmingRecordInputService; private final FarmingRecordInputService farmingRecordInputService;
private final PlotInfoService plotInfoService; private final PlotInfoService plotInfoService;
private final SpeciesLibraryService speciesLibraryService;
public CropFarmingCenterServiceImpl(SpeciesLibraryMapper speciesLibraryMapper, PersonnelManagementMapper personnelManagementMapper, BaseInfoMapper baseInfoMapper, ProductionPlanMapper productionPlanMapper, public CropFarmingCenterServiceImpl(SpeciesLibraryMapper speciesLibraryMapper, PersonnelManagementMapper personnelManagementMapper, BaseInfoMapper baseInfoMapper, ProductionPlanMapper productionPlanMapper,
ModelManagementService modelManagementService, ModelManagementService modelManagementService,
FarmingRecordService farmingRecordService, FarmingRecordService farmingRecordService,
FarmingRecordInputService farmingRecordInputService, PlotInfoService plotInfoService) { FarmingRecordInputService farmingRecordInputService, PlotInfoService plotInfoService, SpeciesLibraryService speciesLibraryService) {
this.speciesLibraryMapper = speciesLibraryMapper; this.speciesLibraryMapper = speciesLibraryMapper;
this.personnelManagementMapper = personnelManagementMapper; this.personnelManagementMapper = personnelManagementMapper;
this.baseInfoMapper = baseInfoMapper; this.baseInfoMapper = baseInfoMapper;
@@ -84,6 +88,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
this.farmingRecordService = farmingRecordService; this.farmingRecordService = farmingRecordService;
this.farmingRecordInputService = farmingRecordInputService; this.farmingRecordInputService = farmingRecordInputService;
this.plotInfoService = plotInfoService; this.plotInfoService = plotInfoService;
this.speciesLibraryService = speciesLibraryService;
} }
@Override @Override
@@ -616,4 +621,55 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
farmingRecordService.deleteFarmingRecord(id); farmingRecordService.deleteFarmingRecord(id);
} }
@Override
public List<ProductionPlanReportRespVO> getPpReport(ProductionPlanReportReqVO req) {
LambdaQueryWrapperX<ProductionPlanDO> x = new LambdaQueryWrapperX<>();
x.eqIfPresent(ProductionPlanDO::getBaseId, req.getBaseId());
x.eqIfPresent(ProductionPlanDO::getPlotId, req.getPlotId());
x.eqIfPresent(ProductionPlanDO::getPlanStatus, req.getPlanStatus());
x.eq(ProductionPlanDO::getTenantId, getLoginUser().getTenantId());
x.eq(ProductionPlanDO::getDeleted, NO_CODE);
if (StringUtils.isNotBlank(req.getYear())) {
try {
int year = Integer.parseInt(req.getYear());
x.between(ProductionPlanDO::getProductionStartDate,
LocalDate.of(year, 1, 1),
LocalDate.of(year, 12, 31));
} catch (NumberFormatException e) {
// 处理格式错误
throw new IllegalArgumentException("year格式错误,应为yyyy格式");
}
}
List<ProductionPlanDO> pList = productionPlanMapper.selectList(x);
Map<String, String> speciesName = speciesLibraryService.getSpeciesName();
return pList.stream()
.collect(Collectors.groupingBy(ProductionPlanDO::getBaseName))
.entrySet().stream()
.map(entry -> {
String baseName = entry.getKey();
List<ProductionPlanDO> plans = entry.getValue();
List<ProductionPlanReportRespVO.Models> models = plans.stream()
.map(e -> convertToModel(e,speciesName))
.collect(Collectors.toList());
return new ProductionPlanReportRespVO(baseName, models);
})
.collect(Collectors.toList());
}
private ProductionPlanReportRespVO.Models convertToModel(ProductionPlanDO plan,Map<String, String> speciesName) {
String plantSpeciesName = speciesName.get(plan.getPlantSpeciesCode());
String planStatusName = PLAN_MAP.get(plan.getPlanStatus());
return new ProductionPlanReportRespVO.Models(
plantSpeciesName,
plan.getProductionStartDate(),
plan.getProductionEndDate(),
planStatusName
);
}
} }