package com.zteits.park.quene; import com.alibaba.fastjson.JSONObject; import com.clouds.common.cache.sys.SysCodeValueCacheUtil; import com.clouds.common.constants.CodeValKindEnum; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.park.dto.BerthsDTO; import org.redisson.api.RBlockingQueue; import org.redisson.api.RDelayedQueue; import org.redisson.api.RedissonClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * 地磁上报出场队列消息服务 * Copyright: Copyright (c) 2018 zteits * * @Description: * @version: v1.0.0 * @author: xiejianpeng * @date: 2019/8/14 16:44 * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019/8/14 xiejianpeng v1.0.0 创建 */ @Component public class EqpOutDelayQueueService { Logger logger = LoggerFactory.getLogger(EqpOutDelayQueueService.class); @Autowired private RedissonClient redissonClient; private RBlockingQueue queue; /** * 新增队列通知 * * @param * @return */ public BizResult addNotice(BerthsDTO berthsDTO) { try { Long limitMinute = Long.valueOf(SysCodeValueCacheUtil.queryCodeValue(CodeValKindEnum.APP_OPT_ORDER_OUT_TIME_LIMIT_MINUTE)); if(limitMinute == null){ throw new BizException(ErrorType.BIZ_ERROR,"地磁上报出场离场时间的间隔时间(分钟)未取到,请刷新缓存!"); } RDelayedQueue delayedQueue = redissonClient.getDelayedQueue(getQueue()); logger.info("订单延迟通知消息队列,消息长度为{}",delayedQueue.size()); delayedQueue.offer(berthsDTO, limitMinute,TimeUnit.MINUTES); } catch (Exception e) { logger.error("addNotice:{}",JSONObject.toJSONString(e)); } return new BizResult<>(true); } public BerthsDTO getNotice() { BerthsDTO order = getQueue().poll(); return order; } private RBlockingQueue getQueue() { if (null == queue) { queue = redissonClient.getBlockingQueue(QueneNameEnum.EQP_OUT_QUEUE_MSG_NOTICE.getName()); } return queue; } }