farm模块-区域多选转换

This commit is contained in:
顾君禹
2025-08-26 00:15:30 +08:00
parent dd810006bd
commit 1f6f186df6
6 changed files with 119 additions and 35 deletions

View File

@@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelMan
import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO; 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.controller.admin.modelmanagement.vo.ModelManagementSaveReqVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO; import cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement.ModelManagementDO;
import cn.iocoder.yudao.module.farm.framework.util.ModelManagementConvertUtil;
import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService; import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@@ -100,10 +101,13 @@ public class ModelManagementController {
} }
@GetMapping("/getList") @GetMapping("/getList")
@Operation(summary = "获得模型管理分页") @Operation(summary = "获得模型管理列表")
public CommonResult<List<ModelManagementDO>> getList(@Valid ModelManagementPageReqVO pageReqVO) { public CommonResult<List<ModelManagementRespVO>> getList(@Valid ModelManagementPageReqVO pageReqVO) {
List<ModelManagementDO> pageResult = modelManagementService.getList(pageReqVO); List<ModelManagementDO> pageResult = modelManagementService.getList(pageReqVO);
return success(pageResult); List<ModelManagementRespVO> respVOList = pageResult.stream()
.map(this::convertToRespVO)
.collect(java.util.stream.Collectors.toList());
return success(respVOList);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@@ -135,15 +139,7 @@ public class ModelManagementController {
* 转换单个ModelManagementDO为ModelManagementRespVO * 转换单个ModelManagementDO为ModelManagementRespVO
*/ */
private ModelManagementRespVO convertToRespVO(ModelManagementDO modelManagementDO) { private ModelManagementRespVO convertToRespVO(ModelManagementDO modelManagementDO) {
ModelManagementRespVO respVO = BeanUtils.toBean(modelManagementDO, ModelManagementRespVO.class); return ModelManagementConvertUtil.convertToRespVO(modelManagementDO);
// 设置suitablePlantingAreas字段,触发自动转换
respVO.setSuitablePlantingAreas(modelManagementDO.getSuitablePlantingAreasList());
// 设置speciesImageList字段,触发自动转换
respVO.setSpeciesImageList(modelManagementDO.getSpeciesImageList());
return respVO;
} }
} }

View File

@@ -11,6 +11,9 @@ import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@Schema(description = "管理后台 - 模型管理 Response VO") @Schema(description = "管理后台 - 模型管理 Response VO")
@Data @Data
@@ -41,9 +44,12 @@ public class ModelManagementRespVO {
@ExcelProperty("产量参考") @ExcelProperty("产量参考")
private String harvest; private String harvest;
@Schema(description = "地区多选用,隔开") @Schema(description = "地区多选用")
@ExcelProperty("地区多选用,隔开") @ExcelProperty("地区多选用")
private List<String> suitablePlantingAreas; private String suitablePlantingAreasForExcel;
@Schema(description = "地区多选用")
private List<Map<String, String>> suitablePlantingAreas;
@Schema(description = "品种描述", example = "随便") @Schema(description = "品种描述", example = "随便")
@ExcelProperty("品种描述") @ExcelProperty("品种描述")
@@ -82,4 +88,25 @@ public class ModelManagementRespVO {
private Date releaseTime; private Date releaseTime;
private List<ModelCycleRespVO> modelCycles; private List<ModelCycleRespVO> modelCycles;
/**
* 设置适合种植区域,将字符串列表转换为对象列表格式
*/
public void setSuitablePlantingAreasFromStringList(List<String> areas) {
if (areas == null) {
this.suitablePlantingAreas = null;
this.suitablePlantingAreasForExcel = null;
return;
}
List<Map<String, String>> result = new ArrayList<>();
for (String area : areas) {
Map<String, String> areaObj = new HashMap<>();
areaObj.put("id", area);
result.add(areaObj);
}
this.suitablePlantingAreas = result;
// 同时设置Excel导出用的字符串格式 - 使用分号分隔,避免与地区代码内部的逗号冲突
this.suitablePlantingAreasForExcel = String.join(";", areas);
}
} }

View File

@@ -4,7 +4,12 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AccessLevel;
import lombok.Setter;
@Schema(description = "管理后台 - 模型管理新增/修改 Request VO") @Schema(description = "管理后台 - 模型管理新增/修改 Request VO")
@Data @Data
@@ -29,8 +34,44 @@ public class ModelManagementSaveReqVO {
private String harvest; private String harvest;
@Schema(description = "地区多选用,隔开") @Schema(description = "地区多选用,隔开")
@Setter(AccessLevel.NONE)
private List<String> suitablePlantingAreas; private List<String> suitablePlantingAreas;
/**
* 支持前端传入字符串数组或对象数组(形如 {id: "..."})
*/
@JsonProperty("suitablePlantingAreas")
public void setSuitablePlantingAreasFlexible(List<?> areas) {
if (areas == null) {
this.suitablePlantingAreas = null;
return;
}
List<String> normalized = new ArrayList<>();
for (Object item : areas) {
if (item == null) {
continue;
}
if (item instanceof String) {
normalized.add((String) item);
continue;
}
if (item instanceof Map) {
Object idVal = ((Map<?, ?>) item).get("id");
if (idVal != null) {
normalized.add(String.valueOf(idVal));
}
continue;
}
// 其他类型统一转字符串(兜底)
normalized.add(String.valueOf(item));
}
this.suitablePlantingAreas = normalized;
}
public List<String> getSuitablePlantingAreas() {
return suitablePlantingAreas;
}
@Schema(description = "品种描述", example = "随便") @Schema(description = "品种描述", example = "随便")
private String description; private String description;

View File

@@ -12,6 +12,7 @@ import lombok.*;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil; import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil;
import cn.iocoder.yudao.module.farm.framework.util.AreaCodeUtil;
/** /**
* 模型管理 DO * 模型管理 DO
@@ -131,7 +132,7 @@ public class ModelManagementDO extends BaseDO {
*/ */
public List<String> getSuitablePlantingAreasList() { public List<String> getSuitablePlantingAreasList() {
if (suitablePlantingAreasList == null) { if (suitablePlantingAreasList == null) {
suitablePlantingAreasList = ImageCollectionUtil.toImageList(this.suitablePlantingAreas); suitablePlantingAreasList = AreaCodeUtil.toAreaCodeList(this.suitablePlantingAreas);
} }
return suitablePlantingAreasList; return suitablePlantingAreasList;
} }
@@ -141,6 +142,6 @@ public class ModelManagementDO extends BaseDO {
*/ */
public void setSuitablePlantingAreasList(List<String> suitablePlantingAreasList) { public void setSuitablePlantingAreasList(List<String> suitablePlantingAreasList) {
this.suitablePlantingAreasList = suitablePlantingAreasList; this.suitablePlantingAreasList = suitablePlantingAreasList;
this.suitablePlantingAreas = ImageCollectionUtil.toDatabaseString(suitablePlantingAreasList); this.suitablePlantingAreas = AreaCodeUtil.toDatabaseString(suitablePlantingAreasList);
} }
} }

View File

@@ -24,6 +24,7 @@ import cn.iocoder.yudao.module.farm.dal.mysql.modelmanagement.ModelManagementMap
import cn.iocoder.yudao.module.farm.dal.mysql.modelpestdiseaseweed.ModelPestDiseaseWeedMapper; import cn.iocoder.yudao.module.farm.dal.mysql.modelpestdiseaseweed.ModelPestDiseaseWeedMapper;
import cn.iocoder.yudao.module.farm.dal.mysql.modelweatherdisaster.ModelWeatherDisasterMapper; import cn.iocoder.yudao.module.farm.dal.mysql.modelweatherdisaster.ModelWeatherDisasterMapper;
import cn.iocoder.yudao.module.farm.enums.CommonConstants; import cn.iocoder.yudao.module.farm.enums.CommonConstants;
import cn.iocoder.yudao.module.farm.framework.util.ModelManagementConvertUtil;
import cn.iocoder.yudao.module.farm.service.sysDict.SysDictService; import cn.iocoder.yudao.module.farm.service.sysDict.SysDictService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -74,11 +75,12 @@ public class ModelManagementServiceImpl implements ModelManagementService {
modelManagement.setIsRelease(0); modelManagement.setIsRelease(0);
modelManagement.setType(CommonConstants.MODEL_TYPE_1); modelManagement.setType(CommonConstants.MODEL_TYPE_1);
dictService.getDictByField3Code(createReqVO.getSpeciesId()); dictService.getDictByField3Code(createReqVO.getSpeciesId());
// 处理suitablePlantingAreas字段,优先使用集合 // 处理suitablePlantingAreas字段,优先使用集合
if (createReqVO.getSuitablePlantingAreas() != null && !createReqVO.getSuitablePlantingAreas().isEmpty()) { if (createReqVO.getSuitablePlantingAreas() != null && !createReqVO.getSuitablePlantingAreas().isEmpty()) {
modelManagement.setSuitablePlantingAreasList(createReqVO.getSuitablePlantingAreas()); modelManagement.setSuitablePlantingAreasList(createReqVO.getSuitablePlantingAreas());
} }
// 处理speciesImage字段,优先使用图片集合 // 处理speciesImage字段,优先使用图片集合
if (createReqVO.getSpeciesImageList() != null && !createReqVO.getSpeciesImageList().isEmpty()) { if (createReqVO.getSpeciesImageList() != null && !createReqVO.getSpeciesImageList().isEmpty()) {
modelManagement.setSpeciesImageList(createReqVO.getSpeciesImageList()); modelManagement.setSpeciesImageList(createReqVO.getSpeciesImageList());
@@ -174,22 +176,38 @@ public class ModelManagementServiceImpl implements ModelManagementService {
public void updateModelManagement(ModelManagementSaveReqVO updateReqVO) { public void updateModelManagement(ModelManagementSaveReqVO updateReqVO) {
// 校验存在 // 校验存在
validateModelManagementExists(updateReqVO.getId()); validateModelManagementExists(updateReqVO.getId());
// 更新 // 读取现有数据,采用合并策略,避免未传字段被置空
ModelManagementDO updateObj = BeanUtils.toBean(updateReqVO, ModelManagementDO.class); ModelManagementDO existing = modelManagementMapper.selectById(updateReqVO.getId());
if (existing == null) {
// 处理suitablePlantingAreas字段,优先使用集合 return;
if (updateReqVO.getSuitablePlantingAreas() != null && !updateReqVO.getSuitablePlantingAreas().isEmpty()) {
updateObj.setSuitablePlantingAreasList(updateReqVO.getSuitablePlantingAreas());
} }
// 处理speciesImage字段,优先使用图片集合 // 基础字段:仅当请求中非空时才覆盖
if (updateReqVO.getSpeciesImageList() != null && !updateReqVO.getSpeciesImageList().isEmpty()) { if (updateReqVO.getModelName() != null) existing.setModelName(updateReqVO.getModelName());
updateObj.setSpeciesImageList(updateReqVO.getSpeciesImageList()); if (updateReqVO.getSpeciesId() != null) existing.setSpeciesId(updateReqVO.getSpeciesId());
if (updateReqVO.getSpeciesName() != null) existing.setSpeciesName(updateReqVO.getSpeciesName());
if (updateReqVO.getCycle() != null) existing.setCycle(updateReqVO.getCycle());
if (updateReqVO.getHarvest() != null) existing.setHarvest(updateReqVO.getHarvest());
if (updateReqVO.getDescription() != null) existing.setDescription(updateReqVO.getDescription());
if (updateReqVO.getBaseId() != null) existing.setBaseId(updateReqVO.getBaseId());
if (updateReqVO.getBaseName() != null) existing.setBaseName(updateReqVO.getBaseName());
if (updateReqVO.getPlotId() != null) existing.setPlotId(updateReqVO.getPlotId());
if (updateReqVO.getPlotName() != null) existing.setPlotName(updateReqVO.getPlotName());
// 适合种植区域:支持清空(传空数组)与更新(传非空数组)
if (updateReqVO.getSuitablePlantingAreas() != null) {
existing.setSuitablePlantingAreasList(updateReqVO.getSuitablePlantingAreas()); // 空数组会被序列化为空串,达到清空效果
}
// 物种图片:支持清空(传空数组)与更新(传非空数组),其次支持单字符串
if (updateReqVO.getSpeciesImageList() != null) {
existing.setSpeciesImageList(updateReqVO.getSpeciesImageList());
} else if (updateReqVO.getSpeciesImage() != null) { } else if (updateReqVO.getSpeciesImage() != null) {
updateObj.setSpeciesImage(updateReqVO.getSpeciesImage()); existing.setSpeciesImage(updateReqVO.getSpeciesImage());
} }
modelManagementMapper.updateById(updateObj); // 允许切换发布状态仅通过专用接口,不在此处处理 isRelease/releaseTime
modelManagementMapper.updateById(existing);
} }
@Override @Override
@@ -216,11 +234,14 @@ public class ModelManagementServiceImpl implements ModelManagementService {
@Override @Override
public ModelManagementRespVO getModelManagement(String id) { public ModelManagementRespVO getModelManagement(String id) {
ModelManagementDO modelManagementDO = modelManagementMapper.selectById(id); ModelManagementDO modelManagementDO = modelManagementMapper.selectById(id);
ModelManagementRespVO bean = BeanUtils.toBean(modelManagementDO, ModelManagementRespVO.class); if (modelManagementDO == null) {
return null;
// 设置suitablePlantingAreas字段,触发自动转换 }
bean.setSuitablePlantingAreas(modelManagementDO.getSuitablePlantingAreasList());
// 使用统一的转换方法
ModelManagementRespVO bean = ModelManagementConvertUtil.convertToRespVO(modelManagementDO);
// 设置模型周期信息
List<ModelCycleRespVO> vos = new ArrayList<>(); List<ModelCycleRespVO> vos = new ArrayList<>();
List<ModelCycleDO> list = modelCycleMapper.selectListByModelId(id); List<ModelCycleDO> list = modelCycleMapper.selectListByModelId(id);
list.forEach(cycle -> { list.forEach(cycle -> {

View File

@@ -46,8 +46,6 @@
SELECT field1_code, field1_name, field2_name, field2_code, field3_code, field3_name SELECT field1_code, field1_name, field2_name, field2_code, field3_code, field3_name
FROM farm_sys_dict FROM farm_sys_dict
<include refid="where_3"/> <include refid="where_3"/>
DESC LIMIT 1
</select> </select>
<sql id="where_3"> <sql id="where_3">