From 6a6fdb7655f658550efa1d4916d36f216fe34a23 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期日, 27 四月 2025 09:58:37 +0800
Subject: [PATCH] 1、增加一个MyBatis拦截器,这个拦截器可配置启用,拦截器实现设置虚拟卡占用状态时,统一设置为非占用状态; 2、完善代码。

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/queue/Queue.java |  186 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 186 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/queue/Queue.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/queue/Queue.java
new file mode 100644
index 0000000..cfa77d5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/queue/Queue.java
@@ -0,0 +1,186 @@
+package com.dy.common.queue;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * 闃熷垪锛屽厛杩涘厛鍑�
+ */
+public class Queue {
+	@SuppressWarnings("unfinal")
+	private final Logger log = LogManager.getLogger(Queue.class.getName()) ;
+
+	private final Object synObj ;
+
+	private String queueName ;
+	
+	private final Node head ;
+	private final Node tail ;
+	private int size ;
+	
+	//鏈�澶ч檺鍒讹紝瓒呰繃杩欎釜闄愬埗锛岄槦鍒楀皢鎷掔粷push璋冪敤锛屽苟鎶涘嚭寮傚父
+	private int maxSize ;
+	//璀﹀憡闄愬埗锛岃秴杩囪繖涓檺鍒讹紝闃熷垪鎺ユ敹push鍚庯紝灏嗚褰晈arn鏃ュ織
+	private int warnSize ;//
+	
+
+	public Queue(String queueName){
+		synObj = new Object() ;
+		this.queueName = queueName ;
+		if(this.queueName == null){
+			this.queueName = Queue.class.getName() ;
+		}
+		this.head = new Node() ;
+		this.tail = new Node() ;
+		this.head.next = this.tail ;
+		this.tail.pre = this.head ;
+		this.size = 0 ;
+		
+		this.warnSize = 1000000 ;
+		this.maxSize = Integer.MAX_VALUE ;
+	}
+
+	public void setLimit(int warnSize, int maxSize){
+		this.warnSize = warnSize ;
+		this.maxSize = maxSize ;
+		if(this.warnSize <= 0){
+			this.warnSize = 1 ;
+		}
+		if(this.warnSize == Integer.MAX_VALUE){
+			this.warnSize = Integer.MAX_VALUE - 1000 ;
+		}
+		
+		if(this.maxSize <= 0){
+			this.maxSize = 1 ;
+		}
+	}
+	/**
+	 * 姝ゆ柟娉曞湪澶氱嚎绋嬩腑鎵ц锛屽悓姝ユ柟寮忥紝闃叉鍏朵粬绾跨▼鎿嶄綔鍏朵粬鏂规硶鏃朵笉鍚屾
+	 * 鍦ㄩ槦鍒楀熬閮ㄥ帇鍏ヤ竴鑺傜偣
+	 * 鍦ㄥ绾跨▼涓簲鐢紝鍔犲悓姝�
+	 * @param obj 鍏ュ垪鐨勫璞�
+	 */
+	@SuppressWarnings("unused")
+	public void pushHead(NodeObj obj)throws Exception{
+		synchronized(synObj){
+			if(obj == null){
+				return ;
+			}
+			if(this.size >= this.maxSize){
+				throw new Exception("闃熷垪锛�" + queueName + "锛夌紦瀛樿妭鐐规暟" + this.size + " 瓒呭嚭鏈�澶ч檺鍒�(" + this.maxSize + ")锛屾嫆缁濇帴鏀舵柊鏁版嵁銆�");
+			}
+			Node node = new Node();
+			node.obj = obj ;
+			node.next = this.head.next ;
+			node.pre = this.head ;
+			this.head.next.pre = node ;
+			this.head.next = node ;
+			this.size ++ ;
+			if(this.size >= this.warnSize){
+				log.warn("闃熷垪锛�" + queueName + "锛夌紦瀛樿妭鐐规暟 " + this.size + " 瓒呴檺(" + this.warnSize + ")璀﹀憡銆�");
+			}
+		}
+	}
+	
+	/**
+	 * 姝ゆ柟娉曞湪澶氱嚎绋嬩腑鎵ц锛屽悓姝ユ柟寮忥紝闃叉鍏朵粬绾跨▼鎿嶄綔鍏朵粬鏂规硶鏃朵笉鍚屾
+	 * 鍦ㄩ槦鍒楀熬閮ㄥ帇鍏ヤ竴鑺傜偣
+	 * 鍦ㄥ绾跨▼涓簲鐢紝鍔犲悓姝�
+	 * @param obj 鍏ュ垪鐨勫璞�
+	 */
+	public void pushTail(NodeObj obj)throws Exception{
+		synchronized(synObj){
+			if(obj == null){
+				return ;
+			}
+			if(this.size >= this.maxSize){
+				throw new Exception("闃熷垪锛�" + queueName + "锛夌紦瀛樿妭鐐规暟" + this.size + " 瓒呭嚭鏈�澶ч檺鍒�(" + this.maxSize + ")锛屾嫆缁濇帴鏀舵柊鏁版嵁銆�");
+			}
+			Node node = new Node();
+			node.obj = obj ;
+			node.next = this.tail ;
+			node.pre = this.tail.pre ;
+			this.tail.pre.next = node ;
+			this.tail.pre = node ;
+			this.size ++ ;
+			if(this.size >= this.warnSize){
+				log.warn("闃熷垪锛�" + queueName + "锛夌紦瀛樿妭鐐规暟 " + this.size + " 瓒呴檺(" + this.warnSize + ")璀﹀憡銆�");
+			}
+		}
+	}
+	
+	/**
+	 * 姝ゆ柟娉曞湪鍗曠嚎绋嬩腑鎵ц锛屼絾鍙兘鍙楄皟鐢╬ush鐨勫绾跨▼褰卞搷锛屾墍浠ヤ篃鐢ㄥ埌浜嗗悓姝�
+	 * 寮瑰嚭绗竴涓妭鐐�
+	 * 鍦ㄥ绾跨▼涓簲鐢紝鍔犲悓姝�
+	 * @return 鍑哄垪瀵硅薄
+	 */
+	public NodeObj pop(){
+		synchronized(synObj){
+			NodeObj obj = null ;
+			if(this.size > 0){
+				Node node = this.head.next ;
+				if(node != this.tail){
+					obj = node.obj ;
+					this.head.next = this.head.next.next ;
+					this.head.next.pre = this.head ;
+					node.next = null ;
+					node.pre = null ;
+					this.size -- ;
+				}
+			}
+			return obj ;
+		}
+	}
+	
+	/**
+	 * 寰楀埌绗竴涓妭鐐癸紝浣嗕笉鎶婅妭鐐逛粠闃熷垪涓竻闄�
+	 * @return 绗竴涓璞�
+	 */
+	@SuppressWarnings("unused")
+	public Node getFirstNode(){
+		Node node = this.head.next ;
+		if(node != this.tail){
+			return node ;
+		}
+		return null ;
+	}
+	/**
+	 * 寰楀埌鏈�鍚庝竴涓妭鐐癸紝浣嗕笉鎶婅妭鐐逛粠闃熷垪涓竻闄�
+	 * @return 鏈�鍚庝竴涓璞�
+	 */
+	@SuppressWarnings("unused")
+	public Node getLastNode(){
+		Node node = this.tail.pre ;
+		if(node != this.head){
+			return node ;
+		}
+		return null ;
+	}
+	
+	/**
+	 * 娓呴櫎涓�涓妭鐐�
+	 * @param node 鍒犻櫎涓�涓妭鐐�
+	 */
+	@SuppressWarnings("unused")
+	public void remove(Node node){
+		synchronized(synObj){
+			if(node != null && node != this.head && node != this.tail){
+				node.pre.next = node.next ;
+				node.next.pre = node.pre ;
+				node.next = null ;
+				node.pre = null ;
+				this.size -- ;
+			}
+		}
+	}
+
+	/**
+	 * 寰楀埌闃熷垪涓湁鏁堣妭鐐逛釜鏁�
+	 * @return 闃熷垪鍐呰妭鐐规暟閲�
+	 */
+	public int size(){
+		return this.size ;
+	}
+
+}
\ No newline at end of file

--
Gitblit v1.8.0