fix manual salary received total display

This commit is contained in:
hy001 2026-05-21 15:06:03 +08:00
parent 8460125d79
commit c02050274b
3 changed files with 81 additions and 10 deletions

View File

@ -89,6 +89,12 @@ public interface TeamSalaryPaymentService {
Map<String, TeamSalaryPayment> mapByUserIdsAndDateNumbers(String sysOrigin, Set<Long> userIds, Map<String, TeamSalaryPayment> mapByUserIdsAndDateNumbers(String sysOrigin, Set<Long> userIds,
Set<Integer> dateNumbers); Set<Integer> dateNumbers);
/**
* 按支付用户或实际收款用户批量获得数据.
*/
List<TeamSalaryPayment> listByPaymentOrRecipientUserIdsAndDateNumbers(String sysOrigin,
Set<Long> userIds, Set<Integer> dateNumbers);
/** /**
* 基于父ID修改子记录状态为已退款. * 基于父ID修改子记录状态为已退款.
* *

View File

@ -205,6 +205,26 @@ public class TeamSalaryPaymentServiceImpl implements TeamSalaryPaymentService {
(first, second) -> first)); (first, second) -> first));
} }
@Override
public List<TeamSalaryPayment> listByPaymentOrRecipientUserIdsAndDateNumbers(String sysOrigin,
Set<Long> userIds, Set<Integer> 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 @Override
public void updateDetails(String id, List<TeamSalaryPaymentDetails> salarySendDetails) { public void updateDetails(String id, List<TeamSalaryPaymentDetails> salarySendDetails) {

View File

@ -238,9 +238,11 @@ public class TeamManualSalaryPaymentClientServiceImpl implements
.collect(Collectors.toSet()); .collect(Collectors.toSet());
Map<Long, TeamMember> memberMap = teamMemberService.mapByMemberIds(memberIds); Map<Long, TeamMember> memberMap = teamMemberService.mapByMemberIds(memberIds);
Map<Long, TeamProfile> teamProfileMap = teamProfileService.mapProfileByIds(teamIds); Map<Long, TeamProfile> teamProfileMap = teamProfileService.mapProfileByIds(teamIds);
Map<String, TeamSalaryPayment> salaryPaymentMap = Set<Integer> salaryPaymentBillBelongs = getMergedSalaryPaymentBillBelongs(billBelong);
teamSalaryPaymentService.mapByUserIdsAndDateNumbers(sysOrigin, memberIds, List<TeamSalaryPayment> salaryPayments = teamSalaryPaymentService
getMergedSalaryPaymentBillBelongs(billBelong)); .listByPaymentOrRecipientUserIdsAndDateNumbers(sysOrigin, memberIds,
salaryPaymentBillBelongs);
Map<String, TeamSalaryPayment> salaryPaymentMap = toSalaryPaymentMap(salaryPayments);
Map<String, TeamPolicyManager> policyCache = CollectionUtils.newHashMap(); Map<String, TeamPolicyManager> policyCache = CollectionUtils.newHashMap();
return targets.stream() return targets.stream()
@ -252,6 +254,17 @@ public class TeamManualSalaryPaymentClientServiceImpl implements
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private Map<String, TeamSalaryPayment> toSalaryPaymentMap(List<TeamSalaryPayment> 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<ManualSalaryRow> sortRows(List<ManualSalaryRow> rows, String sortField, private List<ManualSalaryRow> sortRows(List<ManualSalaryRow> rows, String sortField,
String sortOrder) { String sortOrder) {
if (CollectionUtils.isEmpty(rows) || StringUtils.isBlank(sortField) if (CollectionUtils.isEmpty(rows) || StringUtils.isBlank(sortField)
@ -355,6 +368,8 @@ public class TeamManualSalaryPaymentClientServiceImpl implements
List<TeamSalaryPayment> cyclePayments = listCyclePayments(salaryPaymentMap, List<TeamSalaryPayment> cyclePayments = listCyclePayments(salaryPaymentMap,
target.getUserId(), billBelong); target.getUserId(), billBelong);
PaymentSummary paymentSummary = summarizePayments(cyclePayments); PaymentSummary paymentSummary = summarizePayments(cyclePayments);
PaymentSummary receivedPaymentSummary = summarizeReceivedPayments(
new ArrayList<>(salaryPaymentMap.values()), target.getUserId());
BigDecimal expectedMemberSalary = salaryValue(billTarget.getMemberSalary()); BigDecimal expectedMemberSalary = salaryValue(billTarget.getMemberSalary());
BigDecimal expectedAgentSalary = salaryValue(billTarget.getOwnSalary()); BigDecimal expectedAgentSalary = salaryValue(billTarget.getOwnSalary());
BigDecimal expectedSalary = expectedTotalSalary(billTarget); BigDecimal expectedSalary = expectedTotalSalary(billTarget);
@ -391,12 +406,12 @@ public class TeamManualSalaryPaymentClientServiceImpl implements
.setPayableSalary(payableSalary) .setPayableSalary(payableSalary)
.setPayableMemberSalary(payableMemberSalary) .setPayableMemberSalary(payableMemberSalary)
.setPayableAgentSalary(payableAgentSalary) .setPayableAgentSalary(payableAgentSalary)
.setTotalIssuedSalary(paymentSummary.getTotalIssuedSalary()) .setTotalIssuedSalary(receivedPaymentSummary.getTotalIssuedSalary())
.setMemberIssuedSalary(paymentSummary.getMemberIssuedSalary()) .setMemberIssuedSalary(receivedPaymentSummary.getMemberIssuedSalary())
.setAgentIssuedSalary(paymentSummary.getAgentIssuedSalary()) .setAgentIssuedSalary(receivedPaymentSummary.getAgentIssuedSalary())
.setOverIssuedSalary(paymentSummary.getOverIssuedSalary()) .setOverIssuedSalary(receivedPaymentSummary.getOverIssuedSalary())
.setMemberOverIssuedSalary(paymentSummary.getMemberOverIssuedSalary()) .setMemberOverIssuedSalary(receivedPaymentSummary.getMemberOverIssuedSalary())
.setAgentOverIssuedSalary(paymentSummary.getAgentOverIssuedSalary()) .setAgentOverIssuedSalary(receivedPaymentSummary.getAgentOverIssuedSalary())
.setCurrentSalaryBalance(getAccurateBalance(target.getUserId())) .setCurrentSalaryBalance(getAccurateBalance(target.getUserId()))
.setPaid(currentLevelSettled); .setPaid(currentLevelSettled);
@ -569,7 +584,21 @@ public class TeamManualSalaryPaymentClientServiceImpl implements
} }
private PaymentSummary summarizePayments(List<TeamSalaryPayment> cyclePayments) { private PaymentSummary summarizePayments(List<TeamSalaryPayment> cyclePayments) {
List<TeamSalaryPaymentDetails> details = listValidSalaryDetails(cyclePayments); return summarizeDetails(listValidSalaryDetails(cyclePayments));
}
private PaymentSummary summarizeReceivedPayments(List<TeamSalaryPayment> cyclePayments,
Long receiverUserId) {
if (Objects.isNull(receiverUserId)) {
return emptyPaymentSummary();
}
List<TeamSalaryPaymentDetails> details = listValidSalaryDetails(cyclePayments).stream()
.filter(detail -> Objects.equals(receiverUserId, getSalaryReceiverUserId(detail)))
.collect(Collectors.toList());
return summarizeDetails(details);
}
private PaymentSummary summarizeDetails(List<TeamSalaryPaymentDetails> details) {
BigDecimal memberIssuedSalary = sumDetailsSalary(details, Boolean.TRUE); BigDecimal memberIssuedSalary = sumDetailsSalary(details, Boolean.TRUE);
BigDecimal agentIssuedSalary = sumDetailsSalary(details, Boolean.FALSE); BigDecimal agentIssuedSalary = sumDetailsSalary(details, Boolean.FALSE);
BigDecimal totalIssuedSalary = memberIssuedSalary.add(agentIssuedSalary) BigDecimal totalIssuedSalary = memberIssuedSalary.add(agentIssuedSalary)
@ -582,6 +611,22 @@ public class TeamManualSalaryPaymentClientServiceImpl implements
overIssuedSalary, memberOverIssuedSalary, agentOverIssuedSalary); 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<TeamSalaryPaymentDetails> details, Boolean anchor) { private BigDecimal sumDetailsSalary(List<TeamSalaryPaymentDetails> details, Boolean anchor) {
return details.stream() return details.stream()
.filter(detail -> Objects.equals(detail.getAnchor(), anchor)) .filter(detail -> Objects.equals(detail.getAnchor(), anchor))