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 321c7b9..f4967a7 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 @@ -840,6 +840,28 @@ public class StoreSubmissionService { boolean isUnderReview = "UNDER_REVIEW".equals(existingState); boolean isRejected = "REJECTED".equals(existingState); boolean isApproved = "APPROVED".equals(existingState); + + // Stale-state cleanup: previous buggy code wrote nonCurrentRelease/preExisting + // whenever an online version existed, regardless of whether it was newer or older. + // If the online version is OLDER than the submitted version, clear any stale marks + // so the user can submit this newer version. + if (!polled.getOnlineVersionCode().isBlank()) { + int cmp = compareVersionCodes(polled.getOnlineVersionCode(), String.valueOf(v.getVersionCode())); + if (cmp < 0 && entry instanceof Map m) { + Object nonCurrentRelease = m.get("nonCurrentRelease"); + Object preExisting = m.get("preExisting"); + if (Boolean.TRUE.equals(nonCurrentRelease) || Boolean.TRUE.equals(preExisting)) { + log.info("Manual refresh: {}/{} clearing stale nonCurrentRelease/preExisting — online {} < submitted {}", + v.getId(), storeType, polled.getOnlineVersionCode(), v.getVersionCode()); + storeService.clearStoreReview(v.getId(), storeType); + isApproved = false; + isUnderReview = false; + isRejected = false; + existingState = ""; + } + } + } + AppVersionEntity.StoreReviewState mappedState = mapToStoreReviewState(polled.getReviewState()); if (mappedState == AppVersionEntity.StoreReviewState.APPROVED) { if (polled.isCurrentSubmissionLive()) {