From 9a1b5e01257b3c4ba5958a9d5e2f5acf27cfc31c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 11:01:24 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93=E4=BC=98?= =?UTF-8?q?=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94=E5=BD=93?= =?UTF-8?q?=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 产品库/制品库增加字段:来源类型 2. 产品库移入文档时将来源类型设置为文档 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/pms/enums/FromTypeEnum.java | 34 +++++++++++++++++++ .../PmsProductLibraryController.java | 31 ++++++++--------- .../domain/PmsProductLibraryComponent.java | 8 ++--- .../domain/vo/ComponentRawInputVo.java | 3 ++ .../vo/PmsProductLibraryComponentDataVo.java | 3 ++ ...o.java => ProductDocComponentInputVo.java} | 6 ++-- .../service/IPmsProductLibraryService.java | 4 +-- .../impl/PmsProductLibraryServiceImpl.java | 14 +++++--- .../pms/PmsProductLibraryComponentMapper.xml | 14 ++++---- 9 files changed, 79 insertions(+), 38 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/{ProductComponentInputVo.java => ProductDocComponentInputVo.java} (90%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java new file mode 100644 index 000000000..654756b37 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java @@ -0,0 +1,34 @@ +package com.microservices.pms.enums; + +import com.microservices.common.core.exception.ServiceException; +import io.swagger.annotations.ApiModel; +import lombok.Getter; + +/** + * @author OTTO + */ +@Getter +@ApiModel("来源类型") +public enum FromTypeEnum { + COMMON("common", "普通类型"), + PIPELINE("pipeline", "流水线类型"), + DOC("doc", "文档类型"); + + private final String key; + private final String name; + + FromTypeEnum(String key, String name) { + this.key = key; + this.name = name; + } + + + public static FromTypeEnum getByKey(String key) { + for (FromTypeEnum typeEnum : FromTypeEnum.values()) { + if (typeEnum.key.equals(key)) { + return typeEnum; + } + } + throw new ServiceException("该来源类型不存在(来源类型[%s])", key); + } +} 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 fa89c4b71..dd4b07274 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 @@ -113,22 +113,6 @@ public class PmsProductLibraryController extends BaseController { return toAjax(pmsProductLibraryService.deletePmsProductLibraryByName(enterpriseIdentifier, name)); } - - /** - * 上传产品库制品 - */ -// @RequiresPermissions("pms:pmsProductLibraryComponent:add") - @Log(title = "产品库制品", businessType = BusinessType.INSERT) - @PostMapping("/{name}") - @ApiOperation(value = "上传知识库文档") - public AjaxResult uploadProductAsset(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable String name, - @Valid @RequestBody ProductComponentInputVo productComponentInputVo) { - productComponentInputVo.setProductRepoName(name); - productComponentInputVo.setEnterpriseIdentifier(enterpriseIdentifier); - return toAjax(pmsProductLibraryService.uploadProductAsset(productComponentInputVo)); - } - /** * 产品库查询制品列表 */ @@ -317,6 +301,21 @@ public class PmsProductLibraryController extends BaseController { return toAjax(pmsProductLibraryService.addDockerComponentToProductRepo(dockerComponentAddToProductRepoVo)); } + /** + * 上传产品库制品 + */ +// @RequiresPermissions("pms:pmsProductLibraryComponent:add") + @Log(title = "产品库制品", businessType = BusinessType.INSERT) + @PostMapping("/{name}") + @ApiOperation(value = "上传知识库文档") + public AjaxResult uploadProductAsset(@PathVariable String enterpriseIdentifier, + @ApiParam(value = "产品库标识", required = true) @PathVariable String name, + @Valid @RequestBody ProductDocComponentInputVo productDocComponentInputVo) { + productDocComponentInputVo.setProductRepoName(name); + productDocComponentInputVo.setEnterpriseIdentifier(enterpriseIdentifier); + return toAjax(pmsProductLibraryService.uploadProductAsset(productDocComponentInputVo)); + } + /** * 产品库打包 */ 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 aabfb5cd7..9bf92ebc6 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 @@ -119,12 +119,8 @@ public class PmsProductLibraryComponent extends BaseEntity { @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField2; - /** - * 预留字段3 - */ - @ApiModelProperty(value = "预留字段3") - @JsonInclude(JsonInclude.Include.NON_EMPTY) - private String reservedField3; + @ApiModelProperty(value = "来源类型") + private String fromType; public void setNexusMavenAssetVo(NexusAssetVo nexusAssetVo) { String composeId = Base64.base64ToDecoderString(nexusAssetVo.getId()); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java index 0199b0dae..fb6b2a56a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java @@ -46,6 +46,8 @@ public class ComponentRawInputVo { @ApiModelProperty(value = "目录:上传文件的目录(例如/path/to/files/)") @NotNull(message = "目录不能为空") private String directory; + @NotNull(message = "来源类型") + private String fromType = "common"; public String getNexusRepoName() { if (ProductLibraryRepositoriesFormatEnum.isProduct(format)) { @@ -87,6 +89,7 @@ public class ComponentRawInputVo { } } pmsProductLibraryComponent.setPmsEnterpriseIdentifier(enterpriseIdentifier); + pmsProductLibraryComponent.setFromType(fromType); return pmsProductLibraryComponent; } } 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 index 7b7d0fe6e..1a8307af6 100644 --- 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 @@ -67,4 +67,7 @@ public class PmsProductLibraryComponentDataVo extends BaseEntityVo { */ @ApiModelProperty(value = "制品下载地址") private String downloadUrl; + + @ApiModelProperty(value = "来源类型") + private String fromType; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductComponentInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java similarity index 90% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductComponentInputVo.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java index 67eb2c950..e1ebfecc7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductComponentInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java @@ -1,6 +1,7 @@ package com.microservices.pms.productLibrary.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.enums.FromTypeEnum; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -19,8 +20,8 @@ import java.util.List; * @date 2024-07-04 */ @Data -@ApiModel("产品制品输入对象") -public class ProductComponentInputVo { +@ApiModel("文档制品输入对象") +public class ProductDocComponentInputVo { @ApiModelProperty(value = "产品库标识", hidden = true) private String productRepoName; @ApiModelProperty(value = "组织标识", hidden = true) @@ -43,6 +44,7 @@ public class ProductComponentInputVo { BeanUtils.copyProperties(this, target); target.setRepoName(productRepoName); target.setAssetList(assetList); + target.setFromType(FromTypeEnum.DOC.getKey()); return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java index ff9af761b..6324f2bd8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java @@ -94,10 +94,10 @@ public interface IPmsProductLibraryService { /** * 上传产品库制品 * - * @param productComponentInputVo 产品库制品输入对象 + * @param productDocComponentInputVo 产品库制品输入对象 * @return 结果 */ - Boolean uploadProductAsset(ProductComponentInputVo productComponentInputVo); + Boolean uploadProductAsset(ProductDocComponentInputVo productDocComponentInputVo); GenericsTableDataInfo selectDocList(DocSearchVo docSearchVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index f3da13059..1261deb82 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -15,6 +15,7 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.service.IPmsDocumentService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; +import com.microservices.pms.enums.FromTypeEnum; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.service.IPmsProductService; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; @@ -106,6 +107,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { EscapeUtil.removeExtraSlashOfUrl( String.format("%s/%s", repo.getUrl(), component.getPath())))); pmsCommonService.setBaseEntityVo(pmsProductLibraryComponentDataVo, component); + pmsProductLibraryComponentDataVo.setFromType( + FromTypeEnum.getByKey(component.getFromType()).getName() + ); return pmsProductLibraryComponentDataVo; } @@ -202,13 +206,13 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } @Override - public Boolean uploadProductAsset(ProductComponentInputVo productComponentInputVo) { + public Boolean uploadProductAsset(ProductDocComponentInputVo productDocComponentInputVo) { PmsProductLibraryRepositories repo = - selectPmsProductLibraryByName(productComponentInputVo.getEnterpriseIdentifier(), productComponentInputVo.getProductRepoName()); + selectPmsProductLibraryByName(productDocComponentInputVo.getEnterpriseIdentifier(), productDocComponentInputVo.getProductRepoName()); List assetList = new ArrayList<>(); - PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productComponentInputVo.getEnterpriseIdentifier()); - for (Long docId : productComponentInputVo.getDocList()) { + PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productDocComponentInputVo.getEnterpriseIdentifier()); + for (Long docId : productDocComponentInputVo.getDocList()) { PmsDocumentDetailVo pmsDocument = pmsDocumentService.selectPmsDocumentDetailVoByIdAndEnterpriseId(docId, pmsEnterprise.getId()); if (!Objects.equals(pmsDocument.getDocType(), 2) && !Objects.equals(pmsDocument.getDocType(), 3)) { throw new ServiceException("产品库文档类型仅允许为文档类型或附件类型(文档Id[%s])", pmsDocument.getId()); @@ -251,7 +255,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { assetList.add(assetRawInputVo); } - return pmsProductLibraryComponentService.insertRawComponent(productComponentInputVo.toComponentRawInputVo(assetList)); + return pmsProductLibraryComponentService.insertRawComponent(productDocComponentInputVo.toComponentRawInputVo(assetList)); } @Override 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 7871a3cca..68e426b95 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 @@ -23,7 +23,7 @@ - + @@ -45,7 +45,7 @@ attributes, reserved_field_1, reserved_field_2, - reserved_field_3 + from_type from pms_product_library_component @@ -68,7 +68,7 @@ pplc.attributes, pplc.reserved_field_1, pplc.reserved_field_2, - pplc.reserved_field_3, + pplc.from_type, pe.enterprise_identifier, pplr.format from pms_product_library_component as pplc @@ -92,7 +92,7 @@ and attributes = #{attributes} and reserved_field_1 = #{reservedField1} and reserved_field_2 = #{reservedField2} - and reserved_field_3 = #{reservedField3} + and from_type = #{fromType} @@ -164,7 +164,7 @@ attributes, reserved_field_1, reserved_field_2, - reserved_field_3, + from_type, #{identifier}, @@ -184,7 +184,7 @@ #{attributes}, #{reservedField1}, #{reservedField2}, - #{reservedField3}, + #{fromType}, @@ -208,7 +208,7 @@ attributes = #{attributes}, reserved_field_1 = #{reservedField1}, reserved_field_2 = #{reservedField2}, - reserved_field_3 = #{reservedField3}, + from_type = #{fromType}, where id = #{id} From 0d63456fb9470ff238dfce6ecd780eba90fd2284 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 11:19:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93=E4=BC=98?= =?UTF-8?q?=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94=E5=BD=93?= =?UTF-8?q?=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 普通制品和Docker制品移入产品库时默认添加前缀Software 2. 文档制品移入产品库时默认添加前缀Document 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductLibraryComponentPathEnum.java | 42 +++++++++++++++++++ ...va => ProductLibraryRepoFromTypeEnum.java} | 8 ++-- .../domain/vo/ProductDocComponentInputVo.java | 4 +- .../impl/PmsProductLibraryServiceImpl.java | 20 ++++++++- 4 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/{FromTypeEnum.java => ProductLibraryRepoFromTypeEnum.java} (70%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java new file mode 100644 index 000000000..08f4e0a6c --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -0,0 +1,42 @@ +package com.microservices.pms.enums; + +import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.utils.html.EscapeUtil; +import io.swagger.annotations.ApiModel; +import lombok.Getter; + +/** + * @author OTTO + */ +@Getter +@ApiModel("产品库制品路径前缀") +public enum ProductLibraryComponentPathEnum { + SOFTWARE("Software", "软件包"), + DOC("Document", "文档"); + + private final String key; + private final String name; + + ProductLibraryComponentPathEnum(String key, String name) { + this.key = key; + this.name = name; + } + + + public static ProductLibraryComponentPathEnum getByKey(String key) { + for (ProductLibraryComponentPathEnum typeEnum : ProductLibraryComponentPathEnum.values()) { + if (typeEnum.key.equals(key)) { + return typeEnum; + } + } + throw new ServiceException("该产品库制品路径前缀不存在(产品库制品路径前缀[%s])", key); + } + + public static String getSoftwareFixedPath(String directory) { + return EscapeUtil.removeExtraSlashOfUrl(SOFTWARE.key + "/" + directory); + } + + public static String getDocFixedPath(String directory) { + return EscapeUtil.removeExtraSlashOfUrl(DOC.key + "/" + directory); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryRepoFromTypeEnum.java similarity index 70% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryRepoFromTypeEnum.java index 654756b37..733760456 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryRepoFromTypeEnum.java @@ -9,7 +9,7 @@ import lombok.Getter; */ @Getter @ApiModel("来源类型") -public enum FromTypeEnum { +public enum ProductLibraryRepoFromTypeEnum { COMMON("common", "普通类型"), PIPELINE("pipeline", "流水线类型"), DOC("doc", "文档类型"); @@ -17,14 +17,14 @@ public enum FromTypeEnum { private final String key; private final String name; - FromTypeEnum(String key, String name) { + ProductLibraryRepoFromTypeEnum(String key, String name) { this.key = key; this.name = name; } - public static FromTypeEnum getByKey(String key) { - for (FromTypeEnum typeEnum : FromTypeEnum.values()) { + public static ProductLibraryRepoFromTypeEnum getByKey(String key) { + for (ProductLibraryRepoFromTypeEnum typeEnum : ProductLibraryRepoFromTypeEnum.values()) { if (typeEnum.key.equals(key)) { return typeEnum; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java index e1ebfecc7..ef7888e9a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java @@ -1,7 +1,7 @@ package com.microservices.pms.productLibrary.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; -import com.microservices.pms.enums.FromTypeEnum; +import com.microservices.pms.enums.ProductLibraryRepoFromTypeEnum; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -44,7 +44,7 @@ public class ProductDocComponentInputVo { BeanUtils.copyProperties(this, target); target.setRepoName(productRepoName); target.setAssetList(assetList); - target.setFromType(FromTypeEnum.DOC.getKey()); + target.setFromType(ProductLibraryRepoFromTypeEnum.DOC.getKey()); return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 1261deb82..661424267 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -15,7 +15,8 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.service.IPmsDocumentService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; -import com.microservices.pms.enums.FromTypeEnum; +import com.microservices.pms.enums.ProductLibraryComponentPathEnum; +import com.microservices.pms.enums.ProductLibraryRepoFromTypeEnum; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.service.IPmsProductService; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; @@ -83,6 +84,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Autowired private IPmsProductService pmsProductService; + public final static String DOC_TYPE_PATH = "Document"; + public final static String SOFTWARE_TYPE_PATH = "Software"; + @Override public GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search) { List pmsProductLibraryComponentList = @@ -108,7 +112,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { String.format("%s/%s", repo.getUrl(), component.getPath())))); pmsCommonService.setBaseEntityVo(pmsProductLibraryComponentDataVo, component); pmsProductLibraryComponentDataVo.setFromType( - FromTypeEnum.getByKey(component.getFromType()).getName() + ProductLibraryRepoFromTypeEnum.getByKey(component.getFromType()).getName() ); return pmsProductLibraryComponentDataVo; } @@ -210,6 +214,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { PmsProductLibraryRepositories repo = selectPmsProductLibraryByName(productDocComponentInputVo.getEnterpriseIdentifier(), productDocComponentInputVo.getProductRepoName()); + // 产品库制品添加默认前缀 + productDocComponentInputVo.setDirectory(ProductLibraryComponentPathEnum.getDocFixedPath( + productDocComponentInputVo.getDirectory() + )); List assetList = new ArrayList<>(); PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productDocComponentInputVo.getEnterpriseIdentifier()); for (Long docId : productDocComponentInputVo.getDocList()) { @@ -342,6 +350,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { throw new ServiceException("Docker制品移入不能使用该接口"); } + // 产品库制品添加默认前缀 + commonAssetAddToProductRepoVo.setDirectory(ProductLibraryComponentPathEnum.getSoftwareFixedPath( + commonAssetAddToProductRepoVo.getDirectory() + )); List nexusAssetResultDataVoList = new ArrayList<>(); for (String assetId : commonAssetAddToProductRepoVo.getAssetIdList()) { NexusComponentResultVo nexusAssetResultVo = pmsProductLibraryComponentService.getAssetDetailByAssetId(commonAssetAddToProductRepoVo.getEnterpriseIdentifier(), commonAssetAddToProductRepoVo.getRepoName(), null, assetId, false); @@ -438,6 +450,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { if (!ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { throw new ServiceException("当前接口仅允许进行Docker移入产品库操作"); } + // 产品库制品添加默认前缀 + dockerComponentAddToProductRepoVo.setDirectory(ProductLibraryComponentPathEnum.getSoftwareFixedPath( + dockerComponentAddToProductRepoVo.getDirectory() + )); List nexusComponentResultDataVoList = new ArrayList<>(); for (String componentId : dockerComponentAddToProductRepoVo.getComponentIdList()) { NexusComponentResultVo nexusAssetResultVo = pmsProductLibraryComponentService.getComponentDetailByComponentId(dockerComponentAddToProductRepoVo.getEnterpriseIdentifier(), dockerComponentAddToProductRepoVo.getRepoName(), null, componentId, false); From 8e6620ad2e31425b0d332985f180c7e54d16c5ca Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 14:28:32 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93=E4=BC=98?= =?UTF-8?q?=E5=8C=96):=20=E4=BC=98=E5=8C=96=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E6=89=93=E5=8C=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 文件服务开始打包时创建redis key(0:代表打包未完成;1:代表打包已完成;-1:代表打包失败,需要重新打包) 2. 异步执行打包任务时,若发生任何异常则将key值设置为-1,若打包完成则将key值设为1 3. 调用获取打包文件下载接口时,检查redis key值;若键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息;若键值为-1,代表打包失败,需要重新打包;若调用远程接口获取文件信息失败仍提示用户打包失败需要重新打包 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/constant/CacheConstants.java | 15 ++++-- .../common/core/utils/ServletUtils.java | 25 +++++++++- .../impl/SysFileInfoAsyncServiceImpl.java | 11 ++++- .../service/impl/SysFileInfoServiceImpl.java | 5 ++ .../PmsProductLibraryController.java | 7 +-- .../PmsProductLibraryRepositoriesMapper.java | 7 +++ .../IPmsProductLibraryAsyncService.java | 3 +- .../service/IPmsProductLibraryService.java | 5 +- .../PmsProductLibraryAsyncServiceImpl.java | 4 +- .../impl/PmsProductLibraryServiceImpl.java | 46 +++++++++++++------ .../PmsProductLibraryRepositoriesMapper.xml | 5 ++ 11 files changed, 107 insertions(+), 26 deletions(-) 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 8b81ff6af..86e0488e1 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 @@ -202,7 +202,7 @@ public class CacheConstants { /** * Gitlink组织开通企业是否完成 Key前缀 */ - public final static String GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY = "gitlink_org_id_open_enterprise_key:"; + private final static String GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY = "gitlink_org_id_open_enterprise_key:"; public static String getGitlinkOrgIdOpenEnterpriseKey(Long gitlinkOrgId) { return GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY + gitlinkOrgId; @@ -211,11 +211,11 @@ public class CacheConstants { /** * 专区项目Gitlink信息 Key前缀 */ - public final static String ZONE_PROJECT_GITLINK_INFO = "zone_project_gitlink_info:"; + private final static String ZONE_PROJECT_GITLINK_INFO = "zone_project_gitlink_info:"; /** * 专区下项目分数排序 Key前缀 */ - public final static String ZONE_PROJECT_SORT_BY_SCORE = "zone_project_sort_by_score:"; + private final static String ZONE_PROJECT_SORT_BY_SCORE = "zone_project_sort_by_score:"; public static String getZoneProjectGitlinkInfo(Long gitlinkProjectId) { return ZONE_PROJECT_GITLINK_INFO + gitlinkProjectId; @@ -228,4 +228,13 @@ public class CacheConstants { public static String getAllZoneProjectSortByScore(Long zoneId) { return ZONE_PROJECT_SORT_BY_SCORE + "*:" + zoneId + ":*"; } + + /** + * 文件打包是否完成(0:代表未完成;1:代表已完成;-1:代表打包失败,需要重新打包) + */ + private final static String PACKAGE_FILE_IS_FINISH = "packageFileIsFinish:"; + + public static String getPackageFileIsFinish(String fileIdentifier) { + return PACKAGE_FILE_IS_FINISH + fileIdentifier; + } } diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index dbe4225ed..41c11eb1e 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -218,7 +218,7 @@ public class ServletUtils { } /** - * 内容编码(排除斜杠) + * 内容编码(排除斜杠并且不重复编码) * * @param str 内容 * @return 编码后的内容 @@ -240,6 +240,29 @@ public class ServletUtils { } } + /** + * 内容编码(排除斜杠并且支持重复编码) + * + * @param str 内容 + * @return 编码后的内容 + */ + public static String urlEncodeExcludeSlashesApplyDuplicate(String str) { + try { + StringBuilder stringBuffer = new StringBuilder(); + String[] strings = str.split("/"); + for (String string : strings) { + // 如果url已经进行过urlEncode 不重复进行Encode + if (!isUrlEncoded(string)) { + string = URLEncoder.encode(string, Constants.UTF8); + } + stringBuffer.append("/").append(string); + } + return stringBuffer.toString().replaceAll("\\+", "%20"); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } + /** * 判断字符串是否经过URLEncode * 1. 使用URLDecoder.decode对字符串进行解码。 diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java index e69e0d43d..4a40a5e5a 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java @@ -1,9 +1,11 @@ package com.microservices.file.service.impl; +import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.html.EscapeUtil; +import com.microservices.common.redis.service.RedisService; import com.microservices.file.service.ISysFileInfoAsyncService; import com.microservices.file.service.ISysFileInfoService; import com.microservices.file.utils.CustomExecutorFactory; @@ -41,6 +43,8 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { */ @Value("${file.path}") private String localFilePath; + @Autowired + private RedisService redisService; @Override public void asyncPackagedFile(String fileIdentifier, HashMap packagedStructure, String zipFileName, String type, String hierarchy) { @@ -70,6 +74,7 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { String filePath = localFilePath + fileInfo.getFilePath(); File file = new File(filePath); if (!file.exists()) { + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); throw new IOException("该文件不存在"); } // 拷贝文件到打包目录 @@ -82,6 +87,7 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { org.apache.commons.io.FileUtils.copyURLToFile(new URL(fileSource), packagedFilePath.toFile()); } } catch (IOException e) { + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); logger.error("打包文件时出现异常,需压缩文件处理失败:{}", e.getMessage()); throw new ServiceException("打包文件时出现异常,需压缩文件处理失败!"); } @@ -91,7 +97,8 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { ZipUtils.toZip(tempPackagedPath.toString(), Files.newOutputStream(zipFilePath), true); File zipFile = zipFilePath.toFile(); if (!zipFile.exists()) { - throw new ServiceException("打包文件时出现异常:文件压缩失败"); + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); + throw new ServiceException("打包文件时出现异常:压缩文件不存在"); } String filePath = EscapeUtil.removeExtraSlashOfUrl("/" + type + "/" + hierarchy + "/" + datePath + "/" + fullZipFileName); SysFileInfo sysFileInfo = new SysFileInfo(fileIdentifier, zipFile, filePath); @@ -101,9 +108,11 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { org.apache.commons.io.FileUtils.deleteDirectory(tempPackagedPath.toFile()); } } catch (IOException e) { + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); logger.error("打包文件时出现异常:{}", e.getMessage()); throw new ServiceException("打包文件时出现异常!"); } + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), 1); }); } } 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 8df0a8ed0..eb0d148fb 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 @@ -4,6 +4,7 @@ package com.microservices.file.service.impl; import com.alibaba.fastjson2.JSONObject; import com.j256.simplemagic.ContentInfo; import com.j256.simplemagic.ContentInfoUtil; +import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.Constants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; @@ -14,6 +15,7 @@ import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.common.core.utils.uuid.IdUtils; import com.microservices.common.httpClient.domain.GitLinkRequestUrl; import com.microservices.common.httpClient.util.GitLinkRequestHelper; +import com.microservices.common.redis.service.RedisService; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.file.mapper.SysFileInfoMapper; import com.microservices.file.service.ISysFileInfoAsyncService; @@ -84,6 +86,8 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { */ @Value("${file.domain}") public String domain; + @Autowired + private RedisService redisService; @Override public SysFileInfo selectSysFileInfoByFileObjectName(String fileObjectName) { @@ -492,6 +496,7 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { @Override public String packagedFile(HashMap packagedStructure, String zipFileName, String type, String hierarchy) { String fileIdentifier = genFileIdentifier(); + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), 0); fileInfoAsyncService.asyncPackagedFile(fileIdentifier, packagedStructure, zipFileName, type, hierarchy); return fileIdentifier; } 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 dd4b07274..4bf4805ee 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 @@ -324,8 +324,9 @@ public class PmsProductLibraryController extends BaseController { @PostMapping("/packaged/{productRepoName}") @ApiOperation(value = "产品库打包") public AjaxResult packagedProduct(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName) { - return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName)); + @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, + @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") String node) { + return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, node)); } /** @@ -336,6 +337,6 @@ public class PmsProductLibraryController extends BaseController { @ApiOperation(value = "获取产品库打包下载地址") public GenericsAjaxResult getPackagedProduct(@PathVariable String enterpriseIdentifier, @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName) { - return genericsSuccess(pmsProductLibraryService.getPackagedProduct(enterpriseIdentifier, productRepoName)); + return pmsProductLibraryService.getPackagedProduct(enterpriseIdentifier, productRepoName); } } 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 acb73b533..3dbea5899 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 @@ -139,4 +139,11 @@ public interface PmsProductLibraryRepositoriesMapper { * @return 制品库 */ PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesByAlias(@Param("alias") String alias, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier); + + /** + * 设置产品库打包文件标识为空 + * + * @param id 产品库id + */ + void setProductLibraryPackagedFileIdentifierNull(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java index 5a213cfd1..654a345a2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java @@ -52,6 +52,7 @@ public interface IPmsProductLibraryAsyncService { * 打包产品库 * * @param productRepo 产品库 + * @param node */ - void packagedProduct(PmsProductLibraryRepositories productRepo); + void packagedProduct(PmsProductLibraryRepositories productRepo, String node); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java index 6324f2bd8..2d5aa7576 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java @@ -1,5 +1,6 @@ package com.microservices.pms.productLibrary.service; +import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; import com.microservices.pms.productLibrary.domain.vo.*; @@ -78,7 +79,7 @@ public interface IPmsProductLibraryService { boolean addDockerComponentToProductRepo(DockerComponentAddToProductRepoVo dockerComponentAddToProductRepoVo); - boolean packagedProduct(String enterpriseIdentifier, String productRepoName); + boolean packagedProduct(String enterpriseIdentifier, String productRepoName, String node); int updatePmsProductLibrary(PmsProductLibraryRepositories pmsProductLibraryRepositories); @@ -89,7 +90,7 @@ public interface IPmsProductLibraryService { * @param productRepoName 产品库名称 * @return 产品库打包对象 */ - ProductPackagedResultVo getPackagedProduct(String enterpriseIdentifier, String productRepoName); + GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName); /** * 上传产品库制品 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 fe211254c..736b0932c 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 @@ -200,7 +200,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn } @Override - public void packagedProduct(PmsProductLibraryRepositories productRepo) { + public void packagedProduct(PmsProductLibraryRepositories productRepo, String node) { CustomExecutorFactory.threadPoolExecutor.execute(() -> { pmsProductLibraryRepositoriesService.lockRepository(productRepo.getPmsEnterpriseIdentifier(), productRepo.getId()); try { @@ -210,7 +210,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn for (PmsProductLibraryComponent component : componentList) { String fileSource = component.getFileIdentifier(); if (StringUtils.isEmpty(fileSource)) { - fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashes(component.getPath())); + fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); } packagedStructure.put(component.getPath(), fileSource); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 661424267..5f004572f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -1,13 +1,16 @@ package com.microservices.pms.productLibrary.service.impl; import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.PageUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; +import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.redis.service.RedisService; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.document.domain.vo.PmsDocumentDetailVo; @@ -83,9 +86,8 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { private IPmsCommonService pmsCommonService; @Autowired private IPmsProductService pmsProductService; - - public final static String DOC_TYPE_PATH = "Document"; - public final static String SOFTWARE_TYPE_PATH = "Software"; + @Autowired + private RedisService redisService; @Override public GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search) { @@ -186,7 +188,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } @Override - public ProductPackagedResultVo getPackagedProduct(String enterpriseIdentifier, String productRepoName) { + public GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName) { ProductPackagedResultVo productPackagedResultVo = new ProductPackagedResultVo(); PmsProductLibraryRepositories productLibraryRepositories = selectPmsProductLibraryByName(enterpriseIdentifier, productRepoName); String packagedFileIdentifier = productLibraryRepositories.getPackagedFileIdentifier(); @@ -194,19 +196,37 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { productPackagedResultVo.setIsPackaged(false); } else { productPackagedResultVo.setIsPackaged(true); - try { - SysFileInfo sysFileInfo = FeignUtils.getReturnData( - remoteFileService.getFileByFileIdentifier(packagedFileIdentifier, SecurityConstants.INNER) - ); + Integer isFinish = redisService.getCacheObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); + if (isFinish != null) { + redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); + } + // 键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息 + if (isFinish == null || isFinish == 1) { + SysFileInfo sysFileInfo = null; + try { + sysFileInfo = FeignUtils.getReturnData( + remoteFileService.getFileByFileIdentifier(packagedFileIdentifier, SecurityConstants.INNER) + ); + } catch (ServiceException e) { + log.error("获取打包文件失败:{}", e.getMessage()); + return packageError(productLibraryRepositories, productPackagedResultVo); + } if (sysFileInfo != null) { productPackagedResultVo.setDownloadUrl(sysFileInfo.getDownloadUrl()); productPackagedResultVo.setFileName(sysFileInfo.getFileOriginName()); } - } catch (Exception e) { - log.error("获取产品库打包文件失败:{}", e.getMessage()); + } else if (isFinish == -1) { + // 键值为-1,代表打包失败,需要重新打包 + return packageError(productLibraryRepositories, productPackagedResultVo); } } - return productPackagedResultVo; + return GenericsAjaxResult.success(productPackagedResultVo); + } + + private GenericsAjaxResult packageError(PmsProductLibraryRepositories productLibraryRepositories, ProductPackagedResultVo productPackagedResultVo) { + pmsProductLibraryRepositoriesMapper.setProductLibraryPackagedFileIdentifierNull(productLibraryRepositories.getId()); + productPackagedResultVo.setIsPackaged(false); + return GenericsAjaxResult.error("打包失败,请重新打包!", productPackagedResultVo); } @Override @@ -516,9 +536,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Override - public boolean packagedProduct(String enterpriseIdentifier, String productRepoName) { + public boolean packagedProduct(String enterpriseIdentifier, String productRepoName, String node) { PmsProductLibraryRepositories productRepo = selectPmsProductLibraryByName(enterpriseIdentifier, productRepoName); - pmsProductLibraryAsyncService.packagedProduct(productRepo); + pmsProductLibraryAsyncService.packagedProduct(productRepo, node); return true; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml index 28deedaf8..076259a70 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml @@ -239,6 +239,11 @@ where id = #{id} + + update pms_product_library_repositories + set packaged_file_identifier = null + where id = #{id} + delete From 366118bca0f6eebd86291f1a3f659d660d0d6a49 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 15:00:51 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93=E4=BC=98?= =?UTF-8?q?=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94=E5=BD=93?= =?UTF-8?q?=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品库打包接口新增node参数代表打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有) 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/utils/ServletUtils.java | 5 +--- .../ProductLibraryComponentPathEnum.java | 24 +++++++++++++++++++ .../PmsProductLibraryController.java | 2 +- .../PmsProductLibraryAsyncServiceImpl.java | 11 +++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index 41c11eb1e..950ebe448 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -251,10 +251,7 @@ public class ServletUtils { StringBuilder stringBuffer = new StringBuilder(); String[] strings = str.split("/"); for (String string : strings) { - // 如果url已经进行过urlEncode 不重复进行Encode - if (!isUrlEncoded(string)) { - string = URLEncoder.encode(string, Constants.UTF8); - } + string = URLEncoder.encode(string, Constants.UTF8); stringBuffer.append("/").append(string); } return stringBuffer.toString().replaceAll("\\+", "%20"); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java index 08f4e0a6c..edf702e4b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -1,6 +1,7 @@ package com.microservices.pms.enums; import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; import io.swagger.annotations.ApiModel; import lombok.Getter; @@ -39,4 +40,27 @@ public enum ProductLibraryComponentPathEnum { public static String getDocFixedPath(String directory) { return EscapeUtil.removeExtraSlashOfUrl(DOC.key + "/" + directory); } + + public static String getChineseFixedPath(String path) { + if (path.startsWith(SOFTWARE.key)) { + return path.replaceFirst(SOFTWARE.key, SOFTWARE.name); + } + if (path.startsWith(DOC.key)) { + return path.replaceFirst(DOC.key, DOC.name); + } + return path; + } + + public static boolean pathIsNeedPackaged(String node, String path) { + if (StringUtils.isNotEmpty(node)) { + if (node.equals(SOFTWARE.key)) { + return path.startsWith(SOFTWARE.key); + } + if (node.equals(DOC.key)) { + return path.startsWith(DOC.key); + } + } + + return true; + } } 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 4bf4805ee..87ab865a7 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 @@ -325,7 +325,7 @@ public class PmsProductLibraryController extends BaseController { @ApiOperation(value = "产品库打包") public AjaxResult packagedProduct(@PathVariable String enterpriseIdentifier, @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, - @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") String node) { + @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") @RequestParam String node) { return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, node)); } 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 736b0932c..bf6778687 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 @@ -5,6 +5,7 @@ import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; +import com.microservices.pms.enums.ProductLibraryComponentPathEnum; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; @@ -208,11 +209,13 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn pmsProductLibraryComponentService.selectPmsProductLibraryComponentListByDatabase(productRepo.getId()); HashMap packagedStructure = new HashMap<>(); for (PmsProductLibraryComponent component : componentList) { - String fileSource = component.getFileIdentifier(); - if (StringUtils.isEmpty(fileSource)) { - fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); + if (ProductLibraryComponentPathEnum.pathIsNeedPackaged(node, component.getPath())) { + String fileSource = component.getFileIdentifier(); + if (StringUtils.isEmpty(fileSource)) { + fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); + } + packagedStructure.put(ProductLibraryComponentPathEnum.getChineseFixedPath(component.getPath()), fileSource); } - packagedStructure.put(component.getPath(), fileSource); } String fileIdentifier = FeignUtils.getReturnData( remoteFileService.packagedFile(