新代理政策-新增国家code区分
This commit is contained in:
parent
532a3167a9
commit
95e5fffe0c
@ -104,7 +104,8 @@ public class TeamMemberWorkQryExe {
|
||||
teamBillCycle -> Objects.equals(teamBillCycle.getStatus(), TeamBillCycleStatus.UNPAID))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<String, TeamPolicyManager> regionPolicy = teamPolicyManagerService.mapRegionRelease(
|
||||
// 使用新的方法,支持 countryCode
|
||||
Map<String, TeamPolicyManager> regionPolicy = teamPolicyManagerService.mapRegionReleaseWithCountry(
|
||||
unpaidBillCycles.stream().map(TeamBillCycle::getRegion).collect(Collectors.toSet())
|
||||
);
|
||||
|
||||
@ -153,12 +154,17 @@ public class TeamMemberWorkQryExe {
|
||||
return co;
|
||||
}
|
||||
|
||||
TeamPolicyManager policy = regionPolicy.get(bill.getRegion());
|
||||
// 使用 target 自身的 region 和 countryCode 查找匹配的 policy
|
||||
TeamPolicyManager policy = TeamBillCycleUtils.getPolicyFromMap(
|
||||
regionPolicy,
|
||||
target.getRegion(),
|
||||
target.getCountryCode());
|
||||
|
||||
if (Objects.isNull(policy)) {
|
||||
return co;
|
||||
}
|
||||
|
||||
TeamBillMemberTarget teamBillMemberTarget = calculatorTarget(target, policy);
|
||||
TeamBillMemberTarget teamBillMemberTarget = TeamBillCycleUtils.calculatorPolicyTarget(target, policy);
|
||||
co.getTarget().setSettlementResult(
|
||||
teamAppConvertor.toTeamMemberTargetSettlementResultCO(teamBillMemberTarget)
|
||||
);
|
||||
@ -190,12 +196,12 @@ public class TeamMemberWorkQryExe {
|
||||
|
||||
private TeamBillMemberTarget calculatorTarget(TeamMemberTarget target,
|
||||
TeamPolicyManager policy) {
|
||||
//2fun新增钻石政策
|
||||
|
||||
if (Objects.isNull(policy.getPolicyType()) || Objects.equals("MONEY", policy.getPolicyType())) {
|
||||
return TeamBillCycleUtils.calculatorPolicyTarget(target, policy);
|
||||
}
|
||||
BillDiamondBalance billDiamondBalance = billDiamondBalanceService.getEntityByBillBelongAndUserId(target.getSysOrigin(), target.getBillBelong(), target.getUserId());
|
||||
|
||||
BillDiamondBalance billDiamondBalance = billDiamondBalanceService.getEntityByBillBelongAndUserId(target.getSysOrigin(), target.getBillBelong(), target.getUserId());
|
||||
return TeamBillCycleUtils.calculatorPolicyDiamondTarget(target, policy, Objects.nonNull(billDiamondBalance) ? billDiamondBalance.getConsumptionPoints() : BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
|
||||
@ -45,6 +45,16 @@ public class TeamMemberTarget implements Serializable {
|
||||
*/
|
||||
private String sysOrigin;
|
||||
|
||||
/**
|
||||
* 区域ID
|
||||
*/
|
||||
private String region;
|
||||
|
||||
/**
|
||||
* 国家code
|
||||
*/
|
||||
private String countryCode;
|
||||
|
||||
/**
|
||||
* 团队id.
|
||||
*/
|
||||
|
||||
@ -15,6 +15,7 @@ import com.red.circle.other.inner.enums.team.TeamMemberTargetStatus;
|
||||
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||
import com.red.circle.tool.core.num.NumUtils;
|
||||
import com.red.circle.tool.core.text.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -36,6 +37,58 @@ public final class TeamBillCycleUtils {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TeamBillCycleUtils.class);
|
||||
|
||||
/**
|
||||
* Policy Map Key 分隔符.
|
||||
*/
|
||||
public static final String POLICY_KEY_DELIMITER = "_";
|
||||
|
||||
/**
|
||||
* 默认国家代码(通用政策).
|
||||
*/
|
||||
public static final String DEFAULT_COUNTRY_CODE = "DEFAULT";
|
||||
|
||||
/**
|
||||
* 构建 policy map 的 key.
|
||||
*
|
||||
* @param region 区域
|
||||
* @param countryCode 国家代码
|
||||
* @return map key,格式:region_countryCode 或 region_DEFAULT
|
||||
*/
|
||||
public static String buildPolicyMapKey(String region, String countryCode) {
|
||||
return region + POLICY_KEY_DELIMITER +
|
||||
(StringUtils.isNotBlank(countryCode) ? countryCode : DEFAULT_COUNTRY_CODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 policy map 中获取匹配的政策(支持 fallback).
|
||||
*
|
||||
* @param policyMap 政策 Map
|
||||
* @param region 区域
|
||||
* @param countryCode 国家代码
|
||||
* @return 匹配的政策,优先返回精确匹配的,没有则返回通用政策(countryCode=null)
|
||||
*/
|
||||
public static TeamPolicyManager getPolicyFromMap(
|
||||
Map<String, TeamPolicyManager> policyMap,
|
||||
String region,
|
||||
String countryCode) {
|
||||
|
||||
if (policyMap == null || region == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 1. 先找精确匹配 countryCode 的政策
|
||||
String key = buildPolicyMapKey(region, countryCode);
|
||||
TeamPolicyManager policy = policyMap.get(key);
|
||||
|
||||
// 2. Fallback:如果没找到,查找通用政策(countryCode = null)
|
||||
if (policy == null) {
|
||||
key = buildPolicyMapKey(region, null);
|
||||
policy = policyMap.get(key);
|
||||
}
|
||||
|
||||
return policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* 团队周期数.
|
||||
*/
|
||||
@ -247,6 +300,66 @@ public final class TeamBillCycleUtils {
|
||||
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算成员工作情况(Map版本 - 支持多region和countryCode).
|
||||
*
|
||||
* @param targets 目标列表,每个target包含region和countryCode
|
||||
* @param policyMap 政策Map,key格式:region_countryCode
|
||||
* @return 计算结果列表
|
||||
*/
|
||||
public static List<TeamBillMemberTarget> calculatorPolicyTargetWithMap(
|
||||
List<TeamMemberTarget> targets,
|
||||
Map<String, TeamPolicyManager> policyMap) {
|
||||
|
||||
if (CollectionUtils.isEmpty(targets)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
|
||||
// 按 region + countryCode 分组
|
||||
Map<String, List<TeamMemberTarget>> groupedTargets = targets.stream()
|
||||
.filter(target -> !Boolean.TRUE.equals(target.getHistory()))
|
||||
.collect(Collectors.groupingBy(target ->
|
||||
buildPolicyMapKey(target.getRegion(), target.getCountryCode())));
|
||||
|
||||
List<TeamBillMemberTarget> allResults = new ArrayList<>();
|
||||
|
||||
// 对每组使用对应的 policy 计算
|
||||
groupedTargets.forEach((policyKey, groupTargets) -> {
|
||||
// 取第一个 target 只是为了获取 region 和 countryCode(同一组的都相同)
|
||||
TeamMemberTarget firstTarget = groupTargets.get(0);
|
||||
// 从 map 中获取对应的 policy(自动 fallback)
|
||||
TeamPolicyManager policy = getPolicyFromMap(
|
||||
policyMap,
|
||||
firstTarget.getRegion(),
|
||||
firstTarget.getCountryCode());
|
||||
|
||||
if (policy != null) {
|
||||
// 使用原有的单 policy 计算逻辑,传入整个 groupTargets 列表
|
||||
List<TeamBillMemberTarget> results = calculatorPolicyTarget(groupTargets, policy);
|
||||
allResults.addAll(results);
|
||||
} else {
|
||||
// 没有匹配的政策,返回默认值
|
||||
groupTargets.forEach(target -> {
|
||||
TeamBillMemberTarget defaultTarget = new TeamBillMemberTarget()
|
||||
.setTargetId(target.getTimeId())
|
||||
.setSysOrigin(target.getSysOrigin())
|
||||
.setUserId(target.getUserId())
|
||||
.setAcceptGiftValue(target.sumAcceptGiftValue())
|
||||
.setGiveGiftValue(target.sumGiveGiftValue())
|
||||
.setRoomValue(target.sumRoomValue())
|
||||
.setOnlineTime(target.sumAllTargetTime())
|
||||
.setMemberSalary(BigDecimal.ZERO)
|
||||
.setOwnSalary(BigDecimal.ZERO)
|
||||
.setTotalSalary(BigDecimal.ZERO)
|
||||
.setSatisfyLevel(Boolean.FALSE);
|
||||
allResults.add(defaultTarget);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return allResults;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算上月溢出值.
|
||||
*/
|
||||
|
||||
@ -61,6 +61,14 @@ public interface TeamPolicyManagerService {
|
||||
*/
|
||||
Map<String, TeamPolicyManager> mapRegionRelease(Set<String> regions);
|
||||
|
||||
/**
|
||||
* 批量查询已发布政策(支持多countryCode).
|
||||
*
|
||||
* @param regions 区域集合
|
||||
* @return Map,key格式:region_countryCode 或 region_DEFAULT
|
||||
*/
|
||||
Map<String, TeamPolicyManager> mapRegionReleaseWithCountry(Set<String> regions);
|
||||
|
||||
/**
|
||||
* 根据id查询对象.
|
||||
*/
|
||||
|
||||
@ -122,6 +122,42 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
|
||||
.collect(Collectors.toMap(TeamPolicyManager::getRegion, v -> v));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, TeamPolicyManager> mapRegionReleaseWithCountry(Set<String> regions) {
|
||||
|
||||
if (CollectionUtils.isEmpty(regions)) {
|
||||
return Maps.newHashMap();
|
||||
}
|
||||
|
||||
// 查询所有 region 的已发布政策(所有 countryCode)
|
||||
List<TeamPolicyManager> policies = mongoTemplate.find(
|
||||
Query.query(Criteria.where("region").in(regions)
|
||||
.and("release").is(Boolean.TRUE)),
|
||||
TeamPolicyManager.class);
|
||||
|
||||
if (CollectionUtils.isEmpty(policies)) {
|
||||
return Maps.newHashMap();
|
||||
}
|
||||
|
||||
// 构建Map,key = region + "_" + countryCode
|
||||
return policies.stream()
|
||||
.collect(Collectors.toMap(
|
||||
policy -> buildPolicyMapKey(policy.getRegion(), policy.getCountryCode()),
|
||||
policy -> policy,
|
||||
(existing, replacement) -> existing
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建policy map的key.
|
||||
*/
|
||||
private String buildPolicyMapKey(String region, String countryCode) {
|
||||
String delimiter = "_";
|
||||
String defaultCountry = "DEFAULT";
|
||||
return region + delimiter +
|
||||
(StringUtils.isNotBlank(countryCode) ? countryCode : defaultCountry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeamPolicyManager getById(Long id) {
|
||||
return mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), TeamPolicyManager.class);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user