From c59df81b381dfd825a7717cf870f5eb16deb6aa2 Mon Sep 17 00:00:00 2001 From: zc Date: Thu, 5 Mar 2026 18:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E5=AD=90=E7=A7=A4=E8=AE=BE=E5=A4=87&?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/req/WorkOrderInfoReq.java | 66 +++++++++++++++++++ .../weighManage/model/req/WorkOrderReq.java | 12 ++-- .../weighManage/service/WorkOrderService.java | 8 +++ .../service/impl/WorkOrderServiceImpl.java | 9 +++ wms-webapi/.flattened-pom.xml | 10 +++ wms-webapi/pom.xml | 6 ++ .../wms/admin/config/webSocket/webSocket.java | 17 +++++ .../meterial/MaterialInfoController.java | 4 +- .../weighManage/WorkOrderController.java | 9 ++- .../weighManage/ah/AHDZCConnect.java | 40 +++++++---- .../weighManage/ah/ScaleWebSocketHandler.java | 43 ++++++++++++ .../src/main/resources/config/application.yml | 1 + 12 files changed, 204 insertions(+), 21 deletions(-) create mode 100644 wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderInfoReq.java create mode 100644 wms-webapi/src/main/java/top/wms/admin/config/webSocket/webSocket.java create mode 100644 wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/ScaleWebSocketHandler.java diff --git a/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderInfoReq.java b/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderInfoReq.java new file mode 100644 index 0000000..2afe457 --- /dev/null +++ b/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderInfoReq.java @@ -0,0 +1,66 @@ +package top.wms.admin.weighManage.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 创建或修改任务工单信息参数 + * + * @author zc + * @since 2026/03/03 17:09 + */ +@Data +@Schema(description = "创建或修改任务工单信息参数") +public class WorkOrderInfoReq implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 工单主键id + */ + @Schema(description = "工单主键id") + private Long workOrderId; + + /** + * 物料主键id + */ + @Schema(description = "物料主键id") + private Long materialId; + + /** + * 称重次数 + */ + @Schema(description = "称重次数") + private int weightTime; + + /** + * 物料数量 + */ + @Schema(description = "物料数量") + private BigDecimal quantity; + + /** + * 称重重量 + */ + @Schema(description = "称重重量") + private BigDecimal weight; + + /** + * 计算重量 + */ + @Schema(description = "计算重量") + private BigDecimal calculatedWeight; + + /** + * 抓拍的图片 + */ + @Schema(description = "抓拍的图片") + private String imgUrl; + +} \ No newline at end of file diff --git a/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderReq.java b/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderReq.java index 23298ab..cf8aa2f 100644 --- a/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderReq.java +++ b/wms-module-system/src/main/java/top/wms/admin/weighManage/model/req/WorkOrderReq.java @@ -10,6 +10,7 @@ import java.io.Serial; import java.io.Serializable; import java.time.*; import java.math.BigDecimal; +import java.util.List; /** * 创建或修改任务工单信息参数 @@ -25,23 +26,20 @@ public class WorkOrderReq implements Serializable { private static final long serialVersionUID = 1L; /** - * 总重量 + * 物料主键id */ - @Schema(description = "总重量") - @NotNull(message = "总重量不能为空") - private BigDecimal totalWeight; + @Schema(description = "物料主键id") + private Long materialId; /** * 创建人 */ @Schema(description = "创建人") - @NotNull(message = "创建人不能为空") - private Long createUser; + private List workOrderInfos; /** * 创建时间 */ @Schema(description = "创建时间") - @NotNull(message = "创建时间不能为空") private LocalDateTime createTime; } \ No newline at end of file diff --git a/wms-module-system/src/main/java/top/wms/admin/weighManage/service/WorkOrderService.java b/wms-module-system/src/main/java/top/wms/admin/weighManage/service/WorkOrderService.java index a62bf13..edb0994 100644 --- a/wms-module-system/src/main/java/top/wms/admin/weighManage/service/WorkOrderService.java +++ b/wms-module-system/src/main/java/top/wms/admin/weighManage/service/WorkOrderService.java @@ -23,4 +23,12 @@ public interface WorkOrderService extends BaseService getDetail(Long id); + +/** + * 创建任务工单 + * + * @param req 创建任务工单参数 + * @return 任务工单信息 + */ + WorkOrderResp addWorKerOrder(WorkOrderReq req); } \ No newline at end of file diff --git a/wms-module-system/src/main/java/top/wms/admin/weighManage/service/impl/WorkOrderServiceImpl.java b/wms-module-system/src/main/java/top/wms/admin/weighManage/service/impl/WorkOrderServiceImpl.java index 95425f4..291fe72 100644 --- a/wms-module-system/src/main/java/top/wms/admin/weighManage/service/impl/WorkOrderServiceImpl.java +++ b/wms-module-system/src/main/java/top/wms/admin/weighManage/service/impl/WorkOrderServiceImpl.java @@ -50,4 +50,13 @@ public class WorkOrderServiceImpl extends BaseServiceImplaws-java-sdk-s3 1.12.780 + + com.fazecast + jSerialComm + 2.9.2 + + + jakarta.websocket + jakarta.websocket-api + 2.1.0 + ${project.parent.name} diff --git a/wms-webapi/pom.xml b/wms-webapi/pom.xml index bac2344..5fcb322 100644 --- a/wms-webapi/pom.xml +++ b/wms-webapi/pom.xml @@ -74,6 +74,12 @@ 2.9.2 + + + jakarta.websocket + jakarta.websocket-api + 2.1.0 + diff --git a/wms-webapi/src/main/java/top/wms/admin/config/webSocket/webSocket.java b/wms-webapi/src/main/java/top/wms/admin/config/webSocket/webSocket.java new file mode 100644 index 0000000..4466b67 --- /dev/null +++ b/wms-webapi/src/main/java/top/wms/admin/config/webSocket/webSocket.java @@ -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("*"); + } +} \ No newline at end of file diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java b/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java index 051a665..d8b586a 100644 --- a/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java +++ b/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java @@ -43,8 +43,8 @@ import java.io.IOException; public class MaterialInfoController extends BaseController { @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 = "下载导入模板") diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/WorkOrderController.java b/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/WorkOrderController.java index 58485fd..e2f6d92 100644 --- a/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/WorkOrderController.java +++ b/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/WorkOrderController.java @@ -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 { @Log(ignore = true) @@ -38,4 +38,11 @@ public class WorkOrderController extends BaseController { 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("线程已完全停止"); } - -} +} \ No newline at end of file diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/ScaleWebSocketHandler.java b/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/ScaleWebSocketHandler.java new file mode 100644 index 0000000..cb78e62 --- /dev/null +++ b/wms-webapi/src/main/java/top/wms/admin/controller/weighManage/ah/ScaleWebSocketHandler.java @@ -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 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); + } + } + } + } +} diff --git a/wms-webapi/src/main/resources/config/application.yml b/wms-webapi/src/main/resources/config/application.yml index 41dce4a..8472465 100644 --- a/wms-webapi/src/main/resources/config/application.yml +++ b/wms-webapi/src/main/resources/config/application.yml @@ -225,6 +225,7 @@ auth: - /auth/user/info - /auth/logout - /system/user/password + - /ws/scale --- ### 服务器配置 server: