diff --git a/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/controller/protocol/UserProtocolVersionController.java b/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/controller/protocol/UserProtocolVersionController.java index 8575c6c8b..d22c64c76 100644 --- a/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/controller/protocol/UserProtocolVersionController.java +++ b/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/controller/protocol/UserProtocolVersionController.java @@ -13,6 +13,7 @@ import cn.daxpay.open.platform.system.result.protocol.UserProtocolVersionResult; import cn.daxpay.open.platform.system.service.protocol.UserProtocolVersionService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; @@ -85,6 +86,20 @@ public class UserProtocolVersionController { return Res.ok(userProtocolVersionService.findById(id)); } + /// 查询新建草稿可继承的源版本(同语言已发布优先, 否则最新归档) + /// + /// @param protocolId 协议ID + /// @param language 语言 + /// @return 源版本, 无则 null + @PermCode(code = PermCodes.Action.VIEW) + @Operation(summary = "查询可继承源版本") + @GetMapping("/find-inherit-source") + public Result findInheritSource( + @NotNull(message = "{validation.field.protocolId.notNull}") Long protocolId, + @NotBlank(message = "{validation.field.language.notBlank}") String language){ + return Res.ok(userProtocolVersionService.findInheritSource(protocolId, language)); + } + /// 发布版本(草稿 -> 已发布, 同协议同语言原已发布自动归档) /// /// @param id 版本ID diff --git a/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/dao/protocol/UserProtocolVersionManager.java b/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/dao/protocol/UserProtocolVersionManager.java index 630ec247a..849334c64 100644 --- a/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/dao/protocol/UserProtocolVersionManager.java +++ b/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/dao/protocol/UserProtocolVersionManager.java @@ -40,6 +40,21 @@ public class UserProtocolVersionManager extends BaseManager findLatestForInherit(Long protocolId, String language){ + Optional published = this.findPublished(protocolId, language); + if (published.isPresent()) { + return published; + } + return this.lambdaQuery() + .eq(UserProtocolVersion::getProtocolId, protocolId) + .eq(UserProtocolVersion::getLanguage, language) + .eq(UserProtocolVersion::getStatus, "ARCHIVED") + .orderByDesc(UserProtocolVersion::getVersionNo) + .last("LIMIT 1") + .oneOpt(); + } + /// 查询某协议下所有版本(级联删除/复制用) public List findAllByProtocol(Long protocolId){ return this.lambdaQuery() diff --git a/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/service/protocol/UserProtocolVersionService.java b/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/service/protocol/UserProtocolVersionService.java index 26de8044f..c726716f0 100644 --- a/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/service/protocol/UserProtocolVersionService.java +++ b/daxpay-platform/daxpay-platform-service/service-system/src/main/java/cn/daxpay/open/platform/system/service/protocol/UserProtocolVersionService.java @@ -114,6 +114,13 @@ public class UserProtocolVersionService { .orElse(null); } + /// 查询新建草稿可继承的源版本(已发布优先, 否则最新归档; 无则 null) + public UserProtocolVersionResult findInheritSource(Long protocolId, String language){ + return userProtocolVersionManager.findLatestForInherit(protocolId, language) + .map(UserProtocolVersion::toResult) + .orElse(null); + } + /// 复制版本到目标协议(用于复制到其他端, 直接以已发布状态写入) @Transactional(rollbackFor = Exception.class) public void copyVersion(UserProtocolVersion source, Long targetProtocolId){