1. 升级 3.0.38

补全业务附件表缺失的 api
 支持 api 获取附件二进制数据
 新增业务附件表状态信息
 补全部分存在嵌套结构的 bpm api 缺失数据
This commit is contained in:
chenbowen
2025-09-25 19:24:06 +08:00
parent 70c8d0d5f7
commit ea04d0dee6
28 changed files with 518 additions and 67 deletions

View File

@@ -67,4 +67,19 @@ public interface BusinessFileApi {
CommonResult<Boolean> deleteBusinessFileByBusinessIdAndSource(@RequestParam("businessId") Long businessId,
@RequestParam("source") String source);
@PutMapping(PREFIX + "/enable")
@Operation(summary = "启用业务附件关联")
@Parameter(name = "id", description = "编号", required = true)
CommonResult<Boolean> enableBusinessFile(@RequestParam("id") Long id);
@PutMapping(PREFIX + "/disable")
@Operation(summary = "禁用业务附件关联")
@Parameter(name = "id", description = "编号", required = true)
CommonResult<Boolean> disableBusinessFile(@RequestParam("id") Long id);
@PutMapping(PREFIX + "/update-status")
@Operation(summary = "批量更新业务附件状态")
CommonResult<Boolean> updateBusinessFileStatus(@RequestParam("ids") List<Long> ids,
@RequestParam("status") Integer status);
}

View File

@@ -38,6 +38,11 @@ public class BusinessFilePageReqDTO extends PageParam implements Serializable {
*/
private String source;
/**
* 状态1-正常0-禁用)
*/
private Integer status;
/**
* 创建时间
*/

View File

@@ -49,6 +49,11 @@ public class BusinessFileRespDTO implements Serializable {
*/
private String source;
/**
* 状态1-正常0-禁用)
*/
private Integer status;
/**
* 创建时间
*/

View File

@@ -25,5 +25,7 @@ public class BusinessFileSaveReqDTO implements Serializable {
private Long fileId;
/** 业务来源 */
private String source;
/** 状态1-正常0-禁用) */
private Integer status;
}

View File

@@ -2,14 +2,18 @@ package com.zt.plat.module.infra.api.file;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.infra.api.file.dto.FileCreateReqDTO;
import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
import com.zt.plat.module.infra.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 文件")
@@ -17,43 +21,19 @@ public interface FileApi {
String PREFIX = ApiConstants.PREFIX + "/file";
/**
* 保存文件,并返回文件的访问路径
*
* @param content 文件内容
* @return 文件路径
*/
default String createFile(byte[] content) {
return createFile(content, null, null, null);
}
/**
* 保存文件,并返回文件的访问路径
*
* @param content 文件内容
* @param name 文件名称,允许空
* @return 文件路径
*/
default String createFile(byte[] content, String name) {
return createFile(content, name, null, null);
}
/**
* 保存文件,并返回文件的访问路径
*
* @param content 文件内容
* @param name 文件名称,允许空
* @param directory 目录,允许空
* @param type 文件的 MIME 类型,允许空
* @return 文件路径
*/
default String createFile(@NotEmpty(message = "文件内容不能为空") byte[] content,
String name, String directory, String type) {
return createFile(new FileCreateReqDTO().setName(name).setDirectory(directory).setType(type).setContent(content)).getCheckedData();
}
@PostMapping(PREFIX + "/create")
@Operation(summary = "保存文件,并返回文件的访问路径")
CommonResult<String> createFile(@Valid @RequestBody FileCreateReqDTO createReqDTO);
/**
* 根据文件编号获取文件信息和二进制内容
*
* @param fileId 文件编号
* @return 文件信息,包含二进制数据
*/
@GetMapping(PREFIX + "/get")
@Operation(summary = "根据文件编号获取文件信息和二进制内容")
CommonResult<FileRespDTO> getFile(@Parameter(description = "文件编号", required = true, example = "1024")
@RequestParam("fileId") @NotNull(message = "文件编号不能为空") Long fileId);
}

View File

@@ -0,0 +1,28 @@
package com.zt.plat.module.infra.api.file.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "RPC 服务 - 文件信息 Response DTO")
@Data
public class FileRespDTO {
@Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "原文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "xxx.png")
private String name;
@Schema(description = "文件目录", example = "xxx")
private String directory;
@Schema(description = "文件的 MIME 类型", example = "image/png")
private String type;
@Schema(description = "文件大小", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer size;
@Schema(description = "文件内容", requiredMode = Schema.RequiredMode.REQUIRED)
private byte[] content;
}

View File

@@ -0,0 +1,33 @@
package com.zt.plat.module.infra.enums.businessfile;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 业务附件状态枚举
*
* @author 后台管理
*/
@AllArgsConstructor
@Getter
public enum BusinessFileStatusEnum {
/**
* 正常
*/
NORMAL(1, "正常"),
/**
* 禁用
*/
DISABLED(0, "禁用");
/**
* 状态
*/
private final Integer status;
/**
* 状态名
*/
private final String name;
}

View File

@@ -84,4 +84,22 @@ public class BusinessFileApiImpl implements BusinessFileApi {
businessFileService.deleteBusinessFileByBusinessIdAndSource(businessId, source);
return success(true);
}
@Override
public CommonResult<Boolean> enableBusinessFile(Long id) {
businessFileService.enableBusinessFile(id);
return success(true);
}
@Override
public CommonResult<Boolean> disableBusinessFile(Long id) {
businessFileService.disableBusinessFile(id);
return success(true);
}
@Override
public CommonResult<Boolean> updateBusinessFileStatus(List<Long> ids, Integer status) {
businessFileService.updateBusinessFileStatus(ids, status);
return success(true);
}
}

View File

@@ -2,6 +2,8 @@ package com.zt.plat.module.infra.api.file;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.infra.api.file.dto.FileCreateReqDTO;
import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
import com.zt.plat.module.infra.dal.dataobject.file.FileDO;
import com.zt.plat.module.infra.service.file.FileService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -22,4 +24,40 @@ public class FileApiImpl implements FileApi {
createReqDTO.getDirectory(), createReqDTO.getType(), false));
}
@Override
public CommonResult<FileRespDTO> getFile(Long fileId) {
try {
// 获取文件信息
FileDO fileDO = fileService.getActiveFileById(fileId);
if (fileDO == null) {
return CommonResult.error(404, "文件不存在");
}
// 获取文件内容
byte[] content = fileService.getFileContent(fileId);
if (content == null) {
return CommonResult.error(500, "文件内容读取失败");
}
// 构建响应对象
FileRespDTO respDTO = new FileRespDTO();
respDTO.setId(fileDO.getId());
respDTO.setName(fileDO.getName());
respDTO.setType(fileDO.getType());
respDTO.setSize(fileDO.getSize());
respDTO.setContent(content);
// 从文件路径或URL中提取目录信息
String path = fileDO.getPath();
if (path != null && path.contains("/")) {
String directory = path.substring(0, path.lastIndexOf("/"));
respDTO.setDirectory(directory);
}
return success(respDTO);
} catch (Exception e) {
return CommonResult.error(500, "获取文件失败:" + e.getMessage());
}
}
}

View File

@@ -129,4 +129,31 @@ public class BusinessFileController {
return success(true);
}
@PutMapping("/enable")
@Operation(summary = "启用业务附件关联")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:business-file:update')")
public CommonResult<Boolean> enableBusinessFile(@RequestParam("id") Long id) {
businessFileService.enableBusinessFile(id);
return success(true);
}
@PutMapping("/disable")
@Operation(summary = "禁用业务附件关联")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:business-file:update')")
public CommonResult<Boolean> disableBusinessFile(@RequestParam("id") Long id) {
businessFileService.disableBusinessFile(id);
return success(true);
}
@PutMapping("/update-status")
@Operation(summary = "批量更新业务附件状态")
@PreAuthorize("@ss.hasPermission('infra:business-file:update')")
public CommonResult<Boolean> updateBusinessFileStatus(@RequestParam("ids") List<Long> ids,
@RequestParam("status") Integer status) {
businessFileService.updateBusinessFileStatus(ids, status);
return success(true);
}
}

Some files were not shown because too many files have changed in this diff Show More