电子秤设备&优化

This commit is contained in:
zc
2026-03-05 18:13:39 +08:00
parent 66449b0482
commit c59df81b38
12 changed files with 204 additions and 21 deletions

View File

@@ -53,6 +53,16 @@
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.780</version>
</dependency>
<dependency>
<groupId>com.fazecast</groupId>
<artifactId>jSerialComm</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>jakarta.websocket</groupId>
<artifactId>jakarta.websocket-api</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>
<finalName>${project.parent.name}</finalName>

View File

@@ -74,6 +74,12 @@
<version>2.9.2</version>
</dependency>
<!-- pom.xml -->
<dependency>
<groupId>jakarta.websocket</groupId>
<artifactId>jakarta.websocket-api</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>

View File

@@ -0,0 +1,17 @@
package top.wms.admin.config.webSocket;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import top.wms.admin.controller.weighManage.ah.ScaleWebSocketHandler;
@Configuration
@EnableWebSocket
public class webSocket implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
// 注册WebSocket端点允许所有跨域请求
registry.addHandler(new ScaleWebSocketHandler(), "/ws/scale").setAllowedOrigins("*");
}
}

View File

@@ -43,8 +43,8 @@ import java.io.IOException;
public class MaterialInfoController extends BaseController<MaterialInfoService, MaterialInfoResp, MaterialInfoResp, MaterialInfoQuery, MaterialInfoReq> {
@GetMapping("/code/{code}")
public MaterialInfoDO getMaterialInfoByCode(@PathVariable String code) {
return baseService.getMaterialInfoByCode(code);
public MaterialInfoDO getMaterialInfoByCode(@PathVariable String code) {
return baseService.getMaterialInfoByCode(code);
}
@Operation(summary = "下载导入模板", description = "下载导入模板")

View File

@@ -28,7 +28,7 @@ import java.util.List;
@Tag(name = "任务工单信息管理 API")
@RestController
@RequiredArgsConstructor
@CrudRequestMapping(value = "/weighManage/workOrder", api = {Api.PAGE, Api.ADD, Api.DELETE, Api.EXPORT})
@CrudRequestMapping(value = "/weighManage/workOrder", api = {Api.PAGE, Api.DELETE, Api.EXPORT})
public class WorkOrderController extends BaseController<WorkOrderService, WorkOrderResp, WorkOrderResp, WorkOrderQuery, WorkOrderReq> {
@Log(ignore = true)
@@ -38,4 +38,11 @@ public class WorkOrderController extends BaseController<WorkOrderService, WorkOr
return baseService.getDetail(id);
}
@SaCheckPermission("workOrder:record:add")
@PostMapping
public WorkOrderResp addWorKerOrder(@RequestBody WorkOrderReq req) {
return baseService.addWorKerOrder(req);
}
}

View File

@@ -3,11 +3,11 @@ package top.wms.admin.controller.weighManage.ah;
import com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import java.nio.charset.Charset;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -15,6 +15,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 安衡电子秤连接类
@@ -47,8 +49,6 @@ public class AHDZCConnect {
private ScheduledExecutorService executorService;
@PostConstruct
public void init() {
// 项目启动时初始化并启动服务
@@ -62,7 +62,6 @@ public class AHDZCConnect {
stop();
}
public void ScaleService() {
executorService = Executors.newScheduledThreadPool(2, r -> {
Thread t = new Thread(r, "ScaleService-Worker");
@@ -189,7 +188,29 @@ public class AHDZCConnect {
if (numRead > 0) {
lastDataTime.set(System.currentTimeMillis());
String data = new String(readBuffer, 0, numRead, SCALE_CHARSET);
log.info("[数据] {}", data.trim());
// 解析数据,提取数字和重量单位
String weightStr = data.trim();
// 使用正则表达式提取数字和重量单位
Pattern pattern = java.util.regex.Pattern.compile("[-+]?\\d*\\.?\\d+\\s*[a-zA-Z]*");
Matcher matcher = pattern.matcher(weightStr);
if (matcher.find()) {
try {
String weightWithUnit = matcher.group().trim();
log.info("[解析后] 重量: {}", weightWithUnit);
// 发送提取的数字和重量单位给前端
ScaleWebSocketHandler.sendMessage(weightWithUnit);
} catch (NumberFormatException e) {
log.error("[解析异常] 无法解析重量数据: {}", e.getMessage());
// 发送原始数据作为备选
ScaleWebSocketHandler.sendMessage("电子秤异常: " + weightStr);
}
} else {
log.warn("[解析警告] 未找到重量数据: {}", weightStr);
// 发送原始数据作为备选
ScaleWebSocketHandler.sendMessage("电子秤异常: " + weightStr);
}
}
} catch (Exception e) {
log.error("[读取异常] {}", e.getMessage());
@@ -219,7 +240,7 @@ public class AHDZCConnect {
}
boolean isOpen = port.isOpen();
log.error("[健康检查] 串口状态: {}", isOpen ? "已打开" : "已关闭");
// log.error("[健康检查] 串口状态: {}", isOpen ? "已打开" : "已关闭");
if (!isOpen) {
log.info("[健康检查] 检测到串口关闭,尝试重连...");
@@ -253,8 +274,6 @@ public class AHDZCConnect {
if (bytesAvailable < 0) {
log.info("[连接监控] 检测到连接已断开,尝试重连...");
triggerReconnect();
} else {
log.error("[连接监控] 超时无数据,但连接正常,等待数据...");
}
} catch (Exception e) {
log.error("[连接监控] 检测到连接异常: {}", e.getMessage());
@@ -303,5 +322,4 @@ public class AHDZCConnect {
log.info("线程已完全停止");
}
}
}

View File

@@ -0,0 +1,43 @@
package top.wms.admin.controller.weighManage.ah;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
@Slf4j
public class ScaleWebSocketHandler extends TextWebSocketHandler {
// 线程安全的连接集合
private static final CopyOnWriteArraySet<WebSocketSession> sessions = new CopyOnWriteArraySet<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
log.info("客户端连接成功,当前连接数: {}", sessions.size());
}
@Override
public void afterConnectionClosed(WebSocketSession session,
org.springframework.web.socket.CloseStatus status) throws Exception {
sessions.remove(session);
log.info("客户端断开连接,当前连接数: {}", sessions.size());
}
/**
* 发送数据给所有连接的客户端
*/
public static void sendMessage(String message) {
for (WebSocketSession session : sessions) {
if (session.isOpen()) {
try {
session.sendMessage(new TextMessage(message));
} catch (IOException e) {
log.error("发送消息失败", e);
}
}
}
}
}

View File

@@ -225,6 +225,7 @@ auth:
- /auth/user/info
- /auth/logout
- /system/user/password
- /ws/scale
--- ### 服务器配置
server: