- 新增商品链接实体类MtProductLink,包含链接码、URL、有效期等字段 - 创建商品链接Mapper接口,支持基础CRUD操作 - 实现商品链接服务接口ProductLinkService及其实现类 - 支持创建或获取现有有效链接,避免重复生成 - 提供链接有效性校验和过期处理机制 - 添加响应码枚举ResultCode,定义相关业务异常码 - 补充风控信息DTO类RiskInfoDTO及相关子DTO - 编写Service层结构说明文档,明确接口与实现分离的设计原则
3.9 KiB
3.9 KiB
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
@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
@Service
@RequiredArgsConstructor
public class PaymentOrderServiceImpl implements PaymentOrderService {
// 注入其他Service接口
private final PingPongPayService pingPongPayService;
// 实现接口方法
@Override
public PaymentOrder createPaymentOrder(CheckoutRequestDTO request) {
// 实现逻辑
}
}
优势
- 解耦:Controller只依赖接口,不依赖具体实现
- 扩展性:可以轻松替换实现类,不影响调用方
- 测试:可以方便地创建Mock实现进行单元测试
- 规范:统一的代码结构,便于维护
注意事项
- 所有Service实现类必须使用
@Service注解 - 实现类必须实现对应的接口
- Controller中注入的是接口类型,不是实现类
- 如果接口有多个实现类,需要使用
@Qualifier指定