增加 payapi-sdk 支持多租户
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/MultiTenantAutoConfig.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/MultiTenantAutoConfig.java
new file mode 100644
index 0000000..f849cea
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/MultiTenantAutoConfig.java
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.paysdk;
+
+import com.supwisdom.dlpay.paysdk.tenant.DefaultMultiTenantProviderFactory;
+import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProviderFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MultiTenantAutoConfig {
+ @Bean
+ @ConditionalOnMissingBean(MultiTenantProviderFactory.class)
+ public MultiTenantProviderFactory defaultFactory() {
+ return new DefaultMultiTenantProviderFactory();
+ }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
index 1002d52..0a11f39 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java
@@ -1,18 +1,36 @@
package com.supwisdom.dlpay.paysdk;
+import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProviderFactory;
import com.supwisdom.dlpay.paysdk.utils.Constants;
import com.supwisdom.dlpay.paysdk.utils.JwtContext;
import feign.RequestInterceptor;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class PayAPIRequestInterceptor {
+
+ @Value("${payapi.tenantid:}")
+ private String tenantid;
+
+ private final MultiTenantProviderFactory tenantProviderFactory;
+
+ public PayAPIRequestInterceptor(MultiTenantProviderFactory tenantProviderFactory) {
+ this.tenantProviderFactory = tenantProviderFactory;
+ }
+
@Bean
public RequestInterceptor headerInterceptor() {
return requestTemplate -> {
// 小示例,没什么卵用
- requestTemplate.header(Constants.HEADER_TENANT_ID, "{tenantid}");
+ String tenant;
+ if (tenantid != null || "".equals(tenantid)) {
+ tenant = tenantProviderFactory.getProvider().getCurrentTenant();
+ } else {
+ tenant = tenantid;
+ }
+ requestTemplate.header(Constants.HEADER_TENANT_ID, tenant);
String jwt = JwtContext.getJwt();
if (jwt != null) {
requestTemplate.header(Constants.JWT_HEADER, "Bearer " + jwt);
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProvider.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProvider.java
new file mode 100644
index 0000000..95dd221
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProvider.java
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.paysdk.tenant;
+
+public class DefaultMultiTenantProvider implements MultiTenantProvider {
+ @Override
+ public String getCurrentTenant() {
+ return "{tenantid}";
+ }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProviderFactory.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProviderFactory.java
new file mode 100644
index 0000000..0b42fa3
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProviderFactory.java
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.paysdk.tenant;
+
+public class DefaultMultiTenantProviderFactory implements MultiTenantProviderFactory {
+ private MultiTenantProvider provider = new DefaultMultiTenantProvider();
+
+ public MultiTenantProvider getProvider() {
+ return provider;
+ }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProvider.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProvider.java
new file mode 100644
index 0000000..5db786c
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProvider.java
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.paysdk.tenant;
+
+public interface MultiTenantProvider {
+ String getCurrentTenant();
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProviderFactory.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProviderFactory.java
new file mode 100644
index 0000000..bc137c7
--- /dev/null
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProviderFactory.java
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.paysdk.tenant;
+
+public interface MultiTenantProviderFactory {
+ MultiTenantProvider getProvider();
+}
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index 1916f7a..231a684 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -294,7 +294,4 @@
}
- public static void main(String[] args) {
-
- }
}
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/MultiTenantProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/MultiTenantProxyTest.java
new file mode 100644
index 0000000..45b1b4c
--- /dev/null
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/MultiTenantProxyTest.java
@@ -0,0 +1,56 @@
+package com.supwisdom.dlpay.paysdktest;
+
+import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
+import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProvider;
+import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProviderFactory;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.cloud.openfeign.FeignAutoConfiguration;
+import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Primary;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+//@SpringBootTest(properties = {
+// "payapi.url=http://localhost:8080/payapi"},
+// classes = MultiTenantProxyTest.class)
+@ImportAutoConfiguration({RibbonAutoConfiguration.class,
+ FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class,
+ HttpMessageConvertersAutoConfiguration.class})
+@EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
+@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+public class MultiTenantProxyTest {
+
+ @Autowired
+ private ApiLoginProxy apiLoginProxy;
+
+ private final static String appid = "700001";
+ private final static String secret = "d6dd7f0d4551419d8d11736d0f28df0d";
+
+
+ @TestConfiguration
+ static class MultiTenantTestBean {
+ @Bean
+ @Primary
+ public MultiTenantProviderFactory newProviderFactory() {
+ return () -> (MultiTenantProvider) () -> "122020";
+ }
+ }
+
+
+ @Test
+ public void testMultiTenant() {
+ ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+ helper.login(appid, secret);
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java
index ef92fb5..e9b6c43 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java
@@ -18,7 +18,7 @@
try {
return (CheckFileProvider) applicationContext.getBean(name + "CheckFileProvider");
} catch (BeansException ex) {
- log.error("未定义 sourcetype <$sourcetype> 对账处理 Provider");
+ log.error("未定义 sourcetype <{}> 对账处理 Provider", name);
return null;
}
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java
new file mode 100644
index 0000000..3647664
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java
@@ -0,0 +1,71 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "tb_tenant_catalog")
+@SequenceGenerator(name = "tenant_catalog_seq")
+public class TTenantCatalog {
+ @Id
+ @Column(name = "id")
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tenant_catalog_seq")
+ private Integer id;
+
+ @Column(name = "tenantid", length = 32)
+ @NotNull
+ private String tenantid;
+
+ @Column(name = "datecenter", length = 10)
+ @NotNull
+ private String dataCenter;
+
+ @Column(name = "expire_date")
+ @NotNull
+ private Timestamp expireDate;
+
+ @Column(name = "enabled")
+ @NotNull
+ private Boolean enabled;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getTenantid() {
+ return tenantid;
+ }
+
+ public void setTenantid(String tenantid) {
+ this.tenantid = tenantid;
+ }
+
+ public String getDataCenter() {
+ return dataCenter;
+ }
+
+ public void setDataCenter(String dataCenter) {
+ this.dataCenter = dataCenter;
+ }
+
+ public Timestamp getExpireDate() {
+ return expireDate;
+ }
+
+ public void setExpireDate(Timestamp expireDate) {
+ this.expireDate = expireDate;
+ }
+
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+}