电子秤设备&优化
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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("*");
|
||||
}
|
||||
}
|
||||
@@ -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 = "下载导入模板")
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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("线程已完全停止");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -225,6 +225,7 @@ auth:
|
||||
- /auth/user/info
|
||||
- /auth/logout
|
||||
- /system/user/password
|
||||
- /ws/scale
|
||||
|
||||
--- ### 服务器配置
|
||||
server:
|
||||
|
||||
Reference in New Issue
Block a user