| | |
| | | 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); |
| | |
| | | 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")))) |
| | |
| | | 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")); |