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);
|
boolean canClaimVoucher(Long faceId, Long scenicId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取该faceId在scenicId下的券码详情列表
|
||||||
|
* @param faceId 用户面部ID
|
||||||
|
* @param scenicId 景区ID
|
||||||
|
* @return 券码详情列表,包含所有状态的券码(已领取未使用、已使用等),如果没有券码则返回空列表
|
||||||
|
*/
|
||||||
|
List<VoucherInfo> getVoucherDetails(Long faceId, Long scenicId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算券码优惠金额
|
* 计算券码优惠金额
|
||||||
* @param voucherInfo 券码信息
|
* @param voucherInfo 券码信息
|
||||||
|
@@ -133,6 +133,56 @@ public class VoucherServiceImpl implements IVoucherService {
|
|||||||
return count == 0;
|
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
|
@Override
|
||||||
public BigDecimal calculateVoucherDiscount(VoucherInfo voucherInfo, DiscountDetectionContext context) {
|
public BigDecimal calculateVoucherDiscount(VoucherInfo voucherInfo, DiscountDetectionContext context) {
|
||||||
if (voucherInfo == null || !Boolean.TRUE.equals(voucherInfo.getAvailable()) ||
|
if (voucherInfo == null || !Boolean.TRUE.equals(voucherInfo.getAvailable()) ||
|
||||||
|
Reference in New Issue
Block a user