package com.moral.api.service.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.moral.api.entity.Device; 
 | 
import com.moral.api.mapper.DeviceMapper; 
 | 
import com.moral.api.service.DeviceService; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
import com.moral.constant.Constants; 
 | 
import com.moral.constant.RedisConstants; 
 | 
import com.moral.util.DateUtils; 
 | 
  
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * <p> 
 | 
 * 设备表 服务实现类 
 | 
 * </p> 
 | 
 * 
 | 
 * @author moral 
 | 
 * @since 2021-06-22 
 | 
 */ 
 | 
@Service 
 | 
public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService { 
 | 
  
 | 
    @Autowired 
 | 
    private DeviceMapper deviceMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate redisTemplate; 
 | 
  
 | 
    @Override 
 | 
    public void judgeOffLineDevice() { 
 | 
        QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.ne("state", Constants.DEVICE_STATE_OFFLINE); 
 | 
        queryWrapper.eq("is_delete",Constants.NOT_DELETE); 
 | 
        //获取所有在线设备 
 | 
        List<Device> devices = deviceMapper.selectList(queryWrapper); 
 | 
        for (Device device : devices) { 
 | 
            Map<String, Object> data = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DATA_SECOND, device.getMac()); 
 | 
            device.setState(Constants.DEVICE_STATE_OFFLINE); 
 | 
            if (data != null && data.containsKey("DataTime")) { 
 | 
                Date time = DateUtils.getDate((String) data.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN); 
 | 
                //超过两分钟无数据就离线 
 | 
                if (DateUtils.getDateOfMin(time, 2).getTime() < new Date().getTime()) { 
 | 
                    updateDeviceState(device); 
 | 
                } 
 | 
            } else { 
 | 
                updateDeviceState(device); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public void updateDeviceState(Device device) { 
 | 
        UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); 
 | 
        updateWrapper.eq("id", device.getId()).set("state", device.getState()); 
 | 
        deviceMapper.update(null, updateWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Device> getDateByOrgId(int orgId) { 
 | 
        QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); 
 | 
        wrapper_device.eq("is_delete",Constants.NOT_DELETE).eq("organization_id",orgId); 
 | 
        List<Device> devices = new ArrayList<>(); 
 | 
        devices = deviceMapper.selectList(wrapper_device); 
 | 
        return devices; 
 | 
    } 
 | 
} 
 |