diff --git a/src/main/java/com/ycwl/basic/pricing/service/IVoucherService.java b/src/main/java/com/ycwl/basic/pricing/service/IVoucherService.java index 51be47e..ef0f4aa 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/IVoucherService.java +++ b/src/main/java/com/ycwl/basic/pricing/service/IVoucherService.java @@ -43,6 +43,14 @@ public interface IVoucherService { */ boolean canClaimVoucher(Long faceId, Long scenicId); + /** + * 获取该faceId在scenicId下的券码详情列表 + * @param faceId 用户面部ID + * @param scenicId 景区ID + * @return 券码详情列表,包含所有状态的券码(已领取未使用、已使用等),如果没有券码则返回空列表 + */ + List getVoucherDetails(Long faceId, Long scenicId); + /** * 计算券码优惠金额 * @param voucherInfo 券码信息 diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherServiceImpl.java index 943267d..b983b39 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/VoucherServiceImpl.java @@ -133,6 +133,56 @@ public class VoucherServiceImpl implements IVoucherService { return count == 0; } + /** + * 获取该faceId在scenicId下的券码详情列表 + * @param faceId 用户面部ID + * @param scenicId 景区ID + * @return 券码详情列表,包含所有状态的券码(已领取未使用、已使用等),如果没有券码则返回空列表 + */ + public List getVoucherDetails(Long faceId, Long scenicId) { + if (faceId == null || scenicId == null) { + return new ArrayList<>(); + } + + List voucherCodes = voucherCodeMapper.selectUserVouchers(faceId, scenicId); + List voucherInfos = new ArrayList<>(); + + for (PriceVoucherCode voucherCode : voucherCodes) { + PriceVoucherBatchConfig batchConfig = voucherBatchConfigMapper.selectById(voucherCode.getBatchId()); + if (batchConfig != null && batchConfig.getDeleted() == 0) { + VoucherInfo voucherInfo = buildVoucherInfo(voucherCode, batchConfig); + + // 设置可用性状态 + VoucherCodeStatus statusEnum = VoucherCodeStatus.getByCode(voucherCode.getStatus()); + if (statusEnum != null) { + switch (statusEnum) { + case CLAIMED_UNUSED: + voucherInfo.setAvailable(true); + break; + case USED: + voucherInfo.setAvailable(false); + voucherInfo.setUnavailableReason("券码已使用"); + break; + case UNCLAIMED: + voucherInfo.setAvailable(false); + voucherInfo.setUnavailableReason("券码未领取"); + break; + default: + voucherInfo.setAvailable(false); + voucherInfo.setUnavailableReason("券码状态异常"); + } + } else { + voucherInfo.setAvailable(false); + voucherInfo.setUnavailableReason("券码状态未知"); + } + + voucherInfos.add(voucherInfo); + } + } + + return voucherInfos; + } + @Override public BigDecimal calculateVoucherDiscount(VoucherInfo voucherInfo, DiscountDetectionContext context) { if (voucherInfo == null || !Boolean.TRUE.equals(voucherInfo.getAvailable()) ||