package com.moral.api.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.Device; import com.moral.api.entity.Sensor; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.SensorMapper; import com.moral.api.service.SensorService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author moral * @since 2021-06-28 */ @Service public class SensorServiceImpl extends ServiceImpl implements SensorService { @Autowired SensorMapper sensorMapper; @Autowired RedisTemplate redisTemplate; @Autowired private DeviceMapper deviceMapper; @Override public Sensor getSensorByCode(String code) { Sensor sensor = (Sensor) redisTemplate.opsForHash().get(RedisConstants.SENSOR_KEY, code); if(sensor==null) sensor = getSensorByCodeFromDb(code); return sensor; } @Override public List> getSensorsByMonitorPointIds(Map map) { String monitorPointIdsStr = map.get("monitorPointIds").toString(); String[] monitorPointIdsArr = monitorPointIdsStr.split(","); List monitorPointIdsList = Arrays.asList(monitorPointIdsArr); QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); deviceQueryWrapper.eq("is_delete", Constants.NOT_DELETE); deviceQueryWrapper.in("monitor_point_id", monitorPointIdsList); List devices = deviceMapper.selectList(deviceQueryWrapper); List versionIds = devices.stream().map(Device::getDeviceVersionId).collect(Collectors.toList()); versionIds = versionIds.stream().distinct().collect(Collectors.toList()); List> sensors = sensorMapper.getSensorByVersionIds(versionIds); return sensors; } private Sensor getSensorByCodeFromDb(String code) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("code",code); wrapper.eq("is_delete", Constants.NOT_DELETE); Sensor sensor = sensorMapper.selectOne(wrapper); redisTemplate.opsForHash().put(RedisConstants.SENSOR_KEY, code,sensor); return sensor; } }