package com.saint.order.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.saint.order.entity.Order;
import com.saint.order.feign.StockFeignClient;
import com.saint.order.repository.OrderDAO;
import com.saint.order.repository.OrderMapper;
import com.saint.order.service.OrderService;
import io.seata.core.context.RootContext;
import io.seata.rm.tcc.api.BusinessActionContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
/**
* @author Saint
*/
@Service
@Slf4j
@RequiredArgsConstructor(onConstructor = @_(@Autowired))
public class OrderServiceImpl implements OrderService {
private final StockFeignClient stockFeignClient;
private final OrderDAO orderDAO;
private final OrderMapper orderMapper;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Transactional
public void create(String userId, String commodityCode, Integer orderCount) {
log.info("start TCC, xid = " + RootContext.getXID());
BigDecimal orderMoney = new BigDecimal(orderCount).multiply(new BigDecimal(5));
Order order = new Order();
order.setUserId(userId);
order.setCommodityCode(commodityCode);
order.setCount(orderCount);
order.setMoney(orderMoney);
Order savedOrder = orderDAO.save(order);
stockFeignClient.deduct(commodityCode, orderCount);
// 在redis中保存订单详情!
redisTemplate.opsForValue().set("order::", JSONObject.toJSONString(savedOrder));
}
@Override
@Transactional
public boolean commitCreate(BusinessActionContext context) {
log.info("start commit, xid = " + context.getXid());
// todo 如果一阶段是资源预留,这里则要提交资源
return true;
}
@Override
@Transactional
public boolean rollbackCreate(BusinessActionContext context) {
log.info("start rollback, xid = {}, context = {}", context.getXid(), JSONObject.toJSONString(context));
// todo 如果一阶段是资源预留,这里则要释放资源、做非关系型数据库的回滚操作;
// 对于MQ等中间件的回滚 要依赖try执行之前的BusinessActionContext数据(方法的入参),因为无法直接获取到try执行时产生的数据
String commodityCode = context.getActionContext("commodityCode").toString();
String userId = context.getActionContext("userId").toString();
log.info("commodityCode = {}, userId = {}", commodityCode, userId);
// orderDAO.deleteByUserIdAndCommodityCode(userId, commodityCode);
Integer deleteRows = orderMapper.deleteOrderByCodeAndUserId(commodityCode, Integer.valueOf(userId));
log.info("delete rows: {}", deleteRows);
redisTemplate.delete("order::");
return true;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
transaction-seata.zip (46个子文件)
transaction-seata
pom.xml 4KB
tcc-order
pom.xml 3KB
target
classes
file.conf 2KB
application.yml 1KB
com
saint
order
repository
OrderMapper.class 631B
OrderDAO.class 742B
feign
StockFeignClient.class 617B
OrderApplication.class 874B
controller
OrderController.class 1KB
service
OrderService.class 756B
impl
OrderServiceImpl.class 4KB
entity
Order.class 4KB
generated-sources
annotations
src
test
java
main
resources
file.conf 2KB
application.yml 1KB
java
com
saint
order
repository
OrderMapper.java 459B
OrderDAO.java 497B
OrderApplication.java 525B
feign
StockFeignClient.java 569B
controller
OrderController.java 1KB
service
OrderService.java 1KB
impl
OrderServiceImpl.java 3KB
entity
Order.java 711B
tcc-order.iml 20KB
sql
all_in_one.sql 3KB
seata_server.sql 2KB
transaction-seata.iml 1KB
tcc-stock
pom.xml 2KB
target
classes
file.conf 2KB
application.yml 910B
com
saint
stock
repository
StockMapper.class 785B
StockDAO.class 460B
StockApplication.class 811B
controller
StockController.class 2KB
service
StockService.class 709B
impl
StockServiceImpl.class 3KB
entity
Stock.class 3KB
generated-sources
annotations
tcc-stock.iml 18KB
src
test
java
main
resources
file.conf 2KB
application.yml 910B
java
com
saint
stock
repository
StockMapper.java 588B
StockDAO.java 283B
controller
StockController.java 1KB
service
StockService.java 1KB
impl
StockServiceImpl.java 3KB
entity
Stock.java 454B
StockApplication.java 441B
共 46 条
- 1
资源评论
秃秃爱健身
- 粉丝: 7w+
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功