public class PayMentTransacTokenServiceImpl extends BaseApiService implements PayMentTransacTokenService {
@Autowired
private PaymentTransactionMapper paymentTransactionMapper;
@Autowired
private GenerateToken generateToken;
@Override
public BaseResponse<JSONObject> cratePayToken(PayCratePayTokenDto payCratePayTokenDto) {
String orderId = payCratePayTokenDto.getOrderId();
if (StringUtils.isEmpty(orderId)) {
return setResultError("订单号码不能为空!");
}
Long payAmount = payCratePayTokenDto.getPayAmount();
if (payAmount == null) {
return setResultError("金额不能为空!");
}
Long userId = payCratePayTokenDto.getUserId();
if (userId == null) {
return setResultError("userId不能为空!");
}
// 2.将输入插入数据库中 待支付记录
PaymentTransactionEntity paymentTransactionEntity = new PaymentTransactionEntity();
paymentTransactionEntity.setOrderId(orderId);
paymentTransactionEntity.setPayAmount(payAmount);
paymentTransactionEntity.setUserId(userId);
// 使用雪花算法 生成全局id
paymentTransactionEntity.setPaymentId(SnowflakeIdUtils.nextId());
int result = paymentTransactionMapper.insertPaymentTransaction(paymentTransactionEntity);
if (!toDaoResult(result)) {
return setResultError("系统错误!");
}
// 获取主键id
Long payId = paymentTransactionEntity.getId();
if (payId == null) {
return setResultError("系统错误!");
}
// 3.生成对应支付令牌
String keyPrefix = "pay_";
String token = generateToken.createToken(keyPrefix, payId + "");
JSONObject dataResult = new JSONObject();
dataResult.put("token", token);
return setResultSuccess(dataResult);
}
}
需要事务性处理的时候要加,所谓事务性,就是多个操作要么全部执行,要么全部不执行,不允许执行一半
在同一个方法中涉及到多个增、删、改的SQL,要求要么一起成功,要么一起失败,那么就使用@Transaction注解,上述方法中只有一个insertPaymentTransaction方法涉及到数据库数据变更,其他的SQL都是查询,所以可以不用加事务注解