From b176072388747abb438990157bfa305b215b4b90 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 14 四月 2026 21:59:39 +0800
Subject: [PATCH] 我们现在讨论一下系统找库位方案, 如何实现,对现有找库位规则进行整改,数据库也要整改 1、要能方便的填写单伸堆垛机或双伸堆垛机的深浅库位配置 2、根据设备状态分配库位,离线设备不分配 3、库位分配要均衡到每一个设备 4、库位高度需要匹配到对应库位信息,低库位能向上兼容 5、空托盘优先放在locType2库位=1的库位,没有这种库位了,允许放到其他库位 6、给入库站点设置有限去那些堆垛机,其次去那些堆垛机,弄成页面可以配置入库站点 7、在系统配置新增优先放前几列的配置,当入库的货物是高频货物时放在前几列 8、组托中会标识该托盘是高频还是低频,如果是高频则从前往后找库位,如果是低频则从后往前找库位 9、找库位时locMast中whsType字段无用
---
src/main/java/com/zy/iot/config/IotProperties.java | 61 +++++++++++++++++++++++++++---
1 files changed, 54 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/zy/iot/config/IotProperties.java b/src/main/java/com/zy/iot/config/IotProperties.java
index 42585ce..24b0ac5 100644
--- a/src/main/java/com/zy/iot/config/IotProperties.java
+++ b/src/main/java/com/zy/iot/config/IotProperties.java
@@ -1,12 +1,16 @@
package com.zy.iot.config;
import com.zy.iot.entity.IotTopicConfig;
+import lombok.AccessLevel;
import lombok.Data;
+import lombok.Getter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
+import java.util.Locale;
import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
@Data
@Component
@@ -43,27 +47,70 @@
private Map<String, Integer> pickStationMappings = new LinkedHashMap<>();
+ @Getter(AccessLevel.NONE)
+ private volatile String resolvedClientIdCache;
+
public String getResolvedClientId() {
- if (clientId != null && clientId.trim().length() > 0) {
- return clientId.trim();
+ if (resolvedClientIdCache != null) {
+ return resolvedClientIdCache;
}
- return thingName;
+ synchronized (this) {
+ if (resolvedClientIdCache != null) {
+ return resolvedClientIdCache;
+ }
+ String base = null;
+ if (clientId != null && clientId.trim().length() > 0) {
+ base = clientId.trim();
+ } else if (thingName != null && thingName.trim().length() > 0) {
+ base = thingName.trim();
+ }
+ if (base == null) {
+ return null;
+ }
+ resolvedClientIdCache = base + "-" + newClientIdSuffix();
+ return resolvedClientIdCache;
+ }
+ }
+
+ private static String newClientIdSuffix() {
+ long n = ThreadLocalRandom.current().nextLong() & 0xFFFFFFFFL;
+ return Long.toHexString(n);
}
public boolean isTlsEnabled() {
- String serverUri = getServerUri();
- return serverUri != null && serverUri.startsWith("ssl://");
+ return isTlsMqttScheme(getServerUri());
}
+ /** 涓� Paho 寤鸿繛 URI锛氬畬鏁村墠缂� mqtts/mqtt/wss/ws/ssl/tcp 鍘熸牱锛涗粎涓绘満鍚嶆椂榛樿 mqtts 鎴� mqtt銆� */
public String getServerUri() {
if (endpoint == null || endpoint.trim().length() == 0) {
return null;
}
String trimmed = endpoint.trim();
- if (trimmed.startsWith("ssl://") || trimmed.startsWith("tcp://")) {
+ if (hasExplicitBrokerScheme(trimmed)) {
return trimmed;
}
int resolvedPort = port == null ? 8883 : port;
- return "ssl://" + trimmed + ":" + resolvedPort;
+ String scheme = resolvedPort == 1883 ? "mqtt://" : "mqtts://";
+ return scheme + trimmed + ":" + resolvedPort;
+ }
+
+ private static boolean hasExplicitBrokerScheme(String s) {
+ String lower = s.toLowerCase(Locale.ROOT);
+ return lower.startsWith("mqtts://") || lower.startsWith("mqtt://")
+ || lower.startsWith("ssl://") || lower.startsWith("tcp://")
+ || lower.startsWith("wss://") || lower.startsWith("ws://");
+ }
+
+ private static boolean isTlsMqttScheme(String serverUri) {
+ if (serverUri == null || serverUri.isEmpty()) {
+ return false;
+ }
+ int p = serverUri.indexOf("://");
+ if (p <= 0) {
+ return false;
+ }
+ String scheme = serverUri.substring(0, p).toLowerCase(Locale.ROOT);
+ return "mqtts".equals(scheme) || "ssl".equals(scheme) || "wss".equals(scheme);
}
}
--
Gitblit v1.9.1