diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java index 1804b5277..5ffd7bde1 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java @@ -170,10 +170,10 @@ public class CacheConstants /** * 锁定企业下制品库 Key前缀 */ - public final static String LOCK_ENTERPRISE_IDENTIFIER_REPO_KEY = "lock_enterprise_identifier_repo_key:"; + public final static String LOCK_ENTERPRISE_IDENTIFIER_REPO_ID_KEY = "lock_enterprise_identifier_repo_id_key:"; - public static String getLockEnterpriseIdentifierRepoKey(String enterpriseIdentifier, String repoName) { - return LOCK_ENTERPRISE_IDENTIFIER_REPO_KEY + enterpriseIdentifier + ":" + repoName; + public static String getLockEnterpriseIdentifierRepoIdKey(String enterpriseIdentifier, Long repoId) { + return LOCK_ENTERPRISE_IDENTIFIER_REPO_ID_KEY + enterpriseIdentifier + ":" + repoId; } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryRepositoriesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryRepositoriesController.java index f40bcde52..177b12b30 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryRepositoriesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryRepositoriesController.java @@ -35,11 +35,11 @@ public class PmsProductLibraryRepositoriesController extends BaseController { * 获取制品库锁定状态 */ // @RequiresPermissions("pms:pmsProductLibraryRepositories:list") - @GetMapping("/lockStatus/{repoName}") + @GetMapping("/lockStatus/{repoId}") @ApiOperation(value = "获取制品库锁定状态") public GenericsAjaxResult getRepoLockStatus(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "制品库名称", required = true) @PathVariable String repoName) { - return GenericsAjaxResult.success(pmsProductLibraryRepositoriesService.getLockRepositoryStatus(enterpriseIdentifier, repoName)); + @ApiParam(value = "制品库Id", required = true) @PathVariable Long repoId) { + return GenericsAjaxResult.success(pmsProductLibraryRepositoriesService.getLockRepositoryStatus(enterpriseIdentifier, repoId)); } /** 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 40af0381f..0c5d0b3d9 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 @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.sign.Base64; import com.microservices.common.core.web.domain.BaseEntity; +import com.microservices.pms.productLibrary.domain.vo.AssetMavenInputVo; import com.microservices.pms.productLibrary.domain.vo.ComponentMavenInputVo; import com.microservices.pms.productLibrary.domain.vo.NexusMavenAssetVo; import io.swagger.annotations.ApiModel; @@ -13,6 +14,9 @@ import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; + /** * 制品库-制品对象 pms_product_library_component * @@ -133,8 +137,25 @@ public class PmsProductLibraryComponent extends BaseEntity { this.setAttributes(JSONObject.toJSONString(nexusMavenAssetVo)); } - public ComponentMavenInputVo toComponentMavenInputVo() { + public ComponentMavenInputVo toComponentMavenInputVo(PmsProductLibraryRepositories snapshotRepo) { ComponentMavenInputVo target = new ComponentMavenInputVo(); + target.setRepoName(snapshotRepo.getName()); + target.setSnapshotName(snapshotRepo.getSnapshotName()); + target.setEnterpriseIdentifier(snapshotRepo.getPmsEnterpriseIdentifier()); + JSONObject attributesObj = JSONObject.parseObject(this.getAttributes()); + JSONObject mavenObj = attributesObj.getJSONObject("maven2"); + AssetMavenInputVo assetMavenInputVo = new AssetMavenInputVo(); + assetMavenInputVo.setClassifier(mavenObj.getString("classifier")); + assetMavenInputVo.setExtension(mavenObj.getString("extension")); + assetMavenInputVo.setFileIdentifier(this.getFileIdentifier()); + List assetMavenInputVoList = new ArrayList<>(); + assetMavenInputVoList.add(assetMavenInputVo); + target.setAssetList(assetMavenInputVoList); + target.setGroupId(mavenObj.getString("groupId")); + target.setArtifactId(mavenObj.getString("artifactId")); + target.setVersion(this.getVersion()); + // 不自动生成POM文件 + target.setGeneratePom(false); return target; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java index 8bf62196e..5fa2e15ea 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java @@ -167,7 +167,12 @@ public class PmsProductLibraryRepositories extends BaseEntity { } public String getNexusRepositoriesName() { - return getNexusRepositoriesName(pmsEnterpriseIdentifier, name); + if (StringUtils.isEmpty(snapshotName)) { + return getNexusRepositoriesName(pmsEnterpriseIdentifier, name); + } else { + return getNexusProductRepositoriesSnapshotName(pmsEnterpriseIdentifier, name, snapshotName); + } + } public String getNexusProductRepositoriesName() { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetMavenInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetMavenInputVo.java index f73086727..4c595c989 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetMavenInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetMavenInputVo.java @@ -23,6 +23,8 @@ public class AssetMavenInputVo { @ApiModelProperty(value = "文件标识") @NotBlank(message = "制品文件标识不能为空") private String fileIdentifier; + @ApiModelProperty(value = "文件流", hidden = true) + private byte[] fileBytes; public String getComponentAssetName(ComponentMavenInputVo componentMavenInputVo) { return String.format("%s-%s-%s.%s", diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetRawInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetRawInputVo.java index eaacf9289..06d39897e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetRawInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/AssetRawInputVo.java @@ -21,6 +21,6 @@ public class AssetRawInputVo { @ApiModelProperty(value = "文件标识") @NotBlank(message = "文件标识不能为空") private String fileIdentifier; - @ApiModelProperty(value = "文件标识", hidden = true) + @ApiModelProperty(value = "文件流", hidden = true) private byte[] fileBytes; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentMavenInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentMavenInputVo.java index de76a763b..23470cd6f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentMavenInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentMavenInputVo.java @@ -1,5 +1,6 @@ package com.microservices.pms.productLibrary.domain.vo; +import com.microservices.common.core.utils.StringUtils; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; import io.swagger.annotations.ApiModel; @@ -22,6 +23,8 @@ import java.util.List; public class ComponentMavenInputVo { @ApiModelProperty(value = "制品库名称", hidden = true) private String repoName; + @ApiModelProperty(value = "快照库名称", hidden = true) + private String snapshotName; @ApiModelProperty(value = "组织标识", hidden = true) private String enterpriseIdentifier; @ApiModelProperty(value = "文件列表") @@ -43,10 +46,19 @@ public class ComponentMavenInputVo { private String packaging; public String getNexusRepoName() { - return PmsProductLibraryRepositories.getNexusRepositoriesName( - enterpriseIdentifier, - repoName - ); + if (StringUtils.isEmpty(snapshotName)) { + return PmsProductLibraryRepositories.getNexusRepositoriesName( + enterpriseIdentifier, + repoName + ); + } else { + return PmsProductLibraryRepositories.getNexusProductRepositoriesSnapshotName( + enterpriseIdentifier, + repoName, + snapshotName + ); + } + } public String getPomComponentName() { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java index c116010df..f6e423339 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java @@ -30,14 +30,6 @@ public interface IPmsProductLibraryComponentService { */ public NexusComponentResultVo> selectPmsProductLibraryComponentListByNexus(String enterpriseIdentifier, ComponentSearchVo componentSearchVo, boolean isProduct); - /** - * 新增制品库-制品 - * - * @param pmsProductLibraryComponent 制品库-制品 - * @return 结果 - */ - public int insertPmsProductLibraryComponent(PmsProductLibraryComponent pmsProductLibraryComponent); - /** * 修改制品库-制品 * 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 e8ac2cafc..6b2ea73f4 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 @@ -167,11 +167,13 @@ public interface IPmsProductLibraryRepositoriesService { */ boolean insertPmsProductLibrarySnapshot(ProductRepositoriesSnapshotInputVo productRepositoriesSnapshotInputVo); - void checkLockRepositoryStatus(String enterpriseIdentifier, String repoName); + void checkLockRepositoryStatus(String enterpriseIdentifier, Long repoId); - void lockRepository(String enterpriseIdentifier, String repoName); + void lockRepository(String enterpriseIdentifier, Long repoId); - void unlockRepository(String enterpriseIdentifier, String repoName); + void unlockRepository(String enterpriseIdentifier, Long repoId); - Boolean getLockRepositoryStatus(String enterpriseIdentifier, String repoName); + Boolean getLockRepositoryStatus(String enterpriseIdentifier, Long repoId); + + PmsProductLibraryRepositories selectPmsProductLibrarySnapshotByName(String enterpriseIdentifier, String repoName, String snapshotName); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 928f0d39e..db77e9419 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -12,6 +12,8 @@ import com.microservices.pms.productLibrary.service.IPmsProductLibraryRepositori import com.microservices.pms.utils.CustomExecutorFactory; import com.microservices.pms.utils.NexusRequestHelper; import com.microservices.pms.utils.NexusRequestUrl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -25,6 +27,7 @@ import java.util.List; @Service public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyncService { + private static final Logger log = LoggerFactory.getLogger(PmsProductLibraryAsyncServiceImpl.class); @Autowired private NexusRequestHelper nexusRequestHelper; @Autowired @@ -68,7 +71,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn @Override public void asyncAddCommonAssetToProductRepo(PmsProductLibraryRepositories productRepo, PmsProductLibraryRepositories repo, List nexusAssetResultDataVoList) { CustomExecutorFactory.threadPoolExecutor.execute(() -> { - pmsProductLibraryRepositoriesService.lockRepository(repo.getPmsEnterpriseIdentifier(), repo.getName()); + pmsProductLibraryRepositoriesService.lockRepository(repo.getPmsEnterpriseIdentifier(), repo.getId()); for (NexusAssetResultDataVo nexusAssetResultDataVo : nexusAssetResultDataVoList) { if (StringUtils.isEmpty(nexusAssetResultDataVo.getVersion())) { nexusAssetResultDataVo.setVersion(""); @@ -93,44 +96,73 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn insertRawComponentToProductRepo(productRepo, repo, nexusAssetResultDataVo, assetRawInputVoList); } } - pmsProductLibraryRepositoriesService.unlockRepository(repo.getPmsEnterpriseIdentifier(), repo.getName()); + pmsProductLibraryRepositoriesService.unlockRepository(repo.getPmsEnterpriseIdentifier(), repo.getId()); }); } @Override public void syncRepoToSnapshotRepo(PmsProductLibraryRepositories repo, PmsProductLibraryRepositories snapshotRepo) { - pmsProductLibraryRepositoriesService.lockRepository(repo.getPmsEnterpriseIdentifier(), repo.getName()); - ProductLibraryRepositoriesFormatEnum formatEnum = ProductLibraryRepositoriesFormatEnum.getByKey(repo.getFormat()); - switch (formatEnum) { - case MAVEN: { + CustomExecutorFactory.threadPoolExecutor.execute(() -> { + try { + pmsProductLibraryRepositoriesService.lockRepository(repo.getPmsEnterpriseIdentifier(), repo.getId()); + ProductLibraryRepositoriesFormatEnum formatEnum = ProductLibraryRepositoriesFormatEnum.getByKey(repo.getFormat()); + switch (formatEnum) { + case MAVEN: { + syncMavenRepoToSnapshotRepo(repo, snapshotRepo); + break; + } + case NPM: { + break; + } + case PYPI: { + break; + } + case RAW: + case GO: + case CONDA: + case XXXXX: { + break; + } + } + } catch (Exception e) { + log.error("同步制品库制品到快照库时失败(制品库id[{}],快照库id[{}]):{}", repo.getId(), snapshotRepo.getId(), e.getMessage()); + } finally { + pmsProductLibraryRepositoriesService.unlockRepository(repo.getPmsEnterpriseIdentifier(), repo.getId()); + } - break; - } - case NPM: { - break; - } - case PYPI: { - break; - } - case RAW: - case GO: - case CONDA: - case XXXXX: { - break; - } - } - pmsProductLibraryRepositoriesService.unlockRepository(repo.getPmsEnterpriseIdentifier(), repo.getName()); + }); } private void syncMavenRepoToSnapshotRepo(PmsProductLibraryRepositories repo, PmsProductLibraryRepositories snapshotRepo) { List pmsProductLibraryComponentList = pmsProductLibraryComponentService.selectPmsProductLibraryComponentListByDatabase(repo.getId()); for (PmsProductLibraryComponent pmsProductLibraryComponent : pmsProductLibraryComponentList) { - ComponentMavenInputVo componentMavenInputVo = pmsProductLibraryComponent.toComponentMavenInputVo(); - pmsProductLibraryComponentService.insertMavenComponent(componentMavenInputVo); + ComponentMavenInputVo componentMavenInputVo = pmsProductLibraryComponent.toComponentMavenInputVo(snapshotRepo); + List assetMavenInputVoList = getAssetMavenInputVoList(repo, pmsProductLibraryComponent, componentMavenInputVo); + if (assetMavenInputVoList != null) { + componentMavenInputVo.setAssetList(assetMavenInputVoList); + pmsProductLibraryComponentService.insertMavenComponent(componentMavenInputVo); + } } } + private List getAssetMavenInputVoList(PmsProductLibraryRepositories repo, PmsProductLibraryComponent pmsProductLibraryComponent, ComponentMavenInputVo componentMavenInputVo) { + List assetMavenInputVoList = componentMavenInputVo.getAssetList(); + for (AssetMavenInputVo assetMavenInputVo : assetMavenInputVoList) { + if (StringUtils.isEmpty(assetMavenInputVo.getFileIdentifier())) { + assetMavenInputVo.setFileIdentifier(""); + String nexusFileUrl = + EscapeUtil.removeExtraSlashOfUrl(repo.getUrl() + "/" + pmsProductLibraryComponent.getPath()); + byte[] fileBytes = nexusRequestHelper.getFileBytes(nexusFileUrl); + if (fileBytes == null) { + return null; + } + assetMavenInputVo.setFileBytes(fileBytes); + } + } + return assetMavenInputVoList; + } + private void insertRawComponentToProductRepo(PmsProductLibraryRepositories productRepo, PmsProductLibraryRepositories repo, NexusAssetResultDataVo nexusAssetResultDataVo, 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 702ca5755..f86e5988d 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 @@ -63,14 +63,19 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary return pmsProductLibraryComponentMapper.selectPmsProductLibraryComponentById(id); } - private PmsProductLibraryRepositories getPmsProductLibraryRepositoriesByIsProduct(Boolean isProduct, String enterpriseIdentifier, String repoName) { + private PmsProductLibraryRepositories getPmsProductLibraryRepositories(Boolean isProduct, String enterpriseIdentifier, String repoName, String snapshotName) { PmsProductLibraryRepositories pmsProductLibraryRepositories; if (isProduct) { pmsProductLibraryRepositories = pmsProductLibraryRepositoriesService.selectPmsProductLibraryByName(enterpriseIdentifier, repoName); } else { - pmsProductLibraryRepositories = - pmsProductLibraryRepositoriesService.selectPmsProductLibraryRepositoriesByName(enterpriseIdentifier, repoName); + if (StringUtils.isNotEmpty(snapshotName)) { + pmsProductLibraryRepositories = + pmsProductLibraryRepositoriesService.selectPmsProductLibrarySnapshotByName(enterpriseIdentifier, repoName, snapshotName); + } else { + pmsProductLibraryRepositories = + pmsProductLibraryRepositoriesService.selectPmsProductLibraryRepositoriesByName(enterpriseIdentifier, repoName); + } } return pmsProductLibraryRepositories; } @@ -86,7 +91,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo> selectPmsProductLibraryComponentListByNexus(String enterpriseIdentifier, ComponentSearchVo componentSearchVo, boolean isProduct) { PmsProductLibraryRepositories pmsProductLibraryRepositories = - getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, componentSearchVo.getRepositoryName()); + getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, componentSearchVo.getRepositoryName(), null); componentSearchVo.setRepositoryName(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct)); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toRead(componentSearchVo, nexusRequestHelper.getNexusTid()); @@ -114,7 +119,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo> selectPmsProductLibraryKeyComponentList(String enterpriseIdentifier, ComponentSearchVo componentSearchVo) { PmsProductLibraryRepositories repo = - getPmsProductLibraryRepositoriesByIsProduct(false, enterpriseIdentifier, componentSearchVo.getRepositoryName()); + getPmsProductLibraryRepositories(false, enterpriseIdentifier, componentSearchVo.getRepositoryName(), null); componentSearchVo.setRepositoryName(repo.getNexusRepositoriesName(false)); // Docker类型调用Nexus获取制品列表接口获取 if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { @@ -228,7 +233,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo getAssetDetailByAssetId(String enterpriseIdentifier, String repoName, String assetId, boolean isProduct) { - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, repoName); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, repoName, null); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toReadAsset(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), assetId, nexusRequestHelper.getNexusTid()); NexusComponentResultVo assetResultDataVo = @@ -281,7 +286,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo getComponentDetailByComponentId(String enterpriseIdentifier, String repoName, String componentId, boolean isProduct) { - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, repoName); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, repoName, null); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toReadComponent(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), componentId, nexusRequestHelper.getNexusTid()); NexusComponentResultVo componentResultVo = @@ -318,7 +323,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo getCanDeleteFolderByNode(String enterpriseIdentifier, ComponentSearchVo componentSearchVo, boolean isProduct) { - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, componentSearchVo.getRepositoryName()); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, componentSearchVo.getRepositoryName(), null); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toCanDeleteFolder(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), componentSearchVo.getNode(), nexusRequestHelper.getNexusTid()); return nexusRequestHelper.doRequestToJavaObject( @@ -331,7 +336,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo getCanDeleteComponentByComponentId(String enterpriseIdentifier, String repoName, String componentId, boolean isProduct) { - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, repoName); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, repoName, null); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toCanDeleteComponent(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), componentId, nexusRequestHelper.getNexusTid()); return nexusRequestHelper.doRequestToJavaObject( @@ -344,7 +349,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo getCanDeleteAssetByAssetId(String enterpriseIdentifier, String repoName, String assetId, boolean isProduct) { - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, repoName); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, repoName, null); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toCanDeleteAsset(pmsProductLibraryRepositories.getNexusRepositoriesName(), assetId, nexusRequestHelper.getNexusTid()); return nexusRequestHelper.doRequestToJavaObject( @@ -357,8 +362,8 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo> deleteAssetByAssetId(String enterpriseIdentifier, String repoName, String assetId, boolean isProduct) { - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(enterpriseIdentifier, repoName); - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, repoName); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, repoName, null); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(enterpriseIdentifier, pmsProductLibraryRepositories.getId()); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toDeleteAsset(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), assetId, nexusRequestHelper.getNexusTid()); NexusComponentResultVo> assetResultDataVo = @@ -374,8 +379,8 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo> deleteComponentByComponentId(String enterpriseIdentifier, String repoName, String componentId, boolean isProduct) { - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(enterpriseIdentifier, repoName); - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, repoName); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, repoName, null); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(enterpriseIdentifier, pmsProductLibraryRepositories.getId()); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toDeleteComponent(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), componentId, nexusRequestHelper.getNexusTid()); NexusComponentResultVo> assetResultDataVo = @@ -391,8 +396,8 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public NexusComponentResultVo deleteFolderByNode(String enterpriseIdentifier, ComponentSearchVo componentSearchVo, boolean isProduct) { - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(enterpriseIdentifier, componentSearchVo.getRepositoryName()); - PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositoriesByIsProduct(isProduct, enterpriseIdentifier, componentSearchVo.getRepositoryName()); + PmsProductLibraryRepositories pmsProductLibraryRepositories = getPmsProductLibraryRepositories(isProduct, enterpriseIdentifier, componentSearchVo.getRepositoryName(), null); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(enterpriseIdentifier, pmsProductLibraryRepositories.getId()); NexusComponentSearchVo nexusComponentSearchVo = NexusComponentSearchVo.toDeleteFolder(pmsProductLibraryRepositories.getNexusRepositoriesName(isProduct), componentSearchVo.getNode(), nexusRequestHelper.getNexusTid()); NexusComponentResultVo assetResultDataVo = @@ -448,9 +453,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary * @param pmsProductLibraryComponent 制品库-制品 * @return 结果 */ - @Override public int insertPmsProductLibraryComponent(PmsProductLibraryComponent pmsProductLibraryComponent) { - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(pmsProductLibraryComponent.getPmsEnterpriseIdentifier(), pmsProductLibraryComponent.getName()); PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(pmsProductLibraryComponent.getPmsEnterpriseIdentifier()); PmsProductLibraryComponent oldPmsProductLibraryComponent = pmsProductLibraryComponentMapper.selectPmsProductLibraryComponentByPath( @@ -478,7 +481,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary */ @Override public int updatePmsProductLibraryComponent(PmsProductLibraryComponent pmsProductLibraryComponent) { - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(pmsProductLibraryComponent.getPmsEnterpriseIdentifier(), pmsProductLibraryComponent.getName()); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(pmsProductLibraryComponent.getPmsEnterpriseIdentifier(), pmsProductLibraryComponent.getId()); pmsProductLibraryComponent.setUpdateBy(SecurityUtils.getUsername()); pmsProductLibraryComponent.setUpdateTime(DateUtils.getNowDate()); return pmsProductLibraryComponentMapper.updatePmsProductLibraryComponent(pmsProductLibraryComponent); @@ -488,11 +491,13 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary public Boolean insertMavenComponent(ComponentMavenInputVo componentMavenInputVo) { // 构建制品列表,用于数据库记录 List pmsProductLibraryComponents = new ArrayList<>(); - PmsProductLibraryRepositories repo = - pmsProductLibraryRepositoriesService.selectPmsProductLibraryRepositoriesByName( - componentMavenInputVo.getEnterpriseIdentifier(), - componentMavenInputVo.getRepoName()); - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getName()); + PmsProductLibraryRepositories repo = getPmsProductLibraryRepositories( + false, + componentMavenInputVo.getEnterpriseIdentifier(), + componentMavenInputVo.getRepoName(), + componentMavenInputVo.getSnapshotName() + ); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getId()); if (!ProductLibraryRepositoriesFormatEnum.MAVEN.getKey().equals(repo.getFormat())) { throw new ServiceException("该制品库非Maven格式,无法上传(制品库名称[%s])", repo.getName()); } @@ -524,11 +529,17 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary pmsProductLibraryComponents.add(componentAsset); addTextBody(builder, String.format("maven2.asset%d.extension", i + 1), assetMavenInputVo.getExtension()); addTextBody(builder, String.format("maven2.asset%d.classifier", i + 1), assetMavenInputVo.getClassifier()); - SysFileBytes fileBytes = FeignUtils.getReturnData( - fileService.getFileEntityByIdentifier(assetMavenInputVo.getFileIdentifier(), SecurityConstants.INNER) - ); - if (fileBytes == null) { - throw new ServiceException("制品文件读取失败"); + SysFileBytes fileBytes = new SysFileBytes(); + if (assetMavenInputVo.getFileBytes() != null) { + fileBytes.setFileBytes(assetMavenInputVo.getFileBytes()); + fileBytes.setFileName(componentAssetName); + } else { + fileBytes = FeignUtils.getReturnData( + fileService.getFileEntityByIdentifier(assetMavenInputVo.getFileIdentifier(), SecurityConstants.INNER) + ); + if (fileBytes == null) { + throw new ServiceException("制品文件读取失败"); + } } builder.addBinaryBody(String.format("maven2.asset%d", i + 1), fileBytes.getFileBytes(), ContentType.DEFAULT_BINARY, fileBytes.getFileName()); } @@ -550,11 +561,11 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary public Boolean insertRawComponent(ComponentRawInputVo componentRawInputVo) { // 构建制品列表,用于数据库记录 List pmsProductLibraryComponents = new ArrayList<>(); - PmsProductLibraryRepositories repo = getPmsProductLibraryRepositoriesByIsProduct( + PmsProductLibraryRepositories repo = getPmsProductLibraryRepositories( ProductLibraryRepositoriesFormatEnum.isProduct(componentRawInputVo.getFormat()), componentRawInputVo.getEnterpriseIdentifier(), - componentRawInputVo.getRepoName()); - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getName()); + componentRawInputVo.getRepoName(), null); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getId()); if (!componentRawInputVo.getFormat().equals(repo.getFormat())) { throw new ServiceException("该制品库非%s格式,无法上传(制品库名称[%s])", componentRawInputVo.getFormat(), repo.getName()); @@ -610,7 +621,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary pmsProductLibraryRepositoriesService.selectPmsProductLibraryRepositoriesByName( componentInputVo.getEnterpriseIdentifier(), componentInputVo.getRepoName()); - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getName()); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getId()); if (!ProductLibraryRepositoriesFormatEnum.NPM.getKey().equals(repo.getFormat())) { throw new ServiceException("该制品库非Npm格式,无法上传(制品库名称[%s])", repo.getName()); } @@ -637,7 +648,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary pmsProductLibraryRepositoriesService.selectPmsProductLibraryRepositoriesByName( componentInputVo.getEnterpriseIdentifier(), componentInputVo.getRepoName()); - pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getName()); + pmsProductLibraryRepositoriesService.checkLockRepositoryStatus(repo.getPmsEnterpriseIdentifier(), repo.getId()); if (!ProductLibraryRepositoriesFormatEnum.PYPI.getKey().equals(repo.getFormat())) { throw new ServiceException("该制品库非Pypi格式,无法上传(制品库名称[%s])", repo.getName()); } 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 2ed277e42..d77a66ebb 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 @@ -62,7 +62,7 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr return pmsProductLibraryRepositories; } - + @Override public PmsProductLibraryRepositories selectPmsProductLibrarySnapshotByName(String enterpriseIdentifier, String repoName, String snapshotName) { PmsProductLibraryRepositories pmsProductLibraryRepositories = pmsProductLibraryRepositoriesMapper.selectPmsProductLibrarySnapshotByName(enterpriseIdentifier, repoName, snapshotName); @@ -165,13 +165,13 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr @Override public boolean insertPmsProductLibrarySnapshot(ProductRepositoriesSnapshotInputVo snapshotInputVo) { - checkLockRepositoryStatus(snapshotInputVo.getEnterpriseIdentifier(), snapshotInputVo.getRepoName()); // 未填快照库名称将根据时分秒生成名称 if (StringUtils.isEmpty(snapshotInputVo.getName())) { snapshotInputVo.setName(DateUtils.dateTimeNow()); } PmsProductLibraryRepositories repo = selectPmsProductLibraryRepositoriesByName(snapshotInputVo.getEnterpriseIdentifier(), snapshotInputVo.getRepoName()); + checkLockRepositoryStatus(snapshotInputVo.getEnterpriseIdentifier(), repo.getId()); if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { throw new ServiceException("Docker格式制品库不支持创建快照"); } @@ -324,10 +324,10 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr */ @Override public int updateHostedPmsProductLibraryRepositories(HostedRepositoriesOperateVo hostedRepositoriesOperateVo) { - checkLockRepositoryStatus(hostedRepositoriesOperateVo.getEnterpriseIdentifier(), hostedRepositoriesOperateVo.getName()); PmsProductLibraryRepositories oldRepo = selectPmsProductLibraryRepositoriesByName( hostedRepositoriesOperateVo.getEnterpriseIdentifier(), hostedRepositoriesOperateVo.getName()); + checkLockRepositoryStatus(hostedRepositoriesOperateVo.getEnterpriseIdentifier(), oldRepo.getId()); hostedRepositoriesOperateVo.setFormat(oldRepo.getFormat()); // 构建更新对象 PmsProductLibraryRepositories pmsProductLibraryRepositories = hostedRepositoriesOperateVo.toPmsProductLibraryRepositories(); @@ -455,8 +455,8 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr @Override public int deletePmsProductLibraryRepositoriesByName(String enterpriseIdentifier, String name) { - checkLockRepositoryStatus(enterpriseIdentifier, name); PmsProductLibraryRepositories oldRepo = selectPmsProductLibraryRepositoriesByName(enterpriseIdentifier, name); + checkLockRepositoryStatus(enterpriseIdentifier, oldRepo.getId()); // 调用制品库删除接口删除制品库 nexusRequestHelper.doRequest( NexusRequestUrl.DELETE_REPOSITORIES(PmsProductLibraryRepositories.getNexusRepositoriesName(enterpriseIdentifier, name)) @@ -465,8 +465,8 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr } @Override - public void lockRepository(String enterpriseIdentifier, String repoName) { - String lockRepoKey = CacheConstants.getLockEnterpriseIdentifierRepoKey(enterpriseIdentifier, repoName); + public void lockRepository(String enterpriseIdentifier, Long repoId) { + String lockRepoKey = CacheConstants.getLockEnterpriseIdentifierRepoIdKey(enterpriseIdentifier, repoId); if (redisService.hasKey(lockRepoKey)) { int count = redisService.getCacheObject(lockRepoKey); redisService.setCacheObject(lockRepoKey, ++count); @@ -476,8 +476,8 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr } @Override - public void unlockRepository(String enterpriseIdentifier, String repoName) { - String lockRepoKey = CacheConstants.getLockEnterpriseIdentifierRepoKey(enterpriseIdentifier, repoName); + public void unlockRepository(String enterpriseIdentifier, Long repoId) { + String lockRepoKey = CacheConstants.getLockEnterpriseIdentifierRepoIdKey(enterpriseIdentifier, repoId); if (redisService.hasKey(lockRepoKey)) { int count = redisService.getCacheObject(lockRepoKey); count--; @@ -490,8 +490,8 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr } @Override - public Boolean getLockRepositoryStatus(String enterpriseIdentifier, String repoName) { - String lockRepoKey = CacheConstants.getLockEnterpriseIdentifierRepoKey(enterpriseIdentifier, repoName); + public Boolean getLockRepositoryStatus(String enterpriseIdentifier, Long repoId) { + String lockRepoKey = CacheConstants.getLockEnterpriseIdentifierRepoIdKey(enterpriseIdentifier, repoId); if (redisService.hasKey(lockRepoKey)) { int count = redisService.getCacheObject(lockRepoKey); return count > 0; @@ -500,9 +500,9 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr } @Override - public void checkLockRepositoryStatus(String enterpriseIdentifier, String repoName) { - if (getLockRepositoryStatus(enterpriseIdentifier, repoName)) { - throw new ServiceException("该制品库锁定中,无法进行操作(制品库名称[%s])", repoName); + public void checkLockRepositoryStatus(String enterpriseIdentifier, Long repoId) { + if (getLockRepositoryStatus(enterpriseIdentifier, repoId)) { + throw new ServiceException("该制品库锁定中,无法进行操作(制品库Id[%s])", repoId); } } }