package com.ld.igds.common.impl; import com.ld.igds.common.CoreSnapService; import com.ld.igds.common.mapper.SnapSerMapper; import com.ld.igds.constant.Constant; import com.ld.igds.models.SnapSer; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.RedisUtil; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; @Component(CoreSnapService.BEAN_ID) public class CoreSnapServiceImpl implements CoreSnapService { /** * 抓拍分机缓存前缀 */ private String CACHE_KEY_PRE = "SNAP_SER"; /** * 断电抓拍标记前缀 */ private String CACHE_KEY_TAG = "SNAP_TAG"; @Autowired private SnapSerMapper snapSerMapper; @Autowired private RedisUtil redisUtil; @Override public void setCacheSer(SnapSer snapSer) { if (null == snapSer.getDeptId()) snapSer.setDeptId("0000"); String key = CACHE_KEY_PRE + ":" + snapSer.getDeptId() + ":" + snapSer.getSn(); redisUtil.set(key, snapSer); } @Override public SnapSer getCacheSer(String deptId) { String patten = Constant.APP_NAME + ":" + CACHE_KEY_PRE; Set keys = redisUtil.keys(patten); for (String key : keys) { if (key.indexOf(deptId) >= 0) { return (SnapSer) redisUtil.get(key); } } return null; } @Override public SnapSer getCacheSerBySn(String sn) { Set keys = redisUtil.keys(CACHE_KEY_PRE); for (String key : keys) { if (key.indexOf(sn) >= 0) { return (SnapSer) redisUtil.get(key); } } return null; } @Override public int updateBySn(String status, String ip, Integer port, String sn) { return snapSerMapper.updateBySn(status, ip, port, sn); } @Override public void allOffLine(String companyId) { snapSerMapper.allOffLine(companyId); } @Override public void offLine(String sn) { snapSerMapper.offLine(sn); } @Override public void connectAdd(String sn, String ip, int port) { int result = updateBySn(Constant.YN_Y, ip, port, sn); if (result == 0) { SnapSer ser = new SnapSer(); ser.setCompanyId(ContextUtil.getDefaultCompanyId()); ser.setId(ContextUtil.getUUID()); ser.setName("自动添加"); ser.setPort(port); ser.setSn(sn); ser.setIp(ip); ser.setStatus(Constant.YN_Y); ser.setUpdateTime(new Date()); snapSerMapper.addSer(ser); //添加设备 this.setCacheSer(ser); } } @Override public void setSnapTag(SnapSer snapSer, String warnId) { String key = CACHE_KEY_TAG + ":" + snapSer.getSn(); Map map = new HashMap<>(); map.put("deptId", snapSer.getCompanyId()); map.put("companyId", snapSer.getCompanyId()); map.put("outId", warnId); map.put("snapSn", snapSer.getSn()); map.put("start", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm")); //默认存8个小时,后面不管上不上电不在抓拍 redisUtil.set(key, map, 8 * 60 * 60); } @Override public void removeSnapTag(SnapSer snapSer) { String key = CACHE_KEY_TAG + ":" + snapSer.getSn(); redisUtil.del(key); } @SuppressWarnings("unchecked") @Override public List> getCacheSnapTag() { List> array = new ArrayList<>(); Set keys = redisUtil.keys(CACHE_KEY_TAG); Map result; for (String key : keys) { result = (Map) redisUtil.get(key); if (null != result) array.add(result); } return array.size() > 0 ? array : null; } }