test: cover clerk performance date ranges
This commit is contained in:
@@ -25,13 +25,17 @@ import com.starry.admin.modules.statistics.module.vo.ClerkPerformanceSnapshotVo;
|
|||||||
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoReturnVo;
|
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoReturnVo;
|
||||||
import com.starry.admin.modules.statistics.service.impl.PlayClerkPerformanceServiceImpl;
|
import com.starry.admin.modules.statistics.service.impl.PlayClerkPerformanceServiceImpl;
|
||||||
import com.starry.admin.modules.withdraw.mapper.EarningsLineMapper;
|
import com.starry.admin.modules.withdraw.mapper.EarningsLineMapper;
|
||||||
|
import com.starry.admin.utils.DateRangeUtils;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.Month;
|
import java.time.Month;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.junit.jupiter.api.DisplayName;
|
import org.junit.jupiter.api.DisplayName;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
@@ -318,6 +322,106 @@ class PlayClerkPerformanceServiceImplTest {
|
|||||||
Arrays.asList(o1.getId(), o2.getId(), o3.getId(), o4.getId(), o5.getId())));
|
Arrays.asList(o1.getId(), o2.getId(), o3.getId(), o4.getId(), o5.getId())));
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
|
@DisplayName("queryOverview filters completed orders according to complex date/time ranges")
|
||||||
|
void queryOverviewHonorsDateRangesForMultipleClerks() {
|
||||||
|
PlayClerkUserInfoEntity alpha = buildClerk("c-alpha", "Alpha", "g-alpha", "l-alpha");
|
||||||
|
PlayClerkUserInfoEntity beta = buildClerk("c-beta", "Beta", "g-beta", "l-beta");
|
||||||
|
PlayClerkUserInfoEntity gamma = buildClerk("c-gamma", "Gamma", "g-gamma", "l-gamma");
|
||||||
|
List<PlayClerkUserInfoEntity> clerks = Arrays.asList(alpha, beta, gamma);
|
||||||
|
|
||||||
|
when(playPersonnelGroupInfoService.getValidClerkIdList(any(), any()))
|
||||||
|
.thenReturn(Arrays.asList(alpha.getId(), beta.getId(), gamma.getId()));
|
||||||
|
when(clerkUserInfoService.list((Wrapper<PlayClerkUserInfoEntity>) any())).thenReturn(clerks);
|
||||||
|
when(playClerkLevelInfoService.selectAll()).thenReturn(Arrays.asList(
|
||||||
|
level(alpha.getLevelId(), "铂金"),
|
||||||
|
level(beta.getLevelId(), "黄金"),
|
||||||
|
level(gamma.getLevelId(), "白银")));
|
||||||
|
when(playPersonnelGroupInfoService.selectAll()).thenReturn(Arrays.asList(
|
||||||
|
group(alpha.getGroupId(), "一组"),
|
||||||
|
group(beta.getGroupId(), "二组"),
|
||||||
|
group(gamma.getGroupId(), "三组")));
|
||||||
|
|
||||||
|
Map<String, List<PlayOrderInfoEntity>> ordersByClerk = new HashMap<>();
|
||||||
|
ordersByClerk.put(alpha.getId(), Arrays.asList(
|
||||||
|
order(alpha.getId(), "userA1", "1", "0", "0", new BigDecimal("100.00"), new BigDecimal("70.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 1, 10, 0)),
|
||||||
|
order(alpha.getId(), "userA2", "0", "0", "0", new BigDecimal("210.00"), new BigDecimal("120.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 3, 15, 30)),
|
||||||
|
order(alpha.getId(), "userA3", "0", "0", "0", new BigDecimal("150.00"), new BigDecimal("80.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 7, 9, 15)),
|
||||||
|
order(alpha.getId(), "userA4", "0", "0", "0", new BigDecimal("130.00"), new BigDecimal("75.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 10, 18, 45))));
|
||||||
|
ordersByClerk.put(beta.getId(), Arrays.asList(
|
||||||
|
order(beta.getId(), "userB1", "1", "0", "0", new BigDecimal("95.00"), new BigDecimal("50.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 2, 11, 30)),
|
||||||
|
order(beta.getId(), "userB2", "0", "0", "0", new BigDecimal("120.00"), new BigDecimal("65.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 4, 13, 0)),
|
||||||
|
order(beta.getId(), "userB3", "0", "0", "0", new BigDecimal("85.00"), new BigDecimal("40.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 8, 16, 0)),
|
||||||
|
order(beta.getId(), "userB4", "0", "0", "0", new BigDecimal("150.00"), new BigDecimal("85.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 10, 19, 0))));
|
||||||
|
ordersByClerk.put(gamma.getId(), Arrays.asList(
|
||||||
|
order(gamma.getId(), "userC1", "1", "0", "0", new BigDecimal("70.00"), new BigDecimal("35.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 1, 8, 0)),
|
||||||
|
order(gamma.getId(), "userC2", "0", "0", "0", new BigDecimal("135.00"), new BigDecimal("70.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 5, 17, 20)),
|
||||||
|
order(gamma.getId(), "userC3", "0", "0", "0", new BigDecimal("75.00"), new BigDecimal("45.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 6, 14, 50)),
|
||||||
|
order(gamma.getId(), "userC4", "0", "0", "0", new BigDecimal("160.00"), new BigDecimal("90.00"),
|
||||||
|
LocalDateTime.of(2024, Month.JULY, 9, 21, 10))));
|
||||||
|
|
||||||
|
when(playOrderInfoService.clerkSelectOrderInfoList(anyString(), anyString(), anyString()))
|
||||||
|
.thenAnswer(invocation -> {
|
||||||
|
String clerkId = invocation.getArgument(0);
|
||||||
|
String startStr = invocation.getArgument(1);
|
||||||
|
String endStr = invocation.getArgument(2);
|
||||||
|
LocalDateTime start = LocalDateTime.parse(startStr, DateRangeUtils.DATE_TIME_FORMATTER);
|
||||||
|
LocalDateTime end = LocalDateTime.parse(endStr, DateRangeUtils.DATE_TIME_FORMATTER);
|
||||||
|
return ordersByClerk.getOrDefault(clerkId, Collections.emptyList()).stream()
|
||||||
|
.filter(order -> !order.getPurchaserTime().isBefore(start)
|
||||||
|
&& !order.getPurchaserTime().isAfter(end))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
});
|
||||||
|
|
||||||
|
setAuthentication();
|
||||||
|
try {
|
||||||
|
ClerkPerformanceOverviewResponseVo fullRange =
|
||||||
|
service.queryOverview(buildOverviewVo("2024-07-01", "2024-07-10"));
|
||||||
|
ClerkPerformanceOverviewSummaryVo fullSummary = fullRange.getSummary();
|
||||||
|
assertEquals(new BigDecimal("1480.00"), fullSummary.getTotalGmv());
|
||||||
|
assertEquals(12, fullSummary.getTotalOrderCount());
|
||||||
|
assertEquals(new BigDecimal("590.00"), snapshotFor(fullRange.getRankings(), alpha.getId()).getGmv());
|
||||||
|
assertEquals(new BigDecimal("450.00"), snapshotFor(fullRange.getRankings(), beta.getId()).getGmv());
|
||||||
|
assertEquals(new BigDecimal("440.00"), snapshotFor(fullRange.getRankings(), gamma.getId()).getGmv());
|
||||||
|
|
||||||
|
ClerkPerformanceOverviewResponseVo midRange =
|
||||||
|
service.queryOverview(buildOverviewVo("2024-07-04", "2024-07-08"));
|
||||||
|
ClerkPerformanceOverviewSummaryVo midSummary = midRange.getSummary();
|
||||||
|
assertEquals(5, midSummary.getTotalOrderCount());
|
||||||
|
assertEquals(new BigDecimal("565.00"), midSummary.getTotalGmv());
|
||||||
|
List<ClerkPerformanceSnapshotVo> midRankings = midRange.getRankings();
|
||||||
|
assertEquals("c-gamma", midRankings.get(0).getClerkId());
|
||||||
|
assertEquals(new BigDecimal("210.00"), midRankings.get(0).getGmv());
|
||||||
|
assertEquals("c-beta", midRankings.get(1).getClerkId());
|
||||||
|
assertEquals(new BigDecimal("205.00"), midRankings.get(1).getGmv());
|
||||||
|
assertEquals("c-alpha", midRankings.get(2).getClerkId());
|
||||||
|
assertEquals(new BigDecimal("150.00"), midRankings.get(2).getGmv());
|
||||||
|
|
||||||
|
ClerkPerformanceOverviewResponseVo shortRange = service.queryOverview(
|
||||||
|
buildOverviewVo("2024-07-10 18:30:00", "2024-07-10 18:59:59"));
|
||||||
|
ClerkPerformanceOverviewSummaryVo shortSummary = shortRange.getSummary();
|
||||||
|
assertEquals(1, shortSummary.getTotalOrderCount());
|
||||||
|
assertEquals(new BigDecimal("130.00"), shortSummary.getTotalGmv());
|
||||||
|
ClerkPerformanceSnapshotVo alphaSnapshot = snapshotFor(shortRange.getRankings(), alpha.getId());
|
||||||
|
assertEquals(new BigDecimal("130.00"), alphaSnapshot.getGmv());
|
||||||
|
assertEquals(1, alphaSnapshot.getOrderCount());
|
||||||
|
assertEquals(BigDecimal.ZERO, snapshotFor(shortRange.getRankings(), beta.getId()).getGmv());
|
||||||
|
assertEquals(BigDecimal.ZERO, snapshotFor(shortRange.getRankings(), gamma.getId()).getGmv());
|
||||||
|
} finally {
|
||||||
|
clearAuthentication();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Test
|
||||||
@DisplayName("getClerkPerformanceInfo should ignore non-completed orders when aggregating GMV")
|
@DisplayName("getClerkPerformanceInfo should ignore non-completed orders when aggregating GMV")
|
||||||
void getClerkPerformanceInfoSkipsNonCompletedOrders() {
|
void getClerkPerformanceInfoSkipsNonCompletedOrders() {
|
||||||
PlayClerkUserInfoEntity clerk = buildClerk("c9", "Nine", "gX", "lX");
|
PlayClerkUserInfoEntity clerk = buildClerk("c9", "Nine", "gX", "lX");
|
||||||
@@ -348,6 +452,22 @@ class PlayClerkPerformanceServiceImplTest {
|
|||||||
assertTrue(idCaptor.getValue().contains(completed.getId()));
|
assertTrue(idCaptor.getValue().contains(completed.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ClerkPerformanceOverviewQueryVo buildOverviewVo(String start, String end) {
|
||||||
|
ClerkPerformanceOverviewQueryVo vo = new ClerkPerformanceOverviewQueryVo();
|
||||||
|
vo.setEndOrderTime(Arrays.asList(start, end));
|
||||||
|
vo.setIncludeSummary(true);
|
||||||
|
vo.setIncludeRankings(true);
|
||||||
|
vo.setLimit(10);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ClerkPerformanceSnapshotVo snapshotFor(List<ClerkPerformanceSnapshotVo> snapshots, String clerkId) {
|
||||||
|
return snapshots.stream()
|
||||||
|
.filter(snapshot -> clerkId.equals(snapshot.getClerkId()))
|
||||||
|
.findFirst()
|
||||||
|
.orElseThrow(() -> new AssertionError("Snapshot not found for clerk " + clerkId));
|
||||||
|
}
|
||||||
|
|
||||||
private PlayClerkUserInfoEntity buildClerk(String id, String name, String groupId, String levelId) {
|
private PlayClerkUserInfoEntity buildClerk(String id, String name, String groupId, String levelId) {
|
||||||
PlayClerkUserInfoEntity entity = new PlayClerkUserInfoEntity();
|
PlayClerkUserInfoEntity entity = new PlayClerkUserInfoEntity();
|
||||||
entity.setId(id);
|
entity.setId(id);
|
||||||
|
|||||||
Reference in New Issue
Block a user