fix(update-service): 服务开通检查改为查 t_feature_service.enabled,而非 existsByAppKey

existsByAppKey 在服务关闭但历史版本仍存在时会误判为已开通。
改为调 tenant-service 内部接口 /services/{platform}/UPDATE 查 enabled 字段。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
XuqmGroup 2026-06-17 13:02:28 +08:00
父节点 3cf5e294aa
当前提交 d127ce785f
共有 3 个文件被更改,包括 19 次插入3 次删除

查看文件

@ -75,7 +75,7 @@ public class AppVersionController {
@RequestParam(required = false) String userId) { @RequestParam(required = false) String userId) {
String resolvedAppKey = resolveAndValidate(appKey, platform, licenseFile); String resolvedAppKey = resolveAndValidate(appKey, platform, licenseFile);
boolean serviceActivated = versionRepository.existsByAppKey(resolvedAppKey); boolean serviceActivated = tenantClient.isUpdateServiceEnabled(resolvedAppKey, platform.name());
boolean allowAnonymousCheck = publishConfigService.allowAnonymousUpdateCheck(resolvedAppKey); boolean allowAnonymousCheck = publishConfigService.allowAnonymousUpdateCheck(resolvedAppKey);
if (!serviceActivated) { if (!serviceActivated) {

查看文件

@ -56,6 +56,4 @@ public interface AppVersionRepository extends JpaRepository<AppVersionEntity, St
List<AppVersionEntity> findByAppKeyAndPlatformAndPackageNameAndVersionCodeAndPublishStatus( List<AppVersionEntity> findByAppKeyAndPlatformAndPackageNameAndVersionCodeAndPublishStatus(
String appKey, AppVersionEntity.Platform platform, String packageName, int versionCode, String appKey, AppVersionEntity.Platform platform, String packageName, int versionCode,
AppVersionEntity.PublishStatus publishStatus); AppVersionEntity.PublishStatus publishStatus);
boolean existsByAppKey(String appKey);
} }

查看文件

@ -32,6 +32,24 @@ public class UpdateTenantClient {
return cache.computeIfAbsent(appKey, this::fetchPlatformInfo); return cache.computeIfAbsent(appKey, this::fetchPlatformInfo);
} }
public boolean isUpdateServiceEnabled(String appKey, String platform) {
String url = UriComponentsBuilder.fromHttpUrl(tenantServiceUrl)
.path("/api/internal/sdk/apps/{appKey}/services/{platform}/UPDATE")
.buildAndExpand(appKey, platform)
.toUriString();
HttpHeaders headers = new HttpHeaders();
headers.set("X-Internal-Token", internalToken);
try {
ResponseEntity<JsonNode> response = restTemplate.exchange(
url, HttpMethod.GET, new HttpEntity<>(headers), JsonNode.class);
JsonNode data = response.getBody() == null ? null : response.getBody().path("data");
if (response.getStatusCode().is2xxSuccessful() && data != null && !data.isMissingNode()) {
return data.path("enabled").asBoolean(false);
}
} catch (RestClientException ignored) {}
return false;
}
private PlatformInfo fetchPlatformInfo(String appKey) { private PlatformInfo fetchPlatformInfo(String appKey) {
String url = UriComponentsBuilder.fromHttpUrl(tenantServiceUrl) String url = UriComponentsBuilder.fromHttpUrl(tenantServiceUrl)
.path("/api/internal/sdk/apps/{appKey}/platform-info") .path("/api/internal/sdk/apps/{appKey}/platform-info")