diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java index 6071d1290..23c733b65 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java @@ -4,9 +4,9 @@ import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.constant.ServiceNameConstants; import com.microservices.common.core.domain.R; import com.microservices.system.api.domain.SysFile; -import com.microservices.system.api.domain.SysFileBytes; import com.microservices.system.api.domain.SysFileInfo; import com.microservices.system.api.factory.RemoteFileFallbackFactory; +import feign.Response; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -71,9 +71,8 @@ public interface RemoteFileService { * 根据文件标识获取文件实体 * * @param fileIdentifier 文件标识 - * @return 文件实体 */ @GetMapping("/common/getFileEntityByIdentifier/{fileIdentifier}") - R getFileEntityByIdentifier(@PathVariable("fileIdentifier") String fileIdentifier, - @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + Response getFileEntityByIdentifier(@PathVariable("fileIdentifier") String fileIdentifier, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/domain/SysFileBytes.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/domain/SysFileBytes.java index 0112a09ce..6ff29a5ff 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/domain/SysFileBytes.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/domain/SysFileBytes.java @@ -17,12 +17,7 @@ public class SysFileBytes { private String fileName; /** - * 文件地址 - */ - private byte[] fileBytes; - - /** - * 文件地址 + * 文件流 */ private InputStream fileInputStream; } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java index 0f23a32fd..f298a8890 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java @@ -1,10 +1,11 @@ package com.microservices.system.api.factory; import com.microservices.common.core.domain.R; +import com.microservices.common.core.exception.ServiceException; import com.microservices.system.api.RemoteFileService; import com.microservices.system.api.domain.SysFile; -import com.microservices.system.api.domain.SysFileBytes; import com.microservices.system.api.domain.SysFileInfo; +import feign.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -54,8 +55,8 @@ public class RemoteFileFallbackFactory implements FallbackFactory getFileEntityByIdentifier(String fileIdentifier, String source) { - return R.fail("根据文件标识获取文件实体失败:" + throwable.getMessage()); + public Response getFileEntityByIdentifier(String fileIdentifier, String source) { + throw new ServiceException("文件获取失败:" + throwable.getMessage()); } }; } diff --git a/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java b/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java index 67fa6d7d1..87c2b662e 100644 --- a/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java +++ b/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java @@ -24,7 +24,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -32,7 +31,6 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import static com.microservices.common.core.web.domain.AjaxResult.DATA_TAG; @@ -371,23 +369,16 @@ public class HttpAPIService { HttpEntity httpEntity = response.getEntity(); if (httpEntity != null) { InputStream input = httpEntity.getContent(); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - byte[] buffer = new byte[4096]; - int n = 0; - while (-1 != (n = input.read(buffer))) { - output.write(buffer, 0, n); - } String fileName = url.substring(url.lastIndexOf('/') + 1); Header fileNameHeader = response.getFirstHeader("Content-Disposition"); if (fileNameHeader != null) { fileName = fileNameHeader.getValue(); } SysFileBytes sysFileBytes = new SysFileBytes(); - sysFileBytes.setFileBytes(output.toByteArray()); + sysFileBytes.setFileInputStream(input); sysFileBytes.setFileName(fileName); return sysFileBytes; } - } } throw new Exception("请求响应失败"); diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java index 85f8f9002..4837abe41 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java @@ -9,7 +9,6 @@ import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.security.annotation.InnerAuth; import com.microservices.file.service.ISysFileInfoService; -import com.microservices.system.api.domain.SysFileBytes; import com.microservices.system.api.domain.SysFileInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -66,8 +65,8 @@ public class CommonController extends BaseController { @GetMapping("/getFileEntityByIdentifier/{fileIdentifier}") @ApiOperation("根据文件标识获取文件实体") @InnerAuth - public R getFileEntityByIdentifier(@PathVariable("fileIdentifier") String fileIdentifier) { - return sysFileInfoService.getFileEntityByIdentifier(fileIdentifier); + public void getFileEntityByIdentifier(@PathVariable("fileIdentifier") String fileIdentifier, HttpServletResponse response) { + sysFileInfoService.getFileEntityByIdentifier(response, fileIdentifier); } /** diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java index c12a330ee..a8003ea07 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java @@ -1,9 +1,7 @@ package com.microservices.file.service; -import com.microservices.common.core.domain.R; import com.microservices.common.core.web.domain.AjaxResult; -import com.microservices.system.api.domain.SysFileBytes; import com.microservices.system.api.domain.SysFileInfo; import org.springframework.web.multipart.MultipartFile; @@ -171,7 +169,6 @@ public interface ISysFileInfoService { * 根据文件标识获取文件实体 * * @param fileIdentifier 文件标识 - * @return 文件实体 */ - R getFileEntityByIdentifier(String fileIdentifier); + void getFileEntityByIdentifier(HttpServletResponse response, String fileIdentifier); } diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index dd34de6d1..0f05b6b2c 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -5,7 +5,6 @@ import com.alibaba.fastjson2.JSONObject; import com.j256.simplemagic.ContentInfo; import com.j256.simplemagic.ContentInfoUtil; import com.microservices.common.core.constant.Constants; -import com.microservices.common.core.domain.R; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; @@ -20,7 +19,6 @@ import com.microservices.common.security.utils.SecurityUtils; import com.microservices.file.mapper.SysFileInfoMapper; import com.microservices.file.service.ISysFileInfoService; import com.microservices.file.utils.FileUploadUtils; -import com.microservices.system.api.domain.SysFileBytes; import com.microservices.system.api.domain.SysFileInfo; import com.microservices.system.api.model.LoginUser; import org.slf4j.Logger; @@ -34,8 +32,9 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; -import java.nio.file.Files; +import java.io.OutputStream; import java.nio.file.Paths; import java.text.DecimalFormat; import java.util.ArrayList; @@ -511,23 +510,31 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { } @Override - public R getFileEntityByIdentifier(String fileIdentifier) { - SysFileBytes fileEntity = new SysFileBytes(); + public void getFileEntityByIdentifier(HttpServletResponse response, String fileIdentifier) { SysFileInfo sysFileInfo = selectSysFileInfoByFileIdentifier(fileIdentifier); String filePath = localFilePath + sysFileInfo.getFilePath(); File file = new File(filePath); if (!file.exists()) { throw new ServiceException("该文件不存在"); } - byte[] fileBytes; + response.setHeader("FileName", sysFileInfo.getFileOriginName()); try { - fileBytes = Files.readAllBytes(file.toPath()); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + + try (FileInputStream fileInputStream = new FileInputStream(file); + OutputStream outputStream = response.getOutputStream()) { + // 根据实际情况调整缓冲区大小 + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = fileInputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + } } catch (IOException e) { - throw new ServiceException("文件流读取失败:", e.getMessage()); + throw new ServiceException("文件读取失败", e); } - fileEntity.setFileBytes(fileBytes); - fileEntity.setFileName(sysFileInfo.getFileOriginName()); - return R.ok(fileEntity); } private void fileDownload(SysFileInfo sysFileInfo, HttpServletResponse response) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java index 3f59ab873..c342820fe 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java @@ -35,6 +35,20 @@ public class PmsProductLibraryController extends BaseController { @Autowired private IPmsProductLibraryComponentService pmsProductLibraryComponentService; + /** + * 获取产品库制品列表 + */ +// @RequiresPermissions("pms:pmsProductLibraryRepositories:list") + @GetMapping("/componentList") + @ApiOperation(value = "获取产品库制品列表") + public GenericsTableDataInfo selectComponentList( + @PathVariable String enterpriseIdentifier, + @ApiParam(value = "产品库制品查询条件") PmsProductLibraryComponentSearchVo search) { + search.setPmsEnterpriseIdentifier(enterpriseIdentifier); + startPage(); + return pmsProductLibraryProductRepoService.selectComponentList(search); + } + /** * 查询制品库-仓库列表 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java index 77cb3f403..aabfb5cd7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java @@ -3,6 +3,7 @@ package com.microservices.pms.productLibrary.domain; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.annotation.JsonInclude; import com.microservices.common.core.utils.StringUtils; +import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.utils.sign.Base64; import com.microservices.common.core.web.domain.BaseEntity; import com.microservices.pms.productLibrary.domain.vo.*; @@ -173,4 +174,10 @@ public class PmsProductLibraryComponent extends BaseEntity { target.setDirectory(this.getGroup()); return target; } + + public PmsProductLibraryComponentDataVo toPmsProductLibraryComponentDataVo() { + PmsProductLibraryComponentDataVo target = new PmsProductLibraryComponentDataVo(); + BeanUtils.copyProperties(this, target); + return target; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java new file mode 100644 index 000000000..3bcdd57c2 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java @@ -0,0 +1,97 @@ +package com.microservices.pms.productLibrary.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 制品库数据对象 + * + * @author otto + * @date 2024-07-11 + */ +@Data +@ApiModel("产品库制品数据对象") +public class PmsProductLibraryComponentDataVo { + + /** + * 制品ID + */ + private Long id; + + /** + * 制品标识 + */ + @ApiModelProperty(value = "制品标识") + private String identifier; + + /** + * 制品路径 + */ + @ApiModelProperty(value = "制品路径") + private String path; + + /** + * 制品所在组 + */ + @ApiModelProperty(value = "制品所在组") + private String group; + + /** + * 制品名称 + */ + @ApiModelProperty(value = "制品名称") + private String name; + + /** + * 制品库Id + */ + @ApiModelProperty(value = "制品库Id") + private Long repoId; + + /** + * 制品版本 + */ + @ApiModelProperty(value = "制品版本") + private String version; + + /** + * 制品文件Id + */ + @ApiModelProperty(value = "制品文件Id") + private String fileIdentifier; + + /** + * 制品下载地址 + */ + @ApiModelProperty(value = "制品下载地址") + private String downloadUrl; + /** + * 创建者 + */ + @ApiModelProperty(value = "创建者", hidden = true) + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间", hidden = true) + private Date createTime; + + /** + * 更新者 + */ + @ApiModelProperty(value = "更新者", hidden = true) + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间", hidden = true) + private Date updateTime; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentSearchVo.java new file mode 100644 index 000000000..ee0897ba7 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentSearchVo.java @@ -0,0 +1,26 @@ +package com.microservices.pms.productLibrary.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 制品库数据对象 + * + * @author otto + * @date 2024-07-11 + */ +@Data +@ApiModel("产品库制品查询对象") +public class PmsProductLibraryComponentSearchVo { + @ApiModelProperty(value = "需排除的制品Id列表(逗号分割的字符串)") + private String excludeIds; + @ApiModelProperty(value = "产品库标识") + private String productRepoName; + /** + * 关联企业ID + */ + @ApiModelProperty(value = "关联企业标识", hidden = true) + private String pmsEnterpriseIdentifier; + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java index 691bc26ce..b46e7c3e9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java @@ -1,6 +1,7 @@ package com.microservices.pms.productLibrary.mapper; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; +import com.microservices.pms.productLibrary.domain.vo.PmsProductLibraryComponentSearchVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -90,6 +91,14 @@ public interface PmsProductLibraryComponentMapper { */ List selectPmsProductLibraryComponentUnderThePath(@Param("path") String path, @Param("repoId") Long repoId, @Param("pmsEnterpriseId") Long pmsEnterpriseId); + /** + * 查询产品库制品列表 + * + * @param search 查询条件 + * @return 制品列表 + */ + List selectProductRepoComponentList(PmsProductLibraryComponentSearchVo search); + /** * 通过制品标识查询制品 * diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java index 6fbc2b91a..79acba63c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java @@ -129,4 +129,5 @@ public interface PmsProductLibraryRepositoriesMapper { List selectPmsProductLibrarySnapshotPageList(@Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier, @Param("repoName") String repoName, @Param("snapshotName") String snapshotName); + PmsProductLibraryRepositories selectProductRepoById(Long repoId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryProductRepoService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryProductRepoService.java index fc6563de9..2958f0766 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryProductRepoService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryProductRepoService.java @@ -75,5 +75,7 @@ public interface IPmsProductLibraryProductRepoService { */ NexusComponentResultVo> selectPmsProductLibraryKeyComponentList(String enterpriseIdentifier, ComponentSearchVo componentSearchVo); + GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search); + boolean addDockerComponentToProductRepo(DockerComponentAddToProductRepoVo dockerComponentAddToProductRepoVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryRepositoriesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryRepositoriesService.java index b974549f3..f4b14c123 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryRepositoriesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryRepositoriesService.java @@ -129,4 +129,6 @@ public interface IPmsProductLibraryRepositoriesService { * @return 锁定中的制品库id列表 */ List getLockStatusRepositoryList(String enterpriseIdentifier, String repoIds); + + PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesById(Long repoId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java index 8672d5c26..b62d3af1c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java @@ -22,7 +22,6 @@ import com.microservices.pms.utils.NexusRequestUrl; import com.microservices.pms.utils.PmsUtils; import com.microservices.system.api.RemoteFileService; import com.microservices.system.api.domain.SysFileBytes; -import com.microservices.system.api.utils.FeignUtils; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.slf4j.Logger; @@ -426,14 +425,12 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary if (assetMavenInputVo.getFileBytes() != null) { fileBytes = assetMavenInputVo.getFileBytes(); } else { - fileBytes = FeignUtils.getReturnData( - fileService.getFileEntityByIdentifier(assetMavenInputVo.getFileIdentifier(), SecurityConstants.INNER) - ); - if (fileBytes == null) { - throw new ServiceException("制品文件读取失败"); - } + fileBytes = PmsUtils.getFeignFile(fileService.getFileEntityByIdentifier(assetMavenInputVo.getFileIdentifier(), SecurityConstants.INNER)); } - builder.addBinaryBody(String.format("maven2.asset%d", i + 1), fileBytes.getFileBytes(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); + if (fileBytes == null || fileBytes.getFileInputStream() == null) { + throw new ServiceException("制品文件读取失败"); + } + builder.addBinaryBody(String.format("maven2.asset%d", i + 1), fileBytes.getFileInputStream(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); } JSONObject bodyLog = toBodyLog(componentMavenInputVo); nexusRequestHelper.doRequest(NexusRequestUrl.UPLOAD_COMPONENTS(componentMavenInputVo.getNexusRepoName()), builder.build(), bodyLog); @@ -487,20 +484,13 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary SysFileBytes fileBytes; if (assetRawInputVo.getFileBytes() != null) { fileBytes = assetRawInputVo.getFileBytes(); - if (fileBytes.getFileInputStream() != null) { - builder.addBinaryBody(String.format("raw.asset%d", i + 1), fileBytes.getFileInputStream(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); - } else { - builder.addBinaryBody(String.format("raw.asset%d", i + 1), fileBytes.getFileBytes(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); - } } else { - fileBytes = FeignUtils.getReturnData( - fileService.getFileEntityByIdentifier(assetRawInputVo.getFileIdentifier(), SecurityConstants.INNER) - ); - if (fileBytes == null) { - throw new ServiceException("制品文件读取失败"); - } - builder.addBinaryBody(String.format("raw.asset%d", i + 1), fileBytes.getFileBytes(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); + fileBytes = PmsUtils.getFeignFile(fileService.getFileEntityByIdentifier(assetRawInputVo.getFileIdentifier(), SecurityConstants.INNER)); } + if (fileBytes == null || fileBytes.getFileInputStream() == null) { + throw new ServiceException("制品文件读取失败"); + } + builder.addBinaryBody(String.format("raw.asset%d", i + 1), fileBytes.getFileInputStream(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); } JSONObject bodyLog = toBodyLog(componentRawInputVo); nexusRequestHelper.doRequest(NexusRequestUrl.UPLOAD_COMPONENTS(componentRawInputVo.getNexusRepoName()), builder.build(), bodyLog); @@ -535,15 +525,13 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary if (componentInputVo.getFileBytes() != null) { fileBytes = componentInputVo.getFileBytes(); } else { - fileBytes = FeignUtils.getReturnData( - fileService.getFileEntityByIdentifier(componentInputVo.getFileIdentifier(), SecurityConstants.INNER) - ); - if (fileBytes == null) { - throw new ServiceException("制品文件读取失败"); - } + fileBytes = PmsUtils.getFeignFile(fileService.getFileEntityByIdentifier(componentInputVo.getFileIdentifier(), SecurityConstants.INNER)); + } + if (fileBytes == null || fileBytes.getFileInputStream() == null) { + throw new ServiceException("制品文件读取失败"); } - builder.addBinaryBody("npm.asset", fileBytes.getFileBytes(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); + builder.addBinaryBody("npm.asset", fileBytes.getFileInputStream(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); JSONObject bodyLog = toBodyLog(componentInputVo); try { nexusRequestHelper.doRequest(NexusRequestUrl.UPLOAD_COMPONENTS(componentInputVo.getNexusRepoName()), builder.build(), bodyLog); @@ -574,15 +562,12 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary if (componentInputVo.getFileBytes() != null) { fileBytes = componentInputVo.getFileBytes(); } else { - fileBytes = FeignUtils.getReturnData( - fileService.getFileEntityByIdentifier(componentInputVo.getFileIdentifier(), SecurityConstants.INNER) - ); + fileBytes = PmsUtils.getFeignFile(fileService.getFileEntityByIdentifier(componentInputVo.getFileIdentifier(), SecurityConstants.INNER)); } - - if (fileBytes == null) { + if (fileBytes == null || fileBytes.getFileInputStream() == null) { throw new ServiceException("制品文件读取失败"); } - builder.addBinaryBody("pypi.asset1", fileBytes.getFileBytes(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); + builder.addBinaryBody("pypi.asset1", fileBytes.getFileInputStream(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); JSONObject bodyLog = toBodyLog(componentInputVo); JSONObject res; try { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryProductRepoServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryProductRepoServiceImpl.java index b98fcdd8f..e79127c22 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryProductRepoServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryProductRepoServiceImpl.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * @author OTTO @@ -66,6 +67,15 @@ public class PmsProductLibraryProductRepoServiceImpl implements IPmsProductLibra return pmsProductLibraryRepositories; } + private PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesById(Long repoId) { + PmsProductLibraryRepositories pmsProductLibraryRepositories = + pmsProductLibraryRepositoriesMapper.selectProductRepoById(repoId); + if (pmsProductLibraryRepositories == null) { + throw new ServiceException("组织下不存在该产品库(产品库id[%d])", repoId); + } + return pmsProductLibraryRepositories; + } + @Override public GenericsTableDataInfo selectPmsProductLibraryPageList(String enterpriseIdentifier, String name) { return PageUtils.toPage(pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryList(enterpriseIdentifier, name), PmsProductLibraryRepositories::toPmsProductLibrarySimpleVo); @@ -261,7 +271,22 @@ public class PmsProductLibraryProductRepoServiceImpl implements IPmsProductLibra pmsProductLibraryAsyncService.asyncAddDockerComponentToProductRepo(productRepo, repo, nexusComponentResultDataVoList, dockerComponentAddToProductRepoVo.getDirectory()); return true; } + @Override + public GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search) { + List pmsProductLibraryComponentList = + pmsProductLibraryComponentMapper.selectProductRepoComponentList(search); + List repoIdList = pmsProductLibraryComponentList.stream().map(PmsProductLibraryComponent::getRepoId).distinct().collect(Collectors.toList()); + List repoList = repoIdList.stream().map(this::selectPmsProductLibraryRepositoriesById).collect(Collectors.toList()); + return PageUtils.toPage(pmsProductLibraryComponentList, x -> toPmsProductLibraryComponentDataVo(x, repoList)); + } + private PmsProductLibraryComponentDataVo toPmsProductLibraryComponentDataVo(PmsProductLibraryComponent component, List repoList) { + PmsProductLibraryComponentDataVo pmsProductLibraryComponentDataVo = component.toPmsProductLibraryComponentDataVo(); + repoList.stream().filter(x -> x.getId().equals(component.getRepoId())).findFirst().ifPresent(repo -> pmsProductLibraryComponentDataVo.setDownloadUrl( + EscapeUtil.removeExtraSlashOfUrl( + String.format("%s/%s", repo.getUrl(), component.getPath())))); + return pmsProductLibraryComponentDataVo; + } private void setNexusResultDataVoChoose(PmsProductLibraryRepositories productRepo, List productComponentList, List nexusResultDataVoList, boolean isDocker) { for (PmsProductLibraryComponent component : productComponentList) { nexusResultDataVoList.forEach(x -> { @@ -277,7 +302,6 @@ public class PmsProductLibraryProductRepoServiceImpl implements IPmsProductLibra }); } } - private void setNexusResultDataVoPath(PmsProductLibraryRepositories repo, List nexusResultDataVoList) { nexusResultDataVoList.forEach(x -> { if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { @@ -287,7 +311,6 @@ public class PmsProductLibraryProductRepoServiceImpl implements IPmsProductLibra } }); } - private NexusComponentResultVo> buildDockerResultVo(List data) { NexusComponentResultVo> target = new NexusComponentResultVo<>(); target.setAction("coreui_Browse"); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryRepositoriesServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryRepositoriesServiceImpl.java index a9c55ea35..ab15b6d17 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryRepositoriesServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryRepositoriesServiceImpl.java @@ -50,6 +50,16 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr return pmsProductLibraryRepositories; } + @Override + public PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesById(Long repoId) { + PmsProductLibraryRepositories pmsProductLibraryRepositories = + pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryRepositoriesById(repoId); + if (pmsProductLibraryRepositories == null) { + throw new ServiceException("组织下不存在该制品库(制品库id[%s])", repoId); + } + return pmsProductLibraryRepositories; + } + @Override public NexusHostedRepoInputVo getNexusRepo(String type, String format, String nexusRepoName) { NexusHostedRepoInputVo nexusRepo = nexusRequestHelper.doRequestToJavaObject( diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/NexusRequestHelper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/NexusRequestHelper.java index e85024f38..34d896c5d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/NexusRequestHelper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/NexusRequestHelper.java @@ -285,7 +285,6 @@ public class NexusRequestHelper { if (res == null) { return null; } - return JSONObject.parseObject(res.toJSONString(), buildType(ownerClass, List.class, rawClass)); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsUtils.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsUtils.java index 829041dcc..44c7b79e1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsUtils.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsUtils.java @@ -2,7 +2,11 @@ package com.microservices.pms.utils; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.ServletUtils; +import com.microservices.system.api.domain.SysFileBytes; +import feign.Response; +import java.io.IOException; +import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.UUID; @@ -95,4 +99,17 @@ public class PmsUtils { } return ""; } + + public static SysFileBytes getFeignFile(Response response) { + try { + InputStream inputStream = response.body().asInputStream(); + String fileName = response.headers().get("FileName") + ""; + SysFileBytes sysFileBytes = new SysFileBytes(); + sysFileBytes.setFileInputStream(inputStream); + sysFileBytes.setFileName(fileName); + return sysFileBytes; + } catch (IOException e) { + throw new ServiceException("获取文件失败:" + e.getMessage()); + } + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml index 091bd686d..d07858b2d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml @@ -49,6 +49,33 @@ from pms_product_library_component + + select pplc.id, + pplc.identifier, + pplc.path, + pplc.`group`, + pplc.name, + pplc.repo_id, + pplc.version, + pplc.file_identifier, + pplc.dept_id, + pplc.pms_enterprise_id, + pplc.update_time, + pplc.update_by, + pplc.create_time, + pplc.create_by, + pplc.del_flag, + pplc.attributes, + pplc.reserved_field_1, + pplc.reserved_field_2, + pplc.reserved_field_3, + pe.enterprise_identifier, + pplr.format + from pms_product_library_component as pplc + left join pms_enterprise as pe on pplc.pms_enterprise_id = pe.id + left join pms_product_library_repositories as pplr on pplr.id = pplc.repo_id + + + @@ -135,6 +136,11 @@ and pe.enterprise_identifier = #{pmsEnterpriseIdentifier} and pplr.snapshot_name IS NOT NULL +