diff --git a/src/main/java/com/ycwl/basic/pricing/CLAUDE.md b/src/main/java/com/ycwl/basic/pricing/CLAUDE.md index fe681fe7..3c087048 100644 --- a/src/main/java/com/ycwl/basic/pricing/CLAUDE.md +++ b/src/main/java/com/ycwl/basic/pricing/CLAUDE.md @@ -616,14 +616,14 @@ UpgradeCheckResult checkUpgrade(UpgradeCheckRequest request); - `scenicId`: 景区ID - `purchasedProducts`: 已购商品列表 - `intendingProducts`: 待购商品列表 -- `paidAmount`: 已支付金额(内部代码传入,前端不必传) +- `paidAmount`: 已支付金额(内部代码传入,前端不必传;**必填**,为空直接报错) #### 检测流程 1. **商品规范化**: 对已购和待购商品进行规范化处理 2. **价格汇总**: 分别计算已购和待购商品的总价格,并合并已支付金额 3. **一口价评估**: 判断合并商品是否满足一口价条件 4. **打包优惠评估**: 检测是否满足打包购买优惠条件 -5. **结果汇总**: 生成升单检测结果和建议 +5. **结果汇总**: 生成升单检测结果和建议(补差价 <= 0 视为不可升单) #### 响应结果 (UpgradeCheckResult) - `summary`: 价格汇总信息(包含已支付金额) diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/PriceCalculationServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/PriceCalculationServiceImpl.java index baa6c72a..4789826c 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/PriceCalculationServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/PriceCalculationServiceImpl.java @@ -193,7 +193,7 @@ public class PriceCalculationServiceImpl implements IPriceCalculationService { combinedProducts.addAll(intendingProducts); PriceDetails combinedDetails = calculateProductsPriceWithOriginal(combinedProducts, scenicId); - BigDecimal paidAmount = resolvePaidAmount(request, purchasedDetails); + BigDecimal paidAmount = resolvePaidAmount(request); BigDecimal currentTotalAmount = calculateCurrentTotalAmount(paidAmount, intendingDetails); UpgradePriceSummary priceSummary = buildPriceSummary(purchasedDetails, intendingDetails, combinedDetails, paidAmount); @@ -480,6 +480,10 @@ public class PriceCalculationServiceImpl implements IPriceCalculationService { } BigDecimal discountAmount = normalizedCurrentTotal.subtract(normalizedBundlePrice); + BigDecimal supplementAmount = calculateSupplementAmount(normalizedBundlePrice, normalizedPaidAmount); + if (supplementAmount.compareTo(BigDecimal.ZERO) <= 0) { + return result; + } result.setApplicable(true); result.setBundleConfigId(bundleConfig.getId()); @@ -488,7 +492,7 @@ public class PriceCalculationServiceImpl implements IPriceCalculationService { result.setScenicId(bundleConfig.getScenicId()); result.setBundlePrice(normalizedBundlePrice); result.setDiscountAmount(discountAmount); - result.setEstimatedFinalAmount(calculateSupplementAmount(normalizedBundlePrice, normalizedPaidAmount)); + result.setEstimatedFinalAmount(supplementAmount); return result; } @@ -525,6 +529,11 @@ public class PriceCalculationServiceImpl implements IPriceCalculationService { return result; } + BigDecimal supplementAmount = calculateSupplementAmount(targetTotal, normalizedPaidAmount); + if (supplementAmount.compareTo(BigDecimal.ZERO) <= 0) { + return result; + } + result.setApplicable(true); result.setBundleConfigId(bestDiscount.getBundleConfigId()); result.setBundleName(bestDiscount.getBundleName()); @@ -534,7 +543,7 @@ public class PriceCalculationServiceImpl implements IPriceCalculationService { result.setDiscountAmount(normalizedDiscount); result.setMinQuantity(bestDiscount.getMinQuantity()); result.setMinAmount(bestDiscount.getMinAmount()); - result.setEstimatedFinalAmount(calculateSupplementAmount(targetTotal, normalizedPaidAmount)); + result.setEstimatedFinalAmount(supplementAmount); return result; } @@ -592,10 +601,10 @@ public class PriceCalculationServiceImpl implements IPriceCalculationService { return configScenicId.equals(String.valueOf(scenicId)); } - private BigDecimal resolvePaidAmount(UpgradeCheckRequest request, PriceDetails purchasedDetails) { + private BigDecimal resolvePaidAmount(UpgradeCheckRequest request) { BigDecimal paidAmount = request != null ? request.getPaidAmount() : null; - if (paidAmount == null && purchasedDetails != null) { - paidAmount = purchasedDetails.getTotalAmount(); + if (paidAmount == null) { + throw new PriceCalculationException("已支付金额不能为空"); } return normalizeAmount(paidAmount); }