diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/team/TeamBillSettleListener.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/team/TeamBillSettleListener.java index 3bd6077d..a35edf38 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/team/TeamBillSettleListener.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/team/TeamBillSettleListener.java @@ -152,12 +152,12 @@ public class TeamBillSettleListener implements MessageListener { teamBillCycle.getBillBelong()); log.warn("团队账单结算teamMemberTargets."+teamMemberTargets); - teamMemberTargets.forEach(teamMemberTarget -> { - TeamMember teamMember = teamMemberService.getByMemberId(teamMemberTarget.getUserId()); - if (Objects.nonNull(teamMember) && TeamMemberRole.OWN.eq(teamMember.getRole())) { - teamMemberTarget.setIsOwn(true); - } - }); +// teamMemberTargets.forEach(teamMemberTarget -> { +// TeamMember teamMember = teamMemberService.getByMemberId(teamMemberTarget.getUserId()); +// if (Objects.nonNull(teamMember) && TeamMemberRole.OWN.eq(teamMember.getRole())) { +// teamMemberTarget.setIsOwn(true); +// } +// }); // 获得区域配置细信息 SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion()); @@ -167,14 +167,14 @@ public class TeamBillSettleListener implements MessageListener { } List teamBillMemberTargets = - TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig); + TeamBillCycleUtils.calculatorPolicyTarget(teamMemberTargets, regionPolicyManager); log.warn("团队账单结算teamBillMemberTargets."+teamBillMemberTargets); // 结算账单. TeamBillSettleResult settleResult = new TeamBillSettleResult() .setPolicy(regionPolicyManager) .setWorkMembers(countWorkMembers(teamMemberTargets)) - .setFinishMembers(teamBillMemberTargets.size()) + .setFinishMembers(teamBillMemberTargets.stream().filter(TeamBillMemberTarget::getSatisfyLevel).toList().size()) .setMemberSalary(sumMemberSalary(teamBillMemberTargets)) .setOwnSalary(ownSalary(teamBillMemberTargets)) .setTotalSalary(ownTotalSalary(teamBillMemberTargets)); diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java index 2d3794a0..09a36d00 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java @@ -137,97 +137,6 @@ public final class TeamBillCycleUtils { return calculatorPolicyTarget(List.of(target), policy).get(0); } - /** - * 计算成员工作情况. - */ - public static List calculatorPolicyTargetNew(List targets, - TeamPolicyManager policy, SysRegionConfig regionConfig) { - - if (CollectionUtils.isEmpty(targets)) { - return Lists.newArrayList(); - } - - List 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(); - - // 计算有效天数:统计每日在线时长 >= 120分钟的天数 - Integer effectiveDay = calculateEffectiveDay(target); - - 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; - } - - Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay()); - if (targetTimeHours >= policyOnlineTimeHours && effectiveDay >= policyEffectiveDay) { - resultTarget.setMemberSalary(teamPolicy.getMemberSalary()); - resultTarget.setOwnSalary(teamPolicy.getOwnSalary()); - resultTarget.setTotalSalary(teamPolicy.getTotalSalary()); - - } 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; - } 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()); - } - /** * 计算有效天数 * 规则:每日在线时长 >= 120分钟算作有效一天 @@ -305,24 +214,27 @@ public final class TeamBillCycleUtils { for (TeamPolicy teamPolicy : teamPolicies) { Long policyOnlineTimeHours = NumUtils.isNullDefaultZero(teamPolicy.getOnlineTime()); Long policyGiftValue = NumUtils.isNullDefaultZero(teamPolicy.getTarget()); - // 20240918 政策新增有效天字段,大于1小时(60分钟)即可获取当天有效天 + + // 礼物流水不满足条件 + if (acceptGiftValue < policyGiftValue) { + continue; + } + + // 完全满足条件:在线时长、礼物流水、有效天数都达标 Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay()); - if (targetTimeHours >= policyOnlineTimeHours && acceptGiftValue >= policyGiftValue && effectiveDay >= policyEffectiveDay) { + if (targetTimeHours >= policyOnlineTimeHours && 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; + } else { + 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()); diff --git a/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java b/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java index 50a89914..fa8122bb 100644 --- a/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java +++ b/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java @@ -30,6 +30,7 @@ import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Arrays; import java.util.List; @SpringBootTest(classes = OtherServiceApplication.class) @@ -61,56 +62,86 @@ public class TeamMonthBillTest { teamBillTask.processTeamMonthBillTest(); } - /** - * listener直接处理团队账单 - */ - @Test - public void testListener() { - Long teamId = 1969441508127473665L; - // 获取团队信息 - TeamProfile teamProfile = teamProfileService.getById(teamId); - - TeamBillCycle teamBillCycle = new TeamBillCycle(); - teamBillCycle.setSysOrigin("LIKEI"); - teamBillCycle.setRegion(teamProfile.getRegion()); - teamBillCycle.setBillBelong(20251016); - teamBillCycle.setTeamId(teamId); - - - // 获取团队区域政策 - TeamPolicyManager regionPolicyManager = teamPolicyManagerService.getReleaseByRegionAndType( - teamBillCycle.getSysOrigin(), - teamBillCycle.getRegion() - ); - SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion()); - List teamMemberTargets = teamMemberTargetService.listByBillBelong( - teamBillCycle.getTeamId(), - teamBillCycle.getBillBelong()); - - List teamBillMemberTargets = - TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig); - - // 结算账单. - TeamBillSettleResult settleResult = new TeamBillSettleResult() - .setPolicy(regionPolicyManager) - .setWorkMembers(countWorkMembers(teamMemberTargets)) - .setFinishMembers(teamBillMemberTargets.size()) - .setMemberSalary(sumMemberSalary(teamBillMemberTargets)) - .setOwnSalary(ownSalary(teamBillMemberTargets)) - .setTotalSalary(ownTotalSalary(teamBillMemberTargets)); - - System.out.println("============= 账单结算结果 ============="); - System.out.printf("政策信息: %s%n", settleResult.getPolicy()); - System.out.printf("工作人数: %d%n", settleResult.getWorkMembers()); - System.out.printf("完成人数: %d%n", settleResult.getFinishMembers()); - System.out.printf("成员工资: %s%n", settleResult.getMemberSalary()); - System.out.printf("拥有者工资: %s%n", settleResult.getOwnSalary()); - System.out.printf("工资合计: %s%n", settleResult.getTotalSalary()); - System.out.println("======================================="); + /** + * 批量团队结算 + */ + @Test + public void processTeamBillSettle() { + String json = " [\n" + + "\"1970912960966479874\",\n" + + "\"1965724731682754561\",\n" + + "\"1982985325435207682\",\n" + + "\"1978213327176196097\",\n" + + "\"1981316214519701506\",\n" + + "\"1980616977268658178\",\n" + + "\"1982190084063019010\",\n" + + "\"1982431621845925889\",\n" + + "\"1982372655623356418\",\n" + + "\"1980617113277353986\",\n" + + "\"1978447372520308737\"\n" + + " ]"; + List teamList = JSON.parseArray(json, String.class); + for (String teamId : teamList) { + Long id = Long.parseLong(teamId); + teamBillSettleListener.processBillTest(id); + } } - private int countWorkMembers(List teamMemberTargets) { + @Test + public void testListener() { + Long teamId = 1970912960966479874L; + queryTeamSalary(teamId, 2025016); + } + + + /** + * 查询团队工资 + */ + private void queryTeamSalary(Long teamId, Integer billBelong) { + + // 获取团队信息 + TeamProfile teamProfile = teamProfileService.getById(teamId); + + TeamBillCycle teamBillCycle = new TeamBillCycle(); + teamBillCycle.setSysOrigin("LIKEI"); + teamBillCycle.setRegion(teamProfile.getRegion()); + teamBillCycle.setBillBelong(billBelong); + teamBillCycle.setTeamId(teamId); + + + // 获取团队区域政策 + TeamPolicyManager regionPolicyManager = teamPolicyManagerService.getReleaseByRegionAndType( + teamBillCycle.getSysOrigin(), + teamBillCycle.getRegion() + ); + List teamMemberTargets = teamMemberTargetService.listByBillBelong( + teamBillCycle.getTeamId(), + teamBillCycle.getBillBelong()); + + List teamBillMemberTargets = + TeamBillCycleUtils.calculatorPolicyTarget(teamMemberTargets, regionPolicyManager); + + // 结算账单. + TeamBillSettleResult settleResult = new TeamBillSettleResult() + .setPolicy(regionPolicyManager) + .setWorkMembers(countWorkMembers(teamMemberTargets)) + .setFinishMembers(teamBillMemberTargets.stream().filter(TeamBillMemberTarget::getSatisfyLevel).toList().size()) + .setMemberSalary(sumMemberSalary(teamBillMemberTargets)) + .setOwnSalary(ownSalary(teamBillMemberTargets)) + .setTotalSalary(ownTotalSalary(teamBillMemberTargets)); + + System.out.println("============= 账单结算结果 ============="); + System.out.printf("政策信息: %s%n", settleResult.getPolicy()); + System.out.printf("工作人数: %d%n", settleResult.getWorkMembers()); + System.out.printf("完成人数: %d%n", settleResult.getFinishMembers()); + System.out.printf("成员工资: %s%n", settleResult.getMemberSalary()); + System.out.printf("拥有者工资: %s%n", settleResult.getOwnSalary()); + System.out.printf("工资合计: %s%n", settleResult.getTotalSalary()); + System.out.println("======================================="); + } + + private int countWorkMembers(List teamMemberTargets) { return CollectionUtils.isNotEmpty(teamMemberTargets) ? teamMemberTargets.size() : 0; }