package com.ld.igds.oa.service; import com.ld.igds.constant.RedisConst; import com.ld.igds.models.OAGps; import com.ld.igds.oa.dto.AssetData; import com.ld.igds.oa.dto.GpsData; import com.ld.igds.oa.dto.GpsLocationData; import com.ld.igds.oa.mapper.GpsServiceMapper; import com.ld.igds.oa.service.CoreGpsService; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; @Slf4j @Component public class CoreGpsServiceImpl implements CoreGpsService { @Autowired private GpsServiceMapper gpsServiceMapper; @Autowired private RedisUtil redisUtil; @Override public void updateGps(GpsData data) { //更新设备信息 int i = gpsServiceMapper.updateGps(data); //若i等于0说明此设备不存在,进行新增设备 if (i == 0) { data.setId(ContextUtil.getCurTimeMillis()); gpsServiceMapper.addGps(data); } } @Override public GpsData getGpsByPhone(String phone) { return gpsServiceMapper.getGpsByPhone(phone); } @Override public void updateGpsStatus(String address, Integer port, String status) { gpsServiceMapper.updateGpsStatus(address, port, status); } @Override public Map updateCacheListGpsData(GpsData data) { Map mapList = this.cacheListGpsData(data .getCompanyId()); if (null == mapList) { mapList = new HashMap(); } mapList.put(data.getPhone(), data); String key = RedisConst.buildKey(data.getCompanyId(), "KEY_GPS_DATA"); redisUtil.set(key, mapList); return mapList; } @SuppressWarnings("unchecked") @Override public Map cacheListGpsData(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getDefaultCompanyId(); } String key = RedisConst.buildKey(companyId, "KEY_GPS_DATA"); Map result = (Map) redisUtil.get(key); if (null == result) { log.error("当前KEY={}没有获取到数据!", key); } return result; } @Override public Map updateCacheLocationData(GpsLocationData data) { if (StringUtils.isEmpty(data.getCompanyId())) { data.setCompanyId(ContextUtil.getDefaultCompanyId()); } Map mapList = this.cacheListLocationData(data .getCompanyId()); if (null == mapList) { mapList = new HashMap(); } mapList.put(data.getPhone(), data); String key = RedisConst.buildKey(data.getCompanyId(), "KEY_GPS_LOCATION_DATA"); redisUtil.set(key, mapList); return mapList; } @SuppressWarnings("unchecked") @Override public Map cacheListLocationData(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getDefaultCompanyId(); } String key = RedisConst.buildKey(companyId, "KEY_GPS_LOCATION_DATA"); Map result = (Map) redisUtil.get(key); if (null == result) { log.error("当前KEY={}没有获取到数据!", key); } return result; } @Override public void setCacheGpsData(String companyId, List list) { if (null == list || list.isEmpty()) { return; } Map gpsDataMap = new HashMap<>(); GpsData gpsData = new GpsData(); for (OAGps oaGps : list) { BeanUtils.copyProperties(oaGps, gpsData); gpsDataMap.put(gpsData.getPhone(), gpsData); } String key = RedisConst .buildKey(companyId, "KEY_GPS_DATA"); redisUtil.set(key, gpsDataMap); } @Override public void updateGpsRecord(GpsLocationData data) { Map timeData = this.cacheListTimeData(data.getCompanyId()); if (timeData == null || timeData.get(data.getPhone()) == null) { gpsServiceMapper.addGpsRecord(data); this.updateCacheTimeData(data); } else { if (timeData.get(data.getPhone()) != null) { long time = data.getUpdateTime().getTime() - timeData.get(data.getPhone()); //时间差大于5分钟则往数据库存储一次 if (time > 1000 * 60 * 5) { gpsServiceMapper.addGpsRecord(data); this.updateCacheTimeData(data); } } } } @Override public Map updateCacheTimeData(GpsLocationData data) { if (StringUtils.isEmpty(data.getCompanyId())) { data.setCompanyId(ContextUtil.getDefaultCompanyId()); } Map mapList = this.cacheListTimeData(data .getCompanyId()); if (null == mapList) { mapList = new HashMap(); } mapList.put(data.getPhone(), data.getUpdateTime().getTime()); String key = RedisConst.buildKey(data.getCompanyId(), "KEY_GPS_TIME_DATA"); redisUtil.set(key, mapList); return mapList; } @SuppressWarnings("unchecked") @Override public Map cacheListTimeData(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getDefaultCompanyId(); } String key = RedisConst.buildKey(companyId, "KEY_GPS_TIME_DATA"); Map result = (Map) redisUtil.get(key); if (null == result) { log.error("当前KEY={}没有获取到数据!", key); } return result; } @SuppressWarnings("unchecked") @Override public GpsData getCacheBySerialNum(String companyId, String serialNum) { String key = RedisConst.buildKey(companyId, "KEY_GPS_DATA"); Map data = (Map) redisUtil.get(key); if (null == data) { log.error("GPS设备注册信息:没有获取到缓存信息,KEY={}", key); return null; } for (String s : data.keySet()) { if (data.get(s).getSn().equals(serialNum)) { return data.get(s); } } return null; } @Override public List getAsset(String companyId) { return gpsServiceMapper.getAsset(companyId); } }