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());