From 436c933b0b637c8ac58311bb58f4247eebc693b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Wed, 29 Oct 2025 14:41:34 +0800 Subject: [PATCH] feat (farm): MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 基地,地块新增 编码字段 - 户主导入/出 重构 - 修复部分bug --- yudao-module-farm/pom.xml | 11 + .../vo/FarmingRecordSaveReqVO.java | 9 +- .../vo/FarmingReport1RespVO.java | 16 +- .../vo/chart/InputUsageChartRespVO.java | 6 + .../vo/chart/PlantingAreaChartRespVO.java | 8 +- .../baseinfo/BaseInfoController.java | 4 +- .../baseinfo/PlotInfoController.java | 6 +- .../baseinfo/vo/BaseInfoRespVO.java | 7 + .../baseinfo/vo/BaseInfoSaveReqVO.java | 5 + .../baseinfo/vo/PlotInfoRespVO.java | 5 + .../baseinfo/vo/PlotInfoSaveReqVO.java | 8 + .../vo/PlotLesseeForExportExcelRespVO.java | 31 ++- .../vo/PlotLesseeForImportExcelRespVO.java | 23 +- .../baseinfo/vo/PlotLesseeImportRespVO.java | 33 +++ .../baseinfo/vo/PlotLesseeInfoRespVO.java | 9 + .../modelcycle/ModelCycleController.java | 14 +- .../dal/dataobject/baseinfo/BaseInfoDO.java | 5 + .../dal/dataobject/plotinfo/PlotInfoDO.java | 5 + .../module/farm/job/FarmingRecordJob.java | 43 ++-- .../service/baseinfo/BaseInfoServiceImpl.java | 19 +- .../CropFarmingCenterServiceImpl.java | 34 +-- .../farmingrecord/FarmingRecordService.java | 1 + .../FarmingRecordServiceImpl.java | 57 ++--- .../InputUsageRecordsService.java | 2 + .../InputUsageRecordsServiceImpl.java | 30 +++ .../modelcycle/ModelCycleServiceImpl.java | 8 +- .../ModelManagementServiceImpl.java | 10 +- .../service/plotinfo/PlotInfoService.java | 2 +- .../service/plotinfo/PlotInfoServiceImpl.java | 227 +++++++++++++++--- .../inputlibrary/InputUsageRecordsMapper.xml | 43 ++-- .../productionplan/ProductionPlanMapper.xml | 72 +++--- 31 files changed, 538 insertions(+), 215 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeImportRespVO.java diff --git a/yudao-module-farm/pom.xml b/yudao-module-farm/pom.xml index ca7000fe..9993c9d6 100644 --- a/yudao-module-farm/pom.xml +++ b/yudao-module-farm/pom.xml @@ -158,6 +158,17 @@ + + + + + + + + + + + diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordSaveReqVO.java index 64ca2b37..09581c3c 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordSaveReqVO.java @@ -32,8 +32,7 @@ public class FarmingRecordSaveReqVO { @Schema(description = "任务计划 (1: 开始; 2: 结束;)") private Integer taskStatus; - @Schema(description = "所属地块", example = "10480") - private String plotId; + @Schema(description = "生产计划ID", example = "24782") private String productionPlanId; @@ -70,11 +69,17 @@ public class FarmingRecordSaveReqVO { @Schema(description = "基地", example = "李四") private String baseName; + @Schema(description = "所属地块", example = "10480") + private String plotId; + @Schema(description = "地块", example = "赵六") private String plotName; @Schema(description = "租户id", example = "23744") private String tenantId; + @Schema(description = "引用类型投入品id集合 (逗号分隔)") + private String inputsIds; + private List investGoodsList; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingReport1RespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingReport1RespVO.java index 55416d18..b25a64b4 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingReport1RespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingReport1RespVO.java @@ -18,7 +18,10 @@ import java.time.LocalDate; @NoArgsConstructor public class FarmingReport1RespVO { - private String baseId; + @Schema(description = "农事记录ID") + private String farmRecordId; + + @Schema(description = "基地名称") private String baseName; @Schema(description = "计划编号") @@ -35,18 +38,7 @@ public class FarmingReport1RespVO { @Schema(description = "持续天数") private Integer intervalDays; - @Schema(description = "投入品ID") - private String inputId; - private String inputName; - @Schema(description = "投入品总价") private Double inputTotalPrice; - @Schema(description = "详情-用量") - private Integer usageAmount; - - private Integer currentSpecType; - @Schema(description = "详情-单位") - private Integer unit; - private String unitName; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/InputUsageChartRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/InputUsageChartRespVO.java index 92bd09d9..21f417fd 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/InputUsageChartRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/InputUsageChartRespVO.java @@ -22,8 +22,14 @@ public class InputUsageChartRespVO { @Schema(description = "用量") private Integer usageAmount; + private Integer currentSpecType; + @Schema(description = "单位") private Integer unit; + private String unitName; + + @Schema(description = "单价金额") + private BigDecimal unitPrice; @Schema(description = "总金额") private BigDecimal totalPrice; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/PlantingAreaChartRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/PlantingAreaChartRespVO.java index add8bdb2..95db3447 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/PlantingAreaChartRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/chart/PlantingAreaChartRespVO.java @@ -16,8 +16,10 @@ import lombok.NoArgsConstructor; public class PlantingAreaChartRespVO { @Schema(description = "物种名称") private String speciesName; + @Schema(description = "种植数量") + private Integer plantingQuantity; @Schema(description = "种植面积") - private Double plantingArea; - @Schema(description = "种植面积占比") - private String areaPercentage; + private Integer plantingArea; + @Schema(description = "总面积") + private Integer totalArea; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/BaseInfoController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/BaseInfoController.java index 180fd384..03b0f64b 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/BaseInfoController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/BaseInfoController.java @@ -73,7 +73,9 @@ public class BaseInfoController { @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getBaseInfo(@RequestParam("id") String id) { BaseInfoDO baseInfo = baseInfoService.getBaseInfo(id); - return success(BeanUtils.toBean(baseInfo, BaseInfoRespVO.class)); + BaseInfoRespVO res = BeanUtils.toBean(baseInfo, BaseInfoRespVO.class); + res.setUpdateStateForCode(1); + return success(res); } @GetMapping("/page") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java index 51444d5b..31b042c6 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java @@ -120,10 +120,10 @@ public class PlotInfoController { @Parameters({ @Parameter(name = "file", description = "Excel 文件", required = true), }) - public CommonResult importPlotLesseeInfoExcel(@RequestParam("file") MultipartFile file) throws IOException { + public CommonResult importPlotLesseeInfoExcel(@RequestParam("file") MultipartFile file) throws IOException { List list = ExcelUtils.read(file, PlotLesseeForImportExcelRespVO.class); - plotInfoService.setPlotLesseeInfo(list); - return success(true); + PlotLesseeImportRespVO res = plotInfoService.setPlotLesseeInfo(list); + return success(res); } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoRespVO.java index c9c8b0c2..15e8b541 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoRespVO.java @@ -18,6 +18,11 @@ public class BaseInfoRespVO { @ExcelProperty("基地id") private String id; + @Schema(description = "基地编号") + private String code; + @Schema(description = "基地编号-可修改状态 (1: 可以; 2: 不可以)") + private Integer updateStateForCode; + @Schema(description = "基地名称", example = "张三") @ExcelProperty("基地名称") private String name; @@ -89,6 +94,8 @@ public class BaseInfoRespVO { private String plotPoint; private Integer plotLeaseStatus; private String plotLeaseStatusName; + @Schema(description = "网格数量") + private Integer gridNumber; @Schema(description = "网格信息") private List gridOverviewList; @Schema(description = "户主流转信息") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoSaveReqVO.java index c1616d0a..6ec720f6 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/BaseInfoSaveReqVO.java @@ -12,6 +12,11 @@ public class BaseInfoSaveReqVO { @Schema(description = "基地id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13189") private String id; + @Schema(description = "基地编号") + private String code; + @Schema(description = "基地编号-可修改状态 (1: 可以; 2: 不可以)") + private Integer updateStateForCode; + @Schema(description = "基地名称", example = "张三") private String name; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java index 5434d78f..6c52baf4 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java @@ -17,6 +17,11 @@ public class PlotInfoRespVO { @ExcelProperty("id") private String id; + @Schema(description = "地块编号") + private String code; + @Schema(description = "地块编号-可修改状态 (1: 可以; 2: 不可以)") + private Integer updateStateForCode; + @Schema(description = "所属基地ID") @ExcelProperty("所属基地ID") private String baseId; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java index 3042ca8b..e327a04a 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java @@ -12,6 +12,11 @@ public class PlotInfoSaveReqVO { @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11262") private String id; + @Schema(description = "地块编号") + private String code; + @Schema(description = "地块编号-可修改状态 (1: 可以; 2: 不可以)") + private Integer updateStateForCode; + @Schema(description = "基地ID", example = "1431") private String baseId; @@ -42,6 +47,9 @@ public class PlotInfoSaveReqVO { @Schema(description = " 租赁状态 (1: 已租; 0: 未租;)") private Integer plotLeaseStatus; + @Schema(description = "网格数量") + private Integer gridNumber; + @Schema(description = "租赁人信息") private PlotLesseeSaveReqVO plotLessee; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForExportExcelRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForExportExcelRespVO.java index 01b35f6c..b2b98434 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForExportExcelRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForExportExcelRespVO.java @@ -8,6 +8,8 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDate; + @Schema(description = "管理后台 - 地块户主 - 导出") @Data @AllArgsConstructor @@ -15,10 +17,18 @@ import lombok.NoArgsConstructor; @ExcelIgnoreUnannotated public class PlotLesseeForExportExcelRespVO { + @Schema(description = "基地编号") + @ExcelProperty("基地编号") + private String baseCode; + @Schema(description = "基地名称") @ExcelProperty("基地名称") private String baseName; + @Schema(description = "地块编码") + @ExcelProperty("地块编码") + private String plotCode; + @Schema(description = "地块名称") @ExcelProperty("地块名称") private String plotName; @@ -38,15 +48,26 @@ public class PlotLesseeForExportExcelRespVO { @Schema(description = "租赁开始日期") @ExcelProperty("租赁开始日期 (yyyy-MM-dd)") @JsonFormat(pattern = "yyyy-MM-dd") - private String leaseStartDate; + private LocalDate leaseStartDate; - @Schema(description = "租赁接口日期") - @ExcelProperty("租赁接口日期 (yyyy-MM-dd)") + @Schema(description = "租赁结束日期") + @ExcelProperty("租赁结束日期 (yyyy-MM-dd)") @JsonFormat(pattern = "yyyy-MM-dd") - private String leaseEndDate; + private LocalDate leaseEndDate; - public PlotLesseeForExportExcelRespVO(String baseName, String plotName) { + @Schema(description = "租赁剩余天数") + @ExcelProperty("租赁剩余天数") + private Long expirationDays; + + @Schema(description = "是否修改 (是/否)") + @ExcelProperty("是否修改 (是/否))") + private String isModified; + + public PlotLesseeForExportExcelRespVO(String baseCode, String baseName, String plotCode, String plotName,String isModified) { + this.baseCode = baseCode; this.baseName = baseName; + this.plotCode = plotCode; this.plotName = plotName; + this.isModified = isModified; } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForImportExcelRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForImportExcelRespVO.java index 934f88ba..eb9be83b 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForImportExcelRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeForImportExcelRespVO.java @@ -18,10 +18,18 @@ import java.time.LocalDate; @Accessors(chain = false) public class PlotLesseeForImportExcelRespVO { + @Schema(description = "基地编号") + @ExcelProperty("基地编号") + private String baseCode; + @Schema(description = "基地名称") @ExcelProperty("基地名称") private String baseName; + @Schema(description = "地块编码") + @ExcelProperty("地块编码") + private String plotCode; + @Schema(description = "地块名称") @ExcelProperty("地块名称") private String plotName; @@ -43,13 +51,16 @@ public class PlotLesseeForImportExcelRespVO { @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate leaseStartDate; - @Schema(description = "租赁接口日期") - @ExcelProperty("租赁接口日期 (yyyy-MM-dd)") + @Schema(description = "租赁结束日期") + @ExcelProperty("租赁结束日期 (yyyy-MM-dd)") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate leaseEndDate; - public PlotLesseeForImportExcelRespVO(String baseName, String plotName) { - this.baseName = baseName; - this.plotName = plotName; - } + @Schema(description = "租赁剩余天数") + @ExcelProperty("租赁剩余天数)") + private Long expirationDays; + + @Schema(description = "是否修改 (是/否)") + @ExcelProperty("是否修改 (是/否))") + private String isModified; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeImportRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeImportRespVO.java new file mode 100644 index 00000000..57622b48 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeImportRespVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @description: 导入结果反馈 + * @author: binda + * @date: 2025/10/27 23:21 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlotLesseeImportRespVO { + + private Integer total; + private Integer successCount; + private Integer failuresCount; + private Integer unmodifiedCount; + private List failuresList; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Row { + private String plotCode; + private String plotName; + } + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java index a745e76f..abb2f14e 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java @@ -26,6 +26,12 @@ public class PlotLesseeInfoRespVO { @ExcelProperty("地块ID") private String plotId; + @Schema(description = "地块编号") + private String code; + @Schema(description = "地块编号-可修改状态 (1: 可以; 2: 不可以)") + private Integer updateStateForCode; + + @Schema(description = "地块名称") @ExcelProperty("地块名称") private String plotName; @@ -61,6 +67,9 @@ public class PlotLesseeInfoRespVO { private Integer plotLeaseStatus; private String plotLeaseStatusName; + @Schema(description = "网格数量") + private Integer gridNumber; + @Schema(description = "租赁人信息") private PlotLesseeDetailsRespVO plotLessee; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelcycle/ModelCycleController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelcycle/ModelCycleController.java index 1294c6a2..bbce16d1 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelcycle/ModelCycleController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelcycle/ModelCycleController.java @@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanag import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; import jakarta.servlet.http.HttpServletResponse; + +import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; @@ -39,17 +41,14 @@ public class ModelCycleController { @Resource private ModelCycleService modelCycleService; - @PostMapping("/create") @Operation(summary = "创建模型管理-管理周期") - public CommonResult createModelCycle(@Valid @RequestBody ModelCycleSaveReqVO createReqVO) { return success(modelCycleService.createModelCycle(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新模型管理-管理周期") - public CommonResult updateModelCycle(@Valid @RequestBody ModelCycleSaveReqVO updateReqVO) { modelCycleService.updateModelCycle(updateReqVO); return success(true); @@ -58,7 +57,6 @@ public class ModelCycleController { @DeleteMapping("/delete") @Operation(summary = "删除模型管理-管理周期") @Parameter(name = "id", description = "编号", required = true) - public CommonResult deleteModelCycle(@RequestParam("id") String id) { modelCycleService.deleteModelCycle(id); return success(true); @@ -67,7 +65,6 @@ public class ModelCycleController { @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除模型管理-管理周期") - public CommonResult deleteModelCycleList(@RequestParam("ids") List ids) { modelCycleService.deleteModelCycleListByIds(ids); return success(true); @@ -76,15 +73,15 @@ public class ModelCycleController { @GetMapping("/get") @Operation(summary = "获得模型管理-管理周期") @Parameter(name = "id", description = "编号", required = true, example = "1024") - public CommonResult getModelCycle(@RequestParam("id") String id) { ModelCycleDO modelCycle = modelCycleService.getModelCycle(id); - return success(BeanUtils.toBean(modelCycle, ModelCycleRespVO.class)); + ModelCycleRespVO res = BeanUtils.toBean(modelCycle, ModelCycleRespVO.class); + res.setStageImageList(Arrays.asList(res.getStageImage())); + return success(res); } @GetMapping("/page") @Operation(summary = "获得模型管理-管理周期分页") - public CommonResult> getModelCyclePage(@Valid ModelCyclePageReqVO pageReqVO) { PageResult pageResult = modelCycleService.getModelCyclePage(pageReqVO); return success(BeanUtils.toBean(pageResult, ModelCycleRespVO.class)); @@ -92,7 +89,6 @@ public class ModelCycleController { @GetMapping("/export-excel") @Operation(summary = "导出模型管理-管理周期 Excel") - @ApiAccessLog(operateType = EXPORT) public void exportModelCycleExcel(@Valid ModelCyclePageReqVO pageReqVO, HttpServletResponse response) throws IOException { diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java index a9055156..13364a23 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java @@ -28,6 +28,11 @@ public class BaseInfoDO extends BaseDO { */ @TableId(type = IdType.INPUT) private String id; + + /** + * 基地编码 + */ + private String code; /** * 基地名称 */ diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java index 1eded488..f6c00c89 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java @@ -71,4 +71,9 @@ public class PlotInfoDO extends BaseDO { * 租赁状态 (1: 已租; 0: 未租;) */ private Integer plotLeaseStatus; + + /** + * 网格数量 + */ + private Integer gridNumber; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/job/FarmingRecordJob.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/job/FarmingRecordJob.java index 84349668..ccd3e199 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/job/FarmingRecordJob.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/job/FarmingRecordJob.java @@ -3,17 +3,16 @@ package cn.iocoder.yudao.module.farm.job; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; import cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingRecordSaveReqVO; -import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecordinput.FarmingRecordInputDO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelfarmingoperation.ModelFarmingOperationDO; -import cn.iocoder.yudao.module.farm.dal.dataobject.modelfarmingoperationinput.ModelFarmingOperationInputDO; import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService; +import cn.iocoder.yudao.module.farm.service.inputlibrary.InputUsageRecordsService; +import cn.iocoder.yudao.module.farm.service.inputlibrary.InputsService; import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService; import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -56,14 +55,19 @@ public class FarmingRecordJob implements JobHandler { if (taskTime.length != 2) { continue; } + + LocalDate today = LocalDate.now(); LocalDate startDate = LocalDate.parse(taskTime[0]); LocalDate endDate = LocalDate.parse(taskTime[1]); - if (startDate.isEqual(LocalDate.now())) { + boolean isStartToday = startDate.isEqual(today); + boolean isEndToday = endDate.isEqual(today); + + if (isStartToday) { // 开始日期在今天 e.setTaskStatus(FARMING_RECORD_STATUS_1); - farmingRecordService.createFarmingRecord(e); + farmingRecordService.createFarmingRecordForJob(e); } - if (endDate.isEqual(LocalDate.now())) { + if (isEndToday) { // 结束日期在今天 e.setTaskStatus(FARMING_RECORD_STATUS_2); farmingRecordService.updateFarmingRecord(e); @@ -104,18 +108,19 @@ public class FarmingRecordJob implements JobHandler { LocalDate startDate = productionStartDate.plusDays(startingPeriod-1); // 农事记录结束日期 LocalDate endDate = startDate.plusDays(used); - String taskTime = startDate.toString() + "," + endDate.toString(); + String taskTime = startDate + "," + endDate; FarmingRecordSaveReqVO saveObj = new FarmingRecordSaveReqVO(); saveObj.setTaskType(e.getFarmingId()); saveObj.setTaskName(e.getFarmingName()); saveObj.setTaskScope(p.getPlanNumber()); saveObj.setTaskTime(taskTime); + saveObj.setTaskStartDate(startDate); + saveObj.setTaskEndDate(endDate); saveObj.setProductionPlanId(p.getId()); saveObj.setModelFarmingOperationId(e.getId()); saveObj.setExecutor("系统"); saveObj.setActualLaborCost(e.getUsed()); - saveObj.setActualInputId(""); // TODO: 2025/9/2 saveObj.setFeedbackNotes(e.getDescription()); saveObj.setFeedbackImageUrl(""); saveObj.setFeedbackImageUrlList(e.getSketchList()); @@ -125,28 +130,8 @@ public class FarmingRecordJob implements JobHandler { saveObj.setPlotName(p.getPlotName()); saveObj.setTenantId(p.getTenantId()); saveObj.setModelFarmingOperationId(e.getId()); + saveObj.setInputsIds(e.getInputsIds()); - List inputDOList = new ArrayList<>(); - for (ModelFarmingOperationInputDO m : e.getInvestGoodsList()) { - FarmingRecordInputDO target = new FarmingRecordInputDO(); - target.setInputParentCategory(m.getInputsId()); - target.setInputChildCategory(m.getInputsId()); - target.setDilutionRatio(m.getDiluted()); - target.setSingleUseOption(m.getUnitName()); - target.setSingleUseValue(BigDecimal.ZERO); - target.setSingleUseUnit(""); // TODO: 2025/9/2 - target.setApplicationScope(""); // TODO: 2025/9/2 - target.setDosage(m.getDose()); - target.setUsage(m.getUsage()); - - target.setBaseId(p.getBaseId()); - target.setBaseName(p.getBaseName()); - target.setPlotId(p.getPlotId()); - target.setPlotName(p.getPlotName()); - target.setTenantId(p.getTenantId()); - inputDOList.add(target); - } - saveObj.setInvestGoodsList(inputDOList); return saveObj; } 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 4eeff681..1e79a8b3 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 @@ -31,6 +31,7 @@ import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService; import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService; import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil; +import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.databind.JsonNode; @@ -93,6 +94,7 @@ public class BaseInfoServiceImpl implements BaseInfoService { // 插入 BaseInfoDO baseInfo = BeanUtils.toBean(createReqVO, BaseInfoDO.class); baseInfo.setId(IdUtil.fastUUID()); + baseInfo.setCode(createReqVO.getCode()); baseInfo.setTenantId(String.valueOf(user.getTenantId())); // 解析坐标中心坐标 ObjectMapper objectMapper = new ObjectMapper(); @@ -315,9 +317,20 @@ public class BaseInfoServiceImpl implements BaseInfoService { List lesseeList = plotInfoService.getPlotLesseeList2(aDo.getId()); String plotManager = employeeMap.getOrDefault(aDo.getEmployeeId(), "系统"); String typeName = PLOT_TYPE_NAME_MAP.get(Integer.valueOf(aDo.getType())); - BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo(Integer.valueOf(aDo.getType()),typeName,aDo.getId(), aDo.getPlotName(), aDo.getPlotColor(), - BigDecimalUtil.roundedViaMath( aDo.getPlotArea()), plotManager, aDo.getPoint(), - aDo.getPlotLeaseStatus(), LEASE_STATUS_MAP.get(aDo.getPlotLeaseStatus()),gridInfos,lesseeList); + BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo( + Integer.valueOf(aDo.getType()), + typeName, + aDo.getId(), + aDo.getPlotName(), + aDo.getPlotColor(), + BigDecimalUtil.roundedViaMath( aDo.getPlotArea()), + plotManager, + aDo.getPoint(), + aDo.getPlotLeaseStatus(), + LEASE_STATUS_MAP.get(aDo.getPlotLeaseStatus()), + aDo.getGridNumber(), + gridInfos, + lesseeList); targetList.add(target); } return targetList; 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 7f9ac5cb..2750d924 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 @@ -576,9 +576,9 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { ProductionPlanRespVO.PlanOverview source = productionPlanMapper.getPlanOverview(baseId, tenantId.toString()); return new BasePlanOverviewRespVO().setTotalArea(BigDecimalUtil.roundedViaMath(totalArea)) .setPlanCount(source.getPlanCount()) - .setPlanCompletedCount(source.getPlanCompletedCount()) - .setPlanInProgressCount(source.getPlanInProgressCount()) - .setPlanOverdueCount(source.getPlanOverdueCount()); + .setPlanCompletedCount(ObjectUtils.defaultIfNull(source.getPlanCompletedCount(),0)) + .setPlanInProgressCount(ObjectUtils.defaultIfNull(source.getPlanInProgressCount(),0)) + .setPlanOverdueCount(ObjectUtils.defaultIfNull(source.getPlanOverdueCount(),0)); } @Override @@ -718,33 +718,39 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { @Override public List getFarmReport(ChartCommonReqVO req) { - Map itemsNameMap = this.getDictTypeMap(ITEMS_UNIT); - Map specificationNameMap = this.getDictTypeMap(SPECIFICATION_PRICE); - + req.setTenantId(getLoginUser().getTenantId().toString()); List list = inputUsageRecordsMapper.getFarmReport(req); - for (FarmingReport1RespVO f : list) { - if (f.getCurrentSpecType() == 1) { - f.setUnitName(itemsNameMap.get(f.getUnit().toString())); - } else { - f.setUnitName(specificationNameMap.get(f.getUnit().toString())); - } - } return list; } @Override public List getFarmTypeChart(ChartCommonReqVO req) { + req.setTenantId(getLoginUser().getTenantId().toString()); return farmingRecordMapper.getFarmTypeChart(req); } @Override public List getPlantingAreaChart(ChartCommonReqVO req) { + req.setTenantId(getLoginUser().getTenantId().toString()); return productionPlanMapper.getPlantingAreaChart(req); } @Override public List getInputUsageChart(ChartCommonReqVO req) { - return inputUsageRecordsMapper.getInputUsageChart(req); + req.setTenantId(getLoginUser().getTenantId().toString()); + + Map itemsNameMap = this.getDictTypeMap(ITEMS_UNIT); + Map specificationNameMap = this.getDictTypeMap(SPECIFICATION_PRICE); + + List list = inputUsageRecordsMapper.getInputUsageChart(req); + for (InputUsageChartRespVO i : list) { + if (i.getCurrentSpecType() == 1) { + i.setUnitName(itemsNameMap.get(i.getUnit().toString())); + } else { + i.setUnitName(specificationNameMap.get(i.getUnit().toString())); + } + } + return list; } private ProductionPlanReportRespVO.Models convertToModel(ProductionPlanDO plan,Map speciesName) { 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 9bea30cc..b92563d7 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 @@ -26,6 +26,7 @@ public interface FarmingRecordService { * @return 编号 */ String createFarmingRecord(@Valid FarmingRecordSaveReqVO createReqVO); + void createFarmingRecordForJob(@Valid FarmingRecordSaveReqVO createReqVO); /** * 创建种植中心-农事基地-农事记录(新格式) 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 d693dd83..16c32289 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 @@ -14,17 +14,23 @@ import cn.iocoder.yudao.module.farm.dal.dataobject.farmingnamemaintenance.Farmin 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.farmingtypemaintenance.FarmingTypeMaintenanceDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputsDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import cn.iocoder.yudao.module.farm.dal.mysql.farmingnamemaintenance.FarmingNameMaintenanceMapper; 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 cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper; import cn.iocoder.yudao.module.farm.enums.CommonConstants; +import cn.iocoder.yudao.module.farm.service.inputlibrary.InputUsageRecordsService; +import cn.iocoder.yudao.module.farm.service.inputlibrary.InputsService; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.time.LocalDate; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -51,6 +57,12 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { private FarmingTypeMaintenanceMapper farmingTypeMaintenanceMapper; @Resource private FarmingNameMaintenanceMapper farmingNameMaintenanceMapper; + @Resource + private ProductionPlanMapper productionPlanMapper; + @Resource + private InputUsageRecordsService inputUsageRecordsService; + @Resource + private InputsService inputsService; @Override public String createFarmingRecord(FarmingRecordSaveReqVO createReqVO) { @@ -76,6 +88,18 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { return farmingRecord.getId(); } + @Override + public void createFarmingRecordForJob(FarmingRecordSaveReqVO createReqVO) { + // 1. 新增农事记录 + String frId = this.createFarmingRecord(createReqVO); + // 2. 新增投入品使用记录 + String inputsIds = createReqVO.getInputsIds(); + String[] inputIds = inputsIds.split(","); + + List iList = inputsService.getInputsByIds(Arrays.stream(inputIds).toList()); + inputUsageRecordsService.createInputUsageRecords(frId,iList); + } + @Override public void updateFarmingRecord(FarmingRecordSaveReqVO updateReqVO) { // 校验存在 @@ -165,6 +189,8 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { LoginUser user = getLoginUser(); String taskScope = createReqVO.getTaskScope(); + ProductionPlanDO pp = productionPlanMapper.selectOne(ProductionPlanDO::getPlanNumber, taskScope); + // 转换时间格式:取第一个时间作为任务时间 String taskTime = null; if (createReqVO.getTaskTime() != null && !createReqVO.getTaskTime().isEmpty()) { @@ -203,35 +229,12 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { saveReqVO.setActualLaborCost(createReqVO.getActualLaborCost()); saveReqVO.setFeedbackNotes(createReqVO.getFeedbackNotes()); saveReqVO.setFeedbackImageUrlList(createReqVO.getFeedbackImageUrlList()); - saveReqVO.setBaseId(createReqVO.getBaseId()); - saveReqVO.setBaseName(createReqVO.getBaseName()); - saveReqVO.setPlotName(createReqVO.getPlotName()); + saveReqVO.setBaseId(pp.getBaseId()); + saveReqVO.setBaseName(pp.getBaseName()); + saveReqVO.setPlotId(pp.getPlotId()); + saveReqVO.setPlotName(pp.getPlotName()); saveReqVO.setTenantId(createReqVO.getTenantId()); - // 转换投入品列表 -// if (createReqVO.getInvestGoodsList() != null && !createReqVO.getInvestGoodsList().isEmpty()) { -// List inputList = createReqVO.getInvestGoodsList().stream() -// .map(item -> { -// FarmingRecordInputDO input = new FarmingRecordInputDO(); -// input.setId(IdUtil.fastUUID()); -// input.setDosage(item.getDose()); -// input.setUsage(item.getUsage()); -// input.setInputParentCategory(item.getAssetType()); // 投入品-父类 -// input.setInputChildCategory(item.getInputsId()); // 投入品-子类 -// input.setSingleUseOption(item.getUnit()); // 单位用量 -// input.setSingleUseUnit(item.getPackageUnit()); // 单件单位 -// input.setDilutionRatio(item.getDiluted()); // 稀释倍液 -// -// input.setBaseId(createReqVO.getBaseId()); -// input.setBaseName(createReqVO.getBaseName()); -// input.setPlotId(createReqVO.getPlotId()); -// input.setPlotName(createReqVO.getPlotName()); -// input.setTenantId(createReqVO.getTenantId()); -// return input; -// }).collect(Collectors.toList()); -// saveReqVO.setInvestGoodsList(inputList); -// } - // 调用原有的创建方法 return createFarmingRecord(saveReqVO); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsService.java index 21178c49..3db0bd94 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsService.java @@ -6,6 +6,7 @@ import java.util.*; 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.InputUsageRecordsSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputUsageRecordsDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputsDO; import jakarta.validation.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -23,6 +24,7 @@ public interface InputUsageRecordsService { * @return 编号 */ String createInputUsageRecords(@Valid InputUsageRecordsSaveReqVO createReqVO); + void createInputUsageRecords(String frId,@Valid List createReqVO); /** * 更新投入品使用记录 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsServiceImpl.java index e24e089d..3359e326 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsServiceImpl.java @@ -4,10 +4,13 @@ import cn.hutool.core.util.IdUtil; 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.InputUsageRecordsSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputUsageRecordsDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputsDO; import cn.iocoder.yudao.module.farm.dal.mysql.inputlibrary.InputUsageRecordsMapper; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; + +import java.math.BigDecimal; import java.util.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -38,6 +41,33 @@ public class InputUsageRecordsServiceImpl implements InputUsageRecordsService { return inputUsageRecords.getId(); } + @Override + public void createInputUsageRecords(String frId, List createReqVO) { + + for (InputsDO i : createReqVO) { + + String unit = i.getCurrentSpecType() == 1 ? i.getInputUnit() : i.getSpecUnit(); + Integer inputUsage = i.getInputUsage(); + BigDecimal inputPrice = i.getInputPrice(); + BigDecimal totalPrice = inputPrice.multiply(BigDecimal.valueOf(inputUsage)); + + InputUsageRecordsSaveReqVO req = new InputUsageRecordsSaveReqVO(); + String id = IdUtil.fastUUID(); + req.setId(id); + req.setInputId(i.getId()); + req.setFarmRecordId(frId); + req.setCurrentSpecType(i.getCurrentSpecType()); + req.setUsageAmount(inputUsage); + req.setUnitPrice(inputPrice); + req.setSpec(Integer.valueOf(i.getInputSpec())); + req.setUnit(Integer.valueOf(unit)); + req.setTotalPrice(totalPrice); + this.createInputUsageRecords(req); + } + + } + + @Override public void updateInputUsageRecords(InputUsageRecordsSaveReqVO updateReqVO) { // 校验存在 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleServiceImpl.java index 04c81838..0d2041b6 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleServiceImpl.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.farm.service.modelcycle; import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelcycle.vo.ModelCyclePageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelcycle.vo.ModelCycleSaveReqVO; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -53,9 +54,12 @@ public class ModelCycleServiceImpl implements ModelCycleService { // 校验存在 validateModelCycleExists(updateReqVO.getId()); // 更新 - for (String image : updateReqVO.getStageImageList()) { - updateReqVO.setStageImage(image); + if (!ObjectUtils.isEmpty(updateReqVO.getStageImageList())) { + for (String image : updateReqVO.getStageImageList()) { + updateReqVO.setStageImage(image); + } } + ModelCycleDO updateObj = BeanUtils.toBean(updateReqVO, ModelCycleDO.class); modelCycleMapper.updateById(updateObj); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java index f16e20e6..94382a9a 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java @@ -325,7 +325,7 @@ public class ModelManagementServiceImpl implements ModelManagementService { List list = modelCycleMapper.selectListByModelId(id); list.forEach(cycle -> { ModelCycleRespVO vo = BeanUtils.toBean(cycle, ModelCycleRespVO.class); - vo.setStageImageList(cycle.getImageList()); + vo.setStageImageList(Arrays.asList(vo.getStageImage())); //环境指标 List environmentIndexDO = modelEnvironmentIndexMapper.selectByCycleId(cycle.getId()); vo.setEnvironmentIndexDOS(environmentIndexDO); @@ -340,14 +340,6 @@ public class ModelManagementServiceImpl implements ModelManagementService { List respVOS = new ArrayList<>(); farmingOperationDO.forEach(e -> { ModelFarmingOperationRespVO respVO = BeanUtils.toBean(e, ModelFarmingOperationRespVO.class); -// List farmingOperationInputDOS = modelFarmingOperationInputMapper.selectByFarmingId(e.getId()); -// for (ModelFarmingOperationInputDO aDo : farmingOperationInputDOS) { -// InputLibraryDO inputLibrary = inputLibraryService.getInputLibrary(aDo.getInputsId()); -// aDo.setInputsName(inputLibrary.getAssetName()); -// aDo.setUnitName(DictFrameworkUtils.parseDictDataLabel("asset_unit", aDo.getUnit())); -// aDo.setPackageUnitName(DictFrameworkUtils.parseDictDataLabel("asset_price", aDo.getPackageUnit())); -// } -// respVO.setFarmingOperationInputDOS(farmingOperationInputDOS); List inputs = inputsManager.getInputsPageForReferenceType(respVO.getId()); respVO.setFarmingOperationInputVOS(inputs); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java index f2b2c7a5..fc751403 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java @@ -62,7 +62,7 @@ public interface PlotInfoService { */ List getPlotLesseeInfo(); - void setPlotLesseeInfo(List req); + PlotLesseeImportRespVO setPlotLesseeInfo(List req); /** * 通过基地ID获取地块集合 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java index 9a1a5f87..94f7cdf3 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java @@ -18,15 +18,16 @@ import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagem import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.primitives.ImmutableIntArray; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -67,7 +68,7 @@ public class PlotInfoServiceImpl implements PlotInfoService { // 插入 PlotInfoDO plotInfo = BeanUtils.toBean(createReqVO, PlotInfoDO.class); plotInfo.setId(IdUtil.fastUUID()); - plotInfo.setPlotId(StrHelperUtil.generate()); + plotInfo.setPlotId(createReqVO.getCode()); plotInfo.setTenantId(String.valueOf(user.getTenantId())); plotInfoMapper.insert(plotInfo); @@ -189,59 +190,223 @@ public class PlotInfoServiceImpl implements PlotInfoService { plotLesseeDetailsRespVO.setTypeName(PLOT_TYPE_NAME_MAP.get(plotLesseeDetailsRespVO.getType())); plotLesseeDetailsRespVO.setPlotLessee(subLesseeInfo); plotLesseeDetailsRespVO.setPlotLeaseStatusName(LEASE_STATUS_MAP.get(plotLesseeDetailsRespVO.getPlotLeaseStatus())); + plotLesseeDetailsRespVO.setCode(plotInfoDO.getPlotId()); + plotLesseeDetailsRespVO.setUpdateStateForCode(NO_CODE); return plotLesseeDetailsRespVO; } @Override public List getPlotLesseeInfo() { - Map baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1)); - List plotInfoDOS = plotInfoMapper.selectList(PlotInfoDO::getPlotLeaseStatus, CommonConstants.NO_CODE); - return plotInfoDOS.stream().map(p -> new PlotLesseeForExportExcelRespVO(baseNameMap.get(p.getBaseId()), p.getPlotName())).toList(); + List bList = baseInfoMapper.selectList(); + Map baseNameMap = bList.stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1)); + Map baseCodeMap = bList.stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getCode, (v1, v2) -> v1)); + + List pList = plotInfoMapper.selectList(); + Map plotCodeMap = pList.stream().collect(Collectors.toMap(PlotInfoDO::getId, PlotInfoDO::getPlotId, (v1, v2) -> v1)); + + LambdaQueryWrapperX x = new LambdaQueryWrapperX<>(); + x.eq(PlotLesseeDO::getLeaseStatus, YES_CODE); + List lList = plotLesseeMapper.selectList(x); + Map lesObjMap = lList.stream().collect(Collectors.toMap(PlotLesseeDO::getPlotId, e -> e, (v1, v2) -> v1)); + + List plotInfoDOS = plotInfoMapper.selectList(); + return plotInfoDOS.stream().map(p -> { + PlotLesseeForExportExcelRespVO target = new PlotLesseeForExportExcelRespVO( + baseCodeMap.get(p.getBaseId()), baseNameMap.get(p.getBaseId()), + plotCodeMap.get(p.getId()), p.getPlotName(), NO_NAME); + + if (p.getPlotLeaseStatus() == 1 && lesObjMap.containsKey(p.getId())) { + // 已租状态,计算租赁剩余天数 + PlotLesseeDO l = lesObjMap.get(p.getId()); + target.setLeaseName(l.getLeaseName()); + target.setLeaseIdCard(l.getLeaseIdCard()); + target.setLeasePhone(l.getLeasePhone()); + target.setLeaseStartDate(l.getLeaseStartDate()); + target.setLeaseEndDate(l.getLeaseEndDate()); + target.setExpirationDays(getDaysUntilLeaseEnd(l.getLeaseEndDate())); + } + return target; + }).toList(); } + public long getDaysUntilLeaseEnd(LocalDate leaseEndDate) { + LocalDate today = LocalDate.now(); + return ChronoUnit.DAYS.between(today, leaseEndDate); + } + @Override - public void setPlotLesseeInfo(List req) { + public PlotLesseeImportRespVO setPlotLesseeInfo(List req) { Map baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1)); Map plotNameMap = plotInfoMapper.selectList().stream().collect(Collectors.toMap(PlotInfoDO::getPlotName, PlotInfoDO::getId, (v1, v2) -> v1)); - for (PlotLesseeForImportExcelRespVO e : req) { - if (ObjectUtils.isEmpty(e.getLeaseName()) || ObjectUtils.isEmpty(e.getLeaseIdCard()) - || ObjectUtils.isEmpty(e.getLeasePhone() ) || ObjectUtils.isEmpty(e.getLeaseStartDate()) || ObjectUtils.isEmpty(e.getLeaseEndDate())) { + PlotLesseeImportRespVO res = new PlotLesseeImportRespVO(); + res.setTotal(req.size()); + + List targetList = req.stream().filter(vo -> YES_NAME.equals(vo.getIsModified())).collect(Collectors.toList()); + + int successCount = 0; + int failuresCount = 0; + int unmodifiedCount = req.size() - targetList.size(); + List row = new ArrayList<>(); + for (PlotLesseeForImportExcelRespVO pl : targetList) { + + PlotInfoDO p = plotInfoMapper.selectOne(PlotInfoDO::getPlotName, pl.getPlotName()); + if (ObjectUtils.isEmpty(p)) { + failuresCount++; + row.add(new PlotLesseeImportRespVO.Row(pl.getPlotCode(), pl.getPlotName())); continue; } - PlotInfoDO plotInfoDO = plotInfoMapper.selectOne(PlotInfoDO::getPlotName, e.getPlotName()); + PlotLesseeDO sourcePObj = plotLesseeMapper.selectOne( + PlotLesseeDO::getPlotName, pl.getPlotName(), + PlotLesseeDO::getLeaseStatus, YES_CODE); - if (ObjectUtils.isEmpty(plotInfoDO)) { + if (ObjectUtils.isEmpty(sourcePObj)) { + // 租户表不存在, 说明从未添加过户主信息, 直接录入即可 + // 1. 更新地块 + p.setPlotLeaseStatus(YES_CODE); + plotInfoMapper.updateById(p); + // 2. 录入户主表 + this.pInsert(p,pl,baseNameMap); + + successCount++; continue; } - // 更新地块信息 - plotInfoDO.setPlotLeaseStatus(YES_CODE); - plotInfoMapper.updateById(plotInfoDO); + if (compareObj(sourcePObj,pl)) { + unmodifiedCount++; + continue; + } - // 插入户主信息 - PlotLesseeDO target = new PlotLesseeDO(); - target.setLeaseName(e.getLeaseName()); - target.setLeaseIdCard(e.getLeaseIdCard()); - target.setLeasePhone(e.getLeasePhone()); - target.setLeaseStartDate(e.getLeaseStartDate()); - target.setLeaseEndDate(e.getLeaseEndDate()); + if (this.isEmpty(pl)) { + p.setPlotLeaseStatus(NO_CODE); + plotInfoMapper.updateById(p); - target.setId(IdUtil.fastUUID()); - target.setTenantId(String.valueOf(getLoginUser().getTenantId())); - target.setLeaseStatus(CommonConstants.YES_CODE); + sourcePObj.setLeaseStatus(NO_CODE); + plotLesseeMapper.updateById(sourcePObj); + } + + // 1. 更新原地块户主信息 + sourcePObj.setLeaseStatus(NO_CODE); + plotLesseeMapper.updateById(sourcePObj); + + // 2. 录入新地块户主信息 + this.pInsert(p,pl,baseNameMap); + successCount++; - target.setBaseId(plotInfoDO.getBaseId()); - target.setBaseName(baseNameMap.get(plotInfoDO.getBaseId())); - target.setPlotId(plotInfoDO.getId()); - target.setPlotName(plotInfoDO.getPlotName()); - plotLesseeMapper.insert(target); } + + res.setSuccessCount(successCount); + res.setFailuresCount(failuresCount); + res.setUnmodifiedCount(unmodifiedCount); + res.setFailuresList(row); + return res; + } + +// @Override +// public PlotLesseeImportRespVO setPlotLesseeInfo(List req) { +// +// Map baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1)); +// Map plotNameMap = plotInfoMapper.selectList().stream().collect(Collectors.toMap(PlotInfoDO::getPlotName, PlotInfoDO::getId, (v1, v2) -> v1)); +// +// PlotLesseeImportRespVO res = new PlotLesseeImportRespVO(); +// res.setTotal(req.size()); +// +// int successCount = 0; +// int failuresCount = 0; +// int unmodifiedCount = 0; +// List row = new ArrayList<>(); +// for (PlotLesseeForImportExcelRespVO pl : req) { +// +// PlotInfoDO p = plotInfoMapper.selectOne(PlotInfoDO::getPlotName, pl.getPlotName()); +// if (ObjectUtils.isEmpty(p)) { +// failuresCount++; +// row.add(new PlotLesseeImportRespVO.Row(pl.getPlotCode(), pl.getPlotName())); +// continue; +// } +// +// PlotLesseeDO sourcePObj = plotLesseeMapper.selectOne( +// PlotLesseeDO::getPlotName, pl.getPlotName(), +// PlotLesseeDO::getLeaseStatus, YES_CODE); +// +// if (ObjectUtils.isEmpty(sourcePObj)) { +// // 租户表不存在, 说明从未添加过户主信息, 直接录入即可 +// // 1. 更新地块 +// p.setPlotLeaseStatus(YES_CODE); +// plotInfoMapper.updateById(p); +// // 2. 录入户主表 +// this.pInsert(p,pl,baseNameMap); +// +// successCount++; +// continue; +// } +// +// if (compareObj(sourcePObj,pl)) { +// unmodifiedCount++; +// continue; +// } +// +// // 1. 更新原地块户主信息 +// sourcePObj.setLeaseStatus(NO_CODE); +// plotLesseeMapper.updateById(sourcePObj); +// +// // 2. 录入新地块户主信息 +// this.pInsert(p,pl,baseNameMap); +// successCount++; +// +// } +// +// res.setSuccessCount(successCount); +// res.setFailuresCount(failuresCount); +// res.setUnmodifiedCount(unmodifiedCount); +// res.setFailuresList(row); +// return res; +// } + + private void pInsert(PlotInfoDO p,PlotLesseeForImportExcelRespVO pl,Map baseNameMap) { + PlotLesseeDO target = new PlotLesseeDO(); + target.setLeaseName(pl.getLeaseName()); + target.setLeaseIdCard(pl.getLeaseIdCard()); + target.setLeasePhone(pl.getLeasePhone()); + target.setLeaseStartDate(pl.getLeaseStartDate()); + target.setLeaseEndDate(pl.getLeaseEndDate()); + + target.setId(IdUtil.fastUUID()); + target.setTenantId(String.valueOf(getLoginUser().getTenantId())); + target.setLeaseStatus(CommonConstants.YES_CODE); + + target.setBaseId(p.getBaseId()); + target.setBaseName(baseNameMap.get(p.getBaseId())); + target.setPlotId(p.getId()); + target.setPlotName(p.getPlotName()); + plotLesseeMapper.insert(target); + } + + /** + * 对比结果一致返回: true + * 对比结果不一致返回: false + * @param s + * @param t + * @return + */ + private boolean compareObj(PlotLesseeDO s , PlotLesseeForImportExcelRespVO t) { + return Objects.equals(s.getLeaseName(), t.getLeaseName()) && + Objects.equals(s.getLeaseIdCard(), t.getLeaseIdCard()) && + Objects.equals(s.getLeasePhone(), t.getLeasePhone()) && + Objects.equals(s.getLeaseStartDate(), t.getLeaseStartDate()) && + Objects.equals(s.getLeaseEndDate(), t.getLeaseEndDate()); + } + + private boolean isEmpty(PlotLesseeForImportExcelRespVO t) { + return Objects.equals(t.getLeaseName(), null) || + Objects.equals(t.getLeaseIdCard(), null) || + Objects.equals(t.getLeasePhone(), null) || + Objects.equals(t.getLeaseStartDate(), null) || + Objects.equals(t.getLeaseEndDate(), null); } @Override diff --git a/yudao-module-farm/src/main/resources/mapper/inputlibrary/InputUsageRecordsMapper.xml b/yudao-module-farm/src/main/resources/mapper/inputlibrary/InputUsageRecordsMapper.xml index fc2deb95..17efd145 100644 --- a/yudao-module-farm/src/main/resources/mapper/inputlibrary/InputUsageRecordsMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/inputlibrary/InputUsageRecordsMapper.xml @@ -21,6 +21,8 @@ WHEN fiur.current_spec_type = 2 THEN fiur.spec ELSE fiur.unit END AS unit, + fiur.current_spec_type AS currentSpecType, + AVG(fiur.unit_price) AS unitPrice, SUM(fiur.total_price) AS totalPrice FROM farm_input_usage_records fiur @@ -40,7 +42,8 @@ WHEN fiur.current_spec_type = 1 THEN fiur.unit WHEN fiur.current_spec_type = 2 THEN fiur.spec ELSE fiur.unit - END + END, + fiur.current_spec_type ORDER BY usageAmount DESC @@ -49,43 +52,39 @@ parameterType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.chart.ChartCommonReqVO" resultType="cn.iocoder.yudao.module.farm.controller.admin.cropfarmingcenter.vo.FarmingReport1RespVO"> SELECT - fpp.base_id AS baseId, - fpp.base_name AS baseName, - fpp.plan_number AS planNumber, + ffr.id AS farmRecordId, + ffr.base_name AS baseName, + ffr.task_scope AS planNumber, ffr.task_start_date AS taskStartDate, ffr.task_end_date AS taskEndDate, DATEDIFF(ffr.task_end_date, ffr.task_start_date) AS intervalDays, - fiur.input_id AS inputId, - fiur.input_name AS inputName, - fiur.total_price AS inputTotalPrice, - fiur.usage_amount AS usageAmount, - fiur.current_spec_type AS currentSpecType, - 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 - FROM farm_input_usage_records fiur - INNER JOIN farm_farming_record ffr ON fiur.farm_record_id = ffr.id - INNER JOIN farm_production_plan fpp ON ffr.production_plan_id = fpp.id + COALESCE(SUM(fiur.total_price), 0) AS inputTotalPrice + FROM farm_farming_record ffr + LEFT JOIN farm_input_usage_records fiur ON ffr.id = fiur.farm_record_id AND fiur.deleted = 0 - fiur.deleted = 0 + ffr.deleted = 0 - AND fiur.tenant_id = #{tenantId} + AND ffr.tenant_id = #{tenantId} AND YEAR(ffr.task_start_date) = #{yearDate} - AND fiur.base_id = #{baseId} + AND ffr.base_id = #{baseId} - AND fiur.plot_id = #{plotId} + AND ffr.plot_id = #{plotId} - AND fpp.plan_status = #{state} + AND ffr.task_status = #{state} + GROUP BY + ffr.id, + ffr.base_name, + ffr.task_scope, + ffr.task_start_date, + ffr.task_end_date ORDER BY ffr.task_start_date DESC 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 28f207a1..20bb2e58 100644 --- a/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/productionplan/ProductionPlanMapper.xml @@ -110,52 +110,52 @@ GROUP BY plant_species_code +