refactor(merchant): 新增接入查询/权限具体服务类,为塌掉SPI接口做准备

- MerchantAccessQueryService: 商户/应用接入信息查询,返回精简DTO(不暴露JPA实体)
- MerchantPermissionService: 商户权限检查(开源版默认放行)
- 接入信息DTO(MerchantAccessInfo/MchAppInfoAccessInfo)置于merchant.dto

注: 仅新增具体类,6个SPI接口的删除与消费者重连待并行Agent(PaymentContext迁移)提交后再做
This commit is contained in:
DaxPay Dev
2026-07-02 21:23:27 +08:00
parent 1b95beb6d9
commit 333f25f82e
4 changed files with 125 additions and 0 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<String> getAvailableChannel(String mchNo) {
return Collections.emptyList();
}
}

View File

@@ -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());
}
}