package com.genersoft.iot.vmp.gb28181.event.record; import com.genersoft.iot.vmp.gb28181.bean.RecordInfo; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @description: 录像查询结束事件 * @author: pan * @data: 2022-02-23 */ @Component public class RecordEndEventListener implements ApplicationListener { private final static Logger logger = LoggerFactory.getLogger(RecordEndEventListener.class); private Map handlerMap = new ConcurrentHashMap<>(); public interface RecordEndEventHandler{ void handler(RecordInfo recordInfo); } @Override public void onApplicationEvent(RecordEndEvent event) { String deviceId = event.getRecordInfo().getDeviceId(); String channelId = event.getRecordInfo().getChannelId(); int count = event.getRecordInfo().getCount(); int sumNum = event.getRecordInfo().getSumNum(); logger.info("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}/{}条", event.getRecordInfo().getDeviceId(), event.getRecordInfo().getChannelId(), count,sumNum); if (handlerMap.size() > 0) { RecordEndEventHandler handler = handlerMap.get(deviceId + channelId); if (handler !=null){ handler.handler(event.getRecordInfo()); if (count ==sumNum){ handlerMap.remove(deviceId + channelId); } } } } /** * 添加 * @param device * @param channelId * @param recordEndEventHandler */ public void addEndEventHandler(String device, String channelId, RecordEndEventHandler recordEndEventHandler) { handlerMap.put(device + channelId, recordEndEventHandler); } /** * 添加 * @param device * @param channelId */ public void delEndEventHandler(String device, String channelId) { handlerMap.remove(device + channelId); } }