From 6b1e076f25a6722b7a91e14e861e60c9b1aeae28 Mon Sep 17 00:00:00 2001 From: zzc <1278921369@qq.com> Date: Mon, 11 Nov 2024 23:49:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=AE=9E=E6=97=B6=E4=BC=A0=E8=BE=93=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E8=AE=BE=E5=A4=87=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/EqDeviceController.java | 40 ++++++++++++++++++- .../org/dromara/web/device/iot/DeviceDto.java | 5 +++ .../service/impl/EqEquipmentServiceImpl.java | 2 + 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java index 387f91049..e553a3f39 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java @@ -17,6 +17,8 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.common.websocket.dto.WebSocketMessageDto; +import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysDictTypeService; @@ -37,6 +39,8 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -53,7 +57,7 @@ public class EqDeviceController extends BaseController { private final HttpServletRequest request; - + private final ScheduledExecutorService scheduledExecutorService; private final IEqAreaService eqAreaService; @@ -294,5 +298,39 @@ public class EqDeviceController extends BaseController { eqEquipmentService.updateByBo(eqEquipmentBo); } + + /** + * 实时发送设备状态信息 + * 在设备状态变化的时候会实时推送设备信息到前端 + * @param eqEquipmentLogBo + */ + @SaIgnore + @PostMapping("/sendDeviceMsg") + public void sendDeviceMsg(@RequestBody EqEquipmentLogBo eqEquipmentLogBo){ + String equipmentName = eqEquipmentLogBo.getEquipmentName(); + //设备id查询 + DeviceByDeviceName deviceByNameDto = iotService.apiTenantDevicesByName(equipmentName);//无信息会抛异常 无需判断 + if (deviceByNameDto==null) throw new RuntimeException("设备不存在"); + String equipmentCode = deviceByNameDto.getId().getId(); + //设备查询 + EqEquipmentBo eqEquipmentBo = new EqEquipmentBo(); + eqEquipmentBo.setEquipmentCode(equipmentCode); + List eqEquipmentVos = eqEquipmentService.queryList(eqEquipmentBo); + if (CollectionUtils.isEmpty(eqEquipmentVos)) return; + EqEquipmentVo eqEquipmentVo = eqEquipmentVos.get(0); + EqAppHomeBo bo = new EqAppHomeBo(); + bo.setEquipmentId(eqEquipmentVo.getEquipmentId()); + bo.setEquipmentCode(eqEquipmentVo.getEquipmentCode()); + EqEquipmentDetailVo deviceMsg = eqEquipmentService.getDeviceMsg(bo); + + Long userId = eqEquipmentVo.getUserId(); + scheduledExecutorService.schedule(() -> { + WebSocketMessageDto dto = new WebSocketMessageDto(); + dto.setMessage(JSONObject.toJSONString(deviceMsg)); + dto.setSessionKeys(List.of(userId)); + WebSocketUtils.publishMessage(dto); + }, 3, TimeUnit.SECONDS); + } + } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceDto.java b/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceDto.java index c83ef6052..d070881af 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceDto.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceDto.java @@ -65,11 +65,13 @@ public class DeviceDto implements Serializable { @NoArgsConstructor @Data public static class Configuration { + private String type = "DEFAULT"; } @NoArgsConstructor @Data public static class TransportConfiguration { + private String type = "MQTT"; } } @@ -90,5 +92,8 @@ public class DeviceDto implements Serializable { @NoArgsConstructor @Data public static class AdditionalInfo { + private boolean gateway = false; + private boolean overwriteActivityTime = false; + private String description = ""; } } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java index 6ceed2477..cf7971a72 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java @@ -403,6 +403,8 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService { DeviceCredentials deviceCredentials = iotService.httpCredentials(equipmentCode); String assesToken = deviceCredentials.getCredentialsId(); //4拿到凭证修改设备 使用获取设备信息的类信息作为参数 + if (deviceDto.getFirmwareId()==null) deviceDto.setFirmwareId(new DeviceDto.FirmwareId()); + deviceDto.getFirmwareId().setEntityType("OTA_PACKAGE"); deviceDto.getFirmwareId().setId(deviceOtaPackages.getId().getId());//设置升级包id return iotService.httpPostUpdateOta(assesToken,deviceDto);