From 62d405b4524b063daae62d5e23ef83c5311c1d6d Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Tue, 24 Dec 2019 15:39:45 +0800 Subject: [PATCH] =?utf8?q?feat:=20=E6=94=B9=E9=80=A0=E5=A4=9A=E7=A7=9F?= =?utf8?q?=E6=88=B7=E6=94=AF=E6=8C=81=EF=BC=8C=E9=87=87=E7=94=A8=20multi-t?= =?utf8?q?enant=20library?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + payapi/build.gradle | 13 ++ .../agent/service/AgentServiceProxy.java | 8 +- .../impl/QrcodePatternServiceImpl.java | 10 +- .../service/impl/SourceTypeServiceImpl.java | 8 +- .../dlpay/framework/core/DatabaseAdapter.java | 7 + .../dlpay/framework/core/DatabaseConfig.java | 13 +- .../framework/core/DayendSettleTask.java | 6 +- .../MutliTenantDatasourceProviderAdapter.java | 21 +++ .../dlpay/framework/dao/TenantCatalogDao.java | 8 + .../framework/domain/TTenantCatalog.java | 2 +- .../security/MyPermissionEvaluator.java | 20 +-- .../service/impl/DayendSettleServiceImpl.java | 86 ++++----- .../service/impl/SystemUtilServiceImpl.java | 11 +- .../framework/tenant/HibernateConfig.java | 65 ------- .../MultiTenantConnectionProviderImpl.java | 71 -------- .../tenant/MultiTenantIdentifierResolver.java | 23 --- .../framework/tenant/TenantCacheKeyGen.java | 3 +- .../dlpay/framework/tenant/TenantContext.java | 20 --- .../dlpay/framework/tenant/TenantHolder.java | 3 +- .../framework/tenant/TenantInterceptor.java | 40 ----- .../dlpay/framework/util/Signature.java | 4 +- .../system/controller/FunctionController.java | 6 +- .../system/controller/ParamController.java | 4 +- .../service/impl/OperatorServiceImpl.java | 6 +- .../system/service/impl/ParamServiceImpl.java | 7 +- .../system/service/impl/RoleServiceImpl.java | 10 +- .../service/impl/ShopDataServiceImpl.java | 8 +- .../SourcetypeCheckManagerServiceImpl.java | 4 +- .../service/impl/UserDataServiceImpl.java | 10 +- .../com/supwisdom/dlpay/PayApiApplication.kt | 30 ++++ .../kotlin/com/supwisdom/dlpay/api/advices.kt | 2 - .../com/supwisdom/dlpay/api/async_tasks.kt | 18 +- .../dali_datasync_api_controller.kt | 7 +- .../api/controller/notify_api_controller.kt | 9 +- .../api/controller/shop_api_controller.kt | 9 +- .../api/controller/user_api_controller.kt | 7 +- .../dlpay/api/scheduler_sourcetype_chk.kt | 15 +- .../dlpay/api/scheduler_ynrccchk_task.kt | 166 ------------------ .../service/impl/charge_api_service_impl.kt | 6 +- .../impl/dali_datasync_service_impl.kt | 12 +- .../impl/dtl_query_result_service_impl.kt | 4 +- .../api/service/impl/pay_service_impl.kt | 6 +- .../api/service/impl/shop_service_impl.kt | 9 +- ...transaction_reconciliation_service_impl.kt | 6 +- .../service/impl/transaction_service_impl.kt | 4 +- .../impl/ynrcc_business_service_impl.kt | 4 +- .../com/supwisdom/dlpay/framework/tenant.kt | 35 ++-- .../kotlin/com/supwisdom/dlpay/security.kt | 6 - .../src/main/resources/application.properties | 6 +- 50 files changed, 282 insertions(+), 577 deletions(-) create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java delete mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java delete mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java delete mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java delete mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java delete mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java delete mode 100644 payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt diff --git a/build.gradle b/build.gradle index cfaf067e..d863f078 100644 --- a/build.gradle +++ b/build.gradle @@ -102,6 +102,7 @@ subprojects { springSocialVersion = '1.1.6.RELEASE' springKafkaVersion = '2.2.8.RELEASE' postgresVersion = '42.2.5' + multiTenantLibVersion = '1.0.8' } implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" diff --git a/payapi/build.gradle b/payapi/build.gradle index 7e7d2ca4..3e3c2eda 100644 --- a/payapi/build.gradle +++ b/payapi/build.gradle @@ -59,6 +59,16 @@ configurations { } } +repositories { + maven { + url "http://ykt-nx.supwisdom.com/repository/ecard-repo/" + credentials { + username "${nxUser}" + password "${nxPassword}" + } + } +} + dependencies { implementation project(":payapi-common") @@ -90,6 +100,9 @@ dependencies { implementation "net.javacrumbs.shedlock:shedlock-spring:${shedlockVersion}" implementation "net.javacrumbs.shedlock:shedlock-provider-redis-spring:${shedlockVersion}" + implementation "com.supwisdom:multi-tenant-core:${multiTenantLibVersion}" + implementation "com.supwisdom:multi-tenant-datasource:${multiTenantLibVersion}" + implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}" implementation files("libs/masmgc.sdk.sms-0.0.1-SNAPSHOT.jar") implementation "commons-beanutils:commons-beanutils:${beanutilsVersion}" diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java index 80cb888d..e33c0dbb 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java @@ -4,8 +4,8 @@ import com.supwisdom.dlpay.agent.dao.QrcodePayTransDao; import com.supwisdom.dlpay.agent.domain.QrcodePattern; import com.supwisdom.dlpay.agent.domain.QrcodePayTrans; import com.supwisdom.dlpay.framework.service.SystemUtilService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.StringUtil; +import com.supwisdom.multitenant.TenantContextHolder; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -33,18 +33,18 @@ public class AgentServiceProxy { @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true) public QrcodePayTrans qrcodePayTransFindByRefno(String refno) { - return qrcodeTransDao.findByRefnoAndTenantid(refno, TenantContext.getTenantSchema()); + return qrcodeTransDao.findByRefnoAndTenantid(refno, TenantContextHolder.getContext().getTenant().getId()); } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true) public QrcodePayTrans qrcodePayTransFindByMerchIdAndBillno(String merchid, String billno) { return qrcodeTransDao.findByAgentMerchIdAndHostdateAndBillnoAndTenantid(merchid, - systemUtilService.getSysdatetime().getHostdate(), billno, TenantContext.getTenantSchema()); + systemUtilService.getSysdatetime().getHostdate(), billno, TenantContextHolder.getContext().getTenant().getId()); } public QrcodePayTrans qrcodePayTransSaveOrUpdate(@NotNull QrcodePayTrans bean) { if (StringUtil.isEmpty(bean.getTenantid())) { - bean.setTenantid(TenantContext.getTenantSchema()); + bean.setTenantid(TenantContextHolder.getContext().getTenant().getId()); } return qrcodeTransDao.save(bean); } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java index c14ee51e..a0a5c3b6 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java @@ -3,7 +3,7 @@ package com.supwisdom.dlpay.agent.service.impl; import com.supwisdom.dlpay.agent.dao.QrcodePatternDao; import com.supwisdom.dlpay.agent.domain.QrcodePattern; import com.supwisdom.dlpay.agent.service.QrcodePatternService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; +import com.supwisdom.multitenant.TenantContextHolder; import org.jetbrains.annotations.NotNull; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -22,20 +22,20 @@ public class QrcodePatternServiceImpl implements QrcodePatternService { @Override @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')") public List getAllQrcodePattern() { - return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema()); + return qrcodePatternDao.findByTenantid(TenantContextHolder.getContext().getTenant().getId()); } @Override @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true) public void deleteAllQrcodePattern() { - qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema()); + qrcodePatternDao.deleteByTenantid(TenantContextHolder.getContext().getTenant().getId()); } @Override @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'", allEntries = true) public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) { if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) { - pattern.setTenantid(TenantContext.getTenantSchema()); + pattern.setTenantid(TenantContextHolder.getContext().getTenant().getId()); } return qrcodePatternDao.save(pattern); } @@ -43,6 +43,6 @@ public class QrcodePatternServiceImpl implements QrcodePatternService { @Override @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)") public List findAllBySourcetype(String sourceType) { - return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema()); + return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContextHolder.getContext().getTenant().getId()); } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java index 14631ee2..5c6b1ea7 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java @@ -4,9 +4,9 @@ import com.supwisdom.dlpay.api.dao.*; import com.supwisdom.dlpay.api.domain.*; import com.supwisdom.dlpay.api.service.SourceTypeService; import com.supwisdom.dlpay.exception.TransactionProcessException; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.framework.util.TradeErrorCode; +import com.supwisdom.multitenant.TenantContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -195,18 +195,18 @@ public class SourceTypeServiceImpl implements SourceTypeService { @Override public List getAllEnabledSourcetype() { - return sourceTypeDao.findByEnableAndTenantid(true, TenantContext.getTenantSchema()); + return sourceTypeDao.findByEnableAndTenantid(true, TenantContextHolder.getContext().getTenant().getId()); } @Override public TSourceTypeCheckStatus getSourceTypeCheckStatus(String sourceType) { - return sourceTypeCheckDao.getBySourceTypeAndTenantId(sourceType, TenantContext.getTenantSchema()); + return sourceTypeCheckDao.getBySourceTypeAndTenantId(sourceType, TenantContextHolder.getContext().getTenant().getId()); } @Override public TSourceTypeCheckStatus saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus s) { if (s.getTenantId() == null || s.getTenantId().isEmpty()) { - s.setTenantId(TenantContext.getTenantSchema()); + s.setTenantId(TenantContextHolder.getContext().getTenant().getId()); } return sourceTypeCheckDao.save(s); } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java new file mode 100644 index 00000000..53c85bfa --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseAdapter.java @@ -0,0 +1,7 @@ +package com.supwisdom.dlpay.framework.core; + +public interface DatabaseAdapter { + default String getDefaultSchema() { + return ""; + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java index 99bb0144..8312040d 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DatabaseConfig.java @@ -4,11 +4,22 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @Configuration -public class DatabaseConfig { +public class DatabaseConfig implements DatabaseAdapter { @Value("${spring.datasource.platform}") private String platform; public String getPlatform() { return platform; } + + @Override + public String getDefaultSchema() { + if ("postgresql".equals(getPlatform())) { + return "public"; + } else if ("mysql".equals(getPlatform())) { + return "mysql"; + } else { + return ""; + } + } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java index f0cc66c6..37f30ead 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java @@ -3,9 +3,9 @@ package com.supwisdom.dlpay.framework.core; import com.supwisdom.dlpay.exception.TransactionException; import com.supwisdom.dlpay.framework.domain.TSettleLog; import com.supwisdom.dlpay.framework.service.DayendSettleService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.Constants; import com.supwisdom.dlpay.framework.util.StringUtil; +import com.supwisdom.multitenant.TenantDetailsProvider; import net.javacrumbs.shedlock.core.SchedulerLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +18,8 @@ public class DayendSettleTask { @Autowired private DayendSettleService dayendSettleService; + @Autowired + private TenantDetailsProvider tenantDetailsProvider; private TSettleLog settleLog; private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class); @@ -26,7 +28,7 @@ public class DayendSettleTask { @SchedulerLock(name = "DayendSettleTask", lockAtMostForString = "PT30M") public void doSettleTask() { if (logger.isDebugEnabled()) logger.debug("进入日结算任务!"); - if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID); + tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID); settleLog = dayendSettleService.doCreateSettleLog(); //记录日志 try { diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java new file mode 100644 index 00000000..d4629645 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java @@ -0,0 +1,21 @@ +package com.supwisdom.dlpay.framework.core; + +import com.supwisdom.multitenant.datasource.MultiTenantDataSourceProvider; +import com.supwisdom.multitenant.datasource.config.MultiTenantDataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnBean({MultiTenantDataSourceAutoConfiguration.class}) +public class MutliTenantDatasourceProviderAdapter implements DatabaseAdapter { + private final MultiTenantDataSourceProvider multiTenantDataSourceProvider; + + public MutliTenantDatasourceProviderAdapter(MultiTenantDataSourceProvider multiTenantDataSourceProvider) { + this.multiTenantDataSourceProvider = multiTenantDataSourceProvider; + } + + @Override + public String getDefaultSchema() { + return multiTenantDataSourceProvider.defaultSchema(); + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java new file mode 100644 index 00000000..ce9fe0e6 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TenantCatalogDao.java @@ -0,0 +1,8 @@ +package com.supwisdom.dlpay.framework.dao; + +import com.supwisdom.dlpay.framework.domain.TTenantCatalog; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TenantCatalogDao extends JpaRepository { + TTenantCatalog findTTenantCatalogByTenantid(String tenant); +} 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 index 36476645..c893617b 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java @@ -5,7 +5,7 @@ import javax.validation.constraints.NotNull; import java.sql.Timestamp; @Entity -@Table(name = "tb_tenant_catalog") +@Table(name = "tb_tenant_catalog", schema = "public") @SequenceGenerator(name = "tenant_catalog_seq") public class TTenantCatalog { @Id diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java index d110ae7f..51c9c3b7 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java @@ -1,31 +1,29 @@ package com.supwisdom.dlpay.framework.security; import com.supwisdom.dlpay.framework.domain.*; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.DateUtil; -import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.system.service.FunctionService; import com.supwisdom.dlpay.system.service.OperatorService; import com.supwisdom.dlpay.system.service.RoleService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.PermissionEvaluator; import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import java.io.Serializable; -import java.util.Collection; import java.util.List; @Component public class MyPermissionEvaluator implements PermissionEvaluator { - @Autowired - private RoleService roleService; - @Autowired - private OperatorService operatorService; - @Autowired - private FunctionService functionService; + private final RoleService roleService; + private final OperatorService operatorService; + private final FunctionService functionService; + + public MyPermissionEvaluator(RoleService roleService, OperatorService operatorService, FunctionService functionService) { + this.roleService = roleService; + this.operatorService = operatorService; + this.functionService = functionService; + } @Override public boolean hasPermission(Authentication authentication, Object targetUri, Object permission) { diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java index 94566fac..d38b881a 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java @@ -11,11 +11,11 @@ import com.supwisdom.dlpay.framework.data.VoucherTemp; import com.supwisdom.dlpay.framework.domain.*; import com.supwisdom.dlpay.framework.service.DayendSettleService; import com.supwisdom.dlpay.framework.service.SystemUtilService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.DateUtil; import com.supwisdom.dlpay.framework.util.MoneyUtil; import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.framework.util.Subject; +import com.supwisdom.multitenant.TenantContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -70,7 +70,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { public TSettleLog doCreateSettleLog() { TSettleLog log = new TSettleLog(); log.setStarttime(systemUtilService.getSysdatetime().getHostdatetime()); - log.setTenantId(TenantContext.getTenantSchema()); + log.setTenantId(TenantContextHolder.getContext().getTenant().getId()); return settleLogDao.save(log); } @@ -82,7 +82,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { } private boolean doSwitchPeriod() throws Exception { - TPeriod period = periodDao.getTPeriodWithLock(periodYear, periodMonth, TenantContext.getTenantSchema()); + TPeriod period = periodDao.getTPeriodWithLock(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId()); if (period.getSettleflag() == 1) { throw new Exception("月末结转已完成"); } @@ -96,7 +96,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { periodMonth = periodMonth + 1; //year不变 } - TPeriod nextPerid = periodDao.getPeriod(periodYear, periodMonth, TenantContext.getTenantSchema()); + TPeriod nextPerid = periodDao.getPeriod(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId()); if (null != nextPerid) { if (settledate != Integer.valueOf(nextPerid.getStartdate())) { throw new Exception("下一个会计期间的开始日期不正确"); @@ -115,27 +115,27 @@ public class DayendSettleServiceImpl implements DayendSettleService { nextPerid.setStartdate(startdate.toString()); nextPerid.setEnddate(enddate.toString()); nextPerid.setSettleflag(0); - nextPerid.setTenantId(TenantContext.getTenantSchema()); + nextPerid.setTenantId(TenantContextHolder.getContext().getTenant().getId()); periodDao.save(nextPerid); //保存下个会计期间 } - settleCtlDao.updateSettlePeriodByTenantid(periodYear, periodMonth, TenantContext.getTenantSchema()); - vouchernoCtlDao.updateVouchernoByTenantid(periodMonth, 0, TenantContext.getTenantSchema()); + settleCtlDao.updateSettlePeriodByTenantid(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId()); + vouchernoCtlDao.updateVouchernoByTenantid(periodMonth, 0, TenantContextHolder.getContext().getTenant().getId()); return true; } private void saveVoucher(VoucherTemp voucherTemp) { TVoucher voucher = new TVoucher(periodYear, periodMonth, 0, settledate, settledate, voucherTemp.getTranscnt(), Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), "auto", hostdate); - voucher.setTenantId(TenantContext.getTenantSchema()); + voucher.setTenantId(TenantContextHolder.getContext().getTenant().getId()); voucher = voucherDao.save(voucher); TVoucherEntry entry1; TVoucherEntry entry2; if (voucherTemp.getTransamt() >= 0) { - entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContext.getTenantSchema()); - entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContext.getTenantSchema()); + entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContextHolder.getContext().getTenant().getId()); + entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContextHolder.getContext().getTenant().getId()); } else { - entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContext.getTenantSchema()); - entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContext.getTenantSchema()); + entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContextHolder.getContext().getTenant().getId()); + entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContextHolder.getContext().getTenant().getId()); } voucherEntryDao.save(entry1); voucherEntryDao.save(entry2); @@ -143,7 +143,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { @Override public boolean doDayendSettle() throws Exception { - TSettlectl tSettlectl = settleCtlDao.findByTenantIdWithLock(TenantContext.getTenantSchema()); + TSettlectl tSettlectl = settleCtlDao.findByTenantIdWithLock(TenantContextHolder.getContext().getTenant().getId()); if (null == tSettlectl || null == tSettlectl.getBooksetno()) { throw new Exception("初始化错误,T_SETTLECTL 无初始化数据"); } @@ -164,7 +164,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { throw new TransactionException(-90, "有对账未完成"); } - TPeriod period = periodDao.getPeriod(periodYear, periodMonth, TenantContext.getTenantSchema()); + TPeriod period = periodDao.getPeriod(periodYear, periodMonth, TenantContextHolder.getContext().getTenant().getId()); if (null == period) throw new Exception("year=[" + periodYear + "],month=[" + periodMonth + "] t_period not find "); if (settledate > Integer.valueOf(period.getEnddate())) { //月切 @@ -174,25 +174,25 @@ public class DayendSettleServiceImpl implements DayendSettleService { } //新增科目插入科目余额表(末级科目) - List newEndsubjectList = subjectDao.getNewSubjectByTenantid(TenantContext.getTenantSchema()); + List newEndsubjectList = subjectDao.getNewSubjectByTenantid(TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(newEndsubjectList)) { for (TSubject subject : newEndsubjectList) { TSubjectbal subjectbal = new TSubjectbal(subject.getId(),subject.getSubjno(), subject.getTenantId()); subjectbalDao.save(subjectbal); } } - if (subjectDao.checkSettleSubjectByTenantid(TenantContext.getTenantSchema()).getExisted() > 0) { + if (subjectDao.checkSettleSubjectByTenantid(TenantContextHolder.getContext().getTenant().getId()).getExisted() > 0) { throw new Exception("初始化数据错误:科目余额表数据没有包含所有的科目余额"); } //删除未入账凭证 - if (voucherDao.checkExistUnpostVouhcer(TenantContext.getTenantSchema()).getExisted() > 0) { - voucherEntryDao.deleteUnpostVoucherentry(TenantContext.getTenantSchema()); - voucherDao.deleteUnpostVoucher(TenantContext.getTenantSchema()); + if (voucherDao.checkExistUnpostVouhcer(TenantContextHolder.getContext().getTenant().getId()).getExisted() > 0) { + voucherEntryDao.deleteUnpostVoucherentry(TenantContextHolder.getContext().getTenant().getId()); + voucherDao.deleteUnpostVoucher(TenantContextHolder.getContext().getTenant().getId()); } //用户交易凭证 - List userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate), TenantContext.getTenantSchema()); + List userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(userList)) { for (VoucherTemp temp : userList) { saveVoucher(temp); @@ -200,16 +200,16 @@ public class DayendSettleServiceImpl implements DayendSettleService { } //凭证号 - TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVouchernoByTenantid(TenantContext.getTenantSchema()); + TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVouchernoByTenantid(TenantContextHolder.getContext().getTenant().getId()); if (null == vouchernoCtl) { vouchernoCtl = new TVouchernoCtl(); vouchernoCtl.setPeriodMonth(periodMonth); vouchernoCtl.setVoucherno(0); - vouchernoCtl.setTenantId(TenantContext.getTenantSchema()); + vouchernoCtl.setTenantId(TenantContextHolder.getContext().getTenant().getId()); vouchernoCtlDao.save(vouchernoCtl); } int voucherno = vouchernoCtl.getVoucherno(); - List voucherList = voucherDao.getSettleVouchers(TenantContext.getTenantSchema()); + List voucherList = voucherDao.getSettleVouchers(TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(voucherList)) { for (TVoucher voucher : voucherList) { voucherno++; @@ -223,7 +223,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { Map v_merchbaldict = new HashMap(0); //根据商户昨天日结表生成当天日结表(交易前余额), 新增商户添加记录 - List lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday), TenantContext.getTenantSchema()); + List lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(lastShopaccdays)) { for (TShopaccday lastday : lastShopaccdays) { TShopaccday today = new TShopaccday(String.valueOf(settledate), lastday.getShopaccno(), periodYear, periodMonth, lastday.getBalance(), 0D, 0D, 0D); @@ -232,17 +232,17 @@ public class DayendSettleServiceImpl implements DayendSettleService { v_merchbaldict.put(lastday.getShopaccno(), lastday.getBalance()); } } - List newShopaccs = shopaccDao.getNewShopacc(String.valueOf(lastsettday), TenantContext.getTenantSchema()); //新增商户 + List newShopaccs = shopaccDao.getNewShopacc(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId()); //新增商户 if(!StringUtil.isEmpty(newShopaccs)){ for(String accno:newShopaccs){ TShopaccday today = new TShopaccday(String.valueOf(settledate), accno, periodYear, periodMonth, 0D, 0D, 0D, 0D); - today.setTenantId(TenantContext.getTenantSchema()); + today.setTenantId(TenantContextHolder.getContext().getTenant().getId()); shopaccdayDao.save(today); v_merchbaldict.put(accno, 0D); } } - List merchBeanList = voucherDao.getShopVoucherByAccdate(settledate, TenantContext.getTenantSchema()); + List merchBeanList = voucherDao.getShopVoucherByAccdate(settledate, TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(merchBeanList)) { for (MerchBean merch : merchBeanList) { TShopaccday merchday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), merch.getShopaccno()); @@ -254,24 +254,24 @@ public class DayendSettleServiceImpl implements DayendSettleService { shopaccdayDao.save(merchday); } } - shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime(), TenantContext.getTenantSchema()); //批量更新余额,商户日结表生成 + shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime(), TenantContextHolder.getContext().getTenant().getId()); //批量更新余额,商户日结表生成 //根据科目昨天日结表生成当天日结表(交易前借贷方余额),新增末级科目插入记录(交易前余额为科目贷方余额) - List lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday), TenantContext.getTenantSchema()); + List lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(lastSubjectDays)) { for (TSubjectday lastday : lastSubjectDays) { TSubjectday today = new TSubjectday(lastday.getSubjid(),String.valueOf(settledate), lastday.getSubjno(), periodYear, periodMonth, lastday.getDrbal(), lastday.getCrbal(), 0D, 0D, 0D, 0D, lastday.getTenantId()); subjectdayDao.save(today); } } - List newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday), TenantContext.getTenantSchema()); + List newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday), TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(newSubjectBals)) { for (TSubjectbal newSubject : newSubjectBals) { TSubjectday today = new TSubjectday(newSubject.getSubjid(),String.valueOf(settledate), newSubject.getSubjno(), periodYear, periodMonth, newSubject.getBegindrbal(), newSubject.getBegincrbal(), 0D, 0D, 0D, 0D, newSubject.getTenantId()); subjectdayDao.save(today); } } - List newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate), TenantContext.getTenantSchema()); //新增非末级科目 + List newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); //新增非末级科目 if (!StringUtil.isEmpty(newFSubjnos)) { for (TSubject subj : newFSubjnos) { double beginDrbal = 0; @@ -289,22 +289,22 @@ public class DayendSettleServiceImpl implements DayendSettleService { //初始化末级科目期初余额(包含商户科目) Map v_subjbaldict = new HashMap(0); Map v_subjbalflagdict = new HashMap(0); - List subjectList = subjectdayDao.getEndSubjectbalInfos(String.valueOf(settledate), TenantContext.getTenantSchema()); + List subjectList = subjectdayDao.getEndSubjectbalInfos(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(subjectList)) { for (MerchBean bean : subjectList) { v_subjbaldict.put(bean.getShopaccno(), MoneyUtil.formatYuan(bean.getDramt() + bean.getCramt())); } } - List subjInfoList = subjectbalDao.getSubjectbalAndFlag(TenantContext.getTenantSchema()); + List subjInfoList = subjectbalDao.getSubjectbalAndFlag(TenantContextHolder.getContext().getTenant().getId()); for (SubjectInfoBean subj : subjInfoList) { - TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subj.getSubjno(), TenantContext.getTenantSchema()); + TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subj.getSubjno(), TenantContextHolder.getContext().getTenant().getId()); if (null == tSubjectday) { throw new Exception("科目日结表无此科目记录[" + subj.getSubjno() + "]"); } v_subjbalflagdict.put(subj.getSubjno(), subj.getBalflag()); - MerchBean suminfo = voucherDao.getSettleSuminfo(settledate, subj.getSubjno(), TenantContext.getTenantSchema()); + MerchBean suminfo = voucherDao.getSettleSuminfo(settledate, subj.getSubjno(), TenantContextHolder.getContext().getTenant().getId()); double sumDramt = ((null == suminfo || null == suminfo.getDramt()) ? 0 : suminfo.getDramt().doubleValue()); double sumCramt = ((null == suminfo || null == suminfo.getCramt()) ? 0 : suminfo.getCramt().doubleValue()); tSubjectday.setDramt(sumDramt); @@ -318,7 +318,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { subjectdayDao.save(tSubjectday); } //根据二级更新一级科目日结 - List parentSubject = subjectdayDao.getParentSubjectday(String.valueOf(settledate), TenantContext.getTenantSchema()); + List parentSubject = subjectdayDao.getParentSubjectday(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); for (TSubjectday fsub : parentSubject) { FSubjectInfoBean sumInfo = subjectdayDao.getParentSumInfo(String.valueOf(settledate), fsub.getSubjno(), fsub.getTenantId()); fsub.setBegindrbal((null == sumInfo || null == sumInfo.getBegindrbal()) ? 0D : sumInfo.getBegindrbal()); @@ -332,7 +332,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { } //批量更新凭证明细中商户或科目账户的余额 - List entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate, TenantContext.getTenantSchema()); + List entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate, TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(entryList)) { for (TVoucherEntry vce : entryList) { if (Subject.SUBJNO_MACHANT_INCOME.equals(vce.getSubjno())) { @@ -388,7 +388,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { //核算科目日结表科目余额和凭证明细余额是否一致 for (String subjno : v_subjbaldict.keySet()) { - TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno, TenantContext.getTenantSchema()); + TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno, TenantContextHolder.getContext().getTenant().getId()); if (!MoneyUtil.moneyEqual(v_subjbaldict.get(subjno), tSubjectday.getDrbal() + tSubjectday.getCrbal())) { throw new Exception("结算后检查失败:科目日结表期末余额不等,科目号[" + subjno + "],科目余额[" + (tSubjectday.getDrbal() + tSubjectday.getCrbal()) + "],凭证科目余额[" + v_subjbaldict.get(subjno) + "]"); } @@ -404,8 +404,8 @@ public class DayendSettleServiceImpl implements DayendSettleService { } //核对商户日结表余额表和科目日结表商户余额是否一致 - TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), Subject.SUBJNO_MACHANT_INCOME, TenantContext.getTenantSchema()); - Double merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate), TenantContext.getTenantSchema()); // + TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), Subject.SUBJNO_MACHANT_INCOME, TenantContextHolder.getContext().getTenant().getId()); + Double merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); // double shopSubbal = (shopSubjectday == null ? 0 : shopSubjectday.getCrbal()); double shopMerchbal = (merchbal == null ? 0 : merchbal); if (!MoneyUtil.moneyEqual(shopSubbal, shopMerchbal)) { @@ -413,7 +413,7 @@ public class DayendSettleServiceImpl implements DayendSettleService { } //核算一级科目余额是否平衡 - FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate), TenantContext.getTenantSchema()); + FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate), TenantContextHolder.getContext().getTenant().getId()); if (!MoneyUtil.moneyEqual(allParentSubjbal.getBegindrbal(), allParentSubjbal.getBegincrbal())) { throw new Exception("结算后检查失败:一级科目余额表期初余额不平衡,借方[" + allParentSubjbal.getBegindrbal() + "],贷方[" + allParentSubjbal.getBegincrbal() + "]"); } @@ -424,8 +424,8 @@ public class DayendSettleServiceImpl implements DayendSettleService { throw new Exception("结算后检查失败:一级科目余额表期末额不平衡,借方[" + allParentSubjbal.getDrbal() + "]贷方[" + allParentSubjbal.getCrbal() + "]"); } //校验科目余额表的balflag=1的总期末余额和balflag=2的总期末余额是否一致 - Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1, TenantContext.getTenantSchema()); - Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2, TenantContext.getTenantSchema()); + Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1, TenantContextHolder.getContext().getTenant().getId()); + Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2, TenantContextHolder.getContext().getTenant().getId()); if (null == balflag_1_sumbal || null == balflag_1_sumbal) throw new Exception("结算后检查失败:科目余额表无数据"); if (!MoneyUtil.moneyEqual(balflag_1_sumbal, balflag_2_sumbal)) { throw new Exception("结算后检查失败:科目余额表期末余额不平衡,借方[" + balflag_1_sumbal + "],贷方[" + balflag_2_sumbal + "]"); diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java index a15f4de4..e3eefc4f 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java @@ -1,13 +1,14 @@ package com.supwisdom.dlpay.framework.service.impl; -import com.supwisdom.dlpay.exception.TransactionCheckException; import com.supwisdom.dlpay.exception.TransactionProcessException; import com.supwisdom.dlpay.framework.core.DatabaseConfig; import com.supwisdom.dlpay.framework.dao.*; import com.supwisdom.dlpay.framework.data.SystemDateTime; -import com.supwisdom.dlpay.framework.domain.*; +import com.supwisdom.dlpay.framework.domain.TBusinesspara; +import com.supwisdom.dlpay.framework.domain.TSettlectl; +import com.supwisdom.dlpay.framework.domain.TSyspara; +import com.supwisdom.dlpay.framework.domain.TTranscode; import com.supwisdom.dlpay.framework.service.SystemUtilService; -import com.supwisdom.dlpay.framework.util.DateUtil; import com.supwisdom.dlpay.framework.util.NumberUtil; import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.framework.util.TradeErrorCode; @@ -16,10 +17,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; -import java.util.Date; - @Service public class SystemUtilServiceImpl implements SystemUtilService { @Autowired diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java deleted file mode 100644 index bff7098d..00000000 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.supwisdom.dlpay.framework.tenant; - -import java.util.HashMap; -import java.util.Map; -import javax.sql.DataSource; - -import lombok.extern.slf4j.Slf4j; -import org.hibernate.MultiTenancyStrategy; -import org.hibernate.cfg.Environment; -import org.hibernate.context.spi.CurrentTenantIdentifierResolver; -import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings; -import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.orm.jpa.JpaVendorAdapter; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; - - -@Configuration -@Slf4j -public class HibernateConfig { - - private final JpaProperties jpaProperties; - - private final HibernateProperties hibernateProperties; - - public HibernateConfig(@Autowired JpaProperties jpaProperties, - HibernateProperties hibernateProperties) { - this.jpaProperties = jpaProperties; - this.hibernateProperties = hibernateProperties; - } - - @Bean - public JpaVendorAdapter getJpaVendorAdapter() { - HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); - adapter.setGenerateDdl(true); - return adapter; - } - - @Bean("entityManagerFactory") - public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource, - MultiTenantConnectionProvider multiTenantConnectionProvider, - CurrentTenantIdentifierResolver currentTenantIdentifierResolver) { - Map properties = new HashMap<>(); - properties.putAll(hibernateProperties - .determineHibernateProperties(jpaProperties.getProperties(), - new HibernateSettings())); - properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA); - properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider); - properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolver); - - LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); - em.setDataSource(dataSource); - em.setPackagesToScan("com.supwisdom"); - em.setJpaPropertyMap(properties); - em.setJpaVendorAdapter(getJpaVendorAdapter()); - log.info("setup multi-tenant entityManagerFactor"); - return em; - } - -} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java deleted file mode 100644 index 0666b657..00000000 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.supwisdom.dlpay.framework.tenant; - -import com.supwisdom.dlpay.framework.util.StringUtil; -import lombok.extern.slf4j.Slf4j; -import org.hibernate.HibernateException; -import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - -/** - * Created by shuwei on 2018/12/4. - */ -@Slf4j -@Component -public class MultiTenantConnectionProviderImpl implements MultiTenantConnectionProvider { - @Autowired - private DataSource dataSource; - - @Override - public Connection getAnyConnection() throws SQLException { - return dataSource.getConnection(); - } - - @Override - public void releaseAnyConnection(Connection connection) throws SQLException { - connection.close(); - } - - @Override - public Connection getConnection(String ti) throws SQLException { - String tenantIdentifier = TenantContext.getTenantSchema(); - final Connection connection = getAnyConnection(); - try { - if (!StringUtil.isEmpty(tenantIdentifier)) { - log.debug("postgresql set search path to <" + tenantIdentifier + ">"); - connection.createStatement().execute("SET search_path = \"" + tenantIdentifier + "\", public"); - } else { - log.debug("postgresql set search path to public"); - connection.createStatement().execute("SET search_path = public"); - } - } catch (SQLException e) { - throw new HibernateException("Problem setting schema to " + tenantIdentifier, e); - } - return connection; - } - - @Override - public void releaseConnection(String tenantIdentifier, Connection connection) throws SQLException { - connection.close(); - } - - @Override - public boolean supportsAggressiveRelease() { - return false; - } - - @SuppressWarnings("rawtypes") - @Override - public boolean isUnwrappableAs(Class unwrapType) { - return false; - } - - @Override - public T unwrap(Class unwrapType) { - return null; - } -} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java deleted file mode 100644 index c1dc432b..00000000 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.supwisdom.dlpay.framework.tenant; - -import org.hibernate.context.spi.CurrentTenantIdentifierResolver; -import org.springframework.stereotype.Component; - -/** - * Created by shuwei on 2018/12/4. - */ -@Component -public class MultiTenantIdentifierResolver implements CurrentTenantIdentifierResolver { - @Override - public String resolveCurrentTenantIdentifier() { - if (TenantContext.getTenantSchema() == null) { - return "default"; - } - return TenantContext.getTenantSchema(); - } - - @Override - public boolean validateExistingCurrentSessions() { - return true; - } -} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java index 254c4e42..fa72e3ee 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantCacheKeyGen.java @@ -1,6 +1,7 @@ package com.supwisdom.dlpay.framework.tenant; +import com.supwisdom.multitenant.TenantContextHolder; import org.apache.commons.lang3.StringUtils; import org.springframework.cache.interceptor.KeyGenerator; @@ -14,7 +15,7 @@ public class TenantCacheKeyGen implements KeyGenerator { StringBuilder name = new StringBuilder(); name.append(target.getClass().getSimpleName()) .append(delimiter); - String tenant = TenantContext.getTenantSchema(); + String tenant = TenantContextHolder.getContext().getTenant().getId(); if (StringUtils.isEmpty(tenant)) { tenant = "default"; } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java deleted file mode 100644 index c1d4ca44..00000000 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.supwisdom.dlpay.framework.tenant; - -/** - * Created by shuwei on 2018/11/29. - */ -public class TenantContext { - private static ThreadLocal currentTenant = new ThreadLocal<>(); - - public static void setTenantSchema(String tid) { - currentTenant.set(tid); - } - - public static String getTenantSchema() { - return currentTenant.get(); - } - - public static void clear() { - currentTenant.set(null); - } -} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java index 585767fd..21311c72 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java @@ -1,5 +1,6 @@ package com.supwisdom.dlpay.framework.tenant; +import com.supwisdom.multitenant.TenantContextHolder; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -8,7 +9,7 @@ public class TenantHolder { private static final char delimiter = '-'; public String getId() { - String id = TenantContext.getTenantSchema(); + String id = TenantContextHolder.getContext().getTenant().getId(); if (id == null || StringUtils.isEmpty(id)) { return "default"; } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java deleted file mode 100644 index e60b957a..00000000 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.supwisdom.dlpay.framework.tenant; - -import com.supwisdom.dlpay.framework.domain.TOperator; -import com.supwisdom.dlpay.framework.util.Constants; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -@Component -public class TenantInterceptor extends HandlerInterceptorAdapter { - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - throws Exception { - String tenantId = request.getHeader(Constants.HEADER_TETANTID); - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - if (auth != null && auth.getPrincipal() instanceof TOperator) { - TOperator oper = (TOperator) auth.getPrincipal(); - if (tenantId != null && !oper.getTenantId().equals(tenantId)) { - throw new RuntimeException("tenant ID 不匹配"); - } - TenantContext.setTenantSchema(oper.getTenantId()); - } else { - TenantContext.setTenantSchema(tenantId); - } - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, - Object handler, ModelAndView modelAndView) - throws Exception { - // - } -} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java index a0173a01..35c05ac3 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Signature.java @@ -1,7 +1,7 @@ package com.supwisdom.dlpay.framework.util; import com.supwisdom.dlpay.api.util.HMACUtil; -import com.supwisdom.dlpay.framework.tenant.TenantContext; +import com.supwisdom.multitenant.TenantContextHolder; public class Signature { public static final String SPY_TAC = "DLzJi044R7QHhJCDhpjZId8d"; @@ -12,7 +12,7 @@ public class Signature { } public static String generateTac(String factor, String data) { - String tenant = TenantContext.getTenantSchema(); + String tenant = TenantContextHolder.getContext().getTenant().getId(); if (tenant == null) { throw new IllegalArgumentException("TenantID 未定义"); } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java index c2dc9d1e..63e821c3 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java @@ -4,11 +4,11 @@ package com.supwisdom.dlpay.system.controller; import com.supwisdom.dlpay.api.bean.JsonResult; import com.supwisdom.dlpay.framework.domain.TFunction; import com.supwisdom.dlpay.framework.domain.TResource; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.PageResult; import com.supwisdom.dlpay.framework.util.WebConstant; import com.supwisdom.dlpay.system.bean.FunctionSearchBean; import com.supwisdom.dlpay.system.service.FunctionService; +import com.supwisdom.multitenant.TenantContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; @@ -59,7 +59,7 @@ public class FunctionController { @ResponseBody public JsonResult add(@RequestBody TFunction function) { if (function != null) { - function.setTenantId(TenantContext.getTenantSchema()); + function.setTenantId(TenantContextHolder.getContext().getTenant().getId()); return functionService.saveFunction(function); } else { return JsonResult.error("添加失败"); @@ -124,7 +124,7 @@ public class FunctionController { public JsonResult addres(@RequestBody TResource resource) { if (resource != null) { if(null == resource.getTenantId()){ - resource.setTenantId(TenantContext.getTenantSchema()); + resource.setTenantId(TenantContextHolder.getContext().getTenant().getId()); } return functionService.saveRes(resource); } else { diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java index 22f391ec..7dc43bf7 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java @@ -9,12 +9,12 @@ import com.supwisdom.dlpay.framework.domain.TApiClient; import com.supwisdom.dlpay.framework.domain.TBusinesspara; import com.supwisdom.dlpay.framework.domain.TSyspara; import com.supwisdom.dlpay.framework.service.SystemUtilService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.*; import com.supwisdom.dlpay.system.service.DictionaryProxy; import com.supwisdom.dlpay.system.service.ParamService; import com.supwisdom.dlpay.util.ConstantUtil; import com.supwisdom.dlpay.util.WebCheckException; +import com.supwisdom.multitenant.TenantContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; @@ -354,7 +354,7 @@ public class ParamController { apiClient.setAppid(appid.trim()); apiClient.setSecret(RandomUtils.getUUIDStr()); apiClient.setStatus(TradeDict.STATUS_NORMAL); - apiClient.setTenantId(TenantContext.getTenantSchema()); + apiClient.setTenantId(TenantContextHolder.getContext().getTenant().getId()); apiClient.setRoles(roles.replaceAll(",", ";")); if (paramService.saveOrUpdateApiClient(apiClient)) { return JsonResult.ok("新增成功"); diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java index 508361c1..7a7ca115 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java @@ -6,11 +6,11 @@ import com.supwisdom.dlpay.framework.dao.OperatorDao; import com.supwisdom.dlpay.framework.domain.TOperLog; import com.supwisdom.dlpay.framework.domain.TOperRole; import com.supwisdom.dlpay.framework.domain.TOperator; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.*; import com.supwisdom.dlpay.system.bean.LogBean; import com.supwisdom.dlpay.system.bean.OperatorSearchBean; import com.supwisdom.dlpay.system.service.OperatorService; +import com.supwisdom.multitenant.TenantContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -78,10 +78,10 @@ public class OperatorServiceImpl implements OperatorService { operator.setOpendate(DateUtil.getNow("yyyyMMdd")); operator.setStatus(TradeDict.STATUS_NORMAL); operator.setOpertype(WebConstant.OPERTYPE_DEFAULT); - operator.setTenantId(TenantContext.getTenantSchema()); + operator.setTenantId(TenantContextHolder.getContext().getTenant().getId()); BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); operator.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT)); - operator.setTenantId(TenantContext.getTenantSchema()); + operator.setTenantId(TenantContextHolder.getContext().getTenant().getId()); operator = operatorDao.save(operator); for (String role : roleids) { TOperRole operRole = new TOperRole(); diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java index 88e7e1b5..46c8b14a 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java @@ -10,13 +10,12 @@ import com.supwisdom.dlpay.framework.dao.SysparaDao; import com.supwisdom.dlpay.framework.domain.TApiClient; import com.supwisdom.dlpay.framework.domain.TBusinesspara; import com.supwisdom.dlpay.framework.domain.TSyspara; -import com.supwisdom.dlpay.framework.tenant.TenantContext; -import com.supwisdom.dlpay.framework.tenant.TenantHolder; import com.supwisdom.dlpay.framework.util.PageResult; import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.system.service.ParamService; import com.supwisdom.dlpay.util.ConstantUtil; import com.supwisdom.dlpay.util.WebCheckException; +import com.supwisdom.multitenant.TenantContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -112,7 +111,7 @@ public class ParamServiceImpl implements ParamService { @Override public boolean saveOrUpdateBusinesspara(TBusinesspara businesspara) { if (null != businesspara) { - businesspara.setTenantId(TenantContext.getTenantSchema()); + businesspara.setTenantId(TenantContextHolder.getContext().getTenant().getId()); businessparaDao.save(businesspara); return true; } @@ -182,7 +181,7 @@ public class ParamServiceImpl implements ParamService { @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', #sourceType.sourceType)") public boolean saveOrUpdateSourceType(TSourceType sourceType) { if (null != sourceType) { - sourceType.setTenantid(TenantContext.getTenantSchema()); + sourceType.setTenantid(TenantContextHolder.getContext().getTenant().getId()); sourceTypeDao.save(sourceType); return true; } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java index ce04c411..0d908a24 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java @@ -7,13 +7,13 @@ import com.supwisdom.dlpay.framework.domain.TPermission; import com.supwisdom.dlpay.framework.domain.TResource; import com.supwisdom.dlpay.framework.domain.TRole; import com.supwisdom.dlpay.framework.domain.TRoleFunction; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.DateUtil; import com.supwisdom.dlpay.framework.util.PageResult; import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.system.bean.FunctionSearchBean; import com.supwisdom.dlpay.system.bean.ZTreeNode; import com.supwisdom.dlpay.system.service.RoleService; +import com.supwisdom.multitenant.TenantContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -96,7 +96,7 @@ public class RoleServiceImpl implements RoleService { temp.setRoleName(role.getRoleName()); temp.setRoleDesc(role.getRoleDesc()); temp.setLastsaved(DateUtil.getNow()); - temp.setTenantId(TenantContext.getTenantSchema()); + temp.setTenantId(TenantContextHolder.getContext().getTenant().getId()); roleDao.save(temp); } else { TRole temp = roleDao.findByRoleName(role.getRoleName()); @@ -107,7 +107,7 @@ public class RoleServiceImpl implements RoleService { role.setCreatetime(DateUtil.getNow()); role.setEditflag(1); role.setRoleCode("ROLE_ADMIN"); - role.setTenantId(TenantContext.getTenantSchema()); + role.setTenantId(TenantContextHolder.getContext().getTenant().getId()); roleDao.save(role); } return JsonResult.ok("成功"); @@ -134,7 +134,7 @@ public class RoleServiceImpl implements RoleService { TPermission perm = new TPermission(); perm.setRoleId(roleId); perm.setResid(resId); - perm.setTenantId(TenantContext.getTenantSchema()); + perm.setTenantId(TenantContextHolder.getContext().getTenant().getId()); return perm; } @@ -147,7 +147,7 @@ public class RoleServiceImpl implements RoleService { TRoleFunction func = new TRoleFunction(); func.setFunctionId(funcId); func.setRoleId(roleId); - func.setTenantId(TenantContext.getTenantSchema()); + func.setTenantId(TenantContextHolder.getContext().getTenant().getId()); return func; } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java index 1cccf992..d647d391 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java @@ -17,13 +17,13 @@ import com.supwisdom.dlpay.framework.dao.ShopaccDao; import com.supwisdom.dlpay.framework.data.SystemDateTime; import com.supwisdom.dlpay.framework.domain.*; import com.supwisdom.dlpay.framework.service.SystemUtilService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.*; import com.supwisdom.dlpay.system.bean.*; import com.supwisdom.dlpay.system.service.ShopDataService; import com.supwisdom.dlpay.util.ConstantUtil; import com.supwisdom.dlpay.util.EnumCheck; import com.supwisdom.dlpay.util.WebCheckException; +import com.supwisdom.multitenant.TenantContextHolder; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -174,7 +174,7 @@ public class ShopDataServiceImpl implements ShopDataService { SystemDateTime dt = systemUtilService.getSysdatetime(); shop.setOpendate(dt.getHostdate()); - shop.setTenantId(TenantContext.getTenantSchema()); + shop.setTenantId(TenantContextHolder.getContext().getTenant().getId()); shop.setAddOperid(oper == null ? null : oper.getOperid()); if (!needCheck) { //不需要审核 @@ -328,7 +328,7 @@ public class ShopDataServiceImpl implements ShopDataService { //新增 SystemDateTime dt = systemUtilService.getSysdatetime(); shop.setOpendate(dt.getHostdate()); - shop.setTenantId(TenantContext.getTenantSchema()); + shop.setTenantId(TenantContextHolder.getContext().getTenant().getId()); shopDao.save(shop); if (enumUtil.isInEnums(shop.getShoptype(), ShopTypes.NORMAL)) { TShopacc shopacc = new TShopacc(); @@ -413,7 +413,7 @@ public class ShopDataServiceImpl implements ShopDataService { @Override public boolean saveOrUpdateShopPaytype(TShopSourceType shopPaytype) { if (null != shopPaytype) { - shopPaytype.setTenantid(TenantContext.getTenantSchema()); + shopPaytype.setTenantid(TenantContextHolder.getContext().getTenant().getId()); shopSourceTypeDao.save(shopPaytype); return true; } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java index b8790ae7..a34165a8 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java @@ -8,11 +8,11 @@ import com.supwisdom.dlpay.api.domain.TSourceType; import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus; import com.supwisdom.dlpay.api.domain.TTransactionChkdtl; import com.supwisdom.dlpay.api.domain.TTransactionChkfile; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.DateUtil; import com.supwisdom.dlpay.framework.util.PageResult; import com.supwisdom.dlpay.framework.util.StringUtil; import com.supwisdom.dlpay.system.service.SourcetypeCheckManagerService; +import com.supwisdom.multitenant.TenantContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -88,7 +88,7 @@ public class SourcetypeCheckManagerServiceImpl implements SourcetypeCheckManager @Override public List getNeedCheckSourcetype() { - List list = sourceTypeDao.findNeedChecks(TenantContext.getTenantSchema()); + List list = sourceTypeDao.findNeedChecks(TenantContextHolder.getContext().getTenant().getId()); if (!StringUtil.isEmpty(list)) { return list; } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java index 01105f89..549412bd 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java @@ -7,7 +7,6 @@ import com.supwisdom.dlpay.api.types.IDTypes; import com.supwisdom.dlpay.api.types.SexTypes; import com.supwisdom.dlpay.framework.data.SystemDateTime; import com.supwisdom.dlpay.framework.service.SystemUtilService; -import com.supwisdom.dlpay.framework.tenant.TenantContext; import com.supwisdom.dlpay.framework.util.*; import com.supwisdom.dlpay.system.bean.CitizenCardSearchBean; import com.supwisdom.dlpay.system.bean.CitizenCardShowBean; @@ -15,6 +14,7 @@ import com.supwisdom.dlpay.system.bean.PersonParamBean; import com.supwisdom.dlpay.system.service.UserDataService; import com.supwisdom.dlpay.util.ConstantUtil; import com.supwisdom.dlpay.util.WebCheckException; +import com.supwisdom.multitenant.TenantContextHolder; import org.hibernate.query.internal.NativeQueryImpl; import org.hibernate.transform.Transformers; import org.springframework.beans.factory.annotation.Autowired; @@ -103,7 +103,7 @@ public class UserDataServiceImpl implements UserDataService { person.setStatus(TradeDict.STATUS_NORMAL); } person.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime()); - person.setTenantid(TenantContext.getTenantSchema()); + person.setTenantid(TenantContextHolder.getContext().getTenant().getId()); personDao.save(person); return JsonResult.ok("修改成功"); } else { @@ -114,7 +114,7 @@ public class UserDataServiceImpl implements UserDataService { SystemDateTime systemDateTime = systemUtilService.getSysdatetime(); person.setStatus(TradeDict.STATUS_NORMAL); person.setLastsaved(systemDateTime.getHostdatetime()); - person.setTenantid(TenantContext.getTenantSchema()); + person.setTenantid(TenantContextHolder.getContext().getTenant().getId()); person = personDao.save(person); TAccount account = new TAccount(); @@ -344,7 +344,7 @@ public class UserDataServiceImpl implements UserDataService { person.setEmail(null == email ? null : email.trim()); person.setMobile(null == mobile ? null : mobile.trim()); person.setLastsaved(dt.getHostdatetime()); - person.setTenantid(TenantContext.getTenantSchema()); + person.setTenantid(TenantContextHolder.getContext().getTenant().getId()); person = personDao.save(person); TAccount account = new TAccount(); @@ -457,7 +457,7 @@ public class UserDataServiceImpl implements UserDataService { newPerson.setEmail(null == email ? null : email.trim()); newPerson.setMobile(null == mobile ? null : mobile.trim()); newPerson.setLastsaved(dt.getHostdatetime()); - newPerson.setTenantid(TenantContext.getTenantSchema()); + newPerson.setTenantid(TenantContextHolder.getContext().getTenant().getId()); newPerson = personDao.save(newPerson); TAccount account = new TAccount(); diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt index fd908eb8..746f6b21 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt @@ -1,6 +1,12 @@ package com.supwisdom.dlpay +import com.supwisdom.dlpay.framework.dao.TenantCatalogDao import com.supwisdom.dlpay.framework.tenant.TenantCacheKeyGen +import com.supwisdom.dlpay.framework.util.Constants +import com.supwisdom.multitenant.TenantDetails +import com.supwisdom.multitenant.TenantDetailsProvider +import com.supwisdom.multitenant.annotations.EnableHttpHeaderTenantInterceptor +import com.supwisdom.multitenant.annotations.EnableSessionTenantInterceptor import io.lettuce.core.ReadFrom import mu.KotlinLogging import net.javacrumbs.shedlock.core.LockProvider @@ -161,10 +167,34 @@ class TenantConfigListener { } } +@Component +class MyTenantDetailsProvider : TenantDetailsProvider { + @Autowired + private lateinit var tenantCatalogDao: TenantCatalogDao + + private val defaultTenant = TenantDetails().apply { + id = Constants.DEFAULT_TENANTID + dbSchema = "public" + dataCenter = "defaul" + } + + override fun createDetailsById(id: String?): TenantDetails { + return tenantCatalogDao.findTTenantCatalogByTenantid(id)?.let { catalog -> + TenantDetails().apply { + this.id = catalog.tenantid + dbSchema = catalog.tenantid + dataCenter = catalog.dataCenter + } + } ?: return defaultTenant + } +} + @SpringBootApplication @EnableDiscoveryClient @EnableScheduling @EnableCaching +@EnableHttpHeaderTenantInterceptor +@EnableSessionTenantInterceptor @ServletComponentScan class PayApiApplication : SpringBootServletInitializer() { diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt index 19f50644..29f00d52 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt @@ -2,11 +2,9 @@ package com.supwisdom.dlpay.api import com.supwisdom.dlpay.api.bean.JsonResult import com.supwisdom.dlpay.api.exception.RequestParamCheckException -import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.framework.service.CommonService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.TradeErrorCode import mu.KotlinLogging import org.aspectj.lang.ProceedingJoinPoint diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt index 10541a89..b2b5ed43 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt @@ -13,10 +13,11 @@ import com.supwisdom.dlpay.api.service.TransactionServiceProxy import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.service.DayendSettleService import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.Constants import com.supwisdom.dlpay.framework.util.StringUtil import com.supwisdom.dlpay.util.ConstantUtil +import com.supwisdom.multitenant.TenantContextHolder +import com.supwisdom.multitenant.TenantDetailsProvider import mu.KotlinLogging import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler import org.springframework.beans.factory.annotation.Autowired @@ -89,9 +90,12 @@ class ShopAccBalanceAsyncTask { @Autowired private lateinit var shopaccService: ShopaccService + @Autowired + private lateinit var tenantDetailsProvider: TenantDetailsProvider + @Async("shopAccBalanceUpdater") fun updateShopBalance(shopdtl: TShopdtl) { - TenantContext.setTenantSchema(shopdtl.tenantid) + TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(shopdtl.tenantid) shopaccService.recalcShopBalance(shopdtl.refno, true) } } @@ -112,10 +116,13 @@ class AgentQueryResultTask { @Autowired private lateinit var systemUtilService: SystemUtilService + @Autowired + private lateinit var tenantDetailsProvider: TenantDetailsProvider + @Async("queryAgentPayResult") fun queryResult(transaction: TTransactionMain, qcnt: Int) { try { - if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(transaction.tenantid) + TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(transaction.tenantid) if (qcnt >= YnrccUtil.QUERY_MAX_COUNT) { //查询超最大次数 @@ -185,10 +192,13 @@ class SettlementAsyncTask { private val logger = KotlinLogging.logger { } + @Autowired + private lateinit var tenantDetailsProvider: TenantDetailsProvider + @Async("handSettlementAsyncTask") fun doHandSettleTask() { logger.info("进入手动发起的异步结算:") - if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) + TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(Constants.DEFAULT_TENANTID) val settleLog = dayendSettleService.doCreateSettleLog() //记录日志 try { val ret = dayendSettleService.doDayendSettle() diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt index 32c43b6a..212dae7a 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt @@ -8,8 +8,6 @@ import com.supwisdom.dlpay.api.exception.RequestParamCheckException import com.supwisdom.dlpay.api.service.DaliDatasyncService import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext -import com.supwisdom.dlpay.framework.util.Constants import com.supwisdom.dlpay.framework.util.DateUtil import com.supwisdom.dlpay.framework.util.StringUtil import com.supwisdom.dlpay.framework.util.SysparaUtil @@ -17,7 +15,7 @@ import mu.KotlinLogging import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* -import java.io.* +import java.io.File import java.nio.charset.Charset @RequestMapping("/api/common/dlcard") @@ -38,7 +36,6 @@ class DaliDatasyncApiController { @PostMapping("/datasync") fun daliDatasync(@RequestBody param: DaliDatasyncParam): ResponseEntity { try { - if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置 param.checkParam() val appid = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_APPID) val appkey = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_SECRET) @@ -131,7 +128,6 @@ class DaliDatasyncApiController { } try { - if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置 val txtFile = File(filename) val batchSize = 1000 var sumCount = 0 @@ -219,7 +215,6 @@ class DaliDatasyncApiController { } try { - if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置 var totalcnt = 0 var failcnt = 0 var detailMsg = "" diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt index 3a133e27..e5787940 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt @@ -3,7 +3,8 @@ package com.supwisdom.dlpay.api.controller import com.supwisdom.dlpay.agent.AgentCode import com.supwisdom.dlpay.agent.service.AlipayService import com.supwisdom.dlpay.agent.service.WechatService -import com.supwisdom.dlpay.framework.tenant.TenantContext +import com.supwisdom.multitenant.TenantContextHolder +import com.supwisdom.multitenant.TenantDetailsProvider import org.dom4j.Element import org.dom4j.io.SAXReader import org.slf4j.LoggerFactory @@ -27,13 +28,15 @@ class NotifyController { lateinit var alipayService: AlipayService @Autowired lateinit var wechatService: WechatService + @Autowired + lateinit var tenantDetailsProvider: TenantDetailsProvider @RequestMapping(value = ["/wechat/{schema}"]) @ResponseBody fun index(@PathVariable schema: String, request: HttpServletRequest, response: HttpServletResponse): String { logger.error("====================== 收到微信回调通知 wechat notify: ========================") - TenantContext.setTenantSchema(schema) + tenantDetailsProvider.defaultTenant(schema) try { // 解析结果存储在HashMap var map: MutableMap = HashMap() @@ -87,7 +90,7 @@ class NotifyController { fun alipay(@PathVariable schema: String, request: HttpServletRequest, response: HttpServletResponse): String { logger.error("====================== 收到支付宝回调通知 alipay notify: ========================") - TenantContext.setTenantSchema(schema) + tenantDetailsProvider.defaultTenant(schema) // 解析结果存储在HashMap val map = makeMapFromParam(request) val resp = alipayService.doNotify(map) diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt index 97f24037..b1a0a54b 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt @@ -1,26 +1,23 @@ package com.supwisdom.dlpay.api.controller -import com.supwisdom.dlpay.api.bean.DownloadShopBillData import com.supwisdom.dlpay.api.bean.DownloadShopBillParam import com.supwisdom.dlpay.api.bean.OpenShopParam import com.supwisdom.dlpay.api.bean.QueryShopParam import com.supwisdom.dlpay.api.exception.RequestParamCheckException -import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.api.service.ShopService import com.supwisdom.dlpay.exception.TransactionException +import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.framework.service.CommonService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.TradeErrorCode import com.supwisdom.dlpay.system.service.DtlDataService import com.supwisdom.dlpay.util.ConstantUtil -import org.apache.log4j.spi.ErrorCode import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* +import java.io.OutputStream import java.net.URLDecoder import java.nio.charset.StandardCharsets import javax.servlet.http.HttpServletResponse -import java.io.OutputStream as OutputStream @RestController @RequestMapping("/api/shop") @@ -35,7 +32,6 @@ class ShopAPIController { @PostMapping("/open") fun openAccount(@RequestBody param: OpenShopParam): ResponseEntity { try { - TenantContext.setTenantSchema(param.tenantid) shopService.findByThirdUniqueId(param.shopUniqueId)?.let { return ResponseEntity.ok(ResponseBodyBuilder.create() .fail(TradeErrorCode.BUSINESS_SHOP_EXISTS, "该商户唯一号[${param.shopUniqueId}]已经存在")) @@ -62,7 +58,6 @@ class ShopAPIController { @GetMapping("/query") fun queryShop(@RequestBody param: QueryShopParam): ResponseEntity { try { - TenantContext.setTenantSchema(param.tenantid) shopService.findByShopBySearch(param.shopid, param.shopaccno, param.shopUniqueId)?.let { return ResponseEntity.ok(ResponseBodyBuilder.create() .data("shop", it) diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt index 59c4278b..cf9fd8f6 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt @@ -9,17 +9,16 @@ import com.supwisdom.dlpay.api.service.* import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.ResponseBodyBuilder -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.Subject import com.supwisdom.dlpay.framework.util.TradeCode import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.framework.util.TradeErrorCode +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity import org.springframework.validation.annotation.Validated import org.springframework.web.bind.annotation.* import java.net.URLDecoder -import javax.validation.Valid import kotlin.math.roundToInt @RestController @@ -303,7 +302,7 @@ class UserAPIController { val originTrans = transactionService.findTransactionByRefno(request.originRefno) ?: return ResponseBodyBuilder.failEntity(result, TradeErrorCode.TRANSACTION_NOT_EXISTS, "退款原交易参考号不存在") - if (originTrans.tenantid != TenantContext.getTenantSchema()) { + if (originTrans.tenantid != TenantContextHolder.getContext().tenant.id) { return ResponseBodyBuilder.failEntity(result, TradeErrorCode.INPUT_DATA_ERROR, "退款交易参考号租户错误") } @@ -354,7 +353,7 @@ class UserAPIController { ?: throw TransactionCheckException(TradeErrorCode.TRANSACTION_NOT_EXISTS , "交易不存在") val result = CardBizResponse() - if (transaction.tenantid != TenantContext.getTenantSchema()) { + if (transaction.tenantid != TenantContextHolder.getContext().tenant.id) { return ResponseBodyBuilder.failEntity(result, TradeErrorCode.INPUT_DATA_ERROR, "非本租户交易参考号") } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt index eec664a1..33d9a729 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt @@ -11,15 +11,14 @@ import com.supwisdom.dlpay.api.service.SourceTypeService import com.supwisdom.dlpay.api.service.TransactionReconciliationService import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.Constants import com.supwisdom.dlpay.framework.util.DateUtil import com.supwisdom.dlpay.util.ConstantUtil +import com.supwisdom.multitenant.TenantDetailsProvider import mu.KotlinLogging import net.javacrumbs.shedlock.core.SchedulerLock import org.springframework.beans.BeansException import org.springframework.beans.factory.annotation.Autowired -import org.springframework.context.ApplicationContext import org.springframework.scheduling.annotation.Async import org.springframework.scheduling.annotation.AsyncResult import org.springframework.scheduling.annotation.Scheduled @@ -81,6 +80,9 @@ class SourceTypeCheck { @Autowired private lateinit var sourceTypeCheckExecutor: SourceTypeCheckExecutor + @Autowired + private lateinit var tenantDetailsProvider: TenantDetailsProvider + private fun newSourceTypeStatus(sourceType: TSourceType, accdate: String): TSourceTypeCheckStatus { return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus().apply { this.sourceType = sourceType.sourceType @@ -160,7 +162,7 @@ class SourceTypeCheck { @Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}") @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostForString = "PT30M") fun runCheck() { - if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) + tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID) val allSourcetype = sourceTypeService.allEnabledSourcetype ?: return @@ -246,6 +248,9 @@ class SourceTypeCheckExecutor { @Autowired private lateinit var sourceTypeService: SourceTypeService + @Autowired + private lateinit var tenantDetailsProvider: TenantDetailsProvider + private val logger = KotlinLogging.logger { } private fun getProvider(sourcetype: String): CheckFileProvider? { @@ -271,7 +276,7 @@ class SourceTypeCheckExecutor { fun checkAndDownloadChkfile(checkStatus: TSourceTypeCheckStatus): Future { // 2. 根据对账日期下载对账文件 try { - if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(checkStatus.tenantId) + tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID) if (checkStatus.settleStatus) { return AsyncResult(ExecutorResult(checkStatus, FAIL, "[${checkStatus.checkAccdate}]日对账已完成")) } @@ -314,7 +319,7 @@ class SourceTypeCheckExecutor { @Async("sourcetypeCheckTaskExecutor") fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future { // 3. 完成对账 - if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(checkStatus.tenantId) + tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID) if (!checkStatus.checkFileOk) { return AsyncResult(ExecutorResult(checkStatus, FAIL, "checkAccdate=[${checkStatus.checkAccdate}]对账单未完成下载,不能对账")) } else if (checkStatus.settleStatus) { diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt deleted file mode 100644 index b1bc339d..00000000 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt +++ /dev/null @@ -1,166 +0,0 @@ -package com.supwisdom.dlpay.api - -import com.supwisdom.dlpay.agent.citizencard.YnrccUtil -import com.supwisdom.dlpay.agent.service.CitizencardPayService -import com.supwisdom.dlpay.api.service.SourceTypeService -import com.supwisdom.dlpay.api.service.TransactionReconciliationService -import com.supwisdom.dlpay.api.service.YnrccBusinessService -import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.util.DateUtil -import com.supwisdom.dlpay.framework.util.TradeDict -import mu.KotlinLogging -import net.javacrumbs.shedlock.core.SchedulerLock -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.scheduling.annotation.Scheduled -import org.springframework.stereotype.Component -import org.springframework.web.client.RestTemplate - -import com.sun.jersey.api.client.Client -import com.sun.jersey.api.client.ClientResponse -import com.supwisdom.dlpay.api.bean.YnrccChkfileBean -import com.supwisdom.dlpay.api.domain.TTransactionChkfile -import com.supwisdom.dlpay.framework.tenant.TenantContext -import com.supwisdom.dlpay.framework.util.Constants -import com.supwisdom.dlpay.framework.util.StringUtil -import com.supwisdom.dlpay.util.ConstantUtil -import java.io.BufferedReader -import java.io.InputStream -import java.io.InputStreamReader -import javax.ws.rs.core.MediaType - - -/** - * 第三方对账任务 - * */ -@Component -class DownloadYnrccChkfileTask { - @Autowired - private lateinit var systemUtilService: SystemUtilService - @Autowired - private lateinit var ynrccBusinessService: YnrccBusinessService - @Autowired - private lateinit var citizencardPayService: CitizencardPayService - @Autowired - private lateinit var transactionReconciliationService: TransactionReconciliationService - @Autowired - private lateinit var sourceTypeService: SourceTypeService - - private val logger = KotlinLogging.logger { } - - -// @Scheduled(cron = "\${download.ynrcc.chkfile.cron:-}") -// @SchedulerLock(name = "DownloadYnrccChkfileSchedulerTask", lockAtMostForString = "PT10M") - fun doDownloadYnrccChkfile() { - try { - if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) - //下载对账单逻辑 - val hostdate = systemUtilService.sysdatetime.hostdate - val downloadLastdate = ynrccBusinessService.getLastDownloadBillDate() - val diffDays = DateUtil.getIntervalDay(downloadLastdate, hostdate).toInt() - logger.info("大理农商行对账单下载:downloadLastdate=$downloadLastdate, hostdate=$hostdate, diffDays=$diffDays ") - - for (i in 1 until diffDays) { - val billDate = DateUtil.getNewDay(downloadLastdate, i) //要取对账单的日期 - - val chkfile = transactionReconciliationService.doInitTransactionChkfile(billDate, TradeDict.PAYTYPE_CITIZEN_CARD) - - val resp = citizencardPayService.getChkfilename(billDate, null) - if (YnrccUtil.CODE_SUCCESS == resp.code) { - val agentConfig = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true) - val agentUrl = agentConfig[YnrccUtil.YNRCC_ANGENT_URL] + "/download?filename=" + resp.filename - //根据filename 取文件数据 - downloadYnrccBills(chkfile, agentUrl) - - } else if (YnrccUtil.NO_RECORDS_TODAY == resp.code) { - //当日无交易明细,也创建空记录 - transactionReconciliationService.doSuccessTransactionChkfile(chkfile, "请求银行返回:当日无交易明细") - - } else { - //报错,退出对账单拉取 - logger.error("大理农商行对账单下载[$billDate]报错:${resp.message}") - chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR - chkfile.remark = "请求前置获取对账文件报错:${resp.message}" - transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile) - break - } - } - - } catch (ex: Exception) { - ex.printStackTrace() - } - } - - private fun downloadYnrccBills(chkfile: TTransactionChkfile, agentUrl: String) { - val client = Client.create() - client.setConnectTimeout(30000) - val respClient = client.resource(agentUrl).type(MediaType.APPLICATION_OCTET_STREAM_TYPE).get(ClientResponse::class.java) - if (200 == respClient.status) { - val stream = respClient.getEntity(InputStream::class.java) - BufferedReader(InputStreamReader(stream)).use { reader -> - val header = reader.readLine() - val fields = header.split(",").mapNotNull { if (it.isNotEmpty()) it else null } - val batchSize = 10000 //每次保存的数目 - var failcnt = 0 - - val datalist = ArrayList() - while (true) { - val line = reader.readLine() ?: break - if (line.isEmpty()) continue - val columns = line.split(",").mapNotNull { if (it.isNotEmpty()) it else null } - val bean = YnrccChkfileBean() - StringUtil.transforToBean(fields, columns, bean) - datalist.add(bean) - if (datalist.size >= batchSize) { - val fcnt = doBatchSaveYnrccCheckDetails(chkfile, datalist) //保存 - failcnt += fcnt - datalist.clear() - } - } - //保存最后的不足batchSize的记录 - if (datalist.size > 0) { - val fcnt = doBatchSaveYnrccCheckDetails(chkfile, datalist) //保存 - failcnt += fcnt - } - - if (failcnt > 0) { - //该天对账单保存错误 - chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR - chkfile.remark = "对账单数据存在保存失败记录,请手动核对对账单数据" - transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile) - return - } - - //成功 - transactionReconciliationService.doSuccessTransactionChkfile(chkfile, "对账单数据下载成功") - - } - } else { - logger.error("请求前置download[${chkfile.accdate}]对账单返回失败:httpStatus=[${respClient.status}]。获取对账文件数据失败") - chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR - chkfile.remark = "请求前置获取对账单数据失败,download返回:httpStatus=${respClient.status}" - transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile) - } - } - - private fun doBatchSaveYnrccCheckDetails(chkfile: TTransactionChkfile, list: ArrayList): Int { - try { - transactionReconciliationService.doBatchSaveYnrccTransactionChkDtl(chkfile, list) - return 0 //批量保存成功,无失败 - } catch (e1: Exception) { - } - - //批量保存有异常,逐笔保存 - var failcnt = 0 - for (bean in list) { - try { - transactionReconciliationService.saveYnrccTransactionChkDtl(chkfile, bean) - } catch (e2: Exception) { - failcnt++ - e2.printStackTrace() - continue - } - } - return failcnt - } - -} \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt index 52feed27..65df6c3b 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/charge_api_service_impl.kt @@ -8,8 +8,8 @@ import com.supwisdom.dlpay.api.domain.TPersondtl import com.supwisdom.dlpay.api.domain.TTransactionMain import com.supwisdom.dlpay.api.service.ChargeApiService import com.supwisdom.dlpay.api.service.SourceTypeService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.StringUtil +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -41,10 +41,10 @@ class ChargeApiServiceImpl : ChargeApiService { } override fun getDepositCapital(capital: String): TDepositCapitalType { - return depositCapitalTypeDao.findTDepositCapitalTypeByCodeAndTenantid(capital, TenantContext.getTenantSchema()); + return depositCapitalTypeDao.findTDepositCapitalTypeByCodeAndTenantid(capital, TenantContextHolder.getContext().tenant.id); } override fun findDepositCapitals(): List { - return depositCapitalTypeDao.findTDepositCapitalTypesByTenantid(TenantContext.getTenantSchema()) + return depositCapitalTypeDao.findTDepositCapitalTypesByTenantid(TenantContextHolder.getContext().tenant.id) } } \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt index 96b13f81..b2560255 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt @@ -13,9 +13,9 @@ import com.supwisdom.dlpay.api.service.DaliDatasyncService import com.supwisdom.dlpay.api.types.IDTypes import com.supwisdom.dlpay.exception.TransactionProcessException import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.* import com.supwisdom.dlpay.util.ConstantUtil +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -102,7 +102,7 @@ class DaliDatasyncServiceImpl : DaliDatasyncService { mobile = bean.mobile lastsaved = systime.hostdatetime } - person.tenantid = TenantContext.getTenantSchema() + person.tenantid = TenantContextHolder.getContext().tenant.id person = personDao.save(person) var account = TAccount().apply { @@ -123,7 +123,7 @@ class DaliDatasyncServiceImpl : DaliDatasyncService { opendate = systime.hostdate tac = Signature.SPY_TAC } - account.tenantid = TenantContext.getTenantSchema() + account.tenantid = TenantContextHolder.getContext().tenant.id account = accountDao.save(account) account.tac = account.generateTac() accountDao.save(account) @@ -179,7 +179,7 @@ class DaliDatasyncServiceImpl : DaliDatasyncService { userid = person.userid lastsaved = systime.hostdatetime } - cityCard.tenantid = TenantContext.getTenantSchema() + cityCard.tenantid = TenantContextHolder.getContext().tenant.id cardDao.save(cityCard) } @@ -203,7 +203,7 @@ class DaliDatasyncServiceImpl : DaliDatasyncService { if (TradeDict.STATUS_NORMAL == bankCard.status) { cardDao.closedBankcardStatusByUserid(bankCard.userid) //注销其他银行卡 } - bankCard.tenantid = TenantContext.getTenantSchema() + bankCard.tenantid = TenantContextHolder.getContext().tenant.id cardDao.save(bankCard) //绑定新的银行卡 } else { if (bankCard.userid != person.userid) { @@ -239,7 +239,7 @@ class DaliDatasyncServiceImpl : DaliDatasyncService { this.status = TradeDict.DTL_STATUS_FAIL this.remark = errmsg this.lastsaved = systemUtilService.sysdatetime.hostdatetime - this.tenantid = TenantContext.getTenantSchema() + this.tenantid = TenantContextHolder.getContext().tenant.id }) } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt index a42427b5..25dad23a 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dtl_query_result_service_impl.kt @@ -3,8 +3,8 @@ package com.supwisdom.dlpay.api.service.impl import com.supwisdom.dlpay.api.dao.DtlQueryDao import com.supwisdom.dlpay.api.domain.TDtlQuery import com.supwisdom.dlpay.api.service.DtlQueryResultService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.util.ConstantUtil +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -15,7 +15,7 @@ class DtlQueryResultServiceImpl : DtlQueryResultService { override fun saveOrUpdateDtlQuery(dtlQuery: TDtlQuery): TDtlQuery { if (null == dtlQuery.tenantId) { - dtlQuery.tenantId = TenantContext.getTenantSchema() + dtlQuery.tenantId = TenantContextHolder.getContext().tenant.id } return dtlQueryDao.save(dtlQuery) } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt index 18076861..f8c92952 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt @@ -11,8 +11,8 @@ import com.supwisdom.dlpay.framework.dao.SubjectDao import com.supwisdom.dlpay.framework.domain.TFeetypeConfig import com.supwisdom.dlpay.framework.domain.TShopacc import com.supwisdom.dlpay.framework.domain.TSubject -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.TradeErrorCode +import com.supwisdom.multitenant.TenantContextHolder import org.hibernate.exception.LockTimeoutException import org.springframework.beans.factory.annotation.Autowired import org.springframework.dao.CannotAcquireLockException @@ -74,13 +74,13 @@ class AccountUtilServcieImpl : AccountUtilServcie { } override fun readShopbyShopaccno(shopaccno: String): TShopacc { - return shopaccDao.getByShopaccnoAndTenantId(shopaccno, TenantContext.getTenantSchema())?.also { + return shopaccDao.getByShopaccnoAndTenantId(shopaccno, TenantContextHolder.getContext().tenant.id)?.also { shopAccCheck(it) } ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopaccno>不存在") } override fun readSubject(subjno: String): TSubject { - return subjectDao.findBySubjnoAndTenantId(subjno, TenantContext.getTenantSchema()) + return subjectDao.findBySubjnoAndTenantId(subjno, TenantContextHolder.getContext().tenant.id) ?: throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在") } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt index b0dbb6b2..3d81b978 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt @@ -14,13 +14,11 @@ import com.supwisdom.dlpay.framework.dao.ShopaccDao import com.supwisdom.dlpay.framework.domain.TShop import com.supwisdom.dlpay.framework.domain.TShopacc import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.* import com.supwisdom.dlpay.util.EnumCheck +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service -import javax.persistence.EntityManager -import javax.persistence.PersistenceContext /** * Created by shuwei on 2019/4/15. @@ -112,8 +110,9 @@ class ShopServiceImpl : ShopService { override fun checkDownloadShopBillParam(param: DownloadShopBillParam): Boolean { if (!StringUtil.isEmpty(param.checkdate)) { - val ctl = settleCtlDao.findByTenantId(TenantContext.getTenantSchema()) - ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "[tenantid=${TenantContext.getTenantSchema()}]未找到结算状态表") + val ctl = settleCtlDao.findByTenantId(TenantContextHolder.getContext().tenant.id) + ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, + "[tenantid=${TenantContextHolder.getContext().tenant.id}]未找到结算状态表") if (DateUtil.compareDatetime(param.checkdate, "${ctl.settledate}", "yyyyMMdd") >= 0) { throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "对账单未生成") //未结算,不返回对账单 } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt index 9937a316..5585033b 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt @@ -16,11 +16,11 @@ import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.dao.BusinessparaDao import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.MoneyUtil import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.framework.util.TradeErrorCode import com.supwisdom.dlpay.util.ConstantUtil +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -82,7 +82,7 @@ class TransactionReconciliationServiceImpl : TransactionReconciliationService { this.chkresult = ConstantUtil.CHKDTL_CHKRESULT_UNCHECK this.resolved = ConstantUtil.CHKDTL_RESOLVED_NONE this.lastsaved = systemUtilService.sysdatetime.sysdate - this.tenantid = TenantContext.getTenantSchema() + this.tenantid = TenantContextHolder.getContext().tenant.id }) } @@ -119,7 +119,7 @@ class TransactionReconciliationServiceImpl : TransactionReconciliationService { this.localcnt = 0 this.localamt = 0.00 this.lastsaved = systemUtilService.sysdatetime.sysdate - this.tenantid = TenantContext.getTenantSchema() + this.tenantid = TenantContextHolder.getContext().tenant.id }) } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt index b91c74ba..77c3e015 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt @@ -10,8 +10,8 @@ import com.supwisdom.dlpay.api.service.TransactionService import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionProcessException import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.* +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import java.sql.SQLException @@ -77,7 +77,7 @@ class TransactionServiceImpl : TransactionService { refundAmount = 0.0 checkDate = null settleDate = null - tenantid = TenantContext.getTenantSchema() + tenantid = TenantContextHolder.getContext().tenant.id this.sourceType = sourceType.sourceType dtltype = builder.dtltype } diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt index 99b05664..88d63123 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/ynrcc_business_service_impl.kt @@ -6,9 +6,9 @@ import com.supwisdom.dlpay.api.service.YnrccBusinessService import com.supwisdom.dlpay.framework.dao.BusinessparaDao import com.supwisdom.dlpay.framework.domain.TBusinesspara import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.DateUtil import com.supwisdom.dlpay.framework.util.TradeDict +import com.supwisdom.multitenant.TenantContextHolder import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @@ -36,7 +36,7 @@ class YnrccBusinessServiceImpl : YnrccBusinessService { businesspara = TBusinesspara().apply { this.parakey = YnrccUtil.YNRCC_BILLS_DOWNLOAD_LASTDATE this.paraval = DateUtil.getNewDay(startdate, -1) - this.tenantId = TenantContext.getTenantSchema() + this.tenantId = TenantContextHolder.getContext().tenant.id } } businesspara = businessparaDao.save(businesspara) diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt index dc8bbe79..b9b60342 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt @@ -1,6 +1,5 @@ package com.supwisdom.dlpay.framework -import com.supwisdom.dlpay.framework.tenant.TenantInterceptor import mu.KotlinLogging import org.springframework.beans.factory.annotation.Autowired import org.springframework.context.annotation.Configuration @@ -23,20 +22,20 @@ import javax.annotation.PostConstruct // } //} -@Configuration -class MultiTenantDatasourceConfiguration : WebMvcConfigurer { - - private val logger = KotlinLogging.logger { } - @Autowired - private lateinit var tenantInterceptor: TenantInterceptor - - @PostConstruct - fun post() { - logger.info("MultiTenantDatasourceConfiguration post constructor.") - } - - override fun addInterceptors(registry: InterceptorRegistry) { - logger.info("adding interceptor(s).") - registry.addInterceptor(tenantInterceptor) - } -} +//@Configuration +//class MultiTenantDatasourceConfiguration : WebMvcConfigurer { +// +// private val logger = KotlinLogging.logger { } +// @Autowired +// private lateinit var tenantInterceptor: TenantInterceptor +// +// @PostConstruct +// fun post() { +// logger.info("MultiTenantDatasourceConfiguration post constructor.") +// } +// +// override fun addInterceptors(registry: InterceptorRegistry) { +// logger.info("adding interceptor(s).") +// registry.addInterceptor(tenantInterceptor) +// } +//} diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt index 9cad14f2..ee4a5c69 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt @@ -7,7 +7,6 @@ import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository import com.supwisdom.dlpay.framework.security.MyAuthenticationFailureHandler import com.supwisdom.dlpay.framework.security.ValidateCodeSecurityConfig import com.supwisdom.dlpay.framework.service.OperatorDetailService -import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.Constants import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.mobile.AuthLoginFailHandler @@ -67,9 +66,6 @@ class ApiJwtAuthenticationFilter : OncePerRequestFilter() { } override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) { - if (!jwtConfig.multiTenant) { - TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) - } request.getHeader(jwtConfig.header)?.let { authHeader -> try { val jwt = if (authHeader.startsWith(jwtConfig.tokenHeader)) { @@ -97,7 +93,6 @@ class ApiJwtAuthenticationFilter : OncePerRequestFilter() { response.status = HttpStatus.UNAUTHORIZED.value() return } - TenantContext.setTenantSchema(tenantId) } val auth = UsernamePasswordAuthenticationToken(claims[Constants.JWT_CLAIM_UID], null, (claims[Constants.JWT_CLAIM_AUTHORITIES] as ArrayList<*>) @@ -191,7 +186,6 @@ class MobileSecurityFilter : OncePerRequestFilter() { response.status = HttpStatus.UNAUTHORIZED.value() return } - TenantContext.setTenantSchema(tenantId) } val auth = UsernamePasswordAuthenticationToken(claims[Constants.JWT_CLAIM_UID], null, (claims[Constants.JWT_CLAIM_AUTHORITIES] as ArrayList<*>) diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties index 0a2b535b..8627bf06 100644 --- a/payapi/src/main/resources/application.properties +++ b/payapi/src/main/resources/application.properties @@ -39,4 +39,8 @@ citizencard.dolosstask.cron=- # user password auth.password.bcrypt.length=10 ################################################### -spring.redis.database=0 \ No newline at end of file +spring.redis.database=0 +################################################### +multi-tenant.header.key=X-TENANT-ID +multi-tenant.session.name=multi-tenant-id +multi-tenant.dbschema=public -- 2.17.1