feat: 新增提现审计接口与保障用例
This commit is contained in:
@@ -3,6 +3,9 @@ package com.starry.admin.modules.withdraw.controller;
|
||||
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.order.module.entity.PlayOrderInfoEntity;
|
||||
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
|
||||
import com.starry.admin.modules.withdraw.entity.EarningsBackfillLogEntity;
|
||||
import com.starry.admin.modules.withdraw.entity.EarningsLineEntity;
|
||||
import com.starry.admin.modules.withdraw.entity.WithdrawalLogEntity;
|
||||
@@ -13,6 +16,7 @@ import com.starry.admin.modules.withdraw.service.IEarningsService;
|
||||
import com.starry.admin.modules.withdraw.service.ITenantAlipayConfigService;
|
||||
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.EarningsAdminQueryVo;
|
||||
import com.starry.admin.modules.withdraw.vo.EarningsAdminSummaryVo;
|
||||
import com.starry.admin.modules.withdraw.vo.EarningsBackfillRequest;
|
||||
@@ -24,11 +28,15 @@ import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -49,6 +57,8 @@ public class AdminWithdrawalController {
|
||||
private IEarningsBackfillService earningsBackfillService;
|
||||
@Resource
|
||||
private IEarningsBackfillLogService backfillLogService;
|
||||
@Resource
|
||||
private IPlayOrderInfoService orderInfoService;
|
||||
|
||||
@ApiOperation("分页查询提现请求")
|
||||
@PostMapping("/requests/listByPage")
|
||||
@@ -72,6 +82,62 @@ public class AdminWithdrawalController {
|
||||
return TypedR.ok(list);
|
||||
}
|
||||
|
||||
@ApiOperation("提现请求审计")
|
||||
@GetMapping("/requests/{id}/audit")
|
||||
public TypedR<List<ClerkEarningLineVo>> getRequestAudit(@PathVariable("id") String id) {
|
||||
String tenantId = SecurityUtils.getTenantId();
|
||||
WithdrawalRequestEntity request = withdrawalService.getById(id);
|
||||
if (request == null || !tenantId.equals(request.getTenantId())) {
|
||||
throw new CustomException("提现申请不存在或无权查看");
|
||||
}
|
||||
|
||||
List<EarningsLineEntity> lines = earningsService.lambdaQuery()
|
||||
.eq(EarningsLineEntity::getTenantId, tenantId)
|
||||
.eq(EarningsLineEntity::getWithdrawalId, id)
|
||||
.orderByAsc(EarningsLineEntity::getCreatedTime)
|
||||
.list();
|
||||
if (lines.isEmpty()) {
|
||||
return TypedR.ok(Collections.emptyList());
|
||||
}
|
||||
|
||||
List<String> orderIds = lines.stream()
|
||||
.map(EarningsLineEntity::getOrderId)
|
||||
.filter(orderId -> orderId != null && !orderId.isEmpty())
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
Map<String, PlayOrderInfoEntity> orderMap = orderIds.isEmpty()
|
||||
? Collections.emptyMap()
|
||||
: orderInfoService.lambdaQuery()
|
||||
.eq(PlayOrderInfoEntity::getTenantId, tenantId)
|
||||
.in(PlayOrderInfoEntity::getId, orderIds)
|
||||
.list()
|
||||
.stream()
|
||||
.collect(Collectors.toMap(PlayOrderInfoEntity::getId, it -> it));
|
||||
|
||||
List<ClerkEarningLineVo> vos = new ArrayList<>(lines.size());
|
||||
for (EarningsLineEntity line : lines) {
|
||||
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);
|
||||
}
|
||||
return TypedR.ok(vos);
|
||||
}
|
||||
|
||||
@ApiOperation("分页查询收益明细")
|
||||
@PostMapping("/earnings/listByPage")
|
||||
public TypedR<List<EarningsLineEntity>> listEarnings(@RequestBody EarningsAdminQueryVo vo) {
|
||||
@@ -182,4 +248,17 @@ public class AdminWithdrawalController {
|
||||
q.orderByDesc(EarningsLineEntity::getCreatedTime);
|
||||
return q;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user