farm模块-区域多选转换
This commit is contained in:
@@ -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.ModelManagementSaveReqVO;
|
||||
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 io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -100,10 +101,13 @@ public class ModelManagementController {
|
||||
}
|
||||
|
||||
@GetMapping("/getList")
|
||||
@Operation(summary = "获得模型管理分页")
|
||||
public CommonResult<List<ModelManagementDO>> getList(@Valid ModelManagementPageReqVO pageReqVO) {
|
||||
@Operation(summary = "获得模型管理列表")
|
||||
public CommonResult<List<ModelManagementRespVO>> getList(@Valid ModelManagementPageReqVO 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")
|
||||
@@ -135,15 +139,7 @@ public class ModelManagementController {
|
||||
* 转换单个ModelManagementDO为ModelManagementRespVO
|
||||
*/
|
||||
private ModelManagementRespVO convertToRespVO(ModelManagementDO modelManagementDO) {
|
||||
ModelManagementRespVO respVO = BeanUtils.toBean(modelManagementDO, ModelManagementRespVO.class);
|
||||
|
||||
// 设置suitablePlantingAreas字段,触发自动转换
|
||||
respVO.setSuitablePlantingAreas(modelManagementDO.getSuitablePlantingAreasList());
|
||||
|
||||
// 设置speciesImageList字段,触发自动转换
|
||||
respVO.setSpeciesImageList(modelManagementDO.getSpeciesImageList());
|
||||
|
||||
return respVO;
|
||||
return ModelManagementConvertUtil.convertToRespVO(modelManagementDO);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,6 +11,9 @@ import lombok.Data;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
@Schema(description = "管理后台 - 模型管理 Response VO")
|
||||
@Data
|
||||
@@ -41,9 +44,12 @@ public class ModelManagementRespVO {
|
||||
@ExcelProperty("产量参考")
|
||||
private String harvest;
|
||||
|
||||
@Schema(description = "地区多选用,隔开")
|
||||
@ExcelProperty("地区多选用,隔开")
|
||||
private List<String> suitablePlantingAreas;
|
||||
@Schema(description = "地区多选用")
|
||||
@ExcelProperty("地区多选用")
|
||||
private String suitablePlantingAreasForExcel;
|
||||
|
||||
@Schema(description = "地区多选用")
|
||||
private List<Map<String, String>> suitablePlantingAreas;
|
||||
|
||||
@Schema(description = "品种描述", example = "随便")
|
||||
@ExcelProperty("品种描述")
|
||||
@@ -82,4 +88,25 @@ public class ModelManagementRespVO {
|
||||
private Date releaseTime;
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,12 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "管理后台 - 模型管理新增/修改 Request VO")
|
||||
@Data
|
||||
@@ -29,8 +34,44 @@ public class ModelManagementSaveReqVO {
|
||||
private String harvest;
|
||||
|
||||
@Schema(description = "地区多选用,隔开")
|
||||
@Setter(AccessLevel.NONE)
|
||||
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 = "随便")
|
||||
private String description;
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import lombok.*;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil;
|
||||
import cn.iocoder.yudao.module.farm.framework.util.AreaCodeUtil;
|
||||
|
||||
/**
|
||||
* 模型管理 DO
|
||||
@@ -131,7 +132,7 @@ public class ModelManagementDO extends BaseDO {
|
||||
*/
|
||||
public List<String> getSuitablePlantingAreasList() {
|
||||
if (suitablePlantingAreasList == null) {
|
||||
suitablePlantingAreasList = ImageCollectionUtil.toImageList(this.suitablePlantingAreas);
|
||||
suitablePlantingAreasList = AreaCodeUtil.toAreaCodeList(this.suitablePlantingAreas);
|
||||
}
|
||||
return suitablePlantingAreasList;
|
||||
}
|
||||
@@ -141,6 +142,6 @@ public class ModelManagementDO extends BaseDO {
|
||||
*/
|
||||
public void setSuitablePlantingAreasList(List<String> suitablePlantingAreasList) {
|
||||
this.suitablePlantingAreasList = suitablePlantingAreasList;
|
||||
this.suitablePlantingAreas = ImageCollectionUtil.toDatabaseString(suitablePlantingAreasList);
|
||||
this.suitablePlantingAreas = AreaCodeUtil.toDatabaseString(suitablePlantingAreasList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.modelweatherdisaster.ModelWeatherDisasterMapper;
|
||||
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import jakarta.annotation.Resource;
|
||||
@@ -74,6 +75,7 @@ public class ModelManagementServiceImpl implements ModelManagementService {
|
||||
modelManagement.setIsRelease(0);
|
||||
modelManagement.setType(CommonConstants.MODEL_TYPE_1);
|
||||
dictService.getDictByField3Code(createReqVO.getSpeciesId());
|
||||
|
||||
// 处理suitablePlantingAreas字段,优先使用集合
|
||||
if (createReqVO.getSuitablePlantingAreas() != null && !createReqVO.getSuitablePlantingAreas().isEmpty()) {
|
||||
modelManagement.setSuitablePlantingAreasList(createReqVO.getSuitablePlantingAreas());
|
||||
@@ -174,22 +176,38 @@ public class ModelManagementServiceImpl implements ModelManagementService {
|
||||
public void updateModelManagement(ModelManagementSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateModelManagementExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ModelManagementDO updateObj = BeanUtils.toBean(updateReqVO, ModelManagementDO.class);
|
||||
|
||||
// 处理suitablePlantingAreas字段,优先使用集合
|
||||
if (updateReqVO.getSuitablePlantingAreas() != null && !updateReqVO.getSuitablePlantingAreas().isEmpty()) {
|
||||
updateObj.setSuitablePlantingAreasList(updateReqVO.getSuitablePlantingAreas());
|
||||
// 读取现有数据,采用合并策略,避免未传字段被置空
|
||||
ModelManagementDO existing = modelManagementMapper.selectById(updateReqVO.getId());
|
||||
if (existing == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 处理speciesImage字段,优先使用图片集合
|
||||
if (updateReqVO.getSpeciesImageList() != null && !updateReqVO.getSpeciesImageList().isEmpty()) {
|
||||
updateObj.setSpeciesImageList(updateReqVO.getSpeciesImageList());
|
||||
// 基础字段:仅当请求中非空时才覆盖
|
||||
if (updateReqVO.getModelName() != null) existing.setModelName(updateReqVO.getModelName());
|
||||
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) {
|
||||
updateObj.setSpeciesImage(updateReqVO.getSpeciesImage());
|
||||
existing.setSpeciesImage(updateReqVO.getSpeciesImage());
|
||||
}
|
||||
|
||||
modelManagementMapper.updateById(updateObj);
|
||||
// 允许切换发布状态仅通过专用接口,不在此处处理 isRelease/releaseTime
|
||||
modelManagementMapper.updateById(existing);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -216,11 +234,14 @@ public class ModelManagementServiceImpl implements ModelManagementService {
|
||||
@Override
|
||||
public ModelManagementRespVO getModelManagement(String 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<ModelCycleDO> list = modelCycleMapper.selectListByModelId(id);
|
||||
list.forEach(cycle -> {
|
||||
|
||||
@@ -46,8 +46,6 @@
|
||||
SELECT field1_code, field1_name, field2_name, field2_code, field3_code, field3_name
|
||||
FROM farm_sys_dict
|
||||
<include refid="where_3"/>
|
||||
DESC LIMIT 1
|
||||
|
||||
</select>
|
||||
|
||||
<sql id="where_3">
|
||||
|
||||
Reference in New Issue
Block a user