From 0b0aff446e1ca31e277c318814fb076033bf7a3d Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 22 七月 2025 09:45:06 +0800
Subject: [PATCH] 新增中间表

---
 src/main/java/com/zy/common/config/ds/DataSourceType.java            |   32 ++++++
 src/main/java/com/zy/common/config/ds/DataSourceAop.java             |   27 +++++
 src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java |   38 +++++++
 src/main/java/com/zy/common/config/ds/DataSourceConfig.java          |   44 ++++++++
 src/main/java/com/zy/common/properties/SystemProperties.java         |    2 
 src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java |   38 +++++++
 pom.xml                                                              |   31 ++++--
 src/main/resources/application.yml                                   |   10 ++
 src/main/java/com/zy/common/config/ds/DynamicDataSource.java         |   11 ++
 src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java   |   40 ++++++++
 10 files changed, 261 insertions(+), 12 deletions(-)

diff --git a/pom.xml b/pom.xml
index fdfc343..d62daf4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,22 +15,14 @@
 
     <properties>
         <java.version>1.8</java.version>
-        <cool.version>3.2.0</cool.version>
-        <mysql-driver.version>5.1.47</mysql-driver.version>
+        <cool.version>3.4.0</cool.version>
+        <mysql-driver.version>8.0.28</mysql-driver.version>
         <mybatis-plus.version>2.3.2</mybatis-plus.version>
         <fastjson.version>1.2.58</fastjson.version>
         <springfox.version>2.7.0</springfox.version>
     </properties>
 
-
-
     <dependencies>
-        <dependency>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-            <version>1.4.7</version>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
@@ -38,11 +30,15 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-tomcat</artifactId>
-            <scope>provided</scope>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
         <dependency>
             <groupId>cn.cool</groupId>
@@ -54,6 +50,7 @@
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql-driver.version}</version>
         </dependency>
+
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
             <artifactId>mssql-jdbc</artifactId>
@@ -64,6 +61,13 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>${mybatis-plus.version}</version>
         </dependency>
+        <!-- jdk 8+ 寮曞叆鍙�夋ā鍧� -->
+        <!--        <dependency>-->
+        <!--            <groupId>com.baomidou</groupId>-->
+        <!--            <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>-->
+        <!--            <version>3.5.9</version>-->
+        <!--        </dependency>-->
+
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
@@ -111,6 +115,11 @@
             <artifactId>okhttp</artifactId>
             <version>3.10.0</version>
         </dependency>
+        <dependency>
+            <groupId>de.schlichtherle.truelicense</groupId>
+            <artifactId>truelicense-core</artifactId>
+            <version>1.33</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java b/src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java
new file mode 100644
index 0000000..d8b8519
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/AbstractRoutingDataSource.java
@@ -0,0 +1,38 @@
+package com.zy.common.config.ds;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.jdbc.datasource.AbstractDataSource;
+import org.springframework.util.Assert;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {
+    //澶氭暟鎹簮map闆嗗悎
+    private Map<Object, Object> targetDataSources;
+    //榛樿鏁版嵁婧�
+    private Object defaultTargetDataSource;
+    //鍏跺疄灏辨槸targetDataSources锛屽悗闈㈢殑afterPropertiesSet锛堬級鏂规硶浼氬皢targetDataSources璧嬪�肩粰resolvedDataSources
+    private Map<Object, DataSource> resolvedDataSources;
+    private DataSource resolvedDefaultDataSource;
+
+    public void setTargetDataSources(Map<Object, Object> targetDataSources) {
+        this.targetDataSources = targetDataSources;
+    }
+
+    protected DataSource determineTargetDataSource() {
+        Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
+        Object lookupKey = this.determineCurrentLookupKey();
+        DataSource dataSource = (DataSource) this.resolvedDataSources.get(lookupKey);
+        if (dataSource == null && ( lookupKey == null)) {
+            dataSource = this.resolvedDefaultDataSource;
+        }
+        if (dataSource == null) {
+            throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
+        } else {
+            return dataSource;
+        }
+    }
+
+    protected abstract Object determineCurrentLookupKey();
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/common/config/ds/DataSourceAop.java b/src/main/java/com/zy/common/config/ds/DataSourceAop.java
new file mode 100644
index 0000000..4de4666
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DataSourceAop.java
@@ -0,0 +1,27 @@
+package com.zy.common.config.ds;
+
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class DataSourceAop {
+    @Before("execution(* com.zy.asrs..*(..))")
+    public void setDataSource2test01() {
+        //System.err.println("test01涓氬姟");
+        DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST01);
+    }
+
+    @Before("execution(* com.zy.system..*(..))")
+    public void setDataSource2test012() {
+        //System.err.println("test01涓氬姟");
+        DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST01);
+    }
+
+    @Before("execution(* com.zy.nc..*(..))")
+    public void setDataSource2test02() {
+        //System.err.println("test02涓氬姟");
+        DataSourceType.setDataBaseType(DataSourceType.DataBaseType.TEST02);
+    }
+}
diff --git a/src/main/java/com/zy/common/config/ds/DataSourceConfig.java b/src/main/java/com/zy/common/config/ds/DataSourceConfig.java
new file mode 100644
index 0000000..755f6d3
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DataSourceConfig.java
@@ -0,0 +1,44 @@
+package com.zy.common.config.ds;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+
+@Configuration
+public class DataSourceConfig {
+
+    @Value("${other.datasource.jdbc-url}")
+    private String url;
+    @Value("${other.datasource.username}")
+    private String username;
+    @Value("${other.datasource.password}")
+    private String password;
+    @Value("${other.datasource.driver-class-name}")
+    private String driverClassName;
+
+    // 涓绘暟鎹簮
+    @Bean(name = "dataSource")
+    @Primary
+    @ConfigurationProperties(prefix = "spring.datasource")
+    public DataSource primaryDataSource() {
+        return DataSourceBuilder.create().build();
+    }
+
+    // 娆℃暟鎹簮
+    @Bean(name = "slaveDataSource")
+    public DataSource secondaryDataSource() {
+        return DataSourceBuilder.create()
+                .driverClassName(driverClassName)
+                .url(url)
+                .username(username)
+                .password(password)
+                .build();
+
+    }
+
+}
diff --git a/src/main/java/com/zy/common/config/ds/DataSourceType.java b/src/main/java/com/zy/common/config/ds/DataSourceType.java
new file mode 100644
index 0000000..57ce62b
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DataSourceType.java
@@ -0,0 +1,32 @@
+package com.zy.common.config.ds;
+
+public class DataSourceType {
+
+    public enum DataBaseType {
+        TEST01, TEST02
+    }
+
+    // 浣跨敤ThreadLocal淇濊瘉绾跨▼瀹夊叏
+    private static final ThreadLocal<DataBaseType> TYPE = new ThreadLocal<DataBaseType>();
+
+    // 寰�褰撳墠绾跨▼閲岃缃暟鎹簮绫诲瀷
+    public static void setDataBaseType(DataBaseType dataBaseType) {
+        if (dataBaseType == null) {
+            throw new NullPointerException();
+        }
+        //System.err.println("[灏嗗綋鍓嶆暟鎹簮鏀逛负]锛�" + dataBaseType);
+        TYPE.set(dataBaseType);
+    }
+
+    // 鑾峰彇鏁版嵁婧愮被鍨�
+    public static DataBaseType getDataBaseType() {
+        DataBaseType dataBaseType = TYPE.get() == null ? DataBaseType.TEST01 : TYPE.get();
+        //System.err.println("[鑾峰彇褰撳墠鏁版嵁婧愮殑绫诲瀷涓篯锛�" + dataBaseType);
+        return dataBaseType;
+    }
+
+    // 娓呯┖鏁版嵁绫诲瀷
+    public static void clearDataBaseType() {
+        TYPE.remove();
+    }
+}
diff --git a/src/main/java/com/zy/common/config/ds/DynamicDataSource.java b/src/main/java/com/zy/common/config/ds/DynamicDataSource.java
new file mode 100644
index 0000000..a0e228c
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/DynamicDataSource.java
@@ -0,0 +1,11 @@
+package com.zy.common.config.ds;
+
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+public class DynamicDataSource  extends AbstractRoutingDataSource {
+    @Override
+    protected Object determineCurrentLookupKey() {
+        DataSourceType.DataBaseType dataBaseType = DataSourceType.getDataBaseType();
+        return dataBaseType;
+    }
+}
diff --git a/src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java b/src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java
new file mode 100644
index 0000000..16b482c
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/PrimaryDataSourceConfig.java
@@ -0,0 +1,40 @@
+package com.zy.common.config.ds;
+
+import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.plugin.Interceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = {"com.zy.asrs.mapper", "com.zy.system.mapper"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
+public class PrimaryDataSourceConfig {
+
+    @Bean(name = "primarySqlSessionFactory")
+    @Primary
+    public MybatisSqlSessionFactoryBean primarySqlSessionFactory(@Qualifier("dataSource") DataSource dataSource, PaginationInterceptor paginationInterceptor) throws Exception {
+        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
+        sessionFactory.setDataSource(dataSource);
+        // 璁剧疆MyBatis鐨凪apper XML鏂囦欢璺緞
+        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
+                .getResources("classpath:mapper/asrs/*.xml"));
+        Interceptor[] interceptors = new Interceptor[]{paginationInterceptor};
+        sessionFactory.setPlugins(interceptors);
+        return sessionFactory;
+    }
+
+    @Bean(name = "transactionManager")
+    @Primary
+    public DataSourceTransactionManager primaryTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java b/src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java
new file mode 100644
index 0000000..48652f8
--- /dev/null
+++ b/src/main/java/com/zy/common/config/ds/SecondaryDataSourceConfig.java
@@ -0,0 +1,38 @@
+package com.zy.common.config.ds;
+
+import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.plugin.Interceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = "com.zy.nc.mapper", sqlSessionFactoryRef = "secondarySqlSessionFactory")
+public class SecondaryDataSourceConfig {
+
+    @Bean(name = "secondarySqlSessionFactory")
+    public MybatisSqlSessionFactoryBean secondarySqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource, PaginationInterceptor paginationInterceptor) throws Exception {
+        MybatisSqlSessionFactoryBean  sessionFactory = new MybatisSqlSessionFactoryBean();
+        sessionFactory.setDataSource(dataSource);
+        // 璁剧疆MyBatis鐨凪apper XML鏂囦欢璺緞
+        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
+                .getResources("classpath:mapper/nc/*.xml"));
+        Interceptor[] interceptors = new Interceptor[] { paginationInterceptor };
+        sessionFactory.setPlugins(interceptors);
+
+        return sessionFactory;
+    }
+
+    @Bean(name = "secondaryTransactionManager")
+    public DataSourceTransactionManager secondaryTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/common/properties/SystemProperties.java b/src/main/java/com/zy/common/properties/SystemProperties.java
index e10c272..d8bfe0f 100644
--- a/src/main/java/com/zy/common/properties/SystemProperties.java
+++ b/src/main/java/com/zy/common/properties/SystemProperties.java
@@ -63,7 +63,7 @@
 
     // 鐢熸垚婵�娲荤爜
     public static void main(String[] args) {
-        String timeStr = "2026-08-05 13:48:35";
+        String timeStr = "2025-08-21 13:48:35";
         Date exprTime = DateUtils.convert(timeStr);
         String code = AesUtils.encrypt(DateUtils.convert(exprTime, DateUtils.yyyyMMddHHmmss), SystemProperties.SALT);
         System.out.println("婵�娲荤爜锛�"+code);
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 7bf195d..e7371fe 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -25,6 +25,16 @@
       maxFileSize: 100MB
       maxRequestSize: 100MB
 
+other:
+  datasource:
+    #    jdbc-url: jdbc:mysql://127.0.0.1:3306/wmsdata
+    #    username: root
+    #    password: root
+    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+    url: jdbc:sqlserver://127.0.0.1:1433;databasename=ycawdasrs
+    username: liku
+    password: 123456
+
 mybatis-plus:
   mapper-locations: classpath:mapper/*.xml 
 #  global-config:

--
Gitblit v1.9.1