From e4235e197b065b22eaf415ad2f453a722be8c5da Mon Sep 17 00:00:00 2001 From: dzq Date: Thu, 15 May 2025 10:03:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E6=9F=9C=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3=E5=8F=8AMQTT?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E5=A4=8D=E7=94=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增智能柜详情接口,支持通过ID获取智能柜详细信息 - 添加MQTT连接复用逻辑,避免重复创建相同连接的客户端实例 - 新增CabinetTemplateEnum枚举类,定义智能柜模板类型 --- .../cabinet/SmartCabinetController.java | 8 +++++ .../smartCabinet/CabinetTemplateEnum.java | 34 +++++++++++++++++++ .../SmartCabinetApplicationService.java | 20 +++++++++++ .../agileboot/domain/mqtt/MqttService.java | 18 ++++++++++ 4 files changed, 80 insertions(+) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/CabinetTemplateEnum.java diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/SmartCabinetController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/SmartCabinetController.java index 04c3f48..47057b7 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/SmartCabinetController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/SmartCabinetController.java @@ -5,6 +5,7 @@ import com.agileboot.common.core.base.BaseController; import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.page.PageDTO; import com.agileboot.common.enums.common.BusinessTypeEnum; +import com.agileboot.domain.ab98.user.dto.Ab98UserDetailDTO; import com.agileboot.domain.cabinet.cell.CabinetCellApplicationService; import com.agileboot.domain.cabinet.cell.dto.CabinetCellDTO; import com.agileboot.domain.cabinet.smartCabinet.dto.AllCabinetDataDTO; @@ -46,6 +47,13 @@ public class SmartCabinetController extends BaseController { return ResponseDTO.ok(page); } + @Operation(summary = "智能柜详情") + @GetMapping("/detail/{cabinetId}") + public ResponseDTO detail(@PathVariable Long cabinetId) { + SmartCabinetDTO smartCabinetDTO = smartCabinetApplicationService.getSmartCabinetById(cabinetId); + return ResponseDTO.ok(smartCabinetDTO); + } + @Operation(summary = "新增智能柜") @AccessLog(title = "智能柜管理", businessType = BusinessTypeEnum.ADD) @PostMapping diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/CabinetTemplateEnum.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/CabinetTemplateEnum.java new file mode 100644 index 0000000..8df152b --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/CabinetTemplateEnum.java @@ -0,0 +1,34 @@ +package com.agileboot.domain.cabinet.smartCabinet; + +public enum CabinetTemplateEnum { + CABINET_16(1, "cabinet_16.jpg", "16口机柜"), + CABINET_20(2, "cabinet_20.jpg", "20口机柜"), + CABINET_22(3, "cabinet_22.jpg", "22口机柜"), + CABINET_24(4, "cabinet_24.jpg", "24口机柜"), + CABINET_40(5, "cabinet_40.jpg", "40口机柜"), + CABINET_48(6, "cabinet_48.jpg", "48口机柜"), + CABINET_60(7, "cabinet_60.jpg", "60口机柜"), + CABINET_120(8, "cabinet_120.jpg", "120口机柜"); + + private final int code; + private final String img; + private final String name; + + CabinetTemplateEnum(int code, String img, String name) { + this.code = code; + this.img = img; + this.name = name; + } + + public int getCode() { + return code; + } + + public String getImg() { + return img; + } + + public String getName() { + return name; + } +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java index 544e9f5..4727838 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java @@ -53,6 +53,26 @@ public class SmartCabinetApplicationService { return new PageDTO<>(dtoList, page.getTotal()); } + public SmartCabinetDTO getSmartCabinetById(Long cabinetId) { + SmartCabinetEntity cabinet = smartCabinetService.getById(cabinetId); + SmartCabinetDTO dto = new SmartCabinetDTO(cabinet); + + List shopEntities = shopService.selectAll(); + dto.setShopName( + shopEntities.stream() + .filter(shop -> shop.getShopId().equals(dto.getShopId())) + .findFirst() + .map(ShopEntity::getShopName) + .orElse("") + ); + + SmartCabinetEntity mainCabinet = smartCabinetService.getByCabinetId(cabinet.getMainCabinet()); + if (mainCabinet!= null) { + dto.setMainCabinetName(mainCabinet.getCabinetName()); + } + return dto; + } + public void addSmartCabinet(AddSmartCabinetCommand command) { SmartCabinetModel model = smartCabinetModelFactory.create(); model.loadAddCommand(command); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java b/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java index 953b29f..00db632 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java @@ -25,6 +25,12 @@ public class MqttService implements MqttCallback { private static class ClientConfig { private final MqttClient client; private final MqttServerEntity config; + + public boolean isSameConnection(MqttServerEntity other) { + return config.getServerUrl().equals(other.getServerUrl()) + && config.getUsername().equals(other.getUsername()) + && config.getPassword().equals(other.getPassword()); + } } @@ -51,6 +57,18 @@ public class MqttService implements MqttCallback { public void connect() throws MqttException { for (MqttServerEntity config : mqttServerService.selectAll()) { + // 检查是否已有相同连接的client实例 + ClientConfig existingConfig = clientConfigs.stream() + .filter(cc -> cc.isSameConnection(config)) + .findFirst() + .orElse(null); + + if (existingConfig != null) { + log.info("复用已有MQTT连接:{} 账号:{}", config.getServerUrl(), config.getUsername()); + clientConfigs.add(new ClientConfig(existingConfig.client, config)); + continue; + } + MqttClient client = new MqttClient(config.getServerUrl(), MqttClient.generateClientId(), new MemoryPersistence()); MqttConnectOptions options = new MqttConnectOptions(); options.setUserName(config.getUsername());