diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/file/convertor/EvalProjectArchiveFileCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/file/convertor/EvalProjectArchiveFileCmdConvertor.java index ec66ed89..84f50a8d 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/file/convertor/EvalProjectArchiveFileCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/file/convertor/EvalProjectArchiveFileCmdConvertor.java @@ -1,11 +1,15 @@ package org.qinan.safetyeval.app.file.convertor; +import cn.hutool.json.JSONUtil; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.qinan.safetyeval.client.file.request.EvalProjectArchiveFileAddCmd; import org.qinan.safetyeval.client.file.request.EvalProjectArchiveFileUpdateCmd; +import org.qinan.safetyeval.client.file.response.FilesCo; import org.qinan.safetyeval.domain.file.model.EvalProjectArchiveFileE; +import java.util.List; + /** * 安全评价项目档案文件转换 * @@ -15,7 +19,7 @@ import org.qinan.safetyeval.domain.file.model.EvalProjectArchiveFileE; @Mapper(componentModel = "spring") public interface EvalProjectArchiveFileCmdConvertor { /** - * cmd_add转领域模型 + * cmd_add转领域模型(files 为对象列表,经 fromFilesCo 序列化为 JSON 字符串) * * @param evalProjectArchiveFileAddCmd * @return @@ -24,11 +28,21 @@ public interface EvalProjectArchiveFileCmdConvertor { EvalProjectArchiveFileE convertCmdToE(EvalProjectArchiveFileAddCmd evalProjectArchiveFileAddCmd); /** - * cmd_update转领域模型 + * cmd_update转领域模型(files 为对象列表,经 fromFilesCo 序列化为 JSON 字符串) * * @param evalProjectArchiveFileUpdateCmd * @return */ @Mapping(target = "evalProjectArchiveFileGateway", ignore = true) EvalProjectArchiveFileE convertCmdToE(EvalProjectArchiveFileUpdateCmd evalProjectArchiveFileUpdateCmd); + + /** + * 将 Cmd 中 files 对象列表序列化为 JSON 数组字符串(如 [{"url":"...","name":"..."}]),null 返回 null。 + */ + default String fromFilesCo(List files) { + if (files == null) { + return null; + } + return JSONUtil.toJsonStr(files); + } } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileAddCmd.java index 7bb88ae6..8fd8c149 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileAddCmd.java @@ -2,11 +2,13 @@ package org.qinan.safetyeval.client.file.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.qinan.safetyeval.client.file.response.FilesCo; import org.qinan.safetyeval.domain.constant.ArchiveTypeEnum; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.io.Serializable; +import java.util.List; /** * 安全评价项目档案文件新增Cmd @@ -22,9 +24,8 @@ public class EvalProjectArchiveFileAddCmd implements Serializable { @NotBlank(message = "项目ID不能为空") private String projectId; - @ApiModelProperty(value = "文件列表(JSON 数组,如 [{\"url\":\"...\",\"name\":\"...\"}])", required = true) - @NotBlank(message = "文件列表不能为空") - private String files; + @ApiModelProperty(value = "文件列表") + private List files; @ApiModelProperty(value = ArchiveTypeEnum.REMARKS, required = true) @NotBlank(message = ArchiveTypeEnum.REMARKS + "不能为空") diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileUpdateCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileUpdateCmd.java index ce7d65fb..ea606316 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileUpdateCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/EvalProjectArchiveFileUpdateCmd.java @@ -3,12 +3,14 @@ package org.qinan.safetyeval.client.file.request; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.qinan.safetyeval.client.file.response.FilesCo; import org.qinan.safetyeval.domain.constant.ArchiveTypeEnum; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; +import java.util.List; /** * 安全评价项目档案文件修改Cmd @@ -28,11 +30,10 @@ public class EvalProjectArchiveFileUpdateCmd implements Serializable { @NotBlank(message = "项目ID不能为空") private String projectId; /** - * 文件列表(JSON 数组,如 [{"url":"...","name":"..."}]) + * 文件列表 */ - @ApiModelProperty(value = "文件列表(JSON 数组,如 [{\"url\":\"...\",\"name\":\"...\"}])", required = true) - @NotBlank(message = "文件列表不能为空") - private String files; + @ApiModelProperty(value = "文件列表") + private List files; /** * ArchiveTypeEnum.REMARKS */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/EvalProjectArchiveFileCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/EvalProjectArchiveFileCo.java index d3ab55ab..79c317e4 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/EvalProjectArchiveFileCo.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/EvalProjectArchiveFileCo.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.qinan.safetyeval.domain.constant.ArchiveTypeEnum; +import java.util.List; + /** * 安全评价项目档案文件Co * @@ -23,10 +25,10 @@ public class EvalProjectArchiveFileCo extends ClientObject { @ApiModelProperty(value = "项目ID") private String projectId; /** - * 文件列表(JSON 数组,如 [{"url":"...","name":"..."}]) + * 文件列表(由 DO 中 JSON 数组 [{"url":"...","name":"..."}] 解析而来) */ @ApiModelProperty(value = "文件列表") - private String files; + private List files; /** * ArchiveTypeEnum.REMARKS */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/FilesCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/FilesCo.java new file mode 100644 index 00000000..6a5812d1 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/FilesCo.java @@ -0,0 +1,26 @@ +package org.qinan.safetyeval.client.file.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 档案文件信息Co(对应 eval_project_archive_file.files JSON 数组中的元素) + * + * @Author: ltq + * @date 2026-08-25 + */ +@Data +public class FilesCo implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "文件ID") + private String id; + + @ApiModelProperty(value = "文件地址") + private String url; + + @ApiModelProperty(value = "文件名称") + private String name; +} diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectArchiveFileDoConvertor.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectArchiveFileDoConvertor.java index af297ed8..90b23522 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectArchiveFileDoConvertor.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectArchiveFileDoConvertor.java @@ -1,11 +1,15 @@ package org.qinan.safetyeval.infrastructure.convertor; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import org.mapstruct.Mapper; import org.qinan.safetyeval.client.file.request.EvalProjectArchiveFilePageQry; import org.qinan.safetyeval.client.file.response.EvalProjectArchiveFileCo; +import org.qinan.safetyeval.client.file.response.FilesCo; import org.qinan.safetyeval.domain.file.model.EvalProjectArchiveFileE; import org.qinan.safetyeval.infrastructure.persistence.domainobject.EvalProjectArchiveFileDO; +import java.util.Collections; import java.util.List; @@ -26,7 +30,7 @@ public interface EvalProjectArchiveFileDoConvertor { EvalProjectArchiveFileDO convertEeToDo(EvalProjectArchiveFileE evalProjectArchiveFileE); /** - * DO转Co + * DO转Co(files 为 JSON 字符串,经 toFilesCo 解析为对象列表) * * @param evalProjectArchiveFileDo DO * @return @@ -44,10 +48,20 @@ public interface EvalProjectArchiveFileDoConvertor { EvalProjectArchiveFileDO convertQryToDo(EvalProjectArchiveFilePageQry evalProjectArchiveFilePageQry); /** - * DOs转Cos + * DOs转Cos(files 为 JSON 字符串,经 toFilesCo 解析为对象列表) * * @param evalProjectArchiveFileDos dos * @return */ List converDosToCos(List evalProjectArchiveFileDos); + + /** + * 将 DO 中 files 的 JSON 数组字符串(如 [{"url":"...","name":"..."}])解析为 FilesCo 列表,空串返回空列表。 + */ + default List toFilesCo(String files) { + if (StrUtil.isBlank(files)) { + return Collections.emptyList(); + } + return JSONUtil.toList(files, FilesCo.class); + } }