From 85bfb9351803d97a33329d507f30a2f78bf1fc75 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期一, 28 九月 2026 10:53:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/main'
---
talent-card-server/src/main/java/com/talentcard/server/business/merchant/ManualConsumptionService.java | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/merchant/ManualConsumptionService.java b/talent-card-server/src/main/java/com/talentcard/server/business/merchant/ManualConsumptionService.java
index 8c76f0f..ccc55e3 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/merchant/ManualConsumptionService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/merchant/ManualConsumptionService.java
@@ -164,19 +164,32 @@
}
/**
- * 免费入住券要显示「超过免费天数按门市价X折」:X 就是这家店给该人才卡配的到店消费折扣
- * (走和到店消费页同一套解析,结构化配置和旧的门店规则表都能取到)。
+ * 免费入住券要显示「超过免费天数按门店配置的到店消费规则计算」:门店给该人才卡配了折扣就是
+ * 「门市价X折」,配的是立减就是「立减X元」(走和到店消费页同一套解析,结构化配置和旧的门店
+ * 规则表都能取到)。
*
- * <p>没配折扣、或配的是立减时返回空串,调用方据此不显示这段说明。
+ * <p>以前只认折扣,酒店把到店消费配成「优惠(立减)」时整段是空的——而酒店最常见的配法恰恰
+ * 是立减(见商家权益里的到店消费二选一),页面上就什么都不显示,看起来像功能没做。
+ *
+ * <p>都没有配时返回空串,调用方据此不显示这段说明。
*/
String freeStayExceedDiscountText(Long merchantId, String cardLevel, String sourceAreaType) {
for (Map<String, Object> rule : rules(merchantId, cardLevel, sourceAreaType)) {
- BigDecimal rate = decimal(rule.get("discountRate"));
- if (rate.signum() > 0) return "门市价" + rate.movePointRight(1).stripTrailingZeros().toPlainString() + "折";
+ String text = exceedDiscountText(rule);
+ if (!text.isBlank()) return text;
}
return "";
}
+ /** 单条规则的「超过免费天数」文案:折扣优先,没配折扣(门店选的是立减)时用立减。 */
+ String exceedDiscountText(Map<String, Object> rule) {
+ BigDecimal rate = rule.get("discountRate") == null ? BigDecimal.ZERO : decimal(rule.get("discountRate"));
+ if (rate.signum() > 0) return "门市价" + rate.movePointRight(1).stripTrailingZeros().toPlainString() + "折";
+ BigDecimal reduction = rule.get("fixedReduction") == null ? BigDecimal.ZERO : decimal(rule.get("fixedReduction"));
+ if (reduction.signum() > 0) return "立减" + reduction.stripTrailingZeros().toPlainString() + "元";
+ return "";
+ }
+
boolean hasApplicableRule(Long merchantId, String cardLevel, String sourceAreaType) {
return !rules(merchantId, cardLevel, sourceAreaType).isEmpty();
}
--
Gitblit v1.7.1