package com.ld.igds.door.service; import com.ld.igds.constant.RedisConst; import com.ld.igds.door.mapper.DoorSensorMapper; import com.ld.igds.models.DoorSensor; import com.ld.igds.util.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author vince.xu * @Title: CoreDoorSensorServiceImpl * @ProjectName igds-dev * @Description: 门磁 */ @Slf4j @Service(CoreDoorSensorService.BEAN_ID) public class CoreDoorSensorServiceImpl implements CoreDoorSensorService { @Autowired private DoorSensorMapper doorSensorMapper; @Autowired private RedisUtil redisUtil; @Override public void updateStatus(String sn, String status) { doorSensorMapper.updateStatus(sn,status); } @Override public void setCache(List list, String companyId) { if (null == list || list.isEmpty()) return; redisUtil.set( RedisConst.buildKey(companyId, RedisConst.KEY_DOOR_SENSOR_LIST), list); } @Override public void updateCache(DoorSensor data) { this.updateStatus(data.getSn(), data.getStatus()); List list = this.getCache(data.getCompanyId()); if(list == null){ list = new ArrayList<>(); list.add(data); this.setCache(list, data.getCompanyId()); return; } DoorSensor temp; for(int i = 0; i< list.size(); i++){ temp = list.get(i); if(temp.getSn().equals(data.getSn())){ list.set(i, data); break; } } this.setCache(list, data.getCompanyId()); } @Override public List getCache(String companyId, String deptId) { List data = getCache(companyId); if (null == data) return null; if (null == deptId) return null; return data.stream().filter(item -> item.getDeptId().equals(deptId)) .collect(Collectors.toList()); } @Override public DoorSensor getCacheBySn(String companyId, String sn) { List data = getCache(companyId); if (null == data) return null; if (null == sn) return null; return data.stream().filter(item -> sn.equals(item.getSn())) .findAny().orElse(null); } @SuppressWarnings("unchecked") @Override public List getCache(String companyId) { String key = RedisConst.buildKey(companyId, RedisConst.KEY_DOOR_SENSOR_LIST); List data = (List) redisUtil.get(key); if (null == data) { log.error("没有获取到缓存信息,KEY={}", key); } return data; } @Override public List getData(DoorSensor param) { return doorSensorMapper.getData(param); } @Override public List getDoorSensorList(DoorSensor param) { List list = this.getCache(param.getCompanyId(), param.getDeptId()); if(list == null){ return null; } if(StringUtils.isNotEmpty(param.getDepotId())){ return list.stream().filter(item -> item.getDepotId().equals(param.getDepotId())) .collect(Collectors.toList()); } return list; } }