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 51c958c..d2e08cc 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 @@ -525,7 +525,7 @@ public class StoreSubmissionService { boolean hasOnlineVersion = updateVersion || !onlineVersionCode.isBlank(); boolean nonCurrentRelease = hasOnlineVersion && !currentSubmissionLive; StoreRemoteState.ReviewState reviewState; - if (appStatus == 5) { + if (appStatus == 5 && currentSubmissionLive) { reviewState = StoreRemoteState.ReviewState.REJECTED; } else if (currentSubmissionLive) { reviewState = StoreRemoteState.ReviewState.ONLINE; @@ -715,17 +715,19 @@ public class StoreSubmissionService { log.debug("Store review poll: {}/{} still UNDER_REVIEW", v.getId(), storeType); } } else { - // REJECTED: only transition to APPROVED if the CURRENT submission is now live. - // If a different version is online (nonCurrentRelease), keep REJECTED — - // the rejection of the current submission is still valid. - if (polled.getReviewState() == StoreRemoteState.ReviewState.ONLINE && polled.isCurrentSubmissionLive()) { - log.info("Store review poll: {}/{} was REJECTED but current submission is now live", - v.getId(), storeType); - storeService.updateStoreReviewLive(v.getId(), storeType, false, + if (polled.getReviewState() == StoreRemoteState.ReviewState.ONLINE) { + log.info("Store review poll: {}/{} was REJECTED but store has live version currentSubmissionLive={} nonCurrentRelease={} liveVersionName={} liveVersionCode={}", + v.getId(), storeType, polled.isCurrentSubmissionLive(), polled.isNonCurrentRelease(), + polled.getOnlineVersionName(), polled.getOnlineVersionCode()); + storeService.updateStoreReviewLive(v.getId(), storeType, !polled.isCurrentSubmissionLive(), buildLiveReason(polled), buildExtra(polled)); - } else if (polled.getReviewState() == StoreRemoteState.ReviewState.ONLINE && polled.isNonCurrentRelease()) { - log.debug("Store review poll: {}/{} was REJECTED and a different version is online — leaving REJECTED", + } else if ("MI".equals(storeType) + && polled.getReviewState() == StoreRemoteState.ReviewState.UNDER_REVIEW_XIAOMI) { + log.info("Store review poll: {}/{} was REJECTED but Xiaomi has no current-version reject signal — restoring UNDER_REVIEW", v.getId(), storeType); + storeService.updateStoreReview(v.getId(), storeType, + AppVersionEntity.StoreReviewState.UNDER_REVIEW, + "小米应用商店当前提交版本审核中"); } // otherwise leave REJECTED as-is } @@ -755,6 +757,12 @@ public class StoreSubmissionService { reviewMap = new LinkedHashMap<>(); } List targets = parseTargets(v.getStoreSubmitTargets()); + if (targets.isEmpty() && !reviewMap.isEmpty()) { + targets = new ArrayList<>(reviewMap.keySet()); + } + if (targets.isEmpty()) { + targets = storeService.resolveDefaultStoreTargets(v.getAppKey()); + } List results = new ArrayList<>(); for (String storeType : targets) { AppStoreConfigEntity cfg; @@ -796,23 +804,25 @@ public class StoreSubmissionService { boolean isUnderReview = "UNDER_REVIEW".equals(existingState); boolean isRejected = "REJECTED".equals(existingState); AppVersionEntity.StoreReviewState mappedState = mapToStoreReviewState(polled.getReviewState()); - if (isUnderReview) { - if (mappedState != AppVersionEntity.StoreReviewState.UNDER_REVIEW) { - log.info("Manual refresh: {}/{} status changed from UNDER_REVIEW to {}", v.getId(), storeType, mappedState); - if (mappedState == AppVersionEntity.StoreReviewState.APPROVED) { - storeService.updateStoreReviewLive(v.getId(), storeType, !polled.isCurrentSubmissionLive(), - buildLiveReason(polled), buildExtra(polled)); - } else { - storeService.updateStoreReview(v.getId(), storeType, mappedState, "手动刷新厂商审核状态"); - } + if (mappedState == AppVersionEntity.StoreReviewState.APPROVED) { + log.info("Manual refresh: {}/{} writing live state currentSubmissionLive={} nonCurrentRelease={} liveVersionName={} liveVersionCode={}", + v.getId(), storeType, polled.isCurrentSubmissionLive(), polled.isNonCurrentRelease(), + polled.getOnlineVersionName(), polled.getOnlineVersionCode()); + storeService.updateStoreReviewLive(v.getId(), storeType, !polled.isCurrentSubmissionLive(), + buildLiveReason(polled), buildExtra(polled)); + } else if ("MI".equals(storeType) + && polled.getReviewState() == StoreRemoteState.ReviewState.UNDER_REVIEW_XIAOMI) { + if (!"UNDER_REVIEW".equals(existingState)) { + log.info("Manual refresh: {}/{} restoring Xiaomi UNDER_REVIEW from {}", v.getId(), storeType, existingState); } - } else if (isRejected) { - if (polled.getReviewState() == StoreRemoteState.ReviewState.ONLINE && polled.isCurrentSubmissionLive()) { - log.info("Manual refresh: {}/{} was REJECTED but current submission is now live", v.getId(), storeType); - storeService.updateStoreReviewLive(v.getId(), storeType, false, - buildLiveReason(polled), buildExtra(polled)); - } else if (polled.getReviewState() == StoreRemoteState.ReviewState.ONLINE && polled.isNonCurrentRelease()) { - log.info("Manual refresh: {}/{} was REJECTED and a different version is online — leaving REJECTED", v.getId(), storeType); + storeService.updateStoreReview(v.getId(), storeType, + AppVersionEntity.StoreReviewState.UNDER_REVIEW, + "小米应用商店当前提交版本审核中"); + } else if (isUnderReview || isRejected) { + if (mappedState != AppVersionEntity.StoreReviewState.UNDER_REVIEW + || !"UNDER_REVIEW".equals(existingState)) { + log.info("Manual refresh: {}/{} writing {} from {}", v.getId(), storeType, mappedState, existingState); + storeService.updateStoreReview(v.getId(), storeType, mappedState, "手动刷新厂商审核状态"); } } else { // For other states (PENDING, SUBMITTING, APPROVED, WITHDRAWN), @@ -845,7 +855,9 @@ public class StoreSubmissionService { if (result.isCurrentSubmissionLive()) { return "厂商审核状态轮询检测:本次提交版本已上线"; } - String version = firstNonBlank(result.getOnlineVersionName(), result.getOnlineVersionCode()); + String name = result.getOnlineVersionName(); + String code = result.getOnlineVersionCode(); + String version = !name.isBlank() && !code.isBlank() ? name + " · " + code : firstNonBlank(name, code); if (!version.isBlank()) { return "应用商店已有线上版本 " + version + ",非本次发布"; } @@ -861,6 +873,12 @@ public class StoreSubmissionService { if (!result.getOnlineVersionCode().isBlank()) { extra.put("liveVersionCode", result.getOnlineVersionCode()); } + if (!result.getReviewVersionName().isBlank()) { + extra.put("reviewVersionName", result.getReviewVersionName()); + } + if (!result.getReviewVersionCode().isBlank()) { + extra.put("reviewVersionCode", result.getReviewVersionCode()); + } if (result.isNonCurrentRelease()) { extra.put("nonCurrentRelease", true); }