All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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