diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamSalaryPaymentService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamSalaryPaymentService.java index 71b454be..fe152c2a 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamSalaryPaymentService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/TeamSalaryPaymentService.java @@ -89,6 +89,12 @@ public interface TeamSalaryPaymentService { Map mapByUserIdsAndDateNumbers(String sysOrigin, Set userIds, Set dateNumbers); + /** + * 按支付用户或实际收款用户批量获得数据. + */ + List listByPaymentOrRecipientUserIdsAndDateNumbers(String sysOrigin, + Set userIds, Set dateNumbers); + /** * 基于父ID修改子记录状态为已退款. * diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamSalaryPaymentServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamSalaryPaymentServiceImpl.java index aae98d55..23b7b601 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamSalaryPaymentServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/team/impl/TeamSalaryPaymentServiceImpl.java @@ -205,6 +205,26 @@ public class TeamSalaryPaymentServiceImpl implements TeamSalaryPaymentService { (first, second) -> first)); } + @Override + public List listByPaymentOrRecipientUserIdsAndDateNumbers(String sysOrigin, + Set userIds, Set dateNumbers) { + + if (StringUtils.isBlank(sysOrigin) || CollectionUtils.isEmpty(userIds) + || CollectionUtils.isEmpty(dateNumbers)) { + return List.of(); + } + + Criteria criteria = Criteria.where("sysOrigin").is(sysOrigin) + .and("dateNumber").in(dateNumbers) + .orOperator( + Criteria.where("userId").in(userIds), + Criteria.where("salarySendDetails.teamMemberId").in(userIds), + Criteria.where("salarySendDetails.teamOwnId").in(userIds) + ); + + return mongoTemplate.find(Query.query(criteria), TeamSalaryPayment.class); + } + @Override public void updateDetails(String id, List salarySendDetails) { diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImpl.java index f4b53d54..5e16179e 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImpl.java @@ -238,9 +238,11 @@ public class TeamManualSalaryPaymentClientServiceImpl implements .collect(Collectors.toSet()); Map memberMap = teamMemberService.mapByMemberIds(memberIds); Map teamProfileMap = teamProfileService.mapProfileByIds(teamIds); - Map salaryPaymentMap = - teamSalaryPaymentService.mapByUserIdsAndDateNumbers(sysOrigin, memberIds, - getMergedSalaryPaymentBillBelongs(billBelong)); + Set salaryPaymentBillBelongs = getMergedSalaryPaymentBillBelongs(billBelong); + List salaryPayments = teamSalaryPaymentService + .listByPaymentOrRecipientUserIdsAndDateNumbers(sysOrigin, memberIds, + salaryPaymentBillBelongs); + Map salaryPaymentMap = toSalaryPaymentMap(salaryPayments); Map policyCache = CollectionUtils.newHashMap(); return targets.stream() @@ -252,6 +254,17 @@ public class TeamManualSalaryPaymentClientServiceImpl implements .collect(Collectors.toList()); } + private Map toSalaryPaymentMap(List payments) { + if (CollectionUtils.isEmpty(payments)) { + return CollectionUtils.newHashMap(); + } + return payments.stream() + .filter(Objects::nonNull) + .filter(payment -> StringUtils.isNotBlank(payment.getId())) + .collect(Collectors.toMap(TeamSalaryPayment::getId, payment -> payment, + (first, second) -> first)); + } + private List sortRows(List rows, String sortField, String sortOrder) { if (CollectionUtils.isEmpty(rows) || StringUtils.isBlank(sortField) @@ -355,6 +368,8 @@ public class TeamManualSalaryPaymentClientServiceImpl implements List cyclePayments = listCyclePayments(salaryPaymentMap, target.getUserId(), billBelong); PaymentSummary paymentSummary = summarizePayments(cyclePayments); + PaymentSummary receivedPaymentSummary = summarizeReceivedPayments( + new ArrayList<>(salaryPaymentMap.values()), target.getUserId()); BigDecimal expectedMemberSalary = salaryValue(billTarget.getMemberSalary()); BigDecimal expectedAgentSalary = salaryValue(billTarget.getOwnSalary()); BigDecimal expectedSalary = expectedTotalSalary(billTarget); @@ -391,12 +406,12 @@ public class TeamManualSalaryPaymentClientServiceImpl implements .setPayableSalary(payableSalary) .setPayableMemberSalary(payableMemberSalary) .setPayableAgentSalary(payableAgentSalary) - .setTotalIssuedSalary(paymentSummary.getTotalIssuedSalary()) - .setMemberIssuedSalary(paymentSummary.getMemberIssuedSalary()) - .setAgentIssuedSalary(paymentSummary.getAgentIssuedSalary()) - .setOverIssuedSalary(paymentSummary.getOverIssuedSalary()) - .setMemberOverIssuedSalary(paymentSummary.getMemberOverIssuedSalary()) - .setAgentOverIssuedSalary(paymentSummary.getAgentOverIssuedSalary()) + .setTotalIssuedSalary(receivedPaymentSummary.getTotalIssuedSalary()) + .setMemberIssuedSalary(receivedPaymentSummary.getMemberIssuedSalary()) + .setAgentIssuedSalary(receivedPaymentSummary.getAgentIssuedSalary()) + .setOverIssuedSalary(receivedPaymentSummary.getOverIssuedSalary()) + .setMemberOverIssuedSalary(receivedPaymentSummary.getMemberOverIssuedSalary()) + .setAgentOverIssuedSalary(receivedPaymentSummary.getAgentOverIssuedSalary()) .setCurrentSalaryBalance(getAccurateBalance(target.getUserId())) .setPaid(currentLevelSettled); @@ -569,7 +584,21 @@ public class TeamManualSalaryPaymentClientServiceImpl implements } private PaymentSummary summarizePayments(List cyclePayments) { - List details = listValidSalaryDetails(cyclePayments); + return summarizeDetails(listValidSalaryDetails(cyclePayments)); + } + + private PaymentSummary summarizeReceivedPayments(List cyclePayments, + Long receiverUserId) { + if (Objects.isNull(receiverUserId)) { + return emptyPaymentSummary(); + } + List details = listValidSalaryDetails(cyclePayments).stream() + .filter(detail -> Objects.equals(receiverUserId, getSalaryReceiverUserId(detail))) + .collect(Collectors.toList()); + return summarizeDetails(details); + } + + private PaymentSummary summarizeDetails(List details) { BigDecimal memberIssuedSalary = sumDetailsSalary(details, Boolean.TRUE); BigDecimal agentIssuedSalary = sumDetailsSalary(details, Boolean.FALSE); BigDecimal totalIssuedSalary = memberIssuedSalary.add(agentIssuedSalary) @@ -582,6 +611,22 @@ public class TeamManualSalaryPaymentClientServiceImpl implements overIssuedSalary, memberOverIssuedSalary, agentOverIssuedSalary); } + private PaymentSummary emptyPaymentSummary() { + BigDecimal zero = BigDecimal.ZERO.setScale(2, RoundingMode.DOWN); + return new PaymentSummary(zero, zero, zero, zero, zero, zero); + } + + private Long getSalaryReceiverUserId(TeamSalaryPaymentDetails details) { + if (Objects.isNull(details)) { + return null; + } + if (Boolean.TRUE.equals(details.getAnchor()) + && !Boolean.TRUE.equals(details.getHostSalaryToAgent())) { + return details.getTeamMemberId(); + } + return details.getTeamOwnId(); + } + private BigDecimal sumDetailsSalary(List details, Boolean anchor) { return details.stream() .filter(detail -> Objects.equals(detail.getAnchor(), anchor))