fix: keep latest team policy release active

This commit is contained in:
zhx 2026-06-29 20:15:34 +08:00
parent 541493692c
commit 5580dcabb4

View File

@ -70,7 +70,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
.find(Query.query(Criteria.where("region").is(region) .find(Query.query(Criteria.where("region").is(region)
.and("release").is(Boolean.TRUE) .and("release").is(Boolean.TRUE)
.and("sysOrigin").is(sysOrigin)) .and("sysOrigin").is(sysOrigin))
.with(Sort.by(Sort.Order.desc("createTime"))), .with(newestFirst()),
TeamPolicyManager.class); TeamPolicyManager.class);
} }
@ -81,7 +81,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
Criteria.where("region").is(region) Criteria.where("region").is(region)
.and("release").is(Boolean.TRUE) .and("release").is(Boolean.TRUE)
.and("sysOrigin").is(sysOrigin) .and("sysOrigin").is(sysOrigin)
), TeamPolicyManager.class); ).with(newestFirst()), TeamPolicyManager.class);
} }
@Override @Override
@ -98,7 +98,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
} }
criteria.and("countryCode").is(countryCode); criteria.and("countryCode").is(countryCode);
return mongoTemplate.findOne(Query.query(criteria), TeamPolicyManager.class); return mongoTemplate.findOne(Query.query(criteria).with(newestFirst()), TeamPolicyManager.class);
} }
@Override @Override
@ -109,7 +109,8 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
} }
List<TeamPolicyManager> teamPolicyManagers = mongoTemplate.find( List<TeamPolicyManager> 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); TeamPolicyManager.class);
if (CollectionUtils.isEmpty(teamPolicyManagers)) { if (CollectionUtils.isEmpty(teamPolicyManagers)) {
@ -117,7 +118,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
} }
return teamPolicyManagers.stream() return teamPolicyManagers.stream()
.collect(Collectors.toMap(TeamPolicyManager::getRegion, v -> v)); .collect(Collectors.toMap(TeamPolicyManager::getRegion, v -> v, (existing, replacement) -> existing));
} }
@Override @Override
@ -130,7 +131,8 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
// 查询所有 region 的已发布政策所有 countryCode // 查询所有 region 的已发布政策所有 countryCode
List<TeamPolicyManager> policies = mongoTemplate.find( List<TeamPolicyManager> policies = mongoTemplate.find(
Query.query(Criteria.where("region").in(regions) Query.query(Criteria.where("region").in(regions)
.and("release").is(Boolean.TRUE)), .and("release").is(Boolean.TRUE))
.with(newestFirst()),
TeamPolicyManager.class); TeamPolicyManager.class);
if (CollectionUtils.isEmpty(policies)) { if (CollectionUtils.isEmpty(policies)) {
@ -170,6 +172,7 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
&& StringUtils.isNotBlank(policyManager.getSysOrigin())) { && StringUtils.isNotBlank(policyManager.getSysOrigin())) {
policyManager.setHistoryRelease(Boolean.TRUE); policyManager.setHistoryRelease(Boolean.TRUE);
disableOtherReleasedPolicies(policyManager);
} }
policyManager.setPolicy(policyManager.getPolicy().stream() policyManager.setPolicy(policyManager.getPolicy().stream()
@ -178,6 +181,33 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
mongoTemplate.save(policyManager); 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 @Override
public void deleteById(Long id) { public void deleteById(Long id) {