fix(制品库功能完善): 新建docker虚拟仓库,接口报错
1. 创建Docker虚拟仓库时,必须传入docker参数(包含映射端口相关字段) 2. 检查发现检查docker端口占用时,取的JSON属性错误,修复该问题
This commit is contained in:
parent
1aa98d0c43
commit
63d7c166fe
|
|
@ -119,7 +119,7 @@ public class PmsProductLibraryRepositoriesController extends BaseController {
|
|||
@PutMapping("/group/{format}/{name}")
|
||||
@ApiOperation(value = "更新虚拟仓库")
|
||||
public AjaxResult editGroup(@PathVariable String enterpriseIdentifier,
|
||||
@ApiParam(value = "制品库名称", required = true) @PathVariable String name,
|
||||
@ApiParam(value = "虚拟仓库名称", required = true) @PathVariable String name,
|
||||
@Valid @RequestBody GroupRepositoriesOperateVo groupRepositoriesOperateVo) {
|
||||
groupRepositoriesOperateVo.setEnterpriseIdentifier(enterpriseIdentifier);
|
||||
groupRepositoriesOperateVo.setName(name);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ import javax.validation.constraints.NotNull;
|
|||
@Data
|
||||
@ApiModel("虚拟仓库操作对象")
|
||||
public class GroupRepositoriesOperateVo {
|
||||
@ApiModelProperty(value = "制品库Id", hidden = true)
|
||||
private Long id;
|
||||
@ApiModelProperty(value = "虚拟仓库名称", hidden = true)
|
||||
private String name;
|
||||
@ApiModelProperty(value = "企业标识", hidden = true)
|
||||
|
|
@ -34,6 +36,9 @@ public class GroupRepositoriesOperateVo {
|
|||
@ApiModelProperty(value = "成员对象")
|
||||
@NotNull(message = "虚拟仓库成员对象不能为空")
|
||||
private NexusRepoGroupVo group;
|
||||
@Valid
|
||||
@ApiModelProperty(value = "Docker制品库输入对象")
|
||||
private NexusRepoDockerVo docker;
|
||||
|
||||
public NexusGroupRepoInputVo toNexusGroupRepoInputVo() {
|
||||
NexusGroupRepoInputVo target = new NexusGroupRepoInputVo();
|
||||
|
|
@ -41,6 +46,7 @@ public class GroupRepositoriesOperateVo {
|
|||
target.setName(PmsProductLibraryRepositories.getNexusRepositoriesName(this.enterpriseIdentifier, this.name));
|
||||
target.setGroup(group.toNexusRepoGroupVo(this.enterpriseIdentifier));
|
||||
target.setStorage(new NexusRepoStorageVo());
|
||||
target.setDocker(this.getDocker());
|
||||
return target;
|
||||
}
|
||||
|
||||
|
|
@ -50,6 +56,9 @@ public class GroupRepositoriesOperateVo {
|
|||
JSONObject attributeJson = new JSONObject();
|
||||
attributeJson.put("online", online);
|
||||
attributeJson.put("group", group);
|
||||
if (docker != null) {
|
||||
attributeJson.put("docker", docker);
|
||||
}
|
||||
pmsProductLibraryRepositories.setAttributes(attributeJson.toJSONString());
|
||||
return pmsProductLibraryRepositories;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import javax.validation.Valid;
|
|||
@Data
|
||||
@ApiModel("托管制品库操作对象")
|
||||
public class HostedRepositoriesOperateVo {
|
||||
@ApiModelProperty(value = "制品库标识", hidden = true)
|
||||
@ApiModelProperty(value = "制品库Id", hidden = true)
|
||||
private Long id;
|
||||
@ApiModelProperty(value = "制品库名称", hidden = true)
|
||||
private String name;
|
||||
|
|
|
|||
|
|
@ -16,5 +16,6 @@ public class NexusGroupRepoInputVo {
|
|||
private boolean online;
|
||||
private NexusRepoStorageVo storage;
|
||||
private NexusRepoGroupVo group;
|
||||
private NexusRepoDockerVo docker;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,13 +119,38 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr
|
|||
for (String memberRepoName : groupRepositoriesOperateVo.getGroup().getMemberNames()) {
|
||||
PmsProductLibraryRepositories pmsProductLibraryRepositories =
|
||||
selectPmsProductLibraryRepositoriesByName(groupRepositoriesOperateVo.getEnterpriseIdentifier(), memberRepoName);
|
||||
// if (!pmsProductLibraryRepositories.getType().equals(ProductLibraryRepositoriesTypeEnum.HOSTED.getKey())) {
|
||||
// throw new ServiceException("请选择托管类型的制品库作为虚拟仓库成员");
|
||||
// }
|
||||
if (!pmsProductLibraryRepositories.getFormat().equals(groupRepositoriesOperateVo.getFormat())) {
|
||||
throw new ServiceException("请选择相同格式的制品库作为虚拟仓库成员(制品库格式[%s])", groupRepositoriesOperateVo.getFormat());
|
||||
}
|
||||
}
|
||||
checkDockerRepoParameter(groupRepositoriesOperateVo.getDocker(), groupRepositoriesOperateVo.getId());
|
||||
}
|
||||
|
||||
private void checkDockerRepoParameter(NexusRepoDockerVo nexusRepoDockerVo, Long oldRepoId) {
|
||||
if (nexusRepoDockerVo == null) {
|
||||
throw new ServiceException("新增【%s】格式制品库时,docker参数不能为空", ProductLibraryRepositoriesFormatEnum.DOCKER.getName());
|
||||
}
|
||||
// 检查映射端口是否已被占用
|
||||
PmsProductLibraryRepositories searchRepo = new PmsProductLibraryRepositories();
|
||||
searchRepo.setFormat(ProductLibraryRepositoriesFormatEnum.DOCKER.getKey());
|
||||
List<PmsProductLibraryRepositories> dockerRepoList =
|
||||
pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryRepositoriesList(searchRepo);
|
||||
|
||||
// 获取端口相同的仓库
|
||||
PmsProductLibraryRepositories sameDockerRepo = dockerRepoList.stream().filter(repo -> {
|
||||
String attributeStr = repo.getAttributes();
|
||||
JSONObject attributeJson = JSONObject.parseObject(attributeStr);
|
||||
if (attributeJson.containsKey("docker")) {
|
||||
NexusRepoDockerVo repoDockerVo = attributeJson.getObject("docker", NexusRepoDockerVo.class);
|
||||
return repoDockerVo.getHttpPort() != null &&
|
||||
repoDockerVo.getHttpPort().equals(nexusRepoDockerVo.getHttpPort());
|
||||
}
|
||||
return false;
|
||||
}).findFirst().orElse(null);
|
||||
// 判断端口相同的仓库是否为当前仓库(代表更新),若不是则返回错误信息
|
||||
if (sameDockerRepo != null && !sameDockerRepo.getId().equals(oldRepoId)) {
|
||||
throw new ServiceException("Docker类型制品库的HTTP端口映射已被占用(HTTP端口映射[%d])", nexusRepoDockerVo.getHttpPort());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -182,29 +207,7 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr
|
|||
VersionPolicyEnum.getByKey(hostedRepositoriesOperateVo.getMaven().getVersionPolicy());
|
||||
LayoutPolicyEnum.getByKey(hostedRepositoriesOperateVo.getMaven().getLayoutPolicy());
|
||||
} else if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(hostedRepositoriesOperateVo.getFormat())) {
|
||||
NexusRepoDockerVo nexusRepoDockerVo = hostedRepositoriesOperateVo.getDocker();
|
||||
if (nexusRepoDockerVo == null) {
|
||||
throw new ServiceException("新增【%s】格式制品库时,docker参数不能为空", ProductLibraryRepositoriesFormatEnum.DOCKER.getName());
|
||||
}
|
||||
|
||||
VersionPolicyEnum.getByKey(nexusRepoDockerVo.getVersionPolicy());
|
||||
// 检查映射端口是否已被占用
|
||||
PmsProductLibraryRepositories searchRepo = new PmsProductLibraryRepositories();
|
||||
searchRepo.setFormat(ProductLibraryRepositoriesFormatEnum.DOCKER.getKey());
|
||||
List<PmsProductLibraryRepositories> dockerRepoList =
|
||||
pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryRepositoriesList(searchRepo);
|
||||
|
||||
// 获取端口相同的仓库
|
||||
PmsProductLibraryRepositories sameDockerRepo = dockerRepoList.stream().filter(repo -> {
|
||||
String attributeStr = repo.getAttributes();
|
||||
NexusRepoDockerVo repoDockerVo = JSONObject.parseObject(attributeStr, NexusRepoDockerVo.class);
|
||||
return repoDockerVo.getHttpPort() != null &&
|
||||
repoDockerVo.getHttpPort().equals(nexusRepoDockerVo.getHttpPort());
|
||||
}).findFirst().orElse(null);
|
||||
// 判断端口相同的仓库是否为当前仓库(代表更新),若不是则返回错误信息
|
||||
if (sameDockerRepo != null && !sameDockerRepo.getId().equals(hostedRepositoriesOperateVo.getId())) {
|
||||
throw new ServiceException("Docker类型制品库的HTTP端口映射已被占用(HTTP端口映射[%d])", nexusRepoDockerVo.getHttpPort());
|
||||
}
|
||||
checkDockerRepoParameter(hostedRepositoriesOperateVo.getDocker(), hostedRepositoriesOperateVo.getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -222,12 +225,13 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr
|
|||
hostedRepositoriesOperateVo.getName());
|
||||
checkLockRepositoryStatus(hostedRepositoriesOperateVo.getEnterpriseIdentifier(), oldRepo.getId());
|
||||
hostedRepositoriesOperateVo.setFormat(oldRepo.getFormat());
|
||||
hostedRepositoriesOperateVo.setId(oldRepo.getId());
|
||||
checkInputParameter(hostedRepositoriesOperateVo);
|
||||
// 构建更新对象
|
||||
PmsProductLibraryRepositories pmsProductLibraryRepositories = hostedRepositoriesOperateVo.toPmsProductLibraryRepositories();
|
||||
pmsProductLibraryRepositories.setId(oldRepo.getId());
|
||||
pmsProductLibraryRepositories.setUpdateTime(DateUtils.getNowDate());
|
||||
pmsProductLibraryRepositories.setUpdateBy(SecurityUtils.getUsername());
|
||||
checkInputParameter(hostedRepositoriesOperateVo);
|
||||
NexusHostedRepoInputVo requestBody = hostedRepositoriesOperateVo.toNexusRepoDataVo();
|
||||
|
||||
// 调用制品库更新接口更新制品库
|
||||
|
|
@ -248,6 +252,7 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr
|
|||
groupRepositoriesOperateVo.getEnterpriseIdentifier(),
|
||||
groupRepositoriesOperateVo.getName());
|
||||
groupRepositoriesOperateVo.setFormat(oldRepo.getFormat());
|
||||
groupRepositoriesOperateVo.setId(oldRepo.getId());
|
||||
checkGroupMemberRepoList(groupRepositoriesOperateVo);
|
||||
NexusGroupRepoInputVo requestBody = groupRepositoriesOperateVo.toNexusGroupRepoInputVo();
|
||||
// 调用制品库更新接口更新制品库
|
||||
|
|
|
|||
Loading…
Reference in New Issue