From 70ea0911ce7519ca802266078624e9fed3559a2c Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期五, 18 九月 2026 14:05:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/main'
---
talent-card-server/src/main/java/com/talentcard/server/business/portal/ParkingMerchantPortalService.java | 32 +++++++++++++++++++++++++++-----
1 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/portal/ParkingMerchantPortalService.java b/talent-card-server/src/main/java/com/talentcard/server/business/portal/ParkingMerchantPortalService.java
index e7b2407..bc04cd5 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/portal/ParkingMerchantPortalService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/portal/ParkingMerchantPortalService.java
@@ -65,8 +65,11 @@
String parkingType = text(right == null ? null : right.get("parkingType"), "paid");
// 付费权益到店出示人才码,免费权益先登记车牌。
result.put("actionMode", "paid".equalsIgnoreCase(parkingType) ? "talentCode" : "plate");
- result.put("plateFormMode", text(benefit.get("plateFormMode"), "simple"));
- result.put("benefit", benefitView(benefit));
+ // 车牌表单模式以商家权益里配的「停车场选择范围」为准:
+ // 全部可选(all)只要填车牌;只选其一(selected)才需要挑停车场。
+ String plateFormMode = effectivePlateFormMode(right, benefit);
+ result.put("plateFormMode", plateFormMode);
+ result.put("benefit", benefitView(benefit, plateFormMode));
result.put("applicableStores", parkingStores(merchant.get("usageInstructions")));
result.put("merchantRightsConfig", rights);
result.put("merchantRight", right == null ? Map.of() : right);
@@ -127,7 +130,7 @@
throw new BusinessException(ErrorCode.CONFLICT, "付费停车权益无需登记车牌");
}
Map<String, Object> selectedParkingLot = null;
- if ("withParking".equals(benefit.get("plateFormMode"))) {
+ if (requiresParkingLotSelection(right, benefit)) {
if (request.parkingLotId() == null) throw new BusinessException(ErrorCode.BAD_REQUEST, "请选择停车场");
selectedParkingLot = parkingStores(merchant.get("usageInstructions")).stream()
.filter(item -> String.valueOf(request.parkingLotId()).equals(String.valueOf(item.get("id"))))
@@ -254,15 +257,34 @@
text(parkingLot.get("storeName"), text(parkingLot.get("name"), "")));
}
- private Map<String, Object> benefitView(Map<String, Object> benefit) {
+ private Map<String, Object> benefitView(Map<String, Object> benefit, String plateFormMode) {
Map<String, Object> result = new LinkedHashMap<>();
result.put("benefitId", benefit.get("id"));
result.put("actionMode", text(benefit.get("actionMode"), "plate"));
- result.put("plateFormMode", text(benefit.get("plateFormMode"), "simple"));
+ result.put("plateFormMode", plateFormMode);
result.put("validEnd", benefit.get("validEnd"));
return result;
}
+ /**
+ * 是否需要小程序里挑一个停车场。
+ * 以商家权益(merchant_rights_config)里的 parkingScope 为准:selected/ONE=只选其一,all=全部可选;
+ * 权益里没配范围的旧数据,继续沿用停车权益表的 plate_form_mode。
+ */
+ private boolean requiresParkingLotSelection(Map<String, Object> right, Map<String, Object> benefit) {
+ if (right != null) {
+ String scope = text(right.get("parkingScope"), "").trim().toUpperCase(Locale.ROOT);
+ if (!scope.isBlank()) {
+ return "SELECTED".equals(scope) || "ONE".equals(scope) || scope.contains("只选") || scope.contains("其一");
+ }
+ }
+ return "withParking".equalsIgnoreCase(text(benefit.get("plateFormMode"), ""));
+ }
+
+ private String effectivePlateFormMode(Map<String, Object> right, Map<String, Object> benefit) {
+ return requiresParkingLotSelection(right, benefit) ? "withParking" : "simple";
+ }
+
private Map<String, Object> registrationView(Map<String, Object> row) {
Map<String, Object> result = new LinkedHashMap<>();
result.put("registrationId", row.get("id"));
--
Gitblit v1.7.1