fix (farm): 集成测试
- 生产计划 - 模型周期
This commit is contained in:
@@ -31,7 +31,7 @@ public class ProductionPlanPage2ReqVO extends PageParam {
|
|||||||
private String productionYear;
|
private String productionYear;
|
||||||
|
|
||||||
@Schema(description = "计划执行状态")
|
@Schema(description = "计划执行状态")
|
||||||
private Integer planStatus;
|
private Integer status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 租户ID
|
* 租户ID
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public interface ProductionPlanMapper extends BaseMapperX<ProductionPlanDO> {
|
|||||||
// )
|
// )
|
||||||
.eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId())
|
.eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId())
|
||||||
.eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId())
|
.eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId())
|
||||||
.eqIfPresent(ProductionPlanDO::getPlanStatus, reqVO.getPlanStatus())
|
.eqIfPresent(ProductionPlanDO::getPlanStatus, reqVO.getStatus())
|
||||||
.eqIfPresent(ProductionPlanDO::getTenantId, reqVO.getTenantId())
|
.eqIfPresent(ProductionPlanDO::getTenantId, reqVO.getTenantId())
|
||||||
.orderByDesc(ProductionPlanDO::getCreateTime);
|
.orderByDesc(ProductionPlanDO::getCreateTime);
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import cn.iocoder.yudao.module.farm.utils.StrHelperUtil;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -226,7 +227,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
|
|||||||
String plotId = productionPlanRespVO.getPlotId();
|
String plotId = productionPlanRespVO.getPlotId();
|
||||||
PlotInfoDO plotIObj = plotInfoService.getPlotInfoByPlotId(plotId);
|
PlotInfoDO plotIObj = plotInfoService.getPlotInfoByPlotId(plotId);
|
||||||
productionPlanRespVO.setPlotManger(employeeNameMap.getOrDefault(plotIObj.getEmployeeId(),"系统"));
|
productionPlanRespVO.setPlotManger(employeeNameMap.getOrDefault(plotIObj.getEmployeeId(),"系统"));
|
||||||
// 管理周期
|
|
||||||
return productionPlanRespVO;
|
return productionPlanRespVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,6 +366,12 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
|
|||||||
ModelManagementDO modelManagementDo = modelManagementService.getModelManagement("id", planObj.getSpeciesModelId());
|
ModelManagementDO modelManagementDo = modelManagementService.getModelManagement("id", planObj.getSpeciesModelId());
|
||||||
String managementCycleName = modelManagementService.getModelCycleName(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();
|
ProductionPlanResp2VO.ModelInfo modelInfo = new ProductionPlanResp2VO.ModelInfo();
|
||||||
modelInfo.setId(modelManagementDo.getId());
|
modelInfo.setId(modelManagementDo.getId());
|
||||||
modelInfo.setModelName(modelManagementDo.getModelName());
|
modelInfo.setModelName(modelManagementDo.getModelName());
|
||||||
@@ -375,14 +382,13 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
|
|||||||
modelInfo.setPlanSubStatus(ObjectUtils.defaultIfNull(planObj.getPlanSubStatus(), planObj.getPlanStatus()));
|
modelInfo.setPlanSubStatus(ObjectUtils.defaultIfNull(planObj.getPlanSubStatus(), planObj.getPlanStatus()));
|
||||||
modelInfo.setPlanStatusName(PLAN_MAP.getOrDefault(planObj.getPlanStatus(), ""));
|
modelInfo.setPlanStatusName(PLAN_MAP.getOrDefault(planObj.getPlanStatus(), ""));
|
||||||
modelInfo.setPlanSubStatusName(PLAN_MAP.getOrDefault(planObj.getPlanSubStatus(), ""));
|
modelInfo.setPlanSubStatusName(PLAN_MAP.getOrDefault(planObj.getPlanSubStatus(), ""));
|
||||||
|
|
||||||
modelInfo.setManagementCycleName(managementCycleName);
|
modelInfo.setManagementCycleName(managementCycleName);
|
||||||
modelInfo.setPredictedArea(planObj.getPredictedArea().intValue());
|
modelInfo.setPredictedArea(planObj.getPredictedArea().intValue());
|
||||||
modelInfo.setPredictedYields(planObj.getPredictedYields());
|
modelInfo.setPredictedYields(planObj.getPredictedYields());
|
||||||
modelInfo.setProgressBar("1/10"); // TODO: 2025/8/30 农事记录
|
modelInfo.setProgressBar(progressBar);
|
||||||
modelInfo.setProgressRatio("10"); // TODO: 2025/8/31
|
modelInfo.setProgressRatio(progressRatio);
|
||||||
modelInfo.setProgressNumerator(1);
|
modelInfo.setProgressNumerator(progressNumerator);
|
||||||
modelInfo.setProgressDenominator(10);
|
modelInfo.setProgressDenominator(progressDenominator);
|
||||||
modelInfo.setBaseName(planObj.getBaseName());
|
modelInfo.setBaseName(planObj.getBaseName());
|
||||||
modelInfo.setBaseManager(employeeNameMap.get(employeeId)); // 分割,
|
modelInfo.setBaseManager(employeeNameMap.get(employeeId)); // 分割,
|
||||||
return modelInfo;
|
return modelInfo;
|
||||||
@@ -509,6 +515,9 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BasePlanOverviewRespVO getBaseOverview(String baseId) {
|
public BasePlanOverviewRespVO getBaseOverview(String baseId) {
|
||||||
|
if (StringUtils.isEmpty(baseId)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
LoginUser user = getLoginUser();
|
LoginUser user = getLoginUser();
|
||||||
Long tenantId = user.getTenantId();
|
Long tenantId = user.getTenantId();
|
||||||
BigDecimal totalArea = baseInfoMapper.getTotalBaseArea(baseId, tenantId);
|
BigDecimal totalArea = baseInfoMapper.getTotalBaseArea(baseId, tenantId);
|
||||||
|
|||||||
@@ -58,32 +58,10 @@ public class InputLibraryServiceImpl implements InputLibraryService {
|
|||||||
inputLibrary.setId(id);
|
inputLibrary.setId(id);
|
||||||
inputLibrary.setTenantId(String.valueOf(user.getTenantId()));
|
inputLibrary.setTenantId(String.valueOf(user.getTenantId()));
|
||||||
inputLibraryMapper.insert(inputLibrary);
|
inputLibraryMapper.insert(inputLibrary);
|
||||||
// 同步
|
|
||||||
this.syncCreateDict(id);
|
|
||||||
// 返回
|
// 返回
|
||||||
return inputLibrary.getId();
|
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
|
@Override
|
||||||
public void updateInputLibrary(InputLibrarySaveReqVO updateReqVO) {
|
public void updateInputLibrary(InputLibrarySaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
|
|||||||
@@ -151,23 +151,21 @@ public class ModelManagementServiceImpl implements ModelManagementService {
|
|||||||
|
|
||||||
// 4. 复制模型周期及其子集
|
// 4. 复制模型周期及其子集
|
||||||
List<ModelCycleDO> originalCycles = modelCycleMapper.selectListByModelId(id);
|
List<ModelCycleDO> originalCycles = modelCycleMapper.selectListByModelId(id);
|
||||||
long originalStageCount_start = 0;
|
// 累计天数
|
||||||
long originalStageCount_end = 0;
|
int accumulatedDays = 0;
|
||||||
for (ModelCycleDO originalCycle : originalCycles) {
|
for (ModelCycleDO originalCycle : originalCycles) {
|
||||||
|
// 设置周期范围-开始.结束日期
|
||||||
|
StageRecord stageRecord = setProductionStages(accumulatedDays, originalCycle, productionStartDate, productionEndDate);
|
||||||
|
accumulatedDays = stageRecord.v0;
|
||||||
|
|
||||||
// 复制周期
|
// 复制周期
|
||||||
ModelCycleDO newCycle = BeanUtils.toBean(originalCycle, ModelCycleDO.class);
|
ModelCycleDO newCycle = BeanUtils.toBean(originalCycle, ModelCycleDO.class);
|
||||||
String newCycleId = IdUtil.fastUUID();
|
String newCycleId = IdUtil.fastUUID();
|
||||||
newCycle.setId(newCycleId);
|
newCycle.setId(newCycleId);
|
||||||
newCycle.setModelId(newModelId);
|
newCycle.setModelId(newModelId);
|
||||||
// 设置周期范围-开始.结束日期
|
newCycle.setCycleRangeStartDate(stageRecord.v1);
|
||||||
originalStageCount_end += originalCycle.getStage(); // 阶段天数
|
newCycle.setCycleRangeEndDate(stageRecord.v2);
|
||||||
LocalDate cycleRangeStartDate = productionStartDate.plusDays(originalStageCount_start);
|
|
||||||
LocalDate cycleRangeEndDate = productionEndDate.plusDays(originalStageCount_end);
|
|
||||||
newCycle.setCycleRangeStartDate(cycleRangeStartDate);
|
|
||||||
newCycle.setCycleRangeEndDate(cycleRangeEndDate);
|
|
||||||
modelCycleMapper.insert(newCycle);
|
modelCycleMapper.insert(newCycle);
|
||||||
// 推进阶段天数
|
|
||||||
originalStageCount_start = originalStageCount_end;
|
|
||||||
|
|
||||||
// 复制环境指标
|
// 复制环境指标
|
||||||
List<ModelEnvironmentIndexDO> environmentIndexes = modelEnvironmentIndexMapper.selectByCycleId(originalCycle.getId());
|
List<ModelEnvironmentIndexDO> environmentIndexes = modelEnvironmentIndexMapper.selectByCycleId(originalCycle.getId());
|
||||||
@@ -219,6 +217,31 @@ public class ModelManagementServiceImpl implements ModelManagementService {
|
|||||||
return newModelId;
|
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
|
@Override
|
||||||
public void updateModelManagement(ModelManagementSaveReqVO updateReqVO) {
|
public void updateModelManagement(ModelManagementSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
@@ -299,7 +322,7 @@ public class ModelManagementServiceImpl implements ModelManagementService {
|
|||||||
List<ModelCycleDO> list = modelCycleMapper.selectListByModelId(id);
|
List<ModelCycleDO> list = modelCycleMapper.selectListByModelId(id);
|
||||||
list.forEach(cycle -> {
|
list.forEach(cycle -> {
|
||||||
ModelCycleRespVO vo = BeanUtils.toBean(cycle, ModelCycleRespVO.class);
|
ModelCycleRespVO vo = BeanUtils.toBean(cycle, ModelCycleRespVO.class);
|
||||||
vo.setStageImageList(cycle.getStageImageList());
|
vo.setStageImageList(cycle.getImageList());
|
||||||
//环境指标
|
//环境指标
|
||||||
List<ModelEnvironmentIndexDO> environmentIndexDO = modelEnvironmentIndexMapper.selectByCycleId(cycle.getId());
|
List<ModelEnvironmentIndexDO> environmentIndexDO = modelEnvironmentIndexMapper.selectByCycleId(cycle.getId());
|
||||||
vo.setEnvironmentIndexDOS(environmentIndexDO);
|
vo.setEnvironmentIndexDOS(environmentIndexDO);
|
||||||
|
|||||||
@@ -44,10 +44,9 @@ public class ModelPestDiseaseWeedServiceImpl implements ModelPestDiseaseWeedServ
|
|||||||
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(createReqVO.getPestsId());
|
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(createReqVO.getPestsId());
|
||||||
modelPestDiseaseWeed.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
modelPestDiseaseWeed.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
||||||
modelPestDiseaseWeed.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
modelPestDiseaseWeed.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
||||||
if (createReqVO.getImage() != null) {
|
// set 图片地址
|
||||||
modelPestDiseaseWeed.setImage(createReqVO.getImage() + "," + disasterDataDO.getImgUrl());
|
for (String image : createReqVO.getImageList()) {
|
||||||
} else {
|
modelPestDiseaseWeed.setImage(image);
|
||||||
modelPestDiseaseWeed.setImage(disasterDataDO.getImgUrl());
|
|
||||||
}
|
}
|
||||||
modelPestDiseaseWeedMapper.insert(modelPestDiseaseWeed);
|
modelPestDiseaseWeedMapper.insert(modelPestDiseaseWeed);
|
||||||
|
|
||||||
@@ -64,10 +63,9 @@ public class ModelPestDiseaseWeedServiceImpl implements ModelPestDiseaseWeedServ
|
|||||||
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(updateReqVO.getPestsId());
|
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(updateReqVO.getPestsId());
|
||||||
updateObj.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
updateObj.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
||||||
updateObj.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
updateObj.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
||||||
if (updateReqVO.getImage() != null) {
|
// set 图片地址
|
||||||
updateObj.setImage(updateReqVO.getImage() + "," + disasterDataDO.getImgUrl());
|
for (String image : updateReqVO.getImageList()) {
|
||||||
} else {
|
updateObj.setImage(image);
|
||||||
updateObj.setImage(disasterDataDO.getImgUrl());
|
|
||||||
}
|
}
|
||||||
modelPestDiseaseWeedMapper.updateById(updateObj);
|
modelPestDiseaseWeedMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,10 +45,9 @@ public class ModelWeatherDisasterServiceImpl implements ModelWeatherDisasterServ
|
|||||||
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(createReqVO.getWeatherId());
|
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(createReqVO.getWeatherId());
|
||||||
modelWeatherDisaster.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
modelWeatherDisaster.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
||||||
modelWeatherDisaster.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
modelWeatherDisaster.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
||||||
if (createReqVO.getImage() != null) {
|
// set 图片地址
|
||||||
modelWeatherDisaster.setImage(createReqVO.getImage() + "," + disasterDataDO.getImgUrl());
|
for (String image : createReqVO.getImageList()) {
|
||||||
} else {
|
modelWeatherDisaster.setImage(image);
|
||||||
modelWeatherDisaster.setImage(disasterDataDO.getImgUrl());
|
|
||||||
}
|
}
|
||||||
modelWeatherDisasterMapper.insert(modelWeatherDisaster);
|
modelWeatherDisasterMapper.insert(modelWeatherDisaster);
|
||||||
|
|
||||||
@@ -65,10 +64,9 @@ public class ModelWeatherDisasterServiceImpl implements ModelWeatherDisasterServ
|
|||||||
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(updateReqVO.getWeatherId());
|
DisasterDataDO disasterDataDO = disasterDataMapper.selectById(updateReqVO.getWeatherId());
|
||||||
updateObj.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
updateObj.setDisasterDescription(disasterDataDO.getDisasterDescription());
|
||||||
updateObj.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
updateObj.setTreatmentSuggestion(disasterDataDO.getTreatmentSuggestion());
|
||||||
if (updateReqVO.getImage() != null) {
|
// set 图片地址
|
||||||
updateObj.setImage(updateReqVO.getImage() + "," + disasterDataDO.getImgUrl());
|
for (String image : updateObj.getImageList()) {
|
||||||
} else {
|
updateObj.setImage(image);
|
||||||
updateObj.setImage(disasterDataDO.getImgUrl());
|
|
||||||
}
|
}
|
||||||
modelWeatherDisasterMapper.updateById(updateObj);
|
modelWeatherDisasterMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,6 @@
|
|||||||
from farm_model_cycle
|
from farm_model_cycle
|
||||||
where model_id = #{modelId}
|
where model_id = #{modelId}
|
||||||
and deleted = 0
|
and deleted = 0
|
||||||
ORDER BY create_time
|
ORDER BY create_time ASC
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user