From 584780a81249877fd16a2522cca68381e468fd3f Mon Sep 17 00:00:00 2001 From: irving Date: Sat, 18 Oct 2025 20:48:39 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BA=97=E5=91=98=E6=94=B6=E7=9B=8A?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=94=AF=E6=8C=81=E6=9D=A1=E4=BB=B6=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E5=B9=B6=E8=BF=94=E5=9B=9E=E8=AE=A2=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxWithdrawController.java | 104 +++++++++++++++++- .../withdraw/vo/ClerkEarningLineVo.java | 33 ++++++ 2 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 play-admin/src/main/java/com/starry/admin/modules/withdraw/vo/ClerkEarningLineVo.java diff --git a/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/WxWithdrawController.java b/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/WxWithdrawController.java index 6164735..bc617d2 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/WxWithdrawController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/withdraw/controller/WxWithdrawController.java @@ -6,16 +6,27 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.starry.admin.common.aspect.ClerkUserLogin; import com.starry.admin.common.conf.ThreadLocalRequestDetail; import com.starry.admin.common.exception.CustomException; +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; import com.starry.admin.modules.withdraw.entity.WithdrawalLogEntity; import com.starry.admin.modules.withdraw.entity.WithdrawalRequestEntity; import com.starry.admin.modules.withdraw.service.IEarningsService; import com.starry.admin.modules.withdraw.service.IWithdrawalLogService; import com.starry.admin.modules.withdraw.service.IWithdrawalService; +import com.starry.admin.modules.withdraw.vo.ClerkEarningLineVo; import com.starry.admin.modules.withdraw.vo.ClerkWithdrawBalanceVo; import com.starry.common.result.TypedR; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -32,6 +43,8 @@ public class WxWithdrawController { private IWithdrawalService withdrawalService; @Resource private IWithdrawalLogService withdrawalLogService; + @Resource + private IPlayOrderInfoService orderInfoService; @Data public static class CreateWithdrawRequest { @@ -51,18 +64,69 @@ public class WxWithdrawController { @ClerkUserLogin @GetMapping("/earnings") - public TypedR> listEarnings(@RequestParam(value = "status", required = false) String status, - @RequestParam(value = "pageNum", defaultValue = "1") long pageNum, - @RequestParam(value = "pageSize", defaultValue = "10") long pageSize) { + public TypedR> listEarnings( + @RequestParam(value = "status", required = false) String status, + @RequestParam(value = "pageNum", defaultValue = "1") long pageNum, + @RequestParam(value = "pageSize", defaultValue = "10") long pageSize, + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime) { String clerkId = ThreadLocalRequestDetail.getClerkUserInfo().getId(); LambdaQueryWrapper q = new LambdaQueryWrapper<>(); q.eq(EarningsLineEntity::getClerkId, clerkId); if (status != null && !status.isEmpty()) { q.eq(EarningsLineEntity::getStatus, status); } + LocalDateTime begin = parseDateTime(beginTime); + LocalDateTime end = parseDateTime(endTime); + if (begin != null) { + q.ge(EarningsLineEntity::getCreatedTime, begin); + } + if (end != null) { + q.le(EarningsLineEntity::getCreatedTime, end); + } q.orderByDesc(EarningsLineEntity::getCreatedTime); IPage page = earningsService.page(new Page<>(pageNum, pageSize), q); - return TypedR.okPage(page); + + List records = page.getRecords(); + List vos = new ArrayList<>(); + if (!records.isEmpty()) { + List orderIds = records.stream() + .map(EarningsLineEntity::getOrderId) + .filter(id -> id != null && !id.isEmpty()) + .distinct() + .collect(Collectors.toList()); + Map orderMap = orderIds.isEmpty() ? java.util.Collections.emptyMap() + : orderInfoService.lambdaQuery() + .in(PlayOrderInfoEntity::getId, orderIds) + .list() + .stream() + .collect(Collectors.toMap(PlayOrderInfoEntity::getId, it -> it)); + for (EarningsLineEntity line : records) { + ClerkEarningLineVo vo = new ClerkEarningLineVo(); + vo.setId(line.getId()); + vo.setAmount(line.getAmount()); + vo.setStatus(line.getStatus()); + vo.setEarningType(line.getEarningType()); + vo.setWithdrawalId(line.getWithdrawalId()); + vo.setUnlockTime(line.getUnlockTime()); + vo.setCreatedTime(toLocalDateTime(line.getCreatedTime())); + vo.setOrderId(line.getOrderId()); + if (line.getOrderId() != null) { + PlayOrderInfoEntity order = orderMap.get(line.getOrderId()); + if (order != null) { + vo.setOrderNo(order.getOrderNo()); + vo.setOrderStatus(order.getOrderStatus()); + vo.setOrderEndTime(toLocalDateTime(order.getOrderEndTime())); + } + } + vos.add(vo); + } + } + Page result = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + long totalPage = page.getSize() == 0 ? 0 : (long) Math.ceil((double) page.getTotal() / (double) page.getSize()); + result.setPages(totalPage); + result.setRecords(vos); + return TypedR.okPage(result); } @ClerkUserLogin @@ -101,4 +165,36 @@ public class WxWithdrawController { .list(); return TypedR.ok(list); } + + private LocalDateTime parseDateTime(String value) { + if (value == null || value.trim().isEmpty()) { + return null; + } + String trimmed = value.trim(); + DateTimeFormatter[] formatters = new DateTimeFormatter[] { + DateTimeFormatter.ISO_DATE_TIME, + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"), + DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss") + }; + for (DateTimeFormatter formatter : formatters) { + try { + return LocalDateTime.parse(trimmed, formatter); + } catch (DateTimeParseException ignored) { + } + } + return null; + } + + private LocalDateTime toLocalDateTime(Object value) { + if (value == null) { + return null; + } + if (value instanceof LocalDateTime) { + return (LocalDateTime) value; + } + if (value instanceof Date) { + return ((Date) value).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + } + return null; + } } 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 new file mode 100644 index 0000000..430dc5e --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/withdraw/vo/ClerkEarningLineVo.java @@ -0,0 +1,33 @@ +package com.starry.admin.modules.withdraw.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.starry.admin.modules.withdraw.enums.EarningsType; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +@Data +public class ClerkEarningLineVo { + private String id; + private BigDecimal amount; + private String status; + private EarningsType earningType; + private String withdrawalId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime unlockTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createdTime; + + private String orderId; + private String orderNo; + private String orderStatus; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime orderEndTime; +}