新代理政策-新增国家code区分
This commit is contained in:
parent
532a3167a9
commit
95e5fffe0c
@ -104,7 +104,8 @@ public class TeamMemberWorkQryExe {
|
|||||||
teamBillCycle -> Objects.equals(teamBillCycle.getStatus(), TeamBillCycleStatus.UNPAID))
|
teamBillCycle -> Objects.equals(teamBillCycle.getStatus(), TeamBillCycleStatus.UNPAID))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
Map<String, TeamPolicyManager> regionPolicy = teamPolicyManagerService.mapRegionRelease(
|
// 使用新的方法,支持 countryCode
|
||||||
|
Map<String, TeamPolicyManager> regionPolicy = teamPolicyManagerService.mapRegionReleaseWithCountry(
|
||||||
unpaidBillCycles.stream().map(TeamBillCycle::getRegion).collect(Collectors.toSet())
|
unpaidBillCycles.stream().map(TeamBillCycle::getRegion).collect(Collectors.toSet())
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -153,12 +154,17 @@ public class TeamMemberWorkQryExe {
|
|||||||
return co;
|
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)) {
|
if (Objects.isNull(policy)) {
|
||||||
return co;
|
return co;
|
||||||
}
|
}
|
||||||
|
|
||||||
TeamBillMemberTarget teamBillMemberTarget = calculatorTarget(target, policy);
|
TeamBillMemberTarget teamBillMemberTarget = TeamBillCycleUtils.calculatorPolicyTarget(target, policy);
|
||||||
co.getTarget().setSettlementResult(
|
co.getTarget().setSettlementResult(
|
||||||
teamAppConvertor.toTeamMemberTargetSettlementResultCO(teamBillMemberTarget)
|
teamAppConvertor.toTeamMemberTargetSettlementResultCO(teamBillMemberTarget)
|
||||||
);
|
);
|
||||||
@ -190,12 +196,12 @@ public class TeamMemberWorkQryExe {
|
|||||||
|
|
||||||
private TeamBillMemberTarget calculatorTarget(TeamMemberTarget target,
|
private TeamBillMemberTarget calculatorTarget(TeamMemberTarget target,
|
||||||
TeamPolicyManager policy) {
|
TeamPolicyManager policy) {
|
||||||
//2fun新增钻石政策
|
|
||||||
if (Objects.isNull(policy.getPolicyType()) || Objects.equals("MONEY", policy.getPolicyType())) {
|
if (Objects.isNull(policy.getPolicyType()) || Objects.equals("MONEY", policy.getPolicyType())) {
|
||||||
return TeamBillCycleUtils.calculatorPolicyTarget(target, policy);
|
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);
|
return TeamBillCycleUtils.calculatorPolicyDiamondTarget(target, policy, Objects.nonNull(billDiamondBalance) ? billDiamondBalance.getConsumptionPoints() : BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -45,6 +45,16 @@ public class TeamMemberTarget implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String sysOrigin;
|
private String sysOrigin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 区域ID
|
||||||
|
*/
|
||||||
|
private String region;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 国家code
|
||||||
|
*/
|
||||||
|
private String countryCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 团队id.
|
* 团队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.collection.CollectionUtils;
|
||||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||||
import com.red.circle.tool.core.num.NumUtils;
|
import com.red.circle.tool.core.num.NumUtils;
|
||||||
|
import com.red.circle.tool.core.text.StringUtils;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -36,6 +37,58 @@ public final class TeamBillCycleUtils {
|
|||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(TeamBillCycleUtils.class);
|
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());
|
}).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);
|
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查询对象.
|
* 根据id查询对象.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -122,6 +122,42 @@ public class TeamPolicyManagerServiceImpl implements TeamPolicyManagerService {
|
|||||||
.collect(Collectors.toMap(TeamPolicyManager::getRegion, v -> v));
|
.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
|
@Override
|
||||||
public TeamPolicyManager getById(Long id) {
|
public TeamPolicyManager getById(Long id) {
|
||||||
return mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), TeamPolicyManager.class);
|
return mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), TeamPolicyManager.class);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user