From 36e7c679b1041feaa7213f3671f6bcf358311c0f Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Mon, 15 Jul 2019 13:35:49 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/api/service/SourceTypeService.java | 7 ++- .../service/impl/SourceTypeServiceImpl.java | 10 ++--- .../framework/tenant/TenantCacheKeyGen.java | 4 +- .../dlpay/framework/tenant/TenantHolder.java | 27 +++++++++++ .../system/service/impl/ParamServiceImpl.java | 45 ++++++++++--------- .../api/controller/consume_api_controller.kt | 4 +- .../api/controller/notify_api_controller.kt | 2 +- .../service/impl/consume_pay_service_impl.kt | 2 +- .../service/impl/transaction_service_impl.kt | 5 +-- .../controller/security_controller.kt | 7 +-- 10 files changed, 70 insertions(+), 43 deletions(-) create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java index d5a00d7e..7b6194f3 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java @@ -1,7 +1,6 @@ package com.supwisdom.dlpay.api.service; import com.supwisdom.dlpay.api.domain.TSourceType; -import org.springframework.cache.annotation.Cacheable; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -13,16 +12,16 @@ import java.util.Map; public interface SourceTypeService { @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true) - TSourceType getByPaytype(String paytype); + TSourceType getBySourceType(String paytype); @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true) - Map getPaytypeConfigByPaytype(String pattype); + Map getSourceTypeConfigBySourceType(String pattype); @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true) boolean checkRechargeSourcetype(String sourcetype) throws Exception; @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true) - boolean checkShopPaytype(String shopaccno, String sourceType, boolean anonymousflag) throws Exception; + boolean checkShopSourceType(String shopaccno, String sourceType, boolean anonymousflag) throws Exception; /** * 获取支付能力充值参数全局配置 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 b6ed3f10..c646730c 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 @@ -40,14 +40,14 @@ public class SourceTypeServiceImpl implements SourceTypeService { @Override - @Cacheable(cacheNames = "source_type_cache", keyGenerator = "tenantCacheKey") - public TSourceType getByPaytype(String paytype) { + @Cacheable(cacheNames = "dictionary_cache", keyGenerator = "tenantCacheKey") + public TSourceType getBySourceType(String paytype) { return paytypeDao.getOne(paytype); } @Override - @Cacheable(cacheNames = "source_type_config_cache", keyGenerator = "tenantCacheKey") - public Map getPaytypeConfigByPaytype(String pattype) { + @Cacheable(cacheNames = "dictionary_cache", keyGenerator = "tenantCacheKey") + public Map getSourceTypeConfigBySourceType(String pattype) { List list = paytypeConfigDao.getBySourceType(pattype); Map map = new HashMap<>(list.size()); for (TSourceTypeConfig paytypeConfig : list) { @@ -68,7 +68,7 @@ public class SourceTypeServiceImpl implements SourceTypeService { } @Override - public boolean checkShopPaytype(String shopaccno, String sourceType, boolean anonymousflag) throws Exception { + public boolean checkShopSourceType(String shopaccno, String sourceType, boolean anonymousflag) throws Exception { //step1: 判断系统支付能力是否启用 TSourceType tSourceType = paytypeDao.getBySourceType(sourceType); if (null == tSourceType) { 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 bbf94866..254c4e42 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 @@ -12,11 +12,13 @@ public class TenantCacheKeyGen implements KeyGenerator { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder name = new StringBuilder(); + name.append(target.getClass().getSimpleName()) + .append(delimiter); String tenant = TenantContext.getTenantSchema(); if (StringUtils.isEmpty(tenant)) { tenant = "default"; } - name.append(tenant); + name.append(tenant).append(delimiter); for (Object item : params) { name.append(delimiter).append(item.toString()); } 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 new file mode 100644 index 00000000..b71b2cbf --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantHolder.java @@ -0,0 +1,27 @@ +package com.supwisdom.dlpay.framework.tenant; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +@Component("tenantHolder") +public class TenantHolder { + private static final char delimiter = '-'; + + public String getId() { + String id = TenantContext.getTenantSchema(); + if (id == null || StringUtils.isEmpty(id)) { + return "default"; + } + return id; + } + + public String genKey(String prefix, String... args) { + StringBuilder builder = new StringBuilder(); + builder.append(prefix).append(delimiter) + .append(getId()); + for (String item : args) { + builder.append(delimiter).append(item); + } + return builder.toString(); + } +} 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 7336a7d4..9319434a 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 @@ -11,6 +11,7 @@ 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; @@ -163,46 +164,46 @@ public class ParamServiceImpl implements ParamService { } @Override - @Cacheable(cacheNames = "source_type_cache", key = "#p0") - public TSourceType getSourceType(String paytype) { - if (!StringUtil.isEmpty(paytype)) { - return sourceTypeDao.getBySourceType(paytype.trim()); + @Cacheable(cacheNames = "dictionary_cache", key = "#{@tenantHolder.genKey('sourcetype', sourceType)}") + public TSourceType getSourceType(String sourceType) { + if (!StringUtil.isEmpty(sourceType)) { + return sourceTypeDao.getBySourceType(sourceType.trim()); } return null; } @Override - @Cacheable(cacheNames = "source_type_cache") + @Cacheable(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype')") public List getAllSourceType() { return sourceTypeDao.findAll(); } @Override - @CacheEvict(cacheNames = "source_type_cache", key = "#paytype.sourceType") - public boolean saveOrUpdateSourceType(TSourceType paytype) { - if (null != paytype) { - paytype.setTenantid(TenantContext.getTenantSchema()); - sourceTypeDao.save(paytype); + @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', sourceType.sourceType)") + public boolean saveOrUpdateSourceType(TSourceType sourceType) { + if (null != sourceType) { + sourceType.setTenantid(TenantContext.getTenantSchema()); + sourceTypeDao.save(sourceType); return true; } return false; } @Override - @CacheEvict(cacheNames = "source_type_cache", key = "#paytype.sourceType") - public boolean deleteSourceType(TSourceType paytype) { - if (null != paytype) { - sourceTypeDao.delete(paytype); + @CacheEvict(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', sourceType.sourceType)") + public boolean deleteSourceType(TSourceType sourceType) { + if (null != sourceType) { + sourceTypeDao.delete(sourceType); return true; } return false; } @Override - @Cacheable(cacheNames = "source_type_config_cache", key = "#p0") - public List getSourceTypeConfigList(String paytype) { - if (!StringUtil.isEmpty(paytype)) { - List list = paytypeConfigDao.getBySourceTypeOrderByConfigid(paytype.trim()); + @Cacheable(cacheNames = "source_type_config_cache", key = "@tenantHolder.genKey('sourcetype_config', sourceType)") + public List getSourceTypeConfigList(String sourceType) { + if (!StringUtil.isEmpty(sourceType)) { + List list = paytypeConfigDao.getBySourceTypeOrderByConfigid(sourceType.trim()); if (!StringUtil.isEmpty(list)) return list; } @@ -210,10 +211,10 @@ public class ParamServiceImpl implements ParamService { } @Override - @CacheEvict(cacheNames = "source_type_config_cache", key = "#p0") - public boolean saveSourceTypeConfig(String paytype, Map param) throws WebCheckException { - TSourceType tPaytype = getSourceType(paytype); - if (null == tPaytype) throw new WebCheckException("支付能力[" + paytype + "]不存在"); + @CacheEvict(cacheNames = "source_type_config_cache", key = "@tenantHolder.genKey('sourcetype_config', sourceType)") + public boolean saveSourceTypeConfig(String sourceType, Map param) throws WebCheckException { + TSourceType tPaytype = getSourceType(sourceType); + if (null == tPaytype) throw new WebCheckException("支付能力[" + sourceType + "]不存在"); for (String key : param.keySet()) { String value = param.get(key); TSourceTypeConfig config = paytypeConfigDao.getBySourceTypeAndConfigid(tPaytype.getSourceType(), key); diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt index 0b726b72..24efe809 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt @@ -277,7 +277,7 @@ class ConsumeAPIController { @PostMapping("/ykt/payinit") fun yktPayInit(@RequestBody param: YktCardPayinitParam): ResponseEntity { // val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册,可能匿名? -// if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) { +// if (consumePayService.checkShopSourceType(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) { // val dtl = PersonTransBuilder.newBuilder(accountUtilServcie) // .chooseTradetype(Tradetype.CONSUME) //消费 // .also { @@ -434,7 +434,7 @@ class ConsumeAPIController { // } // } // }.done(personBalancePayService, false) -// val code = CallService.callWechatPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT), +// val code = CallService.callWechatPay(paytypeService.getSourceTypeConfigBySourceType(PaytypeUtil.WECHAT), // dtl, DateUtil.getNow(), wechattype, realip, qrcode, openid) // if (code.retcode == "0") { // ResponseEntity.ok(ResponseBodyBuilder.create() 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 d57c96d6..51ed2efb 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 @@ -64,7 +64,7 @@ class NotifyController { map = StringUtil.paraFilter(map) //TODO 校验签名 var signStr = StringUtil.createLinkString(map) - val config = paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT) + val config = paytypeService.getSourceTypeConfigBySourceType(PaytypeUtil.WECHAT) if (config["appkey"].isNullOrEmpty()) { logger.error("签名错误") return "" diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt index e0fd9ab9..6ab347ee 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/consume_pay_service_impl.kt @@ -16,7 +16,7 @@ class ConsumePayServiceImpl : ConsumePayService { lateinit var transactionMainDao: TransactionMainDao override fun checkShopPaytype(shopaccno: String, sourceType: String, anonymousflag: Boolean?): Boolean { - return sourceTypeService.checkShopPaytype(shopaccno, sourceType, true == anonymousflag) + return sourceTypeService.checkShopSourceType(shopaccno, sourceType, true == anonymousflag) } override fun getPaytypeConfig(paytype: String, shopaccno: String, 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 15869a6c..d51f97ab 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 @@ -1,7 +1,6 @@ package com.supwisdom.dlpay.api.service.impl import com.supwisdom.dlpay.api.TransactionBuilder -import com.supwisdom.dlpay.api.dao.AccountDao import com.supwisdom.dlpay.api.dao.TransactionMainDao import com.supwisdom.dlpay.api.domain.* import com.supwisdom.dlpay.api.repositories.AccountService @@ -10,8 +9,6 @@ import com.supwisdom.dlpay.api.service.SourceTypeService import com.supwisdom.dlpay.api.service.TransactionService import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionProcessException -import com.supwisdom.dlpay.framework.dao.ShopaccDao -import com.supwisdom.dlpay.framework.dao.SubjectDao import com.supwisdom.dlpay.framework.service.SystemUtilService import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.Subject @@ -61,7 +58,7 @@ class TransactionServiceImpl : TransactionService { private fun builderRecords(builder: TransactionBuilder, status: String): TTransactionMain { try { preCheck(builder) - val sourceType = sourceTypeService.getByPaytype(builder.sourceType) + val sourceType = sourceTypeService.getBySourceType(builder.sourceType) ?: throw TransactionCheckException(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "交易源未定义,sourctype <${builder.sourceType}>") // 记录三方的交易流水(个人,商户,科目) diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt index e4a7088d..8ca8d926 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt @@ -144,7 +144,7 @@ class ApiAuthController { } val jwt = JwtTokenUtil(jwtConfig).verifyToken(auth.substring(jwtConfig.tokenHeader.length)) val appid = jwt["uid"] as String - return apiClientDao.findByAppid(appid)?.let { + val result = apiClientDao.findByAppid(appid)?.let { if (it.status == TradeDict.STATUS_NORMAL) { // 新证书 val token = JwtTokenUtil(jwtConfig).generateToken( @@ -165,9 +165,10 @@ class ApiAuthController { .success(ApiLoginResponse(token.jwtToken, appid, DateUtil.getUTCTime(token.expiration.valueInMillis)))) } else { - ResponseEntity.status(HttpStatus.UNAUTHORIZED).build() + ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(mapOf("msg" to "appid error")) } - } ?: ResponseEntity.status(HttpStatus.UNAUTHORIZED).build() + } ?: ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(mapOf("msg" to "appid error")) + return result as ResponseEntity } } -- 2.17.1