fix (farm): 集成测试

- 生产计划
- 模型周期
This commit is contained in:
达富斌
2025-09-11 21:19:45 +08:00
parent eb80fa46c1
commit 92599e3616
8 changed files with 64 additions and 58 deletions

View File

@@ -31,7 +31,7 @@ public class ProductionPlanPage2ReqVO extends PageParam {
private String productionYear;
@Schema(description = "计划执行状态")
private Integer planStatus;
private Integer status;
/**
* 租户ID

View File

@@ -49,7 +49,7 @@ public interface ProductionPlanMapper extends BaseMapperX<ProductionPlanDO> {
// )
.eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId())
.eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId())
.eqIfPresent(ProductionPlanDO::getPlanStatus, reqVO.getPlanStatus())
.eqIfPresent(ProductionPlanDO::getPlanStatus, reqVO.getStatus())
.eqIfPresent(ProductionPlanDO::getTenantId, reqVO.getTenantId())
.orderByDesc(ProductionPlanDO::getCreateTime);

View File

@@ -31,6 +31,7 @@ import cn.iocoder.yudao.module.farm.utils.StrHelperUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -226,7 +227,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
String plotId = productionPlanRespVO.getPlotId();
PlotInfoDO plotIObj = plotInfoService.getPlotInfoByPlotId(plotId);
productionPlanRespVO.setPlotManger(employeeNameMap.getOrDefault(plotIObj.getEmployeeId(),"系统"));
// 管理周期
return productionPlanRespVO;
}
@@ -365,6 +366,12 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
ModelManagementDO modelManagementDo = modelManagementService.getModelManagement("id", planObj.getSpeciesModelId());
String managementCycleName = modelManagementService.getModelCycleName(planObj.getSpeciesModelId());
// 农事记录进度
int progressNumerator = 1; // 生产计划 - 农事记录 条数
int progressDenominator = 1; // 农事记录总数 (引用模型 - 农事记录)
String progressRatio = ""; // 百分比
String progressBar = "1/100"; // 进度条
ProductionPlanResp2VO.ModelInfo modelInfo = new ProductionPlanResp2VO.ModelInfo();
modelInfo.setId(modelManagementDo.getId());
modelInfo.setModelName(modelManagementDo.getModelName());
@@ -375,14 +382,13 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
modelInfo.setPlanSubStatus(ObjectUtils.defaultIfNull(planObj.getPlanSubStatus(), planObj.getPlanStatus()));
modelInfo.setPlanStatusName(PLAN_MAP.getOrDefault(planObj.getPlanStatus(), ""));
modelInfo.setPlanSubStatusName(PLAN_MAP.getOrDefault(planObj.getPlanSubStatus(), ""));
modelInfo.setManagementCycleName(managementCycleName);
modelInfo.setPredictedArea(planObj.getPredictedArea().intValue());
modelInfo.setPredictedYields(planObj.getPredictedYields());
modelInfo.setProgressBar("1/10"); // TODO: 2025/8/30 农事记录
modelInfo.setProgressRatio("10"); // TODO: 2025/8/31
modelInfo.setProgressNumerator(1);
modelInfo.setProgressDenominator(10);
modelInfo.setProgressBar(progressBar);
modelInfo.setProgressRatio(progressRatio);
modelInfo.setProgressNumerator(progressNumerator);
modelInfo.setProgressDenominator(progressDenominator);
modelInfo.setBaseName(planObj.getBaseName());
modelInfo.setBaseManager(employeeNameMap.get(employeeId)); // 分割,
return modelInfo;
@@ -509,6 +515,9 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
@Override
public BasePlanOverviewRespVO getBaseOverview(String baseId) {
if (StringUtils.isEmpty(baseId)) {
return null;
}
LoginUser user = getLoginUser();
Long tenantId = user.getTenantId();
BigDecimal totalArea = baseInfoMapper.getTotalBaseArea(baseId, tenantId);

View File

@@ -58,32 +58,10 @@ public class InputLibraryServiceImpl implements InputLibraryService {
inputLibrary.setId(id);
inputLibrary.setTenantId(String.valueOf(user.getTenantId()));
inputLibraryMapper.insert(inputLibrary);
// 同步
this.syncCreateDict(id);
// 返回
return inputLibrary.getId();
}
private void syncCreateDict(String id) {
List<SysDictDO> list = sysDictMapper.groupByFieldCode(DICT_TYPE_CODE_4);
Map<String, String> parentMap = list.stream().collect(Collectors.toMap(SysDictDO::getField1Code, SysDictDO::getField1Name, (v1, v2) -> v1));
InputLibraryDO aDo = inputLibraryMapper.selectById(id);
Integer assetType = aDo.getAssetType();// 父类编号
String assetName = aDo.getAssetName();// 子类名称
SysDictDO insertObj = new SysDictDO();
insertObj.setDictTypeCode(DICT_TYPE_CODE_4);
insertObj.setDictTypeName("投入品");
insertObj.setField1Code(assetType.toString());
insertObj.setField1Name(parentMap.get(assetType));
insertObj.setField2Code(StrHelperUtil.generate());
insertObj.setField2Name(assetName);
insertObj.setStatus(CommonConstants.YES_CODE);
insertObj.setDeleted(false);
sysDictMapper.insertOne(insertObj);
}
@Override
public void updateInputLibrary(InputLibrarySaveReqVO updateReqVO) {
// 校验存在

View File

@@ -151,23 +151,21 @@ public class ModelManagementServiceImpl implements ModelManagementService {
// 4. 复制模型周期及其子集
List<ModelCycleDO> originalCycles = modelCycleMapper.selectListByModelId(id);
long originalStageCount_start = 0;
long originalStageCount_end = 0;
// 累计天数
int accumulatedDays = 0;
for (ModelCycleDO originalCycle : originalCycles) {
// 设置周期范围-开始.结束日期
StageRecord stageRecord = setProductionStages(accumulatedDays, originalCycle, productionStartDate, productionEndDate);
accumulatedDays = stageRecord.v0;
// 复制周期
ModelCycleDO newCycle = BeanUtils.toBean(originalCycle, ModelCycleDO.class);
String newCycleId = IdUtil.fastUUID();
newCycle.setId(newCycleId);
newCycle.setModelId(newModelId);
// 设置周期范围-开始.结束日期
originalStageCount_end += originalCycle.getStage(); // 阶段天数
LocalDate cycleRangeStartDate = productionStartDate.plusDays(originalStageCount_start);
LocalDate cycleRangeEndDate = productionEndDate.plusDays(originalStageCount_end);
newCycle.setCycleRangeStartDate(cycleRangeStartDate);
newCycle.setCycleRangeEndDate(cycleRangeEndDate);
newCycle.setCycleRangeStartDate(stageRecord.v1);
newCycle.setCycleRangeEndDate(stageRecord.v2);
modelCycleMapper.insert(newCycle);
// 推进阶段天数
originalStageCount_start = originalStageCount_end;
// 复制环境指标
List<ModelEnvironmentIndexDO> environmentIndexes = modelEnvironmentIndexMapper.selectByCycleId(originalCycle.getId());
@@ -219,6 +217,31 @@ public class ModelManagementServiceImpl implements ModelManagementService {
return newModelId;
}
public record StageRecord(int v0, LocalDate v1, LocalDate v2) { }
private StageRecord setProductionStages(int accumulatedDays, ModelCycleDO originalCycle, LocalDate productionStartDate, LocalDate productionEndDate) {
// 当前阶段天数
int currentStageDays = originalCycle.getStage();
LocalDate cycleRangeStartDate;
if (accumulatedDays == 0) {
// 第一阶段开始日期 = 生产开始日期 + 0天
cycleRangeStartDate = productionStartDate.plusDays(0);
} else {
// 后续阶段开始日期 = 生产开始日期 + 累计天数 + 1天(避免重叠)
cycleRangeStartDate = productionStartDate.plusDays(accumulatedDays + 1);
}
// 计算当前阶段的结束日期
LocalDate cycleRangeEndDate = productionStartDate.plusDays(accumulatedDays + currentStageDays);
// 确保结束日期不超过总范围的结束日期
if (cycleRangeEndDate.isAfter(productionEndDate)) {
cycleRangeEndDate = productionEndDate;
}
// 更新累计天数
accumulatedDays += currentStageDays;
return new StageRecord(accumulatedDays, cycleRangeStartDate, cycleRangeEndDate);
}
@Override
public void updateModelManagement(ModelManagementSaveReqVO updateReqVO) {
// 校验存在
@@ -299,7 +322,7 @@ public class ModelManagementServiceImpl implements ModelManagementService {
List<ModelCycleDO> list = modelCycleMapper.selectListByModelId(id);
list.forEach(cycle -> {
ModelCycleRespVO vo = BeanUtils.toBean(cycle, ModelCycleRespVO.class);
vo.setStageImageList(cycle.getStageImageList());
vo.setStageImageList(cycle.getImageList());
//环境指标
List<ModelEnvironmentIndexDO> environmentIndexDO = modelEnvironmentIndexMapper.selectByCycleId(cycle.getId());
vo.setEnvironmentIndexDOS(environmentIndexDO);

View File

@@ -44,10 +44,9 @@ public class ModelPestDiseaseWeedServiceImpl implements ModelPestDiseaseWeedServ
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(createReqVO.getPestsId());
modelPestDiseaseWeed.setDisasterDescription(disasterDataDO.getDisasterDescription());
modelPestDiseaseWeed.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
if (createReqVO.getImage() != null) {
modelPestDiseaseWeed.setImage(createReqVO.getImage() + "," + disasterDataDO.getImgUrl());
} else {
modelPestDiseaseWeed.setImage(disasterDataDO.getImgUrl());
// set 图片地址
for (String image : createReqVO.getImageList()) {
modelPestDiseaseWeed.setImage(image);
}
modelPestDiseaseWeedMapper.insert(modelPestDiseaseWeed);
@@ -64,10 +63,9 @@ public class ModelPestDiseaseWeedServiceImpl implements ModelPestDiseaseWeedServ
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(updateReqVO.getPestsId());
updateObj.setDisasterDescription(disasterDataDO.getDisasterDescription());
updateObj.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
if (updateReqVO.getImage() != null) {
updateObj.setImage(updateReqVO.getImage() + "," + disasterDataDO.getImgUrl());
} else {
updateObj.setImage(disasterDataDO.getImgUrl());
// set 图片地址
for (String image : updateReqVO.getImageList()) {
updateObj.setImage(image);
}
modelPestDiseaseWeedMapper.updateById(updateObj);
}

View File

@@ -45,10 +45,9 @@ public class ModelWeatherDisasterServiceImpl implements ModelWeatherDisasterServ
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(createReqVO.getWeatherId());
modelWeatherDisaster.setDisasterDescription(disasterDataDO.getDisasterDescription());
modelWeatherDisaster.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
if (createReqVO.getImage() != null) {
modelWeatherDisaster.setImage(createReqVO.getImage() + "," + disasterDataDO.getImgUrl());
} else {
modelWeatherDisaster.setImage(disasterDataDO.getImgUrl());
// set 图片地址
for (String image : createReqVO.getImageList()) {
modelWeatherDisaster.setImage(image);
}
modelWeatherDisasterMapper.insert(modelWeatherDisaster);
@@ -65,10 +64,9 @@ public class ModelWeatherDisasterServiceImpl implements ModelWeatherDisasterServ
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(updateReqVO.getWeatherId());
updateObj.setDisasterDescription(disasterDataDO.getDisasterDescription());
updateObj.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
if (updateReqVO.getImage() != null) {
updateObj.setImage(updateReqVO.getImage() + "," + disasterDataDO.getImgUrl());
} else {
updateObj.setImage(disasterDataDO.getImgUrl());
// set 图片地址
for (String image : updateObj.getImageList()) {
updateObj.setImage(image);
}
modelWeatherDisasterMapper.updateById(updateObj);
}

View File

@@ -15,6 +15,6 @@
from farm_model_cycle
where model_id = #{modelId}
and deleted = 0
ORDER BY create_time
ORDER BY create_time ASC
</select>
</mapper>