From 5580dcabb424ee06746accf40cc72b8178ff6a6a Mon Sep 17 00:00:00 2001 From: zhx Date: Mon, 29 Jun 2026 20:15:34 +0800 Subject: [PATCH] fix: keep latest team policy release active --- .../impl/TeamPolicyManagerServiceImpl.java | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamPolicyManagerServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamPolicyManagerServiceImpl.java index 0797a662..4975b79d 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamPolicyManagerServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamPolicyManagerServiceImpl.java @@ -70,7 +70,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { .find(Query.query(Criteria.where("region").is(region) .and("release").is(Boolean.TRUE) .and("sysOrigin").is(sysOrigin)) - .with(Sort.by(Sort.Order.desc("createTime"))), + .with(newestFirst()), TeamPolicyManager.class); } @@ -81,7 +81,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { Criteria.where("region").is(region) .and("release").is(Boolean.TRUE) .and("sysOrigin").is(sysOrigin) - ), TeamPolicyManager.class); + ).with(newestFirst()), TeamPolicyManager.class); } @Override @@ -98,7 +98,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { } criteria.and("countryCode").is(countryCode); - return mongoTemplate.findOne(Query.query(criteria), TeamPolicyManager.class); + return mongoTemplate.findOne(Query.query(criteria).with(newestFirst()), TeamPolicyManager.class); } @Override @@ -109,7 +109,8 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { } List teamPolicyManagers = mongoTemplate.find( - Query.query(Criteria.where("region").in(regions).and("release").is(Boolean.TRUE)), + Query.query(Criteria.where("region").in(regions).and("release").is(Boolean.TRUE)) + .with(newestFirst()), TeamPolicyManager.class); if (CollectionUtils.isEmpty(teamPolicyManagers)) { @@ -117,7 +118,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { } return teamPolicyManagers.stream() - .collect(Collectors.toMap(TeamPolicyManager::getRegion, v -> v)); + .collect(Collectors.toMap(TeamPolicyManager::getRegion, v -> v, (existing, replacement) -> existing)); } @Override @@ -130,7 +131,8 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { // 查询所有 region 的已发布政策(所有 countryCode) List policies = mongoTemplate.find( Query.query(Criteria.where("region").in(regions) - .and("release").is(Boolean.TRUE)), + .and("release").is(Boolean.TRUE)) + .with(newestFirst()), TeamPolicyManager.class); if (CollectionUtils.isEmpty(policies)) { @@ -170,6 +172,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { && StringUtils.isNotBlank(policyManager.getSysOrigin())) { policyManager.setHistoryRelease(Boolean.TRUE); + disableOtherReleasedPolicies(policyManager); } policyManager.setPolicy(policyManager.getPolicy().stream() @@ -178,6 +181,33 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService { mongoTemplate.save(policyManager); } + /** + * 发布政策时保持同一作用域只有一个正在使用的政策,避免端内按国家或默认政策匹配到旧版本。 + */ + private void disableOtherReleasedPolicies(TeamPolicyManager policyManager) { + Criteria criteria = Criteria.where("sysOrigin").is(policyManager.getSysOrigin()) + .and("region").is(policyManager.getRegion()) + .and("release").is(Boolean.TRUE) + .and("id").ne(policyManager.getId()); + + if (Objects.equals(policyManager.getPolicyType(), TeamPolicyTypeEnum.SALARY_DIAMOND.name())) { + criteria.and("policyType").is(TeamPolicyTypeEnum.SALARY_DIAMOND.name()); + } else { + criteria.and("policyType").ne(TeamPolicyTypeEnum.SALARY_DIAMOND.name()); + } + + if (StringUtils.isNotBlank(policyManager.getCountryCode())) { + criteria.and("countryCode").is(policyManager.getCountryCode()); + } + + mongoTemplate.updateMulti(Query.query(criteria), + Update.update("release", Boolean.FALSE), TeamPolicyManager.class); + } + + private Sort newestFirst() { + return Sort.by(Sort.Order.desc("createTime")); + } + @Override public void deleteById(Long id) {