From 81f04ee43297d697168e5e69c99c00c57a81b10f Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Sun, 17 May 2026 12:39:06 +0800 Subject: [PATCH] fix MI poll: log full response, fix synchroResult=0 mapped to REJECTED not UNDER_REVIEW Co-Authored-By: Claude Sonnet 4.6 --- .../service/StoreSubmissionService.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/update-service/src/main/java/com/xuqm/update/service/StoreSubmissionService.java b/update-service/src/main/java/com/xuqm/update/service/StoreSubmissionService.java index 78b5074..d177e55 100644 --- a/update-service/src/main/java/com/xuqm/update/service/StoreSubmissionService.java +++ b/update-service/src/main/java/com/xuqm/update/service/StoreSubmissionService.java @@ -479,24 +479,30 @@ public class StoreSubmissionService { String publicKey = resolveMiPublicKey(creds); String privateKey = require(creds, "privateKey", "MI"); JsonNode root = miGetAppInfo(account, requirePackageName(v), publicKey, privateKey); + // Log full root response so we can verify exact field names from production + log.info("MI poll full response for version={}: {}", v.getId(), root); JsonNode pkg = root.path("packageInfo"); - // Log the full packageInfo so we can tune status-field mapping from production logs. - log.info("MI poll packageInfo for version={}: {}", v.getId(), pkg); // Xiaomi /devupload/dev/query response: - // packageInfo.appStatus (or .status): 1=待审核, 2=审核中, 3=已发布/上线, 4=已下线, 5=拒绝 - // Fallback candidate: .synchroResult (1=成功/已上线, 0=失败/拒绝) + // packageInfo.appStatus: 1=待审核, 2=审核中, 3=已发布/上线, 4=已下线, 5=拒绝 + // root.updateVersion (bool): true=用户可更新(已上线), false=不可更新(审核中或拒绝) + // packageInfo.synchroResult: 1=上线成功, 0=拒绝/失败 int appStatus = pkg.path("appStatus").asInt(pkg.path("status").asInt(-1)); - log.info("MI poll appStatus={} for version={}", appStatus, v.getId()); + boolean updateVersion = root.path("updateVersion").asBoolean(true); + log.info("MI poll appStatus={} updateVersion={} for version={}", appStatus, updateVersion, v.getId()); yield switch (appStatus) { - case 3 -> AppVersionEntity.StoreReviewState.APPROVED; + case 3 -> updateVersion + ? AppVersionEntity.StoreReviewState.APPROVED + : AppVersionEntity.StoreReviewState.UNDER_REVIEW; // published but new version rejected case 5 -> AppVersionEntity.StoreReviewState.REJECTED; case 1, 2 -> AppVersionEntity.StoreReviewState.UNDER_REVIEW; default -> { - // Fall back to synchroResult: 1=已上线(通过), -1/0=其他 + // appStatus field absent — fall back to synchroResult and updateVersion int synchroResult = pkg.path("synchroResult").asInt(-1); log.info("MI poll synchroResult={} for version={}", synchroResult, v.getId()); - yield synchroResult == 1 - ? AppVersionEntity.StoreReviewState.APPROVED + // synchroResult: 1=已上线(通过), 0=拒绝/失败 + yield synchroResult == 1 ? AppVersionEntity.StoreReviewState.APPROVED + : synchroResult == 0 ? AppVersionEntity.StoreReviewState.REJECTED + : updateVersion ? AppVersionEntity.StoreReviewState.APPROVED : AppVersionEntity.StoreReviewState.UNDER_REVIEW; } };