From 95aab97146a3c7f8f9b4a12d1f86d005937b61da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Tue, 21 Oct 2025 14:30:50 +0800 Subject: [PATCH] =?UTF-8?q?refactor=20(farm):=20=E6=8A=95=E5=85=A5?= =?UTF-8?q?=E5=93=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 涉及到的模块: - 基础数据管理 - 投入品 (模版类型) - 模型管理 - 农事记录 - 投入品(引用类型) - 生产中心 - 农事记录 - 投入品使用记录 --- .../vo/FarmingRecordCreateReqVO.java | 1 + .../inputlibrary/InputLibraryController.java | 26 ++++++- .../InputsDropDownListForReferenceRespVO.java | 45 ++++++++++++ .../inputlibrary/vo/inputs/InputsRespVO.java | 3 +- .../vo/inputs/InputsSaveReqVO.java | 5 ++ .../InputUsageRecordsPageReqVO.java | 30 ++++---- .../usagerecords/InputUsageRecordsRespVO.java | 16 ++++- .../InputUsageRecordsSaveReqVO.java | 15 ++-- .../ModelFarmingOperationController.java | 8 ++- .../vo/ModelFarmingOperationSaveReqVO.java | 4 ++ .../inputlibrary/InputUsageRecordsDO.java | 31 +++++---- .../dal/dataobject/inputlibrary/InputsDO.java | 2 + .../inputlibrary/InputUsageRecordsMapper.java | 12 ++-- .../farm/manager/inputs/InputsManager.java | 68 ++++++++++++++++--- .../FarmingRecordServiceImpl.java | 48 +++++++------ .../InputUsageRecordsServiceImpl.java | 3 + .../ModelFarmingOperationService.java | 2 + .../ModelFarmingOperationServiceImpl.java | 37 +++++++--- .../ModelManagementServiceImpl.java | 22 +++--- 19 files changed, 285 insertions(+), 93 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsDropDownListForReferenceRespVO.java diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordCreateReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordCreateReqVO.java index b687ce74..5479f3b6 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordCreateReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/cropfarmingcenter/vo/FarmingRecordCreateReqVO.java @@ -27,6 +27,7 @@ public class FarmingRecordCreateReqVO { @Schema(description = "生产计划ID", example = "24782") private String productionPlanId; + private String modelFarmingOperationId; @Schema(description = "执行人ID列表") private List executor; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/InputLibraryController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/InputLibraryController.java index 65f6f627..2457d9f0 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/InputLibraryController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/InputLibraryController.java @@ -4,6 +4,9 @@ import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatam import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.InputLibraryRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.InputLibrarySaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs.*; +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.InputUsageRecordsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.usagerecords.InputUsageRecordsSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.inputlibrary.InputsDO; import cn.iocoder.yudao.module.farm.manager.inputs.InputsManager; import cn.iocoder.yudao.module.farm.service.inputlibrary.InputsService; @@ -114,9 +117,30 @@ public class InputLibraryController { @GetMapping("/drop-down-box") @Operation(summary = "投入品下拉框") - public CommonResult> syncInputLibrary() { + public CommonResult> getDropDownList() { List res = inputsManager.getInputsDropDownList(); return success(res); } +// @GetMapping("/drop-down-box/reference-type") +// @Operation(summary = "投入品下拉框(引用类型)") +// @Parameter(name = "frId", description = "农事记录ID", required = true, example = "1024") +// public CommonResult> getDropDownListForReference(String frId) { +// List res = inputsManager.getInputsDropDownListForReference(frId); +// return success(res); +// } + + @GetMapping("/usage-records/page") + @Operation(summary = "投入品使用日志-分页)") + public CommonResult> getInputUsageRecordsPage(InputUsageRecordsPageReqVO reqVO) { + PageResult pageResult = inputsManager.getInputUsageRecordsPage(reqVO); + return success(pageResult); + } + + @GetMapping("/usage-records/create") + @Operation(summary = "投入品使用日志-新增)") + public CommonResult createInputUsageRecords(InputUsageRecordsSaveReqVO req) { + inputsManager.createInputUsageRecords(req); + return success("success"); + } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsDropDownListForReferenceRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsDropDownListForReferenceRespVO.java new file mode 100644 index 00000000..a45ecce2 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsDropDownListForReferenceRespVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs; + +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/20 21:58 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class InputsDropDownListForReferenceRespVO { + + private String id; + @Schema(description = "投入品名称") + private String inputName; + + @Schema(description = "投入品分类 (1: 模版分类; 2: 引用分类)") + private Integer inputCategory; + private String inputCategoryName; + + @Schema(description = "投入品用量") + private Integer inputUsage; + @Schema(description = " 当前规格类型 (1: 按单品; 2: 按规格)") + private Integer currentSpecType; + private String currentSpecTypeName; + + @Schema(description = "投入品单价") + private BigDecimal inputPrice; + @Schema(description = "投入品规格") + private String inputSpec; + @Schema(description = "投入品单位") + private String inputUnit; + private String inputUnitName; + @Schema(description = "投入品规格单位") + private String specUnit; + private String specUnitName; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsRespVO.java index 8f168f98..adb3bb2e 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsRespVO.java @@ -72,7 +72,7 @@ public class InputsRespVO { @Schema(description = "创建时间") @ExcelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") private LocalDateTime createTime; @Schema(description = "可用库存数量") @@ -94,4 +94,5 @@ public class InputsRespVO { private String activePrinciple; // 稀释倍液 非必填 private Integer diluted; + private String sourceId; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsSaveReqVO.java index 414afc01..caa6e2df 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/inputs/InputsSaveReqVO.java @@ -33,6 +33,9 @@ public class InputsSaveReqVO { @Schema(description = "投入品规格单位") private String specUnit; + @Schema(description = "当前规格类型 (1: 按单品; 2: 按规格)") + private Integer currentSpecType; + @Schema(description = "投入品用量") private Integer inputUsage; @@ -55,4 +58,6 @@ public class InputsSaveReqVO { private String activePrinciple; // 稀释倍液 非必填 private Integer diluted; + // 回显ID + private String sourceId; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsPageReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsPageReqVO.java index eeb3e4eb..2b00ea06 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsPageReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsPageReqVO.java @@ -20,24 +20,24 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @Data public class InputUsageRecordsPageReqVO extends PageParam { - @Schema(description = "投入品ID", example = "30559") - private String inputId; +// @Schema(description = "投入品ID", example = "30559") +// private String inputId; - @Schema(description = "农事记录ID", example = "26500") + @Schema(description = "种植中心-农事记录ID") private String farmRecordId; - @Schema(description = "用量") - private BigDecimal usageAmount; - - @Schema(description = "单价", example = "280") - private BigDecimal unitPrice; - - @Schema(description = "总价", example = "29353") - private BigDecimal totalPrice; - - @Schema(description = "备注", example = "随便") - private String remark; - +// @Schema(description = "用量") +// private BigDecimal usageAmount; +// +// @Schema(description = "单价", example = "280") +// private BigDecimal unitPrice; +// +// @Schema(description = "总价", example = "29353") +// private BigDecimal totalPrice; +// +// @Schema(description = "备注", example = "随便") +// private String remark; +// @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsRespVO.java index ed9e8e05..45a08514 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsRespVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.usagerecords; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -25,6 +26,7 @@ public class InputUsageRecordsRespVO { @Schema(description = "投入品ID", example = "30559") @ExcelProperty("投入品ID") private String inputId; + private String inputName; @Schema(description = "农事记录ID", example = "26500") @ExcelProperty("农事记录ID") @@ -32,7 +34,18 @@ public class InputUsageRecordsRespVO { @Schema(description = "用量") @ExcelProperty("用量") - private BigDecimal usageAmount; + private Integer usageAmount; + + @Schema(description = "当前规格类型") + private Integer currentSpecType; + private String currentSpecTypeName; + + @Schema(description = "规格") + private Integer spec; + private String specName; + @Schema(description = "单位") + private Integer unit; + private String unitName; @Schema(description = "单价", example = "280") @ExcelProperty("单价") @@ -48,6 +61,7 @@ public class InputUsageRecordsRespVO { @Schema(description = "创建时间") @ExcelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") private LocalDateTime createTime; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsSaveReqVO.java index cdb2bafc..e243b996 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/basicdatamanagement/inputlibrary/vo/usagerecords/InputUsageRecordsSaveReqVO.java @@ -22,14 +22,17 @@ public class InputUsageRecordsSaveReqVO { @Schema(description = "农事记录ID", example = "26500") private String farmRecordId; - + @Schema(description = "当前使用规格") + private Integer currentSpecType; // 当前使用规格 @Schema(description = "用量") - private BigDecimal usageAmount; - - @Schema(description = "单价", example = "280") + private Integer usageAmount; + @Schema(description = "单价") private BigDecimal unitPrice; - - @Schema(description = "总价", example = "29353") + @Schema(description = "规格") + private Integer spec; + @Schema(description = "单位") + private Integer unit; + @Schema(description = "总价") private BigDecimal totalPrice; @Schema(description = "备注", example = "随便") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/ModelFarmingOperationController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/ModelFarmingOperationController.java index 2cf95e5e..24cac5ff 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/ModelFarmingOperationController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/ModelFarmingOperationController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelfarmingoperation; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs.InputsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs.InputsSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelfarmingoperation.vo.ModelFarmingOperationPageReqVO; 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.ModelFarmingOperationSaveReqVO; @@ -46,9 +47,10 @@ public class ModelFarmingOperationController { @PostMapping("/create") @Operation(summary = "创建模型管理-农事操作") - public CommonResult createModelFarmingOperation(@Valid @RequestBody ModelFarmingOperationSaveReqVO createReqVO) { - return success(modelFarmingOperationService.createModelFarmingOperation(createReqVO)); + String id = modelFarmingOperationService.createModelFarmingOperation(createReqVO); + inputsManager.createInputsForReferenceType(id,createReqVO.getInputsSaveReqVOList()); + return success(id); } @PutMapping("/update") @@ -56,6 +58,8 @@ public class ModelFarmingOperationController { public CommonResult updateModelFarmingOperation(@Valid @RequestBody ModelFarmingOperationSaveReqVO updateReqVO) { modelFarmingOperationService.updateModelFarmingOperation(updateReqVO); + String id = updateReqVO.getId(); + inputsManager.createInputsForReferenceType(id,updateReqVO.getInputsSaveReqVOList()); return success(true); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/vo/ModelFarmingOperationSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/vo/ModelFarmingOperationSaveReqVO.java index 5b98848f..e0e0b86a 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/vo/ModelFarmingOperationSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/modelmanagement/modelfarmingoperation/vo/ModelFarmingOperationSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.modelmanagement.modelfarmingoperation.vo; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs.InputsSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelfarmingoperationinput.ModelFarmingOperationInputDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -52,4 +53,7 @@ public class ModelFarmingOperationSaveReqVO { private String tenantId; private String farmingId; private List investGoodsList; + + @Schema(description = "投入品集合") + private List inputsSaveReqVOList; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputUsageRecordsDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputUsageRecordsDO.java index 6086a1bd..2b1c7dec 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputUsageRecordsDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputUsageRecordsDO.java @@ -32,26 +32,31 @@ public class InputUsageRecordsDO extends BaseDO { * 投入品ID */ private String inputId; + private String inputName; /** * 农事记录ID */ private String farmRecordId; - /** - * 用量 - */ - private BigDecimal usageAmount; - /** - * 单价 - */ - private BigDecimal unitPrice; - /** - * 总价 - */ - private BigDecimal totalPrice; + + private Integer currentSpecType; // 当前使用规格 + @TableField(exist = false) + private String currentSpecTypeName; + + private Integer usageAmount; // 用量 + private BigDecimal unitPrice; // 单价 + + private String spec; // 规格 + @TableField(exist = false) + private String specName; + + private String unit; // 单位 + @TableField(exist = false) + private String unitName; + + private BigDecimal totalPrice; // 总价 /** * 备注 */ private String remark; - } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputsDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputsDO.java index 313f601e..15b38bab 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputsDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/inputlibrary/InputsDO.java @@ -119,4 +119,6 @@ public class InputsDO extends BaseDO { private String activePrinciple; // 稀释倍液 非必填 private Integer diluted; + // 原始的主键ID, 用于回显 (只有引用类型才会存在该字段值) + private String sourceId; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/inputlibrary/InputUsageRecordsMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/inputlibrary/InputUsageRecordsMapper.java index f32f60e1..ddd7b110 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/inputlibrary/InputUsageRecordsMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/inputlibrary/InputUsageRecordsMapper.java @@ -18,14 +18,14 @@ public interface InputUsageRecordsMapper extends BaseMapperX selectPage(InputUsageRecordsPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(InputUsageRecordsDO::getInputId, reqVO.getInputId()) +// .eqIfPresent(InputUsageRecordsDO::getInputId, reqVO.getInputId()) .eqIfPresent(InputUsageRecordsDO::getFarmRecordId, reqVO.getFarmRecordId()) - .eqIfPresent(InputUsageRecordsDO::getUsageAmount, reqVO.getUsageAmount()) - .eqIfPresent(InputUsageRecordsDO::getUnitPrice, reqVO.getUnitPrice()) - .eqIfPresent(InputUsageRecordsDO::getTotalPrice, reqVO.getTotalPrice()) - .eqIfPresent(InputUsageRecordsDO::getRemark, reqVO.getRemark()) +// .eqIfPresent(InputUsageRecordsDO::getUsageAmount, reqVO.getUsageAmount()) +// .eqIfPresent(InputUsageRecordsDO::getUnitPrice, reqVO.getUnitPrice()) +// .eqIfPresent(InputUsageRecordsDO::getTotalPrice, reqVO.getTotalPrice()) +// .eqIfPresent(InputUsageRecordsDO::getRemark, reqVO.getRemark()) .betweenIfPresent(InputUsageRecordsDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(InputUsageRecordsDO::getId)); + .orderByDesc(InputUsageRecordsDO::getCreateTime)); } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/inputs/InputsManager.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/inputs/InputsManager.java index a5fd2abe..78edd591 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/inputs/InputsManager.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/inputs/InputsManager.java @@ -3,6 +3,10 @@ package cn.iocoder.yudao.module.farm.manager.inputs; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs.*; +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.InputUsageRecordsRespVO; +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.enums.CommonConstants; import cn.iocoder.yudao.module.farm.manager.inputs.dto.wms.InputCategoryDTO; @@ -17,10 +21,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.module.farm.enums.CommonConstants.*; @@ -166,27 +167,45 @@ public class InputsManager { * ================================================= */ - public void createInputsForReferenceType(List req) { + public void createInputsForReferenceType(String fId,List req) { + StringBuilder ids = new StringBuilder(); for (InputsSaveReqVO i : req) { if (!ObjectUtils.notEqual(i.getInputCategory(), INPUT_CATEGORY_1)) { // 模版类型 直接新增 + String sourceId = i.getId(); + i.setSourceId(sourceId); i.setInputCategory(INPUT_TYPE_2); String id = inputsService.createInputs(i); + ids.append(id).append(","); } else { - continue; + // 先删除 + inputsService.deleteInputs(i.getId()); + // 后新增 + i.setInputCategory(INPUT_TYPE_2); + i.setId(null); + String id = inputsService.createInputs(i); + ids.append(id).append(","); } } + if (ids.length() > 0) { + modelFarmingOperationService.updateModelFarmingOperationForInputIds(fId,ids); + } + } public List getInputsPageForReferenceType(String mfId) { + Map inputTypeNameMap = this.getDictTypeMap(ASSET_TYPE); Map itemsNameMap = this.getDictTypeMap(ITEMS_UNIT); Map specificationNameMap = this.getDictTypeMap(SPECIFICATION_PRICE); List ids = modelFarmingOperationService.getModelFarmingOperationInputIds(mfId); + if (ObjectUtils.isEmpty(ids)) { + return Collections.EMPTY_LIST; + } List iList = inputsService.getInputsByIds(ids); iList.stream().forEach(e -> { @@ -195,10 +214,28 @@ public class InputsManager { List res = BeanUtils.toBean(iList, InputsRespVO.class); return res; + } + public List getInputsDropDownListForReference(String modelFoId) { + Map inputTypeNameMap = this.getDictTypeMap(ASSET_TYPE); + Map itemsNameMap = this.getDictTypeMap(ITEMS_UNIT); + Map specificationNameMap = this.getDictTypeMap(SPECIFICATION_PRICE); + List ids = modelFarmingOperationService.getModelFarmingOperationInputIds(modelFoId); + if (ObjectUtils.isEmpty(ids)) { + return Collections.EMPTY_LIST; + } + + List iList = inputsService.getInputsByIds(ids); + iList.stream().forEach(e -> { + covertStr(e, inputTypeNameMap, itemsNameMap, specificationNameMap); + }); + + List res = BeanUtils.toBean(iList, InputsDropDownListForReferenceRespVO.class); + return res; + } @@ -221,9 +258,24 @@ public class InputsManager { * =============================== */ - public void createInputUsageRecords(InputsSaveReqVO req) { - + public void createInputUsageRecords(InputUsageRecordsSaveReqVO req) { + inputUsageRecordsService.createInputUsageRecords(req); } + public PageResult getInputUsageRecordsPage(InputUsageRecordsPageReqVO req) { + + Map itemsNameMap = this.getDictTypeMap(ITEMS_UNIT); + Map specificationNameMap = this.getDictTypeMap(SPECIFICATION_PRICE); + + PageResult inputUsageRecordsPage = inputUsageRecordsService.getInputUsageRecordsPage(req); + for (InputUsageRecordsDO e : inputUsageRecordsPage.getList()) { + e.setCurrentSpecTypeName(CURRENT_SPEC_TYPE_MAP.get(e.getCurrentSpecType())); + e.setUnitName(itemsNameMap.get(e.getUnit())); + e.setSpecName(specificationNameMap.get(e.getSpec())); + } + return BeanUtils.toBean(inputUsageRecordsPage, InputUsageRecordsRespVO.class); + + } + } 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 ebdae802..660d9a04 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 @@ -162,6 +162,7 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { @Override public String createFarmingRecordNew(FarmingRecordCreateReqVO createReqVO) { LoginUser user = getLoginUser(); + String taskScope = createReqVO.getTaskScope(); // 转换时间格式:取第一个时间作为任务时间 String taskTime = null; @@ -179,6 +180,8 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { executor = String.join(",", createReqVO.getExecutor()); } + String modelFarmingOperationId = ""; // TODO: 2025/10/21 + // 创建FarmingRecordSaveReqVO对象 FarmingRecordSaveReqVO saveReqVO = new FarmingRecordSaveReqVO(); saveReqVO.setTaskType(createReqVO.getTaskType()); @@ -187,6 +190,7 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { saveReqVO.setTaskTime(taskTime); saveReqVO.setPlotId(createReqVO.getPlotId()); saveReqVO.setProductionPlanId(createReqVO.getProductionPlanId()); + saveReqVO.setModelFarmingOperationId(modelFarmingOperationId); saveReqVO.setExecutor(executor); saveReqVO.setDayLaborer(createReqVO.getDayLaborer()); saveReqVO.setActualLaborCost(createReqVO.getActualLaborCost()); @@ -198,28 +202,28 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { 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); - } +// 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/InputUsageRecordsServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/inputlibrary/InputUsageRecordsServiceImpl.java index be5da75b..e24e089d 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.service.inputlibrary; +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; @@ -27,8 +28,10 @@ public class InputUsageRecordsServiceImpl implements InputUsageRecordsService { @Override public String createInputUsageRecords(InputUsageRecordsSaveReqVO createReqVO) { + String id = IdUtil.fastUUID(); // 插入 InputUsageRecordsDO inputUsageRecords = BeanUtils.toBean(createReqVO, InputUsageRecordsDO.class); + inputUsageRecords.setId(id); inputUsageRecordsMapper.insert(inputUsageRecords); // 返回 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationService.java index dfb74e29..5bcdb8d7 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationService.java @@ -67,4 +67,6 @@ public interface ModelFarmingOperationService { * @return */ List getModelFarmingOperationInputIds(String mfId); + + void updateModelFarmingOperationForInputIds(String fId, StringBuilder ids); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationServiceImpl.java index 7860fc20..0012f2d8 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelfarmingoperation/ModelFarmingOperationServiceImpl.java @@ -15,10 +15,13 @@ import cn.iocoder.yudao.module.farm.dal.mysql.sysDict.SysDictDO; import cn.iocoder.yudao.module.farm.enums.CommonConstants; import cn.iocoder.yudao.module.farm.service.sysDict.SysDictService; import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -51,11 +54,11 @@ public class ModelFarmingOperationServiceImpl implements ModelFarmingOperationSe modelFarmingOperation.setId(IdUtil.fastUUID()); modelFarmingOperation.setTenantId(String.valueOf(user.getTenantId())); modelFarmingOperationMapper.insert(modelFarmingOperation); - createReqVO.getInvestGoodsList().forEach(e -> { - e.setId(IdUtil.fastUUID()); - e.setFarmingId(modelFarmingOperation.getId()); - modelFarmingOperationInputMapper.insert(e); - }); +// createReqVO.getInvestGoodsList().forEach(e -> { +// e.setId(IdUtil.fastUUID()); +// e.setFarmingId(modelFarmingOperation.getId()); +// modelFarmingOperationInputMapper.insert(e); +// }); // 返回 return modelFarmingOperation.getId(); } @@ -68,11 +71,11 @@ public class ModelFarmingOperationServiceImpl implements ModelFarmingOperationSe ModelFarmingOperationDO updateObj = BeanUtils.toBean(updateReqVO, ModelFarmingOperationDO.class); modelFarmingOperationMapper.updateById(updateObj); modelFarmingOperationInputMapper.deleteByFarmingId(updateObj.getId()); - updateReqVO.getInvestGoodsList().forEach(e -> { - e.setId(IdUtil.fastUUID()); - e.setFarmingId(updateObj.getId()); - modelFarmingOperationInputMapper.insert(e); - }); +// updateReqVO.getInvestGoodsList().forEach(e -> { +// e.setId(IdUtil.fastUUID()); +// e.setFarmingId(updateObj.getId()); +// modelFarmingOperationInputMapper.insert(e); +// }); } @Override @@ -127,11 +130,25 @@ public class ModelFarmingOperationServiceImpl implements ModelFarmingOperationSe @Override public List getModelFarmingOperationInputIds(String mfId) { ModelFarmingOperationDO modelFarmingOperationDO = modelFarmingOperationMapper.selectById(mfId); + if (ObjectUtils.isEmpty(modelFarmingOperationDO)) { + return Collections.EMPTY_LIST; + } String inputsIds = modelFarmingOperationDO.getInputsIds(); + if (StringUtils.isEmpty(inputsIds)) { + return Collections.EMPTY_LIST; + } return Arrays.stream(inputsIds.split(",")) .map(String::trim) .filter(s -> !s.isEmpty()) .collect(Collectors.toList()); } + @Override + public void updateModelFarmingOperationForInputIds(String fId, StringBuilder ids) { + ModelFarmingOperationDO aDo = new ModelFarmingOperationDO(); + aDo.setId(fId); + aDo.setInputsIds(ids.toString()); + modelFarmingOperationMapper.updateById(aDo); + } + } \ No newline at end of file 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 b3a8be27..f16e20e6 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 @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.basicdatamanagement.inputlibrary.vo.inputs.InputsRespVO; 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.models.vo.ModelManagementForPlanRespVO; @@ -35,6 +36,7 @@ import cn.iocoder.yudao.module.farm.dal.mysql.modelweatherdisaster.ModelWeatherD import cn.iocoder.yudao.module.farm.dal.mysql.personnelmanagement.SystemUserMapper; import cn.iocoder.yudao.module.farm.enums.CommonConstants; import cn.iocoder.yudao.module.farm.framework.util.ModelManagementConvertUtil; +import cn.iocoder.yudao.module.farm.manager.inputs.InputsManager; import cn.iocoder.yudao.module.farm.service.inputlibrary.InputLibraryService; import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -83,6 +85,8 @@ public class ModelManagementServiceImpl implements ModelManagementService { private SystemUserMapper systemUserMapper; @Resource private FarmingRecordMapper farmingRecordMapper; + @Resource + private InputsManager inputsManager; @Override public String createModelManagement(ModelManagementSaveReqVO createReqVO) { @@ -336,14 +340,16 @@ 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 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); int usableType = this.getModelFarmingOperationForUsableType(e.getId()); respVO.setUsableType(usableType);