工资结算南亚区域特殊处理

This commit is contained in:
tianfeng 2025-10-03 01:23:27 +08:00
parent 083efd892d
commit adedfdf5d1
2 changed files with 93 additions and 9 deletions

View File

@ -159,8 +159,15 @@ public class TeamBillSettleListener implements MessageListener {
}
});
List<TeamBillMemberTarget> teamBillMemberTargets = calculatorTarget(teamMemberTargets,
regionPolicyManager);
// 获得区域配置细信息
SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion());
if (Objects.isNull(regionConfig)) {
log.warn("没有获得团队的区域数据,团队ID:{}", teamProfile.getId());
return;
}
List<TeamBillMemberTarget> teamBillMemberTargets =
TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig);
log.warn("团队账单结算teamBillMemberTargets."+teamBillMemberTargets);
// 结算账单.
@ -183,13 +190,6 @@ public class TeamBillSettleListener implements MessageListener {
return;
}
// 获得区域配置细信息
SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion());
if (Objects.isNull(regionConfig)) {
log.warn("没有获得团队的区域数据,团队ID:{}", teamProfile.getId());
return;
}
if (Objects.isNull(regionPolicyManager.getPolicyType()) || Objects.equals(TeamPolicyTypeEnum.MONEY.name(), regionPolicyManager.getPolicyType())) {
log.warn("美金入账{}", teamProfile);
// 成员入账

View File

@ -6,6 +6,7 @@ import com.red.circle.other.infra.database.mongo.dto.team.TeamBillPolicyType;
import com.red.circle.other.infra.database.mongo.dto.team.TeamPolicy;
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMemberTarget;
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamPolicyManager;
import com.red.circle.other.infra.database.mongo.entity.user.region.SysRegionConfig;
import com.red.circle.other.infra.database.rds.entity.team.BillDiamondBalance;
import com.red.circle.other.inner.enums.team.TeamMemberTargetIndex;
import com.red.circle.tool.core.collection.CollectionUtils;
@ -129,6 +130,88 @@ public final class TeamBillCycleUtils {
return calculatorPolicyTarget(List.of(target), policy).get(0);
}
/**
* 计算成员工作情况.
*/
public static List<TeamBillMemberTarget> calculatorPolicyTargetNew(List<TeamMemberTarget> targets,
TeamPolicyManager policy, SysRegionConfig regionConfig) {
if (CollectionUtils.isEmpty(targets)) {
return Lists.newArrayList();
}
List<TeamPolicy> teamPolicies = Objects.nonNull(policy)
? policy.getPolicy().stream()
.sorted(Comparator.comparing(TeamPolicy::getLevel, Comparator.reverseOrder()))
.collect(Collectors.toList())
: Lists.newArrayList();
return targets.stream().map(target -> {
long targetTimeHours = target.sumAllTargetTime() / 60;
Long acceptGiftValue = target.sumAcceptGiftValue();
Integer effectiveDay = target.sumEffectiveDay();
TeamBillMemberTarget resultTarget = 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);
for (TeamPolicy teamPolicy : teamPolicies) {
Long policyOnlineTimeHours = NumUtils.isNullDefaultZero(teamPolicy.getOnlineTime());
Long policyGiftValue = NumUtils.isNullDefaultZero(teamPolicy.getTarget());
// 南亚区域特殊处理
if ("SA".equals(regionConfig.getRegionCode())) {
if (acceptGiftValue < policyGiftValue) {
continue;
}
if (!Boolean.TRUE.equals(target.getIsOwn())) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setTotalSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
} else {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary());
resultTarget.setOwnSalary(teamPolicy.getOwnSalary());
resultTarget.setTotalSalary(teamPolicy.getTotalSalary());
}
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
} else {
// 20240918 政策新增有效天字段大于1小时60分钟即可获取当天有效天
Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay());
if (targetTimeHours >= policyOnlineTimeHours && acceptGiftValue >= policyGiftValue && effectiveDay >= policyEffectiveDay) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary());
resultTarget.setOwnSalary(teamPolicy.getOwnSalary());
resultTarget.setTotalSalary(teamPolicy.getTotalSalary());
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
} else if (acceptGiftValue >= policyGiftValue && !Boolean.TRUE.equals(target.getIsOwn())) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setTotalSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
}
}
}
return resultTarget;
}).filter(Objects::nonNull).collect(Collectors.toList());
}
/**
* 计算成员工作情况.
*/
@ -182,6 +265,7 @@ public final class TeamBillCycleUtils {
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
}
}
return resultTarget;