添加设备信息实时传输接口 修改设备更新接口

This commit is contained in:
zzc 2024-11-11 23:49:06 +08:00
parent 231ece98e5
commit 6b1e076f25
3 changed files with 46 additions and 1 deletions

View File

@ -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<EqEquipmentVo> 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);
}
}

View File

@ -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 = "";
}
}

View File

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