farm模块-模型新增字段集合互转

This commit is contained in:
顾君禹
2025-08-24 22:14:21 +08:00
parent 95d6ce997b
commit e696248c80
7 changed files with 155 additions and 16 deletions

View File

@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
/** /**
* 基础实体对象 * 基础实体对象
* * <p>
* 为什么实现 {@link TransPojo} 接口? * 为什么实现 {@link TransPojo} 接口?
* 因为使用 Easy-Trans TransType.SIMPLE 模式,集成 MyBatis Plus 查询 * 因为使用 Easy-Trans TransType.SIMPLE 模式,集成 MyBatis Plus 查询
* *
@@ -35,14 +35,14 @@ public abstract class BaseDO implements Serializable, TransPojo {
private LocalDateTime updateTime; private LocalDateTime updateTime;
/** /**
* 创建者,目前使用 SysUser 的 id 编号 * 创建者,目前使用 SysUser 的 id 编号
* * <p>
* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
*/ */
@TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR) @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
private String creator; private String creator;
/** /**
* 更新者,目前使用 SysUser 的 id 编号 * 更新者,目前使用 SysUser 的 id 编号
* * <p>
* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
*/ */
@TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR) @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)

View File

@@ -89,14 +89,14 @@ public class ModelManagementController {
@Operation(summary = "获得发布模型分页") @Operation(summary = "获得发布模型分页")
public CommonResult<PageResult<ModelManagementRespVO>> getModelManagementPageRelease(@Valid ModelManagementPageReqVO pageReqVO) { public CommonResult<PageResult<ModelManagementRespVO>> getModelManagementPageRelease(@Valid ModelManagementPageReqVO pageReqVO) {
PageResult<ModelManagementDO> pageResult = modelManagementService.getModelManagementPageRelease(pageReqVO); PageResult<ModelManagementDO> pageResult = modelManagementService.getModelManagementPageRelease(pageReqVO);
return success(BeanUtils.toBean(pageResult, ModelManagementRespVO.class)); return success(convertPageResult(pageResult));
} }
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得模型管理分页") @Operation(summary = "获得模型管理分页")
public CommonResult<PageResult<ModelManagementRespVO>> getModelManagementPage(@Valid ModelManagementPageReqVO pageReqVO) { public CommonResult<PageResult<ModelManagementRespVO>> getModelManagementPage(@Valid ModelManagementPageReqVO pageReqVO) {
PageResult<ModelManagementDO> pageResult = modelManagementService.getModelManagementPage(pageReqVO); PageResult<ModelManagementDO> pageResult = modelManagementService.getModelManagementPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ModelManagementRespVO.class)); return success(convertPageResult(pageResult));
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@@ -107,8 +107,36 @@ public class ModelManagementController {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ModelManagementDO> list = modelManagementService.getModelManagementPage(pageReqVO).getList(); List<ModelManagementDO> list = modelManagementService.getModelManagementPage(pageReqVO).getList();
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "模型管理.xls", "数据", ModelManagementRespVO.class, List<ModelManagementRespVO> respVOList = list.stream()
BeanUtils.toBean(list, ModelManagementRespVO.class)); .map(this::convertToRespVO)
.collect(java.util.stream.Collectors.toList());
ExcelUtils.write(response, "模型管理.xls", "数据", ModelManagementRespVO.class, respVOList);
}
/**
* 转换分页结果,处理suitablePlantingAreas字段的转换
*/
private PageResult<ModelManagementRespVO> convertPageResult(PageResult<ModelManagementDO> pageResult) {
List<ModelManagementRespVO> respVOList = pageResult.getList().stream()
.map(this::convertToRespVO)
.collect(java.util.stream.Collectors.toList());
return new PageResult<>(respVOList, pageResult.getTotal());
}
/**
* 转换单个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;
} }
} }

View File

@@ -29,7 +29,7 @@ public class ModelManagementPageReqVO extends PageParam {
private String harvest; private String harvest;
@Schema(description = "地区多选用,隔开") @Schema(description = "地区多选用,隔开")
private String suitablePlantingAreas; private List<String> suitablePlantingAreas;
@Schema(description = "品种描述", example = "随便") @Schema(description = "品种描述", example = "随便")
private String description; private String description;
@@ -54,4 +54,10 @@ public class ModelManagementPageReqVO extends PageParam {
private String tenantId; private String tenantId;
private int isRelease; private int isRelease;
private int quoteCount; private int quoteCount;
@Schema(description = "物种图片")
private String speciesImage;
@Schema(description = "物种图片集合")
private List<String> speciesImageList;
private Date releaseTime;
} }

View File

@@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
import java.util.List; import java.util.List;
@Schema(description = "管理后台 - 模型管理 Response VO") @Schema(description = "管理后台 - 模型管理 Response VO")
@@ -42,7 +43,7 @@ public class ModelManagementRespVO {
@Schema(description = "地区多选用,隔开") @Schema(description = "地区多选用,隔开")
@ExcelProperty("地区多选用,隔开") @ExcelProperty("地区多选用,隔开")
private String suitablePlantingAreas; private List<String> suitablePlantingAreas;
@Schema(description = "品种描述", example = "随便") @Schema(description = "品种描述", example = "随便")
@ExcelProperty("品种描述") @ExcelProperty("品种描述")
@@ -73,6 +74,12 @@ public class ModelManagementRespVO {
private String tenantId; private String tenantId;
private int isRelease; private int isRelease;
private int quoteCount; private int quoteCount;
@Schema(description = "物种图片")
private String speciesImage;
@Schema(description = "物种图片集合")
private List<String> speciesImageList;
private Date releaseTime;
private List<ModelCycleRespVO> modelCycles; private List<ModelCycleRespVO> modelCycles;
} }

View File

@@ -1,9 +1,10 @@
package cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo; package cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import java.util.*;
import jakarta.validation.constraints.*; import java.util.Date;
import java.util.List;
@Schema(description = "管理后台 - 模型管理新增/修改 Request VO") @Schema(description = "管理后台 - 模型管理新增/修改 Request VO")
@Data @Data
@@ -28,7 +29,7 @@ public class ModelManagementSaveReqVO {
private String harvest; private String harvest;
@Schema(description = "地区多选用,隔开") @Schema(description = "地区多选用,隔开")
private String suitablePlantingAreas; private List<String> suitablePlantingAreas;
@Schema(description = "品种描述", example = "随便") @Schema(description = "品种描述", example = "随便")
private String description; private String description;
@@ -49,4 +50,10 @@ public class ModelManagementSaveReqVO {
private String tenantId; private String tenantId;
private int isRelease; private int isRelease;
private int quoteCount; private int quoteCount;
@Schema(description = "物种图片")
private String speciesImage;
@Schema(description = "物种图片集合")
private List<String> speciesImageList;
private Date releaseTime;
} }

View File

@@ -3,10 +3,16 @@ package cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
import java.util.Date;
import java.util.List;
import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil;
/** /**
* 模型管理 DO * 模型管理 DO
* *
@@ -52,9 +58,15 @@ public class ModelManagementDO extends BaseDO {
*/ */
private String harvest; private String harvest;
/** /**
* 地区多选用,隔开 * 地区多选用,隔开(数据库存储为逗号分隔的字符串)
*/ */
private String suitablePlantingAreas; private String suitablePlantingAreas;
/**
* 适合种植区域集合(业务层使用)
*/
@TableField(exist = false)
private List<String> suitablePlantingAreasList;
/** /**
* 品种描述 * 品种描述
*/ */
@@ -83,4 +95,52 @@ public class ModelManagementDO extends BaseDO {
private String taskId; private String taskId;
private int isRelease; private int isRelease;
private int quoteCount; private int quoteCount;
/**
* 物种图片(数据库存储为逗号分隔的字符串)
*/
private String speciesImage;
/**
* 物种图片集合(业务层使用)
*/
@TableField(exist = false)
private List<String> speciesImageList;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date releaseTime;
/**
* 获取物种图片集合
*/
public List<String> getSpeciesImageList() {
if (speciesImageList == null) {
speciesImageList = ImageCollectionUtil.toImageList(this.speciesImage);
}
return speciesImageList;
}
/**
* 设置物种图片集合
*/
public void setSpeciesImageList(List<String> speciesImageList) {
this.speciesImageList = speciesImageList;
this.speciesImage = ImageCollectionUtil.toDatabaseString(speciesImageList);
}
/**
* 获取适合种植区域集合
*/
public List<String> getSuitablePlantingAreasList() {
if (suitablePlantingAreasList == null) {
suitablePlantingAreasList = ImageCollectionUtil.toImageList(this.suitablePlantingAreas);
}
return suitablePlantingAreasList;
}
/**
* 设置适合种植区域集合
*/
public void setSuitablePlantingAreasList(List<String> suitablePlantingAreasList) {
this.suitablePlantingAreasList = suitablePlantingAreasList;
this.suitablePlantingAreas = ImageCollectionUtil.toDatabaseString(suitablePlantingAreasList);
}
} }

View File

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -67,6 +68,19 @@ public class ModelManagementServiceImpl implements ModelManagementService {
modelManagement.setId(IdUtil.fastUUID()); modelManagement.setId(IdUtil.fastUUID());
modelManagement.setTenantId(String.valueOf(user.getTenantId())); modelManagement.setTenantId(String.valueOf(user.getTenantId()));
modelManagement.setIsRelease(0); modelManagement.setIsRelease(0);
modelManagement.setType(CommonConstants.MODEL_TYPE_1);
// 处理suitablePlantingAreas字段,优先使用集合
if (createReqVO.getSuitablePlantingAreas() != null && !createReqVO.getSuitablePlantingAreas().isEmpty()) {
modelManagement.setSuitablePlantingAreasList(createReqVO.getSuitablePlantingAreas());
}
// 处理speciesImage字段,优先使用图片集合
if (createReqVO.getSpeciesImageList() != null && !createReqVO.getSpeciesImageList().isEmpty()) {
modelManagement.setSpeciesImageList(createReqVO.getSpeciesImageList());
} else if (createReqVO.getSpeciesImage() != null) {
modelManagement.setSpeciesImage(createReqVO.getSpeciesImage());
}
modelManagementMapper.insert(modelManagement); modelManagementMapper.insert(modelManagement);
// 返回 // 返回
@@ -157,6 +171,19 @@ public class ModelManagementServiceImpl implements ModelManagementService {
validateModelManagementExists(updateReqVO.getId()); validateModelManagementExists(updateReqVO.getId());
// 更新 // 更新
ModelManagementDO updateObj = BeanUtils.toBean(updateReqVO, ModelManagementDO.class); ModelManagementDO updateObj = BeanUtils.toBean(updateReqVO, ModelManagementDO.class);
// 处理suitablePlantingAreas字段,优先使用集合
if (updateReqVO.getSuitablePlantingAreas() != null && !updateReqVO.getSuitablePlantingAreas().isEmpty()) {
updateObj.setSuitablePlantingAreasList(updateReqVO.getSuitablePlantingAreas());
}
// 处理speciesImage字段,优先使用图片集合
if (updateReqVO.getSpeciesImageList() != null && !updateReqVO.getSpeciesImageList().isEmpty()) {
updateObj.setSpeciesImageList(updateReqVO.getSpeciesImageList());
} else if (updateReqVO.getSpeciesImage() != null) {
updateObj.setSpeciesImage(updateReqVO.getSpeciesImage());
}
modelManagementMapper.updateById(updateObj); modelManagementMapper.updateById(updateObj);
} }
@@ -185,6 +212,10 @@ public class ModelManagementServiceImpl implements ModelManagementService {
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); ModelManagementRespVO bean = BeanUtils.toBean(modelManagementDO, ModelManagementRespVO.class);
// 设置suitablePlantingAreas字段,触发自动转换
bean.setSuitablePlantingAreas(modelManagementDO.getSuitablePlantingAreasList());
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 -> {
@@ -297,10 +328,10 @@ public class ModelManagementServiceImpl implements ModelManagementService {
@Override @Override
public void isRelease(ModelManagementSaveReqVO updateReqVO) { public void isRelease(ModelManagementSaveReqVO updateReqVO) {
ModelManagementDO modelManagementDO = modelManagementMapper.selectById(updateReqVO.getId()); ModelManagementDO modelManagementDO = modelManagementMapper.selectById(updateReqVO.getId());
if (modelManagementDO.getIsRelease() == 0) { if (modelManagementDO.getIsRelease() == 0) {
modelManagementDO.setIsRelease(1); modelManagementDO.setIsRelease(1);
modelManagementDO.setReleaseTime(new Date());
} else { } else {
modelManagementDO.setIsRelease(0); modelManagementDO.setIsRelease(0);
} }