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 f4967a7..728662a 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 @@ -845,21 +845,35 @@ public class StoreSubmissionService { // 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()); + boolean staleCleared = false; + if (entry instanceof Map m) { + Object nonCurrentRelease = m.get("nonCurrentRelease"); + Object preExisting = m.get("preExisting"); + boolean hasStaleMark = Boolean.TRUE.equals(nonCurrentRelease) || Boolean.TRUE.equals(preExisting); + if (hasStaleMark) { + if (!polled.getOnlineVersionCode().isBlank()) { + int cmp = compareVersionCodes(polled.getOnlineVersionCode(), String.valueOf(v.getVersionCode())); + if (cmp < 0) { + log.info("Manual refresh: {}/{} clearing stale nonCurrentRelease/preExisting — online {} < submitted {}", + v.getId(), storeType, polled.getOnlineVersionCode(), v.getVersionCode()); + storeService.clearStoreReview(v.getId(), storeType); + staleCleared = true; + } + } else if (!polled.isCurrentSubmissionLive()) { + // onlineVersionCode is blank but current submission is not live — + // the stored nonCurrentRelease is unverifiable and likely stale. + log.info("Manual refresh: {}/{} clearing stale nonCurrentRelease/preExisting — onlineVersionCode blank and not current live", + v.getId(), storeType); storeService.clearStoreReview(v.getId(), storeType); - isApproved = false; - isUnderReview = false; - isRejected = false; - existingState = ""; + staleCleared = true; } } + if (staleCleared) { + isApproved = false; + isUnderReview = false; + isRejected = false; + existingState = ""; + } } AppVersionEntity.StoreReviewState mappedState = mapToStoreReviewState(polled.getReviewState());