
com.zhuang.mica.mqtt.module.device.service.MyDeviceService Maven / Gradle / Ivy
The newest version!
package com.zhuang.mica.mqtt.module.device.service;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.zhuang.mica.mqtt.model.FunctionMessage;
import com.zhuang.mica.mqtt.model.FunctionReplyMessage;
import com.zhuang.mica.mqtt.model.PingReqMsg;
import com.zhuang.mica.mqtt.module.device.entity.SysDeviceFunctionLog;
import com.zhuang.mica.mqtt.module.device.entity.SysDevice;
import com.zhuang.mica.mqtt.service.DeviceService;
import com.zhuang.mica.mqtt.util.JacksonUtils;
import com.zhuang.mica.mqtt.util.MqttCacheUtils;
import com.zhuang.mica.mqtt.util.cache.CacheUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
// @Component
public class MyDeviceService implements DeviceService {
@Autowired
private SysDeviceService sysDeviceService;
@Autowired
private SysDeviceFunctionLogService sysDeviceFunctionLogService;
/**
* 更新设备在线状态
*/
public void refreshOnline() {
List deviceList = sysDeviceService.getEnabledList();
List deviceList4Online = deviceList.stream().filter(c -> c.getOnline().equals(1)).collect(Collectors.toList());
for (SysDevice device : deviceList4Online) {
PingReqMsg pingReqMsg = CacheUtils.getObject(MqttCacheUtils.getLastPingReqCacheKeyByDeviceId(device.getDeviceId()), PingReqMsg.class);
Date now = new Date();
// 超过半个小时没有心跳包则更新为离线状态
if (pingReqMsg == null || DateUtil.between(pingReqMsg.getTimestamp(), now, DateUnit.MINUTE) > 30L) {
sysDeviceService.updateOnlineByDeviceId(device.getDeviceId(), false);
}
}
}
@Override
public boolean login(String deviceId, String username, String password) {
return sysDeviceService.login(deviceId, username, password);
}
@Override
public void updateOnline(String deviceId, boolean online) {
sysDeviceService.updateOnlineByDeviceId(deviceId, online);
}
@Override
public void addFunctionLog(String deviceId, String message, boolean isReply) {
if (!isReply) {
FunctionMessage functionMessage = JacksonUtils.toBean(message, FunctionMessage.class);
SysDeviceFunctionLog sysDeviceFunctionLog = new SysDeviceFunctionLog();
sysDeviceFunctionLog.setDeviceId(deviceId);
sysDeviceFunctionLog.setFunctionId(functionMessage.getMessageId());
sysDeviceFunctionLog.setFunctionName(functionMessage.getFunctionId());
sysDeviceFunctionLog.setSendValue(message);
sysDeviceFunctionLog.setSendTime(new Date());
sysDeviceFunctionLogService.save(sysDeviceFunctionLog);
} else {
FunctionReplyMessage functionReplyMessage = JacksonUtils.toBean(message, FunctionReplyMessage.class);
SysDeviceFunctionLog sysDeviceFunctionLog = sysDeviceFunctionLogService.getByFunctionId(functionReplyMessage.getMessageId());
if (sysDeviceFunctionLog != null) {
SysDeviceFunctionLog updateArgs = new SysDeviceFunctionLog();
updateArgs.setId(sysDeviceFunctionLog.getId());
updateArgs.setReplyResult(functionReplyMessage.getSuccess() == true ? 1 : 0);
updateArgs.setReplyValue(message);
updateArgs.setReplyTime(new Date());
sysDeviceFunctionLogService.updateById(updateArgs);
} else {
log.error(StrUtil.format("MyDeviceService.addFunctionLog sysDeviceFunctionLog is null! -> mid={}", functionReplyMessage.getMessageId()));
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy