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 62dad234..908006b1 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 @@ -225,6 +225,8 @@ public class TeamManualSalaryPaymentClientServiceImpl implements targets = targets.stream() .filter(target -> CollectionUtils.isNotEmpty(target.getDailyTargets())) .filter(target -> target.sumAcceptGiftValue() > 0) + // 手动工资只按当前有效目标结算;旧账期查询会带出历史目标,而计算工具会在历史目标上返回空结果。 + .filter(target -> !Boolean.TRUE.equals(target.getHistory())) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(targets)) { return List.of(); diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/test/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImplTest.java b/rc-service/rc-service-other/other-inner-endpoint/src/test/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImplTest.java index 31f3c3a6..6b01eb6b 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/test/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImplTest.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/test/java/com/red/circle/other/app/inner/service/team/impl/TeamManualSalaryPaymentClientServiceImplTest.java @@ -41,6 +41,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.springframework.test.util.ReflectionTestUtils; @@ -124,6 +125,88 @@ class TeamManualSalaryPaymentClientServiceImplTest { () -> ReflectionTestUtils.invokeMethod(service, "resolveBillBelong", 202613)); } + @Test + void buildRowsShouldIgnoreHistoryTargetsBeforePolicyCalculation() { + RedisService redisService = mock(RedisService.class); + TeamMemberService teamMemberService = mock(TeamMemberService.class); + TeamProfileService teamProfileService = mock(TeamProfileService.class); + UserBankBalanceClient userBankBalanceClient = mock(UserBankBalanceClient.class); + TeamMemberTargetService teamMemberTargetService = mock(TeamMemberTargetService.class); + TeamSalaryPaymentService teamSalaryPaymentService = mock(TeamSalaryPaymentService.class); + TeamPolicyManagerService teamPolicyManagerService = mock(TeamPolicyManagerService.class); + UserBankRunningWaterClient userBankRunningWaterClient = mock(UserBankRunningWaterClient.class); + TeamManualSalaryPaymentClientServiceImpl service = new TeamManualSalaryPaymentClientServiceImpl( + redisService, teamMemberService, teamProfileService, userBankBalanceClient, + teamMemberTargetService, teamSalaryPaymentService, teamPolicyManagerService, + userBankRunningWaterClient); + + String sysOrigin = "LIKEI"; + String countryCode = "BD"; + String region = "2045389832842178561"; + Long userId = 2050266954857508866L; + Long teamId = 2046582184822763522L; + Integer billBelong = 202606; + TeamMemberTarget historyTarget = new TeamMemberTarget() + .setId("history-target") + .setTimeId(2061195378987954177L) + .setSysOrigin(sysOrigin) + .setRegion(region) + .setCountryCode(countryCode) + .setTeamId(teamId) + .setUserId(userId) + .setBillBelong(billBelong) + .setHistory(Boolean.TRUE) + .setDailyTargets(List.of(new TeamMemberTargetIndex() + .setOwnOnlineTime(21L) + .setAcceptGiftValue(662505L))); + TeamMemberTarget activeTarget = new TeamMemberTarget() + .setId("active-target") + .setTimeId(2062879908861898754L) + .setSysOrigin(sysOrigin) + .setRegion(region) + .setCountryCode(countryCode) + .setTeamId(teamId) + .setUserId(userId) + .setBillBelong(billBelong) + .setHistory(Boolean.FALSE) + .setDailyTargets(List.of(new TeamMemberTargetIndex() + .setOwnOnlineTime(38L) + .setAcceptGiftValue(411854L))); + TeamPolicyManager policyManager = new TeamPolicyManager() + .setSysOrigin(sysOrigin) + .setRegion(region) + .setCountryCode(countryCode) + .setPolicy(List.of(new TeamPolicy() + .setLevel(1) + .setTarget(400000L) + .setOnlineTime(0L) + .setEffectiveDay(0) + .setMemberSalary(new BigDecimal("1.00")) + .setOwnSalary(new BigDecimal("0.25")) + .setTotalSalary(new BigDecimal("1.25")))); + + when(teamMemberTargetService.listManualSalaryTargets(eq(sysOrigin), eq(countryCode), anySet(), + eq(billBelong))).thenReturn(List.of(historyTarget, activeTarget)); + when(teamMemberService.mapByMemberIds(anySet())).thenReturn(Map.of(userId, + new TeamMember().setMemberId(userId).setTeamId(teamId))); + when(teamProfileService.mapProfileByIds(anySet())).thenReturn(Map.of(teamId, + new TeamProfile().setId(teamId).setOwnUserId(userId).setRegion(region))); + when(teamSalaryPaymentService.listByPaymentOrRecipientUserIdsAndDateNumbers(eq(sysOrigin), + anySet(), anySet())).thenReturn(List.of()); + when(teamPolicyManagerService.getReleaseByRegionAndType(sysOrigin, region, null, countryCode)) + .thenReturn(policyManager); + when(userBankBalanceClient.getBalance(userId)) + .thenReturn(ResultResponse.success(BankBalanceDTO.of(0L))); + + List rows = ReflectionTestUtils.invokeMethod(service, "buildRows", sysOrigin, countryCode, + Set.of(userId), billBelong); + Object dto = ReflectionTestUtils.invokeMethod(rows.get(0), "getDto"); + + assertEquals(1, rows.size()); + assertEquals("active-target", ReflectionTestUtils.getField(dto, "id")); + assertEquals(new BigDecimal("1.25"), ReflectionTestUtils.getField(dto, "payableSalary")); + } + @Test void payShouldReturnTopUpDetailsWhenCurrentLevelRecordExistsButSalaryIsInsufficient() { RedisService redisService = mock(RedisService.class);