This commit is contained in:
hy001 2026-07-01 14:52:47 +08:00
parent 97738f5b5e
commit c73d224e19
2 changed files with 85 additions and 0 deletions

View File

@ -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();

View File

@ -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);