From 7d07e32271436f1a804f732e0061c22f0d868ec6 Mon Sep 17 00:00:00 2001 From: irving Date: Sat, 8 Nov 2025 20:09:07 -0500 Subject: [PATCH] feat: enrich withdrawal audit info --- .../controller/AdminWithdrawalController.java | 59 ++++++++++++++++++- .../withdraw/vo/ClerkEarningLineVo.java | 5 ++ .../api/AdminWithdrawalControllerApiTest.java | 19 +++++- 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/AdminWithdrawalController.java b/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/AdminWithdrawalController.java index e5f7a73..c8c43b4 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/AdminWithdrawalController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/AdminWithdrawalController.java @@ -4,6 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.starry.admin.common.exception.CustomException; +import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity; +import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; +import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; +import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService; import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity; import com.starry.admin.modules.order.service.IPlayOrderInfoService; import com.starry.admin.modules.withdraw.entity.EarningsBackfillLogEntity; @@ -36,6 +40,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.web.bind.annotation.*; @@ -59,6 +64,10 @@ public class AdminWithdrawalController { private IEarningsBackfillLogService backfillLogService; @Resource private IPlayOrderInfoService orderInfoService; + @Resource + private IPlayClerkUserInfoService clerkUserInfoService; + @Resource + private IPlayCustomUserInfoService customUserInfoService; @ApiOperation("分页查询提现请求") @PostMapping("/requests/listByPage") @@ -112,7 +121,39 @@ public class AdminWithdrawalController { .in(PlayOrderInfoEntity::getId, orderIds) .list() .stream() - .collect(Collectors.toMap(PlayOrderInfoEntity::getId, it -> it)); + .collect(Collectors.toMap(PlayOrderInfoEntity::getId, Function.identity())); + + Map clerkMap = Collections.emptyMap(); + Map customerMap = Collections.emptyMap(); + if (!orderMap.isEmpty()) { + List clerkIds = orderMap.values().stream() + .map(PlayOrderInfoEntity::getAcceptBy) + .filter(clerkIdValue -> clerkIdValue != null && !clerkIdValue.isEmpty()) + .distinct() + .collect(Collectors.toList()); + if (!clerkIds.isEmpty()) { + clerkMap = clerkUserInfoService.lambdaQuery() + .eq(PlayClerkUserInfoEntity::getTenantId, tenantId) + .in(PlayClerkUserInfoEntity::getId, clerkIds) + .list() + .stream() + .collect(Collectors.toMap(PlayClerkUserInfoEntity::getId, Function.identity())); + } + + List customerIds = orderMap.values().stream() + .map(PlayOrderInfoEntity::getPurchaserBy) + .filter(customerIdValue -> customerIdValue != null && !customerIdValue.isEmpty()) + .distinct() + .collect(Collectors.toList()); + if (!customerIds.isEmpty()) { + customerMap = customUserInfoService.lambdaQuery() + .eq(PlayCustomUserInfoEntity::getTenantId, tenantId) + .in(PlayCustomUserInfoEntity::getId, customerIds) + .list() + .stream() + .collect(Collectors.toMap(PlayCustomUserInfoEntity::getId, Function.identity())); + } + } List vos = new ArrayList<>(lines.size()); for (EarningsLineEntity line : lines) { @@ -131,6 +172,22 @@ public class AdminWithdrawalController { vo.setOrderNo(order.getOrderNo()); vo.setOrderStatus(order.getOrderStatus()); vo.setOrderEndTime(toLocalDateTime(order.getOrderEndTime())); + String clerkId = order.getAcceptBy(); + if (clerkId != null && !clerkId.isEmpty()) { + vo.setOrderClerkId(clerkId); + PlayClerkUserInfoEntity clerk = clerkMap.get(clerkId); + if (clerk != null) { + vo.setOrderClerkNickname(clerk.getNickname()); + } + } + String customerId = order.getPurchaserBy(); + if (customerId != null && !customerId.isEmpty()) { + vo.setOrderCustomerId(customerId); + PlayCustomUserInfoEntity customer = customerMap.get(customerId); + if (customer != null) { + vo.setOrderCustomerNickname(customer.getNickname()); + } + } } } vos.add(vo); diff --git a/play-admin/src/main/java/com/starry/admin/modules/withdraw/vo/ClerkEarningLineVo.java b/play-admin/src/main/java/com/starry/admin/modules/withdraw/vo/ClerkEarningLineVo.java index 430dc5e..85b8e9f 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/withdraw/vo/ClerkEarningLineVo.java +++ b/play-admin/src/main/java/com/starry/admin/modules/withdraw/vo/ClerkEarningLineVo.java @@ -27,6 +27,11 @@ public class ClerkEarningLineVo { private String orderNo; private String orderStatus; + private String orderCustomerId; + private String orderCustomerNickname; + private String orderClerkId; + private String orderClerkNickname; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime orderEndTime; diff --git a/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java b/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java index fa74965..c4fc71d 100644 --- a/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java +++ b/play-admin/src/test/java/com/starry/admin/api/AdminWithdrawalControllerApiTest.java @@ -8,6 +8,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.starry.admin.common.apitest.ApiTestDataSeeder; +import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; +import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService; import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity; import com.starry.admin.modules.order.service.IPlayOrderInfoService; import com.starry.admin.modules.withdraw.entity.EarningsLineEntity; @@ -40,6 +42,10 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { private IWithdrawalService withdrawalService; @Autowired private IPlayOrderInfoService orderInfoService; + @Autowired + private IPlayClerkUserInfoService clerkUserInfoService; + @Autowired + private IPlayCustomUserInfoService customUserInfoService; private final ObjectMapper objectMapper = new ObjectMapper(); private final List earningsToCleanup = new ArrayList<>(); @@ -83,6 +89,9 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { .andReturn(); JsonNode data = objectMapper.readTree(result.getResponse().getContentAsString()).get("data"); + String expectedClerkNickname = clerkUserInfoService.selectById(ApiTestDataSeeder.DEFAULT_CLERK_ID).getNickname(); + String expectedCustomerNickname = customUserInfoService.selectById(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID).getNickname(); + boolean foundOrder = false; boolean foundMissing = false; for (JsonNode node : data) { @@ -90,6 +99,10 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { if (order.getOrderNo().equals(orderNo)) { Assertions.assertThat(node.path("orderStatus").asText()).isEqualTo(order.getOrderStatus()); Assertions.assertThat(node.path("earningType").asText()).isEqualTo(EarningsType.ORDER.name()); + Assertions.assertThat(node.path("orderClerkId").asText()).isEqualTo(ApiTestDataSeeder.DEFAULT_CLERK_ID); + Assertions.assertThat(node.path("orderClerkNickname").asText()).isEqualTo(expectedClerkNickname); + Assertions.assertThat(node.path("orderCustomerId").asText()).isEqualTo(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID); + Assertions.assertThat(node.path("orderCustomerNickname").asText()).isEqualTo(expectedCustomerNickname); foundOrder = true; } if (node.path("orderNo").isNull()) { @@ -151,7 +164,11 @@ class AdminWithdrawalControllerApiTest extends AbstractApiTest { .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data[0].orderNo").value(nullValue())) - .andExpect(jsonPath("$.data[0].orderId").value(orphanOrderId)); + .andExpect(jsonPath("$.data[0].orderId").value(orphanOrderId)) + .andExpect(jsonPath("$.data[0].orderClerkId").value(nullValue())) + .andExpect(jsonPath("$.data[0].orderClerkNickname").value(nullValue())) + .andExpect(jsonPath("$.data[0].orderCustomerId").value(nullValue())) + .andExpect(jsonPath("$.data[0].orderCustomerNickname").value(nullValue())); } @Test