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