From 289da0f2b8061cb6b1e048396b098f4bf4810e84 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Thu, 27 Nov 2025 14:46:46 +0800 Subject: [PATCH] =?UTF-8?q?BD=20Center=20=E5=88=97=E8=A1=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=AE=9E=E6=97=B6=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bd/query/TeamBdMemberBillListQryExe.java | 75 ++++++++++++------- 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/bd/query/TeamBdMemberBillListQryExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/bd/query/TeamBdMemberBillListQryExe.java index e9bfab43..ca425668 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/bd/query/TeamBdMemberBillListQryExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/bd/query/TeamBdMemberBillListQryExe.java @@ -15,19 +15,16 @@ import com.red.circle.other.app.dto.clientobject.team.BdHistoryCO; import com.red.circle.other.app.dto.cmd.TeamBdMemberBillCmd; import com.red.circle.other.app.service.BdSalarySettlementServiceImpl; import com.red.circle.other.domain.gateway.user.UserProfileGateway; +import com.red.circle.other.infra.database.mongo.dto.team.TeamBillMemberTarget; import com.red.circle.other.infra.database.mongo.entity.bd.BdSalaryPolicy; import com.red.circle.other.infra.database.mongo.entity.bd.BdSalarySettlementRecord; +import com.red.circle.other.infra.database.mongo.entity.team.team.*; import com.red.circle.other.infra.database.mongo.service.bd.BdSalaryPolicyService; +import com.red.circle.other.infra.database.mongo.service.team.team.*; import com.red.circle.other.infra.enums.BdPolicyType; import com.red.circle.other.infra.enums.BdSettlementStatus; import com.red.circle.other.infra.database.mongo.dto.team.TeamBillSettleResult; -import com.red.circle.other.infra.database.mongo.entity.team.team.TeamBillCycle; -import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMember; -import com.red.circle.other.infra.database.mongo.entity.team.team.TeamProfile; import com.red.circle.other.infra.database.mongo.service.team.TeamBillCycleUtils; -import com.red.circle.other.infra.database.mongo.service.team.team.TeamBillCycleService; -import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberService; -import com.red.circle.other.infra.database.mongo.service.team.team.TeamProfileService; import com.red.circle.other.infra.database.rds.entity.team.BusinessDevelopmentBaseInfo; import com.red.circle.other.infra.database.rds.entity.team.BusinessDevelopmentTeam; import com.red.circle.other.infra.database.rds.service.team.BusinessDevelopmentBaseInfoService; @@ -66,6 +63,8 @@ public class TeamBdMemberBillListQryExe { private final BusinessDevelopmentTeamService businessDevelopmentTeamService; private final TeamBillCycleService teamBillCycleService; private final TeamProfileService teamProfileService; + private final TeamPolicyManagerService teamPolicyManagerService; + private final TeamMemberTargetService teamMemberTargetService; private final UserProfileGateway userProfileGateway; private final UserProfileAppConvertor userProfileAppConvertor; private final TeamMemberService teamMemberService; @@ -120,10 +119,16 @@ public class TeamBdMemberBillListQryExe { Set teamIdSet = bdTeamList.stream() .map(BusinessDevelopmentTeam::getTeamId) .collect(Collectors.toSet()); - - // 4. 查询当前周期的账单 + + // 获取所有区域的政策配置 Map billCycleMap = teamBillCycleService.mapByTeamIds2( teamIdSet, currentBillBelong, TeamBillCycleStatus.UNPAID); + Map regionPolicyMap = teamPolicyManagerService.mapRegionRelease( + billCycleMap.values().stream().map(TeamBillCycle::getRegion).collect(Collectors.toSet())); + + // 4. 查询当前周期的账单 + Map> memberBillTarget = + teamMemberTargetService.mapMemberBillTarget(teamIdSet, currentBillBelong); // 5. 获取团队Profile信息 Map teamProfileMap = teamProfileService.mapProfileByIds(teamIdSet); @@ -140,7 +145,7 @@ public class TeamBdMemberBillListQryExe { // 8. 组装成员账单列表(每个 Agent 团队一条) List memberBillList = bdTeamList.stream() - .map(bdTeam -> buildMemberBillCO(bdTeam, billCycleMap, teamProfileMap, + .map(bdTeam -> buildMemberBillCO(bdTeam, billCycleMap, memberBillTarget,regionPolicyMap, teamProfileMap, userProfileMap, rechargeMap, currentBillBelong)) .collect(Collectors.toList()); @@ -272,17 +277,18 @@ public class TeamBdMemberBillListQryExe { // 6. 查询账单数据 Map billCycleMap = teamBillCycleService.mapByTeamIds2( teamIdSet, currentBillBelong, TeamBillCycleStatus.UNPAID); - - // 7. 汇总所有团队的工资 + + Map regionPolicyMap = teamPolicyManagerService.mapRegionRelease( + billCycleMap.values().stream().map(TeamBillCycle::getRegion).collect(Collectors.toSet())); + + // 4. 查询当前周期的账单 + Map> memberBillTarget = + teamMemberTargetService.mapMemberBillTarget(teamIdSet, currentBillBelong); + BigDecimal totalSalary = BigDecimal.ZERO; for (BusinessDevelopmentTeam bdTeam : bdTeamList) { - TeamBillCycle billCycle = billCycleMap.get(bdTeam.getTeamId()); - if (billCycle != null && billCycle.getSettleResult() != null) { - BigDecimal teamSalary = billCycle.getSettleResult().getTotalSalary(); - if (teamSalary != null) { - totalSalary = totalSalary.add(teamSalary); - } - } + Long teamId = bdTeam.getTeamId(); + totalSalary = totalSalary.add(getTeamTotalSalary(billCycleMap, memberBillTarget, regionPolicyMap, teamId)); } co.setTeamSalaryAmount(totalSalary); @@ -357,6 +363,8 @@ public class TeamBdMemberBillListQryExe { private TeamBdMemberBillCO buildMemberBillCO( BusinessDevelopmentTeam bdTeam, Map billCycleMap, + Map> teamMemberTargetMap, + Map policyManagerMap, Map teamProfileMap, Map userProfileMap, Map rechargeMap, @@ -392,21 +400,32 @@ public class TeamBdMemberBillListQryExe { co.setEndDate(dates[1]); // 账单周期信息 - TeamBillCycle billCycle = billCycleMap.get(bdTeam.getTeamId()); - if (billCycle != null && billCycle.getSettleResult() != null) { - TeamBillSettleResult settleResult = billCycle.getSettleResult(); - - // 团队薪资和充值 - co.setTeamSalaryAmount(settleResult.getTotalSalary()); - } else { - // 如果没有账单周期,设置默认值 - co.setTeamSalaryAmount(BigDecimal.ZERO); - } + Long teamId = bdTeam.getTeamId(); + BigDecimal totalSalary = getTeamTotalSalary(billCycleMap, teamMemberTargetMap, policyManagerMap, teamId); + co.setTeamSalaryAmount(totalSalary); co.setTeamRechargeAmount(Optional.ofNullable(rechargeMap.get(bdTeam.getAgentId())).orElse(BigDecimal.ZERO)); return co; } + @NotNull + private BigDecimal getTeamTotalSalary(Map billCycleMap, Map> teamMemberTargetMap, Map policyManagerMap, Long teamId) { + TeamBillCycle billCycle = billCycleMap.get(teamId); + if (billCycle == null) { + return BigDecimal.ZERO; + } + + List targetList = teamMemberTargetMap.get(teamId); + List memberTargets = TeamBillCycleUtils.calculatorPolicyTarget(targetList, policyManagerMap.get(billCycle.getRegion())); + return ownTotalSalary(memberTargets); + } + + private BigDecimal ownTotalSalary(List teamBillMemberTargets) { + return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getTotalSalary) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(2, RoundingMode.DOWN); + } + /** * 计算当前未结算的 BD 账单信息. *