diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java index 7e07fd8e..7d640f95 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; /** * 基础实体对象 - * + *

* 为什么实现 {@link TransPojo} 接口? * 因为使用 Easy-Trans TransType.SIMPLE 模式,集成 MyBatis Plus 查询 * @@ -35,14 +35,14 @@ public abstract class BaseDO implements Serializable, TransPojo { private LocalDateTime updateTime; /** * 创建者,目前使用 SysUser 的 id 编号 - * + *

* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 */ @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR) private String creator; /** * 更新者,目前使用 SysUser 的 id 编号 - * + *

* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 */ @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR) @@ -56,7 +56,7 @@ public abstract class BaseDO implements Serializable, TransPojo { /** * 把 creator、createTime、updateTime、updater 都清空,避免前端直接传递 creator 之类的字段,直接就被更新了 */ - public void clean(){ + public void clean() { this.creator = null; this.createTime = null; this.updater = null; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java index 50cc3a87..08f45f24 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/ModelManagementController.java @@ -89,14 +89,14 @@ public class ModelManagementController { @Operation(summary = "获得发布模型分页") public CommonResult> getModelManagementPageRelease(@Valid ModelManagementPageReqVO pageReqVO) { PageResult pageResult = modelManagementService.getModelManagementPageRelease(pageReqVO); - return success(BeanUtils.toBean(pageResult, ModelManagementRespVO.class)); + return success(convertPageResult(pageResult)); } @GetMapping("/page") @Operation(summary = "获得模型管理分页") public CommonResult> getModelManagementPage(@Valid ModelManagementPageReqVO pageReqVO) { PageResult pageResult = modelManagementService.getModelManagementPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ModelManagementRespVO.class)); + return success(convertPageResult(pageResult)); } @GetMapping("/export-excel") @@ -107,8 +107,36 @@ public class ModelManagementController { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = modelManagementService.getModelManagementPage(pageReqVO).getList(); // 导出 Excel - ExcelUtils.write(response, "模型管理.xls", "数据", ModelManagementRespVO.class, - BeanUtils.toBean(list, ModelManagementRespVO.class)); + List respVOList = list.stream() + .map(this::convertToRespVO) + .collect(java.util.stream.Collectors.toList()); + ExcelUtils.write(response, "模型管理.xls", "数据", ModelManagementRespVO.class, respVOList); + } + + /** + * 转换分页结果,处理suitablePlantingAreas字段的转换 + */ + private PageResult convertPageResult(PageResult pageResult) { + List 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; } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementPageReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementPageReqVO.java index f6a10d11..f884f42e 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementPageReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementPageReqVO.java @@ -29,7 +29,7 @@ public class ModelManagementPageReqVO extends PageParam { private String harvest; @Schema(description = "地区多选用,隔开") - private String suitablePlantingAreas; + private List suitablePlantingAreas; @Schema(description = "品种描述", example = "随便") private String description; @@ -54,4 +54,10 @@ public class ModelManagementPageReqVO extends PageParam { private String tenantId; private int isRelease; private int quoteCount; + @Schema(description = "物种图片") + private String speciesImage; + + @Schema(description = "物种图片集合") + private List speciesImageList; + private Date releaseTime; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementRespVO.java index a662fec3..daa47364 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementRespVO.java @@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; +import java.util.Date; import java.util.List; @Schema(description = "管理后台 - 模型管理 Response VO") @@ -42,7 +43,7 @@ public class ModelManagementRespVO { @Schema(description = "地区多选用,隔开") @ExcelProperty("地区多选用,隔开") - private String suitablePlantingAreas; + private List suitablePlantingAreas; @Schema(description = "品种描述", example = "随便") @ExcelProperty("品种描述") @@ -73,6 +74,12 @@ public class ModelManagementRespVO { private String tenantId; private int isRelease; private int quoteCount; + @Schema(description = "物种图片") + private String speciesImage; + + @Schema(description = "物种图片集合") + private List speciesImageList; + private Date releaseTime; private List modelCycles; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementSaveReqVO.java index 1e784e68..557d2704 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/modelmanagement/vo/ModelManagementSaveReqVO.java @@ -1,9 +1,10 @@ package cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import lombok.Data; + +import java.util.Date; +import java.util.List; @Schema(description = "管理后台 - 模型管理新增/修改 Request VO") @Data @@ -28,7 +29,7 @@ public class ModelManagementSaveReqVO { private String harvest; @Schema(description = "地区多选用,隔开") - private String suitablePlantingAreas; + private List suitablePlantingAreas; @Schema(description = "品种描述", example = "随便") private String description; @@ -49,4 +50,10 @@ public class ModelManagementSaveReqVO { private String tenantId; private int isRelease; private int quoteCount; + @Schema(description = "物种图片") + private String speciesImage; + + @Schema(description = "物种图片集合") + private List speciesImageList; + private Date releaseTime; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/modelmanagement/ModelManagementDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/modelmanagement/ModelManagementDO.java index 1185980a..6e10a24f 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/modelmanagement/ModelManagementDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/modelmanagement/ModelManagementDO.java @@ -3,10 +3,16 @@ package cn.iocoder.yudao.module.farm.dal.dataobject.modelmanagement; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; +import java.util.Date; +import java.util.List; +import cn.iocoder.yudao.module.farm.framework.util.ImageCollectionUtil; + /** * 模型管理 DO * @@ -52,9 +58,15 @@ public class ModelManagementDO extends BaseDO { */ private String harvest; /** - * 地区多选用,隔开 + * 地区多选用,隔开(数据库存储为逗号分隔的字符串) */ private String suitablePlantingAreas; + + /** + * 适合种植区域集合(业务层使用) + */ + @TableField(exist = false) + private List suitablePlantingAreasList; /** * 品种描述 */ @@ -83,4 +95,52 @@ public class ModelManagementDO extends BaseDO { private String taskId; private int isRelease; private int quoteCount; + /** + * 物种图片(数据库存储为逗号分隔的字符串) + */ + private String speciesImage; + + /** + * 物种图片集合(业务层使用) + */ + @TableField(exist = false) + private List speciesImageList; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date releaseTime; + + /** + * 获取物种图片集合 + */ + public List getSpeciesImageList() { + if (speciesImageList == null) { + speciesImageList = ImageCollectionUtil.toImageList(this.speciesImage); + } + return speciesImageList; + } + + /** + * 设置物种图片集合 + */ + public void setSpeciesImageList(List speciesImageList) { + this.speciesImageList = speciesImageList; + this.speciesImage = ImageCollectionUtil.toDatabaseString(speciesImageList); + } + + /** + * 获取适合种植区域集合 + */ + public List getSuitablePlantingAreasList() { + if (suitablePlantingAreasList == null) { + suitablePlantingAreasList = ImageCollectionUtil.toImageList(this.suitablePlantingAreas); + } + return suitablePlantingAreasList; + } + + /** + * 设置适合种植区域集合 + */ + public void setSuitablePlantingAreasList(List suitablePlantingAreasList) { + this.suitablePlantingAreasList = suitablePlantingAreasList; + this.suitablePlantingAreas = ImageCollectionUtil.toDatabaseString(suitablePlantingAreasList); + } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java index cae21b07..da513295 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.ArrayList; +import java.util.Date; import java.util.List; 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.setTenantId(String.valueOf(user.getTenantId())); 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); // 返回 @@ -157,6 +171,19 @@ public class ModelManagementServiceImpl implements ModelManagementService { validateModelManagementExists(updateReqVO.getId()); // 更新 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); } @@ -185,6 +212,10 @@ public class ModelManagementServiceImpl implements ModelManagementService { public ModelManagementRespVO getModelManagement(String id) { ModelManagementDO modelManagementDO = modelManagementMapper.selectById(id); ModelManagementRespVO bean = BeanUtils.toBean(modelManagementDO, ModelManagementRespVO.class); + + // 设置suitablePlantingAreas字段,触发自动转换 + bean.setSuitablePlantingAreas(modelManagementDO.getSuitablePlantingAreasList()); + List vos = new ArrayList<>(); List list = modelCycleMapper.selectListByModelId(id); list.forEach(cycle -> { @@ -297,10 +328,10 @@ public class ModelManagementServiceImpl implements ModelManagementService { @Override public void isRelease(ModelManagementSaveReqVO updateReqVO) { - ModelManagementDO modelManagementDO = modelManagementMapper.selectById(updateReqVO.getId()); if (modelManagementDO.getIsRelease() == 0) { modelManagementDO.setIsRelease(1); + modelManagementDO.setReleaseTime(new Date()); } else { modelManagementDO.setIsRelease(0); }