diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/team/query/TeamMemberWorkQryExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/team/query/TeamMemberWorkQryExe.java index 4f8d21c2..3f74fd0c 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/team/query/TeamMemberWorkQryExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/team/query/TeamMemberWorkQryExe.java @@ -84,7 +84,7 @@ public class TeamMemberWorkQryExe { LocalDateTimeUtils.convert(teamMember.getCreateTime().getTime()), "yyyyMM")); List teamBillCycles = teamBillCycleService.listByGeBillBelong( - teamMember.getTeamId(), billBelong, 2); + teamMember.getTeamId(), billBelong, 5); if (CollectionUtils.isEmpty(teamBillCycles)) { return new TeamMemberWorkCO() @@ -108,6 +108,9 @@ public class TeamMemberWorkQryExe { unpaidBillCycles.stream().map(TeamBillCycle::getRegion).collect(Collectors.toSet()) ); + BigDecimal settledAndSumSalary = teamMemberTargetService.listMemberSettledAndSumSalary(teamMember.getTeamId(), teamMember.getMemberId(), teamMember.getRole()); + + TeamMemberWorkCO teamMemberWorkCO = new TeamMemberWorkCO() .setMemberProfile(userProfile) .setTargets(teamBillCycles.stream() @@ -161,7 +164,8 @@ public class TeamMemberWorkQryExe { ); return co; }).collect(Collectors.toList()) - ); + ) + .setHistorySalary(settledAndSumSalary); return teamMemberWorkCO; } diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/TeamMemberWorkCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/TeamMemberWorkCO.java index c93fe999..81b2b153 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/TeamMemberWorkCO.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/TeamMemberWorkCO.java @@ -2,6 +2,8 @@ package com.red.circle.other.app.dto.clientobject.team; import com.red.circle.framework.dto.ClientObject; import com.red.circle.other.inner.model.dto.user.UserProfileDTO; + +import java.math.BigDecimal; import java.util.List; import lombok.Data; import lombok.EqualsAndHashCode; @@ -27,4 +29,9 @@ public class TeamMemberWorkCO extends ClientObject { */ private List targets; + /** + * 历史工资 + */ + private BigDecimal historySalary; + } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamMemberTargetService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamMemberTargetService.java index 1698b217..c4a09a45 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamMemberTargetService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamMemberTargetService.java @@ -2,10 +2,7 @@ package com.red.circle.other.infra.database.mongo.service.team.team; import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMemberTarget; import com.red.circle.other.infra.database.mongo.dto.team.query.TeamMemberTargetQuery; -import com.red.circle.other.inner.enums.team.TeamMemberTargetIndex; -import com.red.circle.other.inner.enums.team.TeamMemberTargetSettlementResult; -import com.red.circle.other.inner.enums.team.TeamMemberTargetStatus; -import com.red.circle.other.inner.enums.team.TeamSalaryStatisticsCO; +import com.red.circle.other.inner.enums.team.*; import java.math.BigDecimal; import java.util.List; @@ -248,4 +245,9 @@ public interface TeamMemberTargetService { */ TeamMemberTarget aggregateMonthlyTarget(Long teamId, Long userId, Integer monthlyBillBelong); + /** + * 团队用户已结算的工资 + */ + BigDecimal listMemberSettledAndSumSalary(Long teamId, Long userId, TeamMemberRole role); + } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamMemberTargetServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamMemberTargetServiceImpl.java index a37adb65..44dc1eb2 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamMemberTargetServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamMemberTargetServiceImpl.java @@ -10,10 +10,7 @@ import com.red.circle.framework.mybatis.constant.PageConstant; import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMemberTarget; import com.red.circle.other.infra.database.mongo.dto.team.query.TeamMemberTargetQuery; import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberTargetService; -import com.red.circle.other.inner.enums.team.TeamMemberTargetIndex; -import com.red.circle.other.inner.enums.team.TeamMemberTargetSettlementResult; -import com.red.circle.other.inner.enums.team.TeamMemberTargetStatus; -import com.red.circle.other.inner.enums.team.TeamSalaryStatisticsCO; +import com.red.circle.other.inner.enums.team.*; import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils; @@ -806,6 +803,28 @@ public class TeamMemberTargetServiceImpl implements TeamMemberTargetService { return aggregated; } + @Override + public BigDecimal listMemberSettledAndSumSalary(Long teamId, Long userId, TeamMemberRole role) { + Query query = new Query(); + query.addCriteria(Criteria.where("teamId").is(teamId)) + .addCriteria(Criteria.where("userId").is(userId)) + .addCriteria(Criteria.where("status").is(TeamMemberTargetStatus.CREDITED)); + + List targets = mongoTemplate.find(query, TeamMemberTarget.class); + + return targets.stream() + .map(TeamMemberTarget::getSettlementResult) + .filter(Objects::nonNull) + .map(result -> { + if (role.eq(TeamMemberRole.OWN) || role.eq(TeamMemberRole.ADMIN)) { + return result.getTotalSalary() != null ? result.getTotalSalary() : BigDecimal.ZERO; + } else { + return result.getMemberSalary() != null ? result.getMemberSalary() : BigDecimal.ZERO; + } + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + /** * 生成月度账单标题 * 202511 -> "2025年11月"