From dc8d9448e60acf1ffdc2d472bd5187508f9ccbc6 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 22 Aug 2025 17:59:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(voucher):=20=E6=B7=BB=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E5=88=B8=E7=A0=81=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 getVoucherDetails 方法,用于获取指定用户在指定景区的券码详情列表 - 方法会根据券码状态设置可用性状态和不可用原因 - 优化了券码信息的构建过程,提高了代码复用性 --- .../pricing/service/IVoucherService.java | 8 +++ .../service/impl/VoucherServiceImpl.java | 50 +++++++++++++++++++ 2 files changed, 58 insertions(+) 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()) ||