|  |  | @ -5,6 +5,8 @@ import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.constant.NumConstant; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.distributedlock.DistributedLock; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.exception.RenException; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.redis.RedisKeys; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.redis.RedisUtils; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.commons.tools.utils.SpringContextUtils; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.dto.extract.form.ExtractOriginFormDTO; | 
			
		
	
		
			
				
					|  |  |  | import com.epmet.service.evaluationindex.extract.todata.FactOriginExtractService; | 
			
		
	
	
		
			
				
					|  |  | @ -21,6 +23,7 @@ import org.apache.rocketmq.common.message.MessageExt; | 
			
		
	
		
			
				
					|  |  |  | import org.redisson.api.RLock; | 
			
		
	
		
			
				
					|  |  |  | import org.slf4j.Logger; | 
			
		
	
		
			
				
					|  |  |  | import org.slf4j.LoggerFactory; | 
			
		
	
		
			
				
					|  |  |  | import org.springframework.data.redis.core.RedisTemplate; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | import javax.annotation.PreDestroy; | 
			
		
	
		
			
				
					|  |  |  | import java.util.Date; | 
			
		
	
	
		
			
				
					|  |  | @ -41,24 +44,16 @@ import java.util.stream.Collectors; | 
			
		
	
		
			
				
					|  |  |  | public class ProjectChangedCustomListener implements MessageListenerConcurrently { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     private Logger logger = LoggerFactory.getLogger(getClass()); | 
			
		
	
		
			
				
					|  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |      * 控制通知类型消息的消费频率 | 
			
		
	
		
			
				
					|  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |     private static final Cache<String, String> customerIdCache = CacheBuilder.newBuilder().maximumSize(NumConstant.ONE_HUNDRED) | 
			
		
	
		
			
				
					|  |  |  |             .expireAfterWrite(NumConstant.THIRTY,TimeUnit.SECONDS).build(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     private RedisUtils redisUtils; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |     public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { | 
			
		
	
		
			
				
					|  |  |  |         long start = System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |         try { | 
			
		
	
		
			
				
					|  |  |  |             List<String> customerIds = msgs.stream().map(messageExt -> new String(messageExt.getBody())).distinct().collect(Collectors.toList()); | 
			
		
	
		
			
				
					|  |  |  |             for (String customerId : customerIds) { | 
			
		
	
		
			
				
					|  |  |  |                 //获取缓存 如果不存在缓存中 则执行消费 并放入缓存中
 | 
			
		
	
		
			
				
					|  |  |  |                 String ifPresent = customerIdCache.getIfPresent(customerId); | 
			
		
	
		
			
				
					|  |  |  |                 if (StringUtils.isBlank(ifPresent)){ | 
			
		
	
		
			
				
					|  |  |  |                     consumeMessage(customerId); | 
			
		
	
		
			
				
					|  |  |  |                     customerIdCache.put(customerId,customerId); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             List<String> msgStrs = msgs.stream().map(messageExt -> new String(messageExt.getBody())).distinct().collect(Collectors.toList()); | 
			
		
	
		
			
				
					|  |  |  |             for (String msgStr : msgStrs) { | 
			
		
	
		
			
				
					|  |  |  |                 consumeMessage(msgStr); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |         } catch (Exception e) { | 
			
		
	
		
			
				
					|  |  |  |             //失败不重发
 | 
			
		
	
	
		
			
				
					|  |  | @ -76,6 +71,23 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently | 
			
		
	
		
			
				
					|  |  |  |             log.warn("consumeMessage msg body is blank"); | 
			
		
	
		
			
				
					|  |  |  |             return; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         if (redisUtils == null) { | 
			
		
	
		
			
				
					|  |  |  |             redisUtils = SpringContextUtils.getBean(RedisUtils.class); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         String redisKey = RedisKeys.getProjectChangedMsgDistinceKey(msgObj.getCustomerId()); | 
			
		
	
		
			
				
					|  |  |  |         if (redisUtils.get(redisKey) == null) { | 
			
		
	
		
			
				
					|  |  |  |             consumeMessage(msgObj); | 
			
		
	
		
			
				
					|  |  |  |             log.info("消费了项目变动消息,customer id:{}", msgObj.getCustomerId()); | 
			
		
	
		
			
				
					|  |  |  |             // 有效期30秒
 | 
			
		
	
		
			
				
					|  |  |  |             redisUtils.set(redisKey, msg, 30); | 
			
		
	
		
			
				
					|  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |             log.info("该客户的项目变动消息刚刚消费,请等待30秒,customer id:{}", msgObj.getCustomerId()); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     public void consumeMessage(ProjectChangedMQMsg msgObj) { | 
			
		
	
		
			
				
					|  |  |  |         DistributedLock distributedLock = null; | 
			
		
	
		
			
				
					|  |  |  |         RLock lock = null; | 
			
		
	
		
			
				
					|  |  |  |         try { | 
			
		
	
	
		
			
				
					|  |  | @ -128,6 +140,7 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     @PreDestroy | 
			
		
	
		
			
				
					|  |  |  |     public void saveCalStatus() { | 
			
		
	
		
			
				
					|  |  |  |         //todo
 | 
			
		
	
	
		
			
				
					|  |  | 
 |