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.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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 -> {
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user