Files
MTKJPAY/mt-pay/SERVICE_STRUCTURE.md
qiube 014cf4626b feat(product): 添加商品链接生成功能
- 新增商品链接实体类MtProductLink,包含链接码、URL、有效期等字段
- 创建商品链接Mapper接口,支持基础CRUD操作
- 实现商品链接服务接口ProductLinkService及其实现类
- 支持创建或获取现有有效链接,避免重复生成
- 提供链接有效性校验和过期处理机制
- 添加响应码枚举ResultCode,定义相关业务异常码
- 补充风控信息DTO类RiskInfoDTO及相关子DTO
- 编写Service层结构说明文档,明确接口与实现分离的设计原则
2025-12-22 13:10:36 +08:00

136 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Service层结构说明
## 目录结构
```
service/
├── SignatureService.java # 签名服务接口
├── PingPongPayService.java # PingPong支付服务接口
├── PaymentOrderService.java # 支付订单服务接口
├── CallbackService.java # 回调处理服务接口
└── impl/ # 实现类目录
├── SignatureServiceImpl.java # 签名服务实现类
├── PingPongPayServiceImpl.java # PingPong支付服务实现类
├── PaymentOrderServiceImpl.java # 支付订单服务实现类
└── CallbackServiceImpl.java # 回调处理服务实现类
```
## 设计原则
### 1. 接口与实现分离
- **service文件夹**:只存放接口文件
- **service/impl文件夹**:存放所有实现类
### 2. 命名规范
- 接口:`XxxService`
- 实现类:`XxxServiceImpl`
### 3. 依赖注入
- Controller层注入接口不直接依赖实现类
- Spring会自动根据接口找到对应的实现类通过@Service注解
## Service接口说明
### SignatureService
**功能**:签名生成和验证服务
**方法**
- `generateSign(Map<String, Object> params)` - 生成签名
- `generateSign(Map<String, Object> params, String secret, String signType)` - 生成签名(指定密钥和类型)
- `verifySign(Map<String, Object> params)` - 验证签名
### PingPongPayService
**功能**PingPong支付API调用服务
**方法**
- `checkout(CheckoutRequestDTO request)` - 创建支付订单
### PaymentOrderService
**功能**:支付订单业务服务
**方法**
- `createPaymentOrder(CheckoutRequestDTO request)` - 创建支付订单
- `findByMerchantTransactionId(String merchantTransactionId)` - 根据商户订单号查询
- `findByTransactionId(String transactionId)` - 根据PingPong交易流水号查询
- `updateOrderStatus(String merchantTransactionId, String status, String transactionId)` - 更新订单状态
### CallbackService
**功能**:回调处理服务
**方法**
- `handleCallback(Map<String, Object> callbackData)` - 处理支付回调
## 实现类说明
### SignatureServiceImpl
- 实现签名生成和验证逻辑
- 支持MD5和SHA256签名算法
- 自动筛选参与签名的参数
### PingPongPayServiceImpl
- 实现PingPong API调用
- 自动生成请求签名
- 验证响应签名
### PaymentOrderServiceImpl
- 实现支付订单业务逻辑
- 调用PingPong API创建订单
- 保存订单和支付记录
### CallbackServiceImpl
- 实现回调处理逻辑
- 验证回调签名
- 更新订单状态
- 保存回调记录
## 使用示例
### Controller中使用Service
```java
@RestController
@RequiredArgsConstructor
public class PaymentController {
// 注入接口Spring会自动找到对应的实现类
private final PaymentOrderService paymentOrderService;
@PostMapping("/checkout")
public ResponseEntity<?> checkout(@RequestBody CheckoutRequestDTO request) {
PaymentOrder order = paymentOrderService.createPaymentOrder(request);
return ResponseEntity.ok(order);
}
}
```
### Service实现类中注入其他Service
```java
@Service
@RequiredArgsConstructor
public class PaymentOrderServiceImpl implements PaymentOrderService {
// 注入其他Service接口
private final PingPongPayService pingPongPayService;
// 实现接口方法
@Override
public PaymentOrder createPaymentOrder(CheckoutRequestDTO request) {
// 实现逻辑
}
}
```
## 优势
1. **解耦**Controller只依赖接口不依赖具体实现
2. **扩展性**:可以轻松替换实现类,不影响调用方
3. **测试**可以方便地创建Mock实现进行单元测试
4. **规范**:统一的代码结构,便于维护
## 注意事项
1. 所有Service实现类必须使用`@Service`注解
2. 实现类必须实现对应的接口
3. Controller中注入的是接口类型不是实现类
4. 如果接口有多个实现类,需要使用`@Qualifier`指定