From d1e380d5bc8d6cda7dc26778dd638b3367483ae7 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期五, 11 四月 2025 17:27:30 +0800
Subject: [PATCH] 小程序6种开关阀操作失败时重发一次

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java |   86 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java
new file mode 100644
index 0000000..411999a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java
@@ -0,0 +1,86 @@
+package com.dy.common.multiDataSource;
+
+import org.apache.ibatis.transaction.Transaction;
+import org.springframework.jdbc.CannotGetJdbcConnectionException;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * 澶氭暟鎹簮鐨勪簨鍔$被锛屼簨鍔″璞$敱浜嬪姟宸ュ巶鍒涘缓锛屽畬鎴愭暟鎹簱浜嬪姟鎿嶄綔銆�
+ * 浜嬪姟瀵硅薄鍖呰9鐫�锛�
+ *   鏁版嵁搴撹繛鎺ャ�佷簨鍔℃彁浜ゃ�佷簨鍔″洖婊氱瓑瀵硅薄鍙婃搷浣�
+ * 鍦ㄤ簨鍔″璞′腑鍏蜂綋鍐冲畾閲囩敤鐨勫叿浣撴暟鎹簮
+ */
+public class MultiDataSourceTransaction implements Transaction {
+
+    private final DataSource multidataSource;
+
+    private final ConcurrentMap<String, Connection> curConMap;
+
+    private boolean autoCommit;
+
+
+    public MultiDataSourceTransaction(DataSource dataSource, boolean autoCommit) {
+        //dataSource鏄疍ynamicDataSource绫荤殑瀹炰緥
+        this.multidataSource = dataSource;
+        this.autoCommit = autoCommit;
+        curConMap = new ConcurrentHashMap<>();
+    }
+
+
+    @Override
+    public Connection getConnection() throws SQLException {
+        String nowDsName = DataSourceContext.get();
+        if (nowDsName == null || "".equals(nowDsName)) {//StringUtils.isEmpty(databaseIdentification)
+            //databaseIdentification = DataSourceName.USERDATASOURCE.getName();
+            throw new CannotGetJdbcConnectionException("鏈緱鍒版暟鎹簮鍚嶇О");
+            //nowDsName = "ym" ;
+        }
+        //鑾峰彇鏁版嵁婧愯繛鎺�
+        if (!this.curConMap.containsKey(nowDsName)) {
+            try {
+                Connection conn = this.multidataSource.getConnection();
+                this.autoCommit = false;
+                conn.setAutoCommit(false);
+                this.curConMap.put(nowDsName, conn);
+            } catch (SQLException ex) {
+                throw new CannotGetJdbcConnectionException("鏈緱鍒版暟鎹簮JDBC杩炴帴", ex);
+            }
+        }
+        return this.curConMap.get(nowDsName);
+    }
+
+
+    @Override
+    public void commit() throws SQLException {
+        for (Connection connection : curConMap.values()) {
+            if (!autoCommit) {
+                connection.commit();
+            }
+        }
+    }
+
+    @Override
+    public void rollback() throws SQLException {
+        for (Connection connection : curConMap.values()) {
+            connection.rollback();
+        }
+    }
+
+    @Override
+    public void close() throws SQLException {
+        for (Connection connection : curConMap.values()) {
+            DataSourceUtils.releaseConnection(connection, this.multidataSource);
+        }
+    }
+
+    @Override
+    public Integer getTimeout() throws SQLException {
+        return null;
+    }
+}

--
Gitblit v1.8.0