EqpOutDelayQueueService.java
2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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<BerthsDTO> queue;
/**
* 新增队列通知
*
* @param
* @return
*/
public BizResult<Boolean> 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<BerthsDTO> 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<BerthsDTO> getQueue() {
if (null == queue) {
queue = redissonClient.getBlockingQueue(QueneNameEnum.EQP_OUT_QUEUE_MSG_NOTICE.getName());
}
return queue;
}
}