diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherUsageServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherUsageServiceImpl.java index cfeae1c3..ba4ae0e3 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherUsageServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherUsageServiceImpl.java @@ -140,8 +140,81 @@ public class VoucherUsageServiceImpl implements IVoucherUsageService { @Override public List getBatchUsageStats(Long batchId) { - // 这里可以实现批次统计,暂时返回空列表 - return new ArrayList<>(); + if (batchId == null) { + return new ArrayList<>(); + } + + // 查询批次配置 + PriceVoucherBatchConfig batchConfig = batchConfigMapper.selectById(batchId); + if (batchConfig == null || batchConfig.getDeleted() == 1) { + log.warn("批次配置不存在或已删除: batchId={}", batchId); + return new ArrayList<>(); + } + + // 查询该批次下的所有券码 + List voucherCodes = voucherCodeMapper.selectByBatchId(batchId); + if (voucherCodes == null || voucherCodes.isEmpty()) { + log.info("批次下无券码数据: batchId={}", batchId); + return new ArrayList<>(); + } + + List statsList = new ArrayList<>(); + + for (PriceVoucherCode voucherCode : voucherCodes) { + if (voucherCode.getDeleted() == 1) { + continue; + } + + VoucherUsageStatsResp stats = new VoucherUsageStatsResp(); + stats.setVoucherCodeId(voucherCode.getId()); + stats.setVoucherCode(voucherCode.getCode()); + stats.setBatchId(batchConfig.getId()); + stats.setBatchName(batchConfig.getBatchName()); + stats.setScenicId(voucherCode.getScenicId()); + stats.setStatus(voucherCode.getStatus()); + + // 设置状态名称 + VoucherCodeStatus statusEnum = VoucherCodeStatus.getByCode(voucherCode.getStatus()); + if (statusEnum != null) { + stats.setStatusName(statusEnum.getName()); + } + + // 设置使用次数相关信息 + Integer currentUseCount = voucherCode.getCurrentUseCount() != null ? + voucherCode.getCurrentUseCount() : 0; + stats.setCurrentUseCount(currentUseCount); + stats.setMaxUseCount(batchConfig.getMaxUseCount()); + stats.setMaxUsePerUser(batchConfig.getMaxUsePerUser()); + stats.setUseIntervalHours(batchConfig.getUseIntervalHours()); + + // 计算是否还能使用 + boolean canUseMore = true; + if (batchConfig.getMaxUseCount() != null) { + canUseMore = currentUseCount < batchConfig.getMaxUseCount(); + } + stats.setCanUseMore(canUseMore); + + // 计算剩余使用次数 + if (batchConfig.getMaxUseCount() != null) { + int remaining = batchConfig.getMaxUseCount() - currentUseCount; + stats.setRemainingUseCount(Math.max(0, remaining)); + } + + // 获取使用记录数 + List usageRecords = usageRecordMapper.selectByVoucherCodeId(voucherCode.getId()); + stats.setTotalUsageRecords(usageRecords != null ? usageRecords.size() : 0); + + // 格式化最后使用时间 + if (voucherCode.getLastUsedTime() != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + stats.setLastUsedTime(sdf.format(voucherCode.getLastUsedTime())); + } + + statsList.add(stats); + } + + log.info("批次统计完成: batchId={}, 券码数量={}", batchId, statsList.size()); + return statsList; } @Override