feat(voucher): 添加获取用户券码详情列表功能

- 新增 getVoucherDetails 方法,用于获取指定用户在指定景区的券码详情列表
- 方法会根据券码状态设置可用性状态和不可用原因
- 优化了券码信息的构建过程,提高了代码复用性
This commit is contained in:
2025-08-22 17:59:15 +08:00
parent 2c0b7a094d
commit dc8d9448e6
2 changed files with 58 additions and 0 deletions

View File

@@ -43,6 +43,14 @@ public interface IVoucherService {
*/
boolean canClaimVoucher(Long faceId, Long scenicId);
/**
* 获取该faceId在scenicId下的券码详情列表
* @param faceId 用户面部ID
* @param scenicId 景区ID
* @return 券码详情列表,包含所有状态的券码(已领取未使用、已使用等),如果没有券码则返回空列表
*/
List<VoucherInfo> getVoucherDetails(Long faceId, Long scenicId);
/**
* 计算券码优惠金额
* @param voucherInfo 券码信息

View File

@@ -133,6 +133,56 @@ public class VoucherServiceImpl implements IVoucherService {
return count == 0;
}
/**
* 获取该faceId在scenicId下的券码详情列表
* @param faceId 用户面部ID
* @param scenicId 景区ID
* @return 券码详情列表,包含所有状态的券码(已领取未使用、已使用等),如果没有券码则返回空列表
*/
public List<VoucherInfo> getVoucherDetails(Long faceId, Long scenicId) {
if (faceId == null || scenicId == null) {
return new ArrayList<>();
}
List<PriceVoucherCode> voucherCodes = voucherCodeMapper.selectUserVouchers(faceId, scenicId);
List<VoucherInfo> 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()) ||