diff --git a/src/main/java/com/qyft/gd/device/Listener/LiquidTrayStatusChangedListener.java b/src/main/java/com/qyft/gd/device/Listener/LiquidTrayStatusChangedListener.java new file mode 100644 index 0000000..91386c7 --- /dev/null +++ b/src/main/java/com/qyft/gd/device/Listener/LiquidTrayStatusChangedListener.java @@ -0,0 +1,35 @@ +package com.qyft.gd.device.Listener; + +import com.qyft.gd.device.event.LiquidTrayStatusChangedEvent; +import com.qyft.gd.device.model.bo.DeviceStatus; +import com.qyft.gd.device.service.DeviceOperationalService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class LiquidTrayStatusChangedListener { + private final DeviceOperationalService deviceOperationalService; + + @EventListener + @Async + public void handleDeviceStatusChanged(LiquidTrayStatusChangedEvent event) { + DeviceStatus deviceStatus = event.getDeviceStatus(); + // 在这里处理设备状态变化的逻辑 + if (deviceStatus.getDoorStatus()) {//开门 + if (deviceStatus.getLiquidArea().getLiquidTray()) { + //放入了托盘 + log.info("用户放入了托盘"); + deviceOperationalService.putTray(); + } else { + //取走了托盘 + log.info("用户取走了托盘"); + deviceOperationalService.removeTray(); + } + } + } +} diff --git a/src/main/java/com/qyft/gd/device/event/LiquidTrayStatusChangedEvent.java b/src/main/java/com/qyft/gd/device/event/LiquidTrayStatusChangedEvent.java new file mode 100644 index 0000000..5679532 --- /dev/null +++ b/src/main/java/com/qyft/gd/device/event/LiquidTrayStatusChangedEvent.java @@ -0,0 +1,19 @@ +package com.qyft.gd.device.event; + +import com.qyft.gd.device.model.bo.DeviceStatus; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 加液区托盘状态发生变化事件 + */ +@Getter +public class LiquidTrayStatusChangedEvent extends ApplicationEvent { + private final DeviceStatus deviceStatus; + + public LiquidTrayStatusChangedEvent(Object source, DeviceStatus deviceStatus) { + super(source); + this.deviceStatus = deviceStatus; + } + +} diff --git a/src/main/java/com/qyft/gd/device/model/bo/DeviceOperationalStatus.java b/src/main/java/com/qyft/gd/device/model/bo/DeviceOperationalStatus.java index 3551875..bc6afac 100644 --- a/src/main/java/com/qyft/gd/device/model/bo/DeviceOperationalStatus.java +++ b/src/main/java/com/qyft/gd/device/model/bo/DeviceOperationalStatus.java @@ -17,7 +17,7 @@ public class DeviceOperationalStatus { */ @Data static class Tray { - @Schema(description = "所在加热区id") + @Schema(description = "所属加热区id") private Long heatId; @Schema(description = "是否在加液区") private boolean isSolutionArea; diff --git a/src/main/java/com/qyft/gd/device/service/DeviceOperationalService.java b/src/main/java/com/qyft/gd/device/service/DeviceOperationalService.java new file mode 100644 index 0000000..e4f02e2 --- /dev/null +++ b/src/main/java/com/qyft/gd/device/service/DeviceOperationalService.java @@ -0,0 +1,29 @@ +package com.qyft.gd.device.service; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 设备业务操作处理服务 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DeviceOperationalService { + private final DeviceStatusService deviceStatusService; + + /** + * 用户取走托盘处理 + */ + public void removeTray(){ + + } + + /** + * 用户放入托盘处理 + */ + public void putTray(){ + + } +} diff --git a/src/main/java/com/qyft/gd/device/service/DeviceStatusService.java b/src/main/java/com/qyft/gd/device/service/DeviceStatusService.java index 0b52074..2e21f63 100644 --- a/src/main/java/com/qyft/gd/device/service/DeviceStatusService.java +++ b/src/main/java/com/qyft/gd/device/service/DeviceStatusService.java @@ -1,18 +1,25 @@ package com.qyft.gd.device.service; import cn.hutool.core.bean.BeanUtil; +import com.qyft.gd.device.event.LiquidTrayStatusChangedEvent; import com.qyft.gd.device.model.bo.DeviceOperationalStatus; import com.qyft.gd.device.model.bo.DeviceStatus; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; /** * 设备传感器状态推送 */ +@Slf4j @Service @RequiredArgsConstructor public class DeviceStatusService { + private final ApplicationEventPublisher eventPublisher; + /** * 设备运行状态 */ @@ -22,13 +29,22 @@ public class DeviceStatusService { * 更新设备业务操作状态 */ @Getter - private final DeviceOperationalStatus deviceOperationalStatus = new DeviceOperationalStatus(); + public DeviceOperationalStatus deviceOperationalStatus = new DeviceOperationalStatus(); /** * 更新设备状态 */ public void updateDeviceStatus(DeviceStatus newStatus) { synchronized (deviceStatus) { + try { + if (deviceStatus.getLiquidArea() != null) { + if (deviceStatus.getLiquidArea().getLiquidTray() != newStatus.getLiquidArea().getLiquidTray()) { + eventPublisher.publishEvent(new LiquidTrayStatusChangedEvent(this, BeanUtil.copyProperties(newStatus, DeviceStatus.class))); + } + } + } catch (Exception ignored) { + } + BeanUtil.copyProperties(newStatus, deviceStatus); } } diff --git a/src/main/java/com/qyft/gd/system/config/AsyncConfig.java b/src/main/java/com/qyft/gd/system/config/AsyncConfig.java new file mode 100644 index 0000000..3d6af36 --- /dev/null +++ b/src/main/java/com/qyft/gd/system/config/AsyncConfig.java @@ -0,0 +1,9 @@ +package com.qyft.gd.system.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; + +@Configuration +@EnableAsync +public class AsyncConfig { +}