|  |  | 
 |  |  | 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; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * <p> | 
 |  |  | 
 |  |  | @Service | 
 |  |  | public class SensorServiceImpl extends ServiceImpl<SensorMapper, Sensor> 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<Map<String, Object>> getSensorsByMonitorPointIds(Map map) { | 
 |  |  |         String monitorPointIdsStr = map.get("monitorPointIds").toString(); | 
 |  |  |         String[] monitorPointIdsArr = monitorPointIdsStr.split(","); | 
 |  |  |         List<String> monitorPointIdsList = Arrays.asList(monitorPointIdsArr); | 
 |  |  |         QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>(); | 
 |  |  |         deviceQueryWrapper.eq("is_delete", Constants.NOT_DELETE); | 
 |  |  |         deviceQueryWrapper.in("monitor_point_id", monitorPointIdsList); | 
 |  |  |         List<Device> devices = deviceMapper.selectList(deviceQueryWrapper); | 
 |  |  |         List<Integer> versionIds = devices.stream().map(Device::getDeviceVersionId).collect(Collectors.toList()); | 
 |  |  |         versionIds = versionIds.stream().distinct().collect(Collectors.toList()); | 
 |  |  |         List<Map<String, Object>> sensors = sensorMapper.getSensorByVersionIds(versionIds); | 
 |  |  |         return sensors; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private Sensor getSensorByCodeFromDb(String code) { | 
 |  |  |         QueryWrapper<Sensor> 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; | 
 |  |  |     } | 
 |  |  | } |