diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/farmingrecord/vo/FarmingRecordSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/farmingrecord/vo/FarmingRecordSaveReqVO.java index 83b67b75..3273fa8f 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/farmingrecord/vo/FarmingRecordSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/farmingrecord/vo/FarmingRecordSaveReqVO.java @@ -26,6 +26,9 @@ public class FarmingRecordSaveReqVO { @Schema(description = "任务时间") private String taskTime; + @Schema(description = "任务计划 (1: 开始; 2: 结束;)") + private Integer taskStatus; + @Schema(description = "所属地块", example = "10480") private String plotId; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/farmingrecord/FarmingRecordDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/farmingrecord/FarmingRecordDO.java index 6a6e4701..61f1647e 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/farmingrecord/FarmingRecordDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/farmingrecord/FarmingRecordDO.java @@ -46,6 +46,10 @@ public class FarmingRecordDO extends BaseDO { * 任务时间 */ private String taskTime; + /** + * 任务计划 (1: 开始; 2: 结束;) + */ + private Integer taskStatus; /** * 所属地块 */ diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java index 3281d0bc..7d04cca4 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java @@ -79,4 +79,10 @@ public class CommonConstants { public final static String GROW_FLAG_2 = "空闲"; + public final static Integer FARMING_RECORD_STATUS_1 = 1;//开始 + public final static Integer FARMING_RECORD_STATUS_2 = 2; // "开始"; + + + + } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/scheduled/FarmingRecordJob.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/scheduled/FarmingRecordJob.java index d867c8d1..623ff9c2 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/scheduled/FarmingRecordJob.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/scheduled/FarmingRecordJob.java @@ -2,11 +2,24 @@ package cn.iocoder.yudao.module.farm.scheduled; 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.farmingrecord.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.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; + +import static cn.iocoder.yudao.module.farm.enums.CommonConstants.*; + /** * @description: 农事记录 * * 表关系 @@ -27,20 +40,112 @@ public class FarmingRecordJob implements JobHandler { private final ProductionPlanService productionPlanService; private final FarmingRecordService farmingRecordService; + private final ModelManagementService modelManagementService; - public FarmingRecordJob(ProductionPlanService productionPlanService, FarmingRecordService farmingRecordService) { + public FarmingRecordJob(ProductionPlanService productionPlanService, FarmingRecordService farmingRecordService, ModelManagementService modelManagementService) { this.productionPlanService = productionPlanService; this.farmingRecordService = farmingRecordService; + this.modelManagementService = modelManagementService; } @Override public String execute(String param) throws Exception { - this.insertRecordHandler(); + List list = this.insertRecordHandler(); + for (FarmingRecordSaveReqVO e : list) { + String[] taskTime = e.getTaskTime().split(","); + if (taskTime.length != 2) { + continue; + } + LocalDate startDate = LocalDate.parse(taskTime[0]); + LocalDate endDate = LocalDate.parse(taskTime[1]); + if (startDate.isEqual(LocalDate.now())) { + // 开始日期在今天 + e.setTaskStatus(FARMING_RECORD_STATUS_1); + farmingRecordService.createFarmingRecord(e); + } + if (endDate.isEqual(LocalDate.now())) { + // 结束日期在今天 + e.setTaskStatus(FARMING_RECORD_STATUS_2); + farmingRecordService.createFarmingRecord(e); + } + } return "success"; } - private void insertRecordHandler() { + private List insertRecordHandler() { + // 获取[进行中]状态的计划 + List plans = productionPlanService.getProductionPlans(); + Map planMap = plans.stream().filter(e -> Objects.equals(e.getPlanStatus(), PLAN_STATUS_2)).collect(Collectors.toMap(ProductionPlanDO::getId, e -> e, (v1, v2) -> v1)); + List taskIdList = plans.stream().filter(e -> Objects.equals(e.getPlanStatus(), PLAN_STATUS_2)).map(ProductionPlanDO::getId).toList(); + // 获取引用模型集合 + Map> modelIdMap = modelManagementService.getRecordList(taskIdList); + + List farmingRecordSaveReqVOList = new ArrayList<>(); + for (Map.Entry> en : modelIdMap.entrySet()) { + String modelId = en.getKey(); + List operationList = en.getValue(); + + for (ModelFarmingOperationDO e : operationList) { + farmingRecordSaveReqVOList.add(this.buildFarmingRecord(planMap.get(modelId), e)); + } + } + return farmingRecordSaveReqVOList; + } + + + private FarmingRecordSaveReqVO buildFarmingRecord(ProductionPlanDO p, ModelFarmingOperationDO e) { + LocalDate productionStartDate = p.getProductionStartDate(); + // 从第startingPeriod天开始 + Integer startingPeriod = e.getStartingPeriod(); + // 用时天数 + Integer used = e.getUsed(); + // 农事记录开始日期 + LocalDate startDate = productionStartDate.plusDays(startingPeriod-1); + // 农事记录结束日期 + LocalDate endDate = startDate.plusDays(used); + String taskTime = startDate.toString() + "," + endDate.toString(); + + FarmingRecordSaveReqVO saveObj = new FarmingRecordSaveReqVO(); + saveObj.setTaskType(e.getFarmingId()); + saveObj.setTaskName(e.getFarmingName()); + saveObj.setTaskScope(p.getPlanNumber()); + saveObj.setTaskTime(taskTime); + saveObj.setProductionPlanId(p.getId()); + saveObj.setExecutor("系统"); + saveObj.setActualLaborCost(e.getUsed()); + saveObj.setActualInputId(""); // TODO: 2025/9/2 + saveObj.setFeedbackNotes(e.getDescription()); + saveObj.setFeedbackImageUrl(""); + saveObj.setFeedbackImageUrlList(e.getSketchList()); + saveObj.setBaseId(p.getBaseId()); + saveObj.setBaseName(p.getBaseName()); + saveObj.setPlotId(p.getPlotId()); + saveObj.setPlotName(p.getPlotName()); + saveObj.setTenantId(p.getTenantId()); + + 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/farmingrecord/FarmingRecordService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java index b0c9620d..ad030e32 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 @@ -70,4 +70,7 @@ public interface FarmingRecordService { */ PageResult getFarmingRecordPage(FarmingRecordPageReqVO pageReqVO); + List getFarmingRecordList(); + + void createFarmingRecordList(List farmingRecordSaveReqVOList); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java index fbba8bd3..ad17f65e 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 @@ -217,4 +217,14 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { farmingRecord.setFeedbackImageUrl(reqVO.getFeedbackImageUrl()); } } + + @Override + public List getFarmingRecordList() { + return null; + } + + @Override + public void createFarmingRecordList(List farmingRecordSaveReqVOList) { + + } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleService.java index 7346eb5f..913d8f48 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelcycle/ModelCycleService.java @@ -4,7 +4,6 @@ import cn.iocoder.yudao.module.farm.controller.admin.modelcycle.vo.ModelCyclePag import cn.iocoder.yudao.module.farm.controller.admin.modelcycle.vo.ModelCycleSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelcycle.ModelCycleDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import jakarta.validation.Valid; import java.util.List; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java index d8ae14d5..2b40abb5 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO; import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementSaveReqVO; +import cn.iocoder.yudao.module.farm.dal.dataobject.modelfarmingoperation.ModelFarmingOperationDO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO; import jakarta.validation.Valid; @@ -81,4 +82,11 @@ public interface ModelManagementService { */ String getModelCycleName(String planId); + /** + * 获取当前计划下所有农事操作 + * @param taskIdList + * @return + */ + Map> getRecordList(List taskIdList); + } \ 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 a75d5cf8..093d0336 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 @@ -42,8 +42,7 @@ import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; -import static cn.iocoder.yudao.module.farm.enums.CommonConstants.COMMON_DISASTER; -import static cn.iocoder.yudao.module.farm.enums.CommonConstants.WEATHER_DISASTER; +import static cn.iocoder.yudao.module.farm.enums.CommonConstants.*; import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.MODEL_MANAGEMENT_NOT_EXISTS; /** @@ -131,7 +130,7 @@ public class ModelManagementServiceImpl implements ModelManagementService { ModelManagementDO newModelCase = BeanUtils.toBean(modelManagementDO, ModelManagementDO.class); String newModelId = IdUtil.fastUUID(); newModelCase.setId(newModelId); - newModelCase.setType(CommonConstants.MODEL_TYPE_2); // 设置为引用案例类型 + newModelCase.setType(MODEL_TYPE_2); // 设置为引用案例类型 newModelCase.setTaskId(taskId); newModelCase.setModelName(modelManagementDO.getModelName()); newModelCase.setQuoteCount(0); @@ -454,4 +453,35 @@ public class ModelManagementServiceImpl implements ModelManagementService { public String getModelCycleName(String planId) { return null; } + + @Override + public Map> getRecordList(List taskIdList) { + + List modelList = modelManagementMapper.selectList("task_id", taskIdList); + List modelIdList = modelList.stream().filter(Objects::nonNull).filter(e -> Objects.equals(e.getType(), MODEL_TYPE_2)).map(ModelManagementDO::getId).toList(); + + List modelCycleList = modelCycleMapper.selectList("model_id", modelIdList); + // key modelId , value List + Map> modelCycleMap = modelCycleList.stream().collect(Collectors.groupingBy(ModelCycleDO::getModelId)); + + Map> resMap = new HashMap<>(); + for (Map.Entry> entry : modelCycleMap.entrySet()) { + String modelId = entry.getKey(); + List mcList = entry.getValue(); + + List tempList = new ArrayList<>(); + for (ModelCycleDO e : mcList) { + List modelOperationList = modelFarmingOperationMapper.selectList("cycle_id", e.getId()); + for (ModelFarmingOperationDO o : modelOperationList) { + List inputList = modelFarmingOperationInputMapper.selectList("farming_id", o.getId()); + o.setInvestGoodsList(inputList); + } + tempList.addAll(modelOperationList); + } + resMap.put(modelId, tempList); + } + + return resMap; + } + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java index f778f963..9d589cad 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java @@ -60,6 +60,7 @@ public interface ProductionPlanService { * @param plotId 地块ID * @return */ + List getProductionPlans(); List getProductionPlans(String plotId); List getProductionPlans(String baseId,String plotId); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java index 25e17a17..c934a7b9 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java @@ -99,6 +99,11 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { return productionPlanMapper.selectById(id); } + @Override + public List getProductionPlans() { + return productionPlanMapper.selectList(); + } + @Override public List getProductionPlans(String plotId) { LambdaQueryWrapperX qw = new LambdaQueryWrapperX<>();