Commit 084b73d277f5407186deaabb733c2eb34fd7d5e0
1 parent
a399fc10
```
feat(mqtt-core): 增加厂商枚举主题配置和自动订阅功能 - 为FirmEnum添加topics字段,支持关联TopicType集合 - 添加TopicType枚举定义在线服务和回执服务主题 - 实现TopicInit初始化类,系统启动时自动订阅厂商对应的主题 - 在PrintDeviceService接口中增加SN查询和厂商存在性检查方法 - 重构ReceiveEventType的matchEventType方法,使用Optional优化代码 - 新增isFirmExist方法用于检查厂商是否存在 ```
Showing
5 changed files
with
81 additions
and
11 deletions
mqtt-core/src/main/java/com/diligrp/mqtt/core/init/TopicInit.java
0 → 100644
| 1 | +package com.diligrp.mqtt.core.init; | |
| 2 | + | |
| 3 | +import com.diligrp.mqtt.core.service.MqttTopicService; | |
| 4 | +import com.diligrp.mqtt.core.service.PrintDeviceService; | |
| 5 | +import com.diligrp.mqtt.core.type.FirmEnum; | |
| 6 | +import jakarta.annotation.Resource; | |
| 7 | +import org.springframework.boot.ApplicationArguments; | |
| 8 | +import org.springframework.boot.ApplicationRunner; | |
| 9 | +import org.springframework.stereotype.Component; | |
| 10 | + | |
| 11 | +import java.util.Arrays; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * @Author: zhangmeiyang | |
| 15 | + * @CreateTime: 2026-01-15 15:16 | |
| 16 | + * @Version: todo | |
| 17 | + */ | |
| 18 | +@Component | |
| 19 | +public class TopicInit implements ApplicationRunner { | |
| 20 | + | |
| 21 | + @Resource | |
| 22 | + private PrintDeviceService printDeviceService; | |
| 23 | + | |
| 24 | + @Resource | |
| 25 | + private MqttTopicService mqttTopicService; | |
| 26 | + | |
| 27 | + | |
| 28 | + @Override | |
| 29 | + public void run(ApplicationArguments args) throws Exception { | |
| 30 | + Arrays.stream(FirmEnum.values()) | |
| 31 | + .filter(f -> printDeviceService.isFirmExist(f.code)) | |
| 32 | + .forEach(t -> t.topics.forEach(topic -> mqttTopicService.subscribeTopic(topic.value, topic.qos))); | |
| 33 | + } | |
| 34 | +} | ... | ... |
mqtt-core/src/main/java/com/diligrp/mqtt/core/service/PrintDeviceService.java
| ... | ... | @@ -10,8 +10,20 @@ import org.springframework.stereotype.Service; |
| 10 | 10 | public interface PrintDeviceService { |
| 11 | 11 | |
| 12 | 12 | |
| 13 | + /** | |
| 14 | + * SN 查询 | |
| 15 | + * | |
| 16 | + * @param sn | |
| 17 | + * @return {@link PrintDeviceDto } | |
| 18 | + */ | |
| 13 | 19 | PrintDeviceDto queryBySn(String sn); |
| 14 | 20 | |
| 21 | + /** | |
| 22 | + * 是确定存在 | |
| 23 | + * | |
| 24 | + * @param firm 公司 | |
| 25 | + * @return {@link Boolean } | |
| 26 | + */ | |
| 15 | 27 | Boolean isFirmExist(String firm); |
| 16 | 28 | |
| 17 | 29 | ... | ... |
mqtt-core/src/main/java/com/diligrp/mqtt/core/type/FirmEnum.java
| 1 | 1 | package com.diligrp.mqtt.core.type; |
| 2 | 2 | |
| 3 | -import lombok.Getter; | |
| 3 | +import java.util.Set; | |
| 4 | 4 | |
| 5 | 5 | /** |
| 6 | 6 | * @author lvqi |
| 7 | 7 | */ |
| 8 | -@Getter | |
| 9 | 8 | public enum FirmEnum { |
| 10 | - CLOUD("cloud", "云打印"); | |
| 9 | + CLOUD("cloud", "云打印", Set.of(TopicType.PRINTER_ONLINE_SERVICE, TopicType.PRINTER_RECEIPT_SERVICE)); | |
| 11 | 10 | |
| 12 | - private final String code; | |
| 13 | - private final String name; | |
| 11 | + public final String code; | |
| 12 | + public final String name; | |
| 13 | + public final Set<TopicType> topics; | |
| 14 | 14 | |
| 15 | - FirmEnum(String code, String name) { | |
| 15 | + FirmEnum(String code, String name, Set<TopicType> topics) { | |
| 16 | 16 | this.code = code; |
| 17 | 17 | this.name = name; |
| 18 | + this.topics = topics; | |
| 18 | 19 | } |
| 19 | 20 | |
| 20 | 21 | |
| 21 | - | |
| 22 | 22 | } | ... | ... |
mqtt-core/src/main/java/com/diligrp/mqtt/core/type/ReceiveEventType.java
| 1 | 1 | package com.diligrp.mqtt.core.type; |
| 2 | 2 | |
| 3 | -import java.util.Objects; | |
| 3 | +import java.util.Optional; | |
| 4 | 4 | |
| 5 | 5 | public enum ReceiveEventType { |
| 6 | 6 | PRINTER_RECEIPT_SERVICE("/printSucc/"), |
| ... | ... | @@ -19,9 +19,18 @@ public enum ReceiveEventType { |
| 19 | 19 | * @return 匹配的事件类型,未匹配成功则返回null |
| 20 | 20 | */ |
| 21 | 21 | public static ReceiveEventType matchEventType(String topic) { |
| 22 | - if (Objects.isNull(topic)) { | |
| 23 | - return UNKNOWN_SERVICE; | |
| 24 | - } | |
| 22 | + return Optional.ofNullable(topic) | |
| 23 | + .map(ReceiveEventType::of) | |
| 24 | + .orElse(UNKNOWN_SERVICE); | |
| 25 | + } | |
| 26 | + | |
| 27 | + /** | |
| 28 | + * 关于 | |
| 29 | + * | |
| 30 | + * @param topic 主题 | |
| 31 | + * @return {@link ReceiveEventType } | |
| 32 | + */ | |
| 33 | + public static ReceiveEventType of(String topic) { | |
| 25 | 34 | for (ReceiveEventType eventType : ReceiveEventType.values()) { |
| 26 | 35 | if (topic.startsWith(eventType.value)) { |
| 27 | 36 | return eventType; | ... | ... |
mqtt-core/src/main/java/com/diligrp/mqtt/core/type/TopicType.java
0 → 100644
| 1 | +package com.diligrp.mqtt.core.type; | |
| 2 | + | |
| 3 | +public enum TopicType { | |
| 4 | + | |
| 5 | + PRINTER_ONLINE_SERVICE("/priGoOnline/#", 1), | |
| 6 | + PRINTER_RECEIPT_SERVICE("/printSucc/#", 1); | |
| 7 | + | |
| 8 | + public final String value; | |
| 9 | + public final int qos; | |
| 10 | + | |
| 11 | + TopicType(String value, int qos) { | |
| 12 | + this.value = value; | |
| 13 | + this.qos = qos; | |
| 14 | + } | |
| 15 | +} | ... | ... |