feat: 店员收益明细支持条件筛选并返回订单信息

This commit is contained in:
irving
2025-10-18 20:48:39 -04:00
parent 0725c94bbe
commit 584780a812
2 changed files with 133 additions and 4 deletions

View File

@@ -6,16 +6,27 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.starry.admin.common.aspect.ClerkUserLogin; import com.starry.admin.common.aspect.ClerkUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail; import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException; 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.EarningsLineEntity;
import com.starry.admin.modules.withdraw.entity.WithdrawalLogEntity; import com.starry.admin.modules.withdraw.entity.WithdrawalLogEntity;
import com.starry.admin.modules.withdraw.entity.WithdrawalRequestEntity; import com.starry.admin.modules.withdraw.entity.WithdrawalRequestEntity;
import com.starry.admin.modules.withdraw.service.IEarningsService; import com.starry.admin.modules.withdraw.service.IEarningsService;
import com.starry.admin.modules.withdraw.service.IWithdrawalLogService; import com.starry.admin.modules.withdraw.service.IWithdrawalLogService;
import com.starry.admin.modules.withdraw.service.IWithdrawalService; 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.admin.modules.withdraw.vo.ClerkWithdrawBalanceVo;
import com.starry.common.result.TypedR; import com.starry.common.result.TypedR;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; 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 javax.annotation.Resource;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -32,6 +43,8 @@ public class WxWithdrawController {
private IWithdrawalService withdrawalService; private IWithdrawalService withdrawalService;
@Resource @Resource
private IWithdrawalLogService withdrawalLogService; private IWithdrawalLogService withdrawalLogService;
@Resource
private IPlayOrderInfoService orderInfoService;
@Data @Data
public static class CreateWithdrawRequest { public static class CreateWithdrawRequest {
@@ -51,18 +64,69 @@ public class WxWithdrawController {
@ClerkUserLogin @ClerkUserLogin
@GetMapping("/earnings") @GetMapping("/earnings")
public TypedR<java.util.List<EarningsLineEntity>> listEarnings(@RequestParam(value = "status", required = false) String status, public TypedR<java.util.List<ClerkEarningLineVo>> listEarnings(
@RequestParam(value = "pageNum", defaultValue = "1") long pageNum, @RequestParam(value = "status", required = false) String status,
@RequestParam(value = "pageSize", defaultValue = "10") long pageSize) { @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(); String clerkId = ThreadLocalRequestDetail.getClerkUserInfo().getId();
LambdaQueryWrapper<EarningsLineEntity> q = new LambdaQueryWrapper<>(); LambdaQueryWrapper<EarningsLineEntity> q = new LambdaQueryWrapper<>();
q.eq(EarningsLineEntity::getClerkId, clerkId); q.eq(EarningsLineEntity::getClerkId, clerkId);
if (status != null && !status.isEmpty()) { if (status != null && !status.isEmpty()) {
q.eq(EarningsLineEntity::getStatus, status); 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); q.orderByDesc(EarningsLineEntity::getCreatedTime);
IPage<EarningsLineEntity> page = earningsService.page(new Page<>(pageNum, pageSize), q); IPage<EarningsLineEntity> page = earningsService.page(new Page<>(pageNum, pageSize), q);
return TypedR.okPage(page);
List<EarningsLineEntity> records = page.getRecords();
List<ClerkEarningLineVo> vos = new ArrayList<>();
if (!records.isEmpty()) {
List<String> orderIds = records.stream()
.map(EarningsLineEntity::getOrderId)
.filter(id -> id != null && !id.isEmpty())
.distinct()
.collect(Collectors.toList());
Map<String, PlayOrderInfoEntity> 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<ClerkEarningLineVo> 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 @ClerkUserLogin
@@ -101,4 +165,36 @@ public class WxWithdrawController {
.list(); .list();
return TypedR.ok(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;
}
} }

View File

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