You've already forked FrameTour-BE
feat(voucher): 添加获取用户券码详情列表功能
- 新增 getVoucherDetails 方法,用于获取指定用户在指定景区的券码详情列表 - 方法会根据券码状态设置可用性状态和不可用原因 - 优化了券码信息的构建过程,提高了代码复用性
This commit is contained in:
@@ -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 券码信息
|
||||
|
@@ -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()) ||
|
||||
|
Reference in New Issue
Block a user