From 333f25f82ed59c43c4a809bbc3e84f7574a2b2c3 Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Thu, 2 Jul 2026 21:23:27 +0800 Subject: [PATCH] =?UTF-8?q?refactor(merchant):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E6=9F=A5=E8=AF=A2/=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=85=B7=E4=BD=93=E6=9C=8D=E5=8A=A1=E7=B1=BB,=E4=B8=BA?= =?UTF-8?q?=E5=A1=8C=E6=8E=89SPI=E6=8E=A5=E5=8F=A3=E5=81=9A=E5=87=86?= =?UTF-8?q?=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MerchantAccessQueryService: 商户/应用接入信息查询,返回精简DTO(不暴露JPA实体) - MerchantPermissionService: 商户权限检查(开源版默认放行) - 接入信息DTO(MerchantAccessInfo/MchAppInfoAccessInfo)置于merchant.dto 注: 仅新增具体类,6个SPI接口的删除与消费者重连待并行Agent(PaymentContext迁移)提交后再做 --- .../merchant/dto/MchAppInfoAccessInfo.java | 20 ++++++ .../merchant/dto/MerchantAccessInfo.java | 19 ++++++ .../permission/MerchantPermissionService.java | 25 ++++++++ .../query/MerchantAccessQueryService.java | 61 +++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MchAppInfoAccessInfo.java create mode 100644 daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MerchantAccessInfo.java create mode 100644 daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/permission/MerchantPermissionService.java create mode 100644 daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/query/MerchantAccessQueryService.java diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MchAppInfoAccessInfo.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MchAppInfoAccessInfo.java new file mode 100644 index 000000000..682243d02 --- /dev/null +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MchAppInfoAccessInfo.java @@ -0,0 +1,20 @@ +package cn.daxpay.open.payment.merchant.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/// # 商户应用接入信息 +/// +@Data +@Accessors(chain = true) +public class MchAppInfoAccessInfo { + + /// 应用号 + private String appId; + + /// 商户号 + private String mchNo; + + /// 应用状态 + private String status; +} diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MerchantAccessInfo.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MerchantAccessInfo.java new file mode 100644 index 000000000..ad0428872 --- /dev/null +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/dto/MerchantAccessInfo.java @@ -0,0 +1,19 @@ +package cn.daxpay.open.payment.merchant.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/// # 商户接入信息 +/// +@Data +@Accessors(chain = true) +public class MerchantAccessInfo { + + /// 商户号 + private String mchNo; + + /// 商户状态 + private String status; + + +} diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/permission/MerchantPermissionService.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/permission/MerchantPermissionService.java new file mode 100644 index 000000000..96e6dd6ff --- /dev/null +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/permission/MerchantPermissionService.java @@ -0,0 +1,25 @@ +package cn.daxpay.open.payment.merchant.service.permission; + +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; + +/// # 商户权限检查服务 +/// +/// 开源版默认放行,后续可扩展为真实 RBAC。 +@Service +public class MerchantPermissionService { + + public boolean hasApiPerm(String api) { + return true; + } + + public boolean hasChannelPerm(String channel) { + return true; + } + + public List getAvailableChannel(String mchNo) { + return Collections.emptyList(); + } +} diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/query/MerchantAccessQueryService.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/query/MerchantAccessQueryService.java new file mode 100644 index 000000000..3abad4a56 --- /dev/null +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/merchant/service/query/MerchantAccessQueryService.java @@ -0,0 +1,61 @@ +package cn.daxpay.open.payment.merchant.service.query; + +import cn.daxpay.open.payment.merchant.dto.MchAppInfoAccessInfo; +import cn.daxpay.open.payment.merchant.dto.MerchantAccessInfo; +import cn.daxpay.open.payment.merchant.dao.appinfo.MchAppInfoManager; +import cn.daxpay.open.payment.merchant.dao.info.MerchantInfoManager; +import cn.daxpay.open.payment.merchant.entity.appinfo.MchAppInfo; +import cn.daxpay.open.payment.merchant.entity.info.MerchantInfo; +import cn.daxpay.open.payment.merchant.service.config.MerchantCredentialService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/// # 商户接入信息查询服务 +/// +/// 供支付总线层查询商户/应用的接入信息,返回精简 DTO,不暴露 JPA 实体。 +@Service +@RequiredArgsConstructor +public class MerchantAccessQueryService { + private final MerchantInfoManager merchantInfoManager; + private final MchAppInfoManager mchAppInfoManager; + private final MerchantCredentialService merchantCredentialService; + + /// 根据商户号查询商户接入信息 + public MerchantAccessInfo getMerchantByMchNo(String mchNo) { + return merchantInfoManager.findByMchNo(mchNo) + .map(this::toMerchantAccessInfo) + .orElse(null); + } + + /// 根据商户号查询默认应用 + public MchAppInfoAccessInfo getDefaultAppByMchNo(String mchNo) { + return mchAppInfoManager.findDefaultByMchNoNotTenant(mchNo) + .map(this::toMchAppInfoAccessInfo) + .orElse(null); + } + + /// 根据应用号查询应用 + public MchAppInfoAccessInfo getAppByAppId(String appId) { + return mchAppInfoManager.findByAppIdNotTenant(appId) + .map(this::toMchAppInfoAccessInfo) + .orElse(null); + } + + /// 根据商户号查询商户公钥 + public String findMerchantPublicKey(String mchNo) { + return merchantCredentialService.findByMchNo(mchNo).getPublicKey(); + } + + private MerchantAccessInfo toMerchantAccessInfo(MerchantInfo merchantInfo) { + return new MerchantAccessInfo() + .setMchNo(merchantInfo.getMchNo()) + .setStatus(merchantInfo.getStatus()); + } + + private MchAppInfoAccessInfo toMchAppInfoAccessInfo(MchAppInfo mchApp) { + return new MchAppInfoAccessInfo() + .setAppId(mchApp.getAppId()) + .setMchNo(mchApp.getMchNo()) + .setStatus(mchApp.getStatus()); + } +}