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<RecordEndEvent> { 
 | 
  
 | 
    private final static Logger logger = LoggerFactory.getLogger(RecordEndEventListener.class); 
 | 
  
 | 
    private Map<String, RecordEndEventHandler> 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); 
 | 
    } 
 | 
  
 | 
} 
 |