diff --git a/kernel-d-seata/pom.xml b/kernel-d-seata/pom.xml index 952f0866e..10fdd1b04 100644 --- a/kernel-d-seata/pom.xml +++ b/kernel-d-seata/pom.xml @@ -2,17 +2,19 @@ + 4.0.0 + cn.stylefeng.roses roses-kernel 7.0.3 ../pom.xml - 4.0.0 kernel-d-seata pom + seata-demo-wallet-api seata-demo-storage-api diff --git a/kernel-d-seata/seata-demo-order/pom.xml b/kernel-d-seata/seata-demo-order/pom.xml index d0f816841..bdb76195e 100644 --- a/kernel-d-seata/seata-demo-order/pom.xml +++ b/kernel-d-seata/seata-demo-order/pom.xml @@ -14,28 +14,41 @@ jar + + org.springframework.cloud spring-cloud-openfeign-core 2.2.6.RELEASE + + cn.stylefeng.roses seata-demo-storage-api 7.0.3 - compile cn.stylefeng.roses seata-demo-wallet-api 7.0.3 - compile + + io.seata seata-all 1.3.0 + + + + + cn.stylefeng.roses + scanner-api + 7.0.3 + + diff --git a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/controller/OrderController.java b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/controller/OrderController.java index 90ac2e467..0510fd10b 100644 --- a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/controller/OrderController.java +++ b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/controller/OrderController.java @@ -1,8 +1,9 @@ package cn.stylefeng.roses.kernel.seata.order.controller; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.seata.order.entity.Order; import cn.stylefeng.roses.kernel.seata.order.service.OrderService; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; @@ -13,6 +14,7 @@ import javax.annotation.Resource; * @author wangyl * @date 2021/04/10 16:42 */ +@ApiResource(name = "订单接口(测试seata)") public class OrderController { @Resource @@ -24,9 +26,9 @@ public class OrderController { * @author wangyl * @date 2021/4/20 20:11 */ - @GetMapping("/create") - public Order create(@RequestParam("userId") String userId, @RequestParam("commodityCode") String commodityCode, @RequestParam("orderCount") Integer orderCount){ - return orderService.create(userId,commodityCode,orderCount); + @GetResource(name = "创建订单", path = "/order/create", requiredPermission = false, requiredLogin = false) + public Order create(@RequestParam("userId") String userId, @RequestParam("commodityCode") String commodityCode, @RequestParam("orderCount") Integer orderCount) { + return orderService.create(userId, commodityCode, orderCount); } } diff --git a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/OrderMapper.java b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/OrderMapper.java index 32403d505..be2c64bed 100644 --- a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/OrderMapper.java +++ b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/OrderMapper.java @@ -12,14 +12,19 @@ public interface OrderMapper { /** * 新增订单 + * * @param order 订单 + * @author wangyl + * @date 2021/4/21 9:43 */ void insertOrder(Order order); /** * 根据ID查询订单 - * @param orderId 订单ID - * @return + * + * @param orderId 订单id + * @author wangyl + * @date 2021/4/21 9:43 */ Order selectById(Long orderId); diff --git a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/mapping/OrderMapper.xml b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/mapping/OrderMapper.xml index facf0f35e..a0d2b0f00 100644 --- a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/mapping/OrderMapper.xml +++ b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/mapper/mapping/OrderMapper.xml @@ -2,10 +2,10 @@ - - - insert into order( - product_id, + + + insert into order( + product_id, user_id, prod_price, prod_number, @@ -16,7 +16,7 @@ update_user, update_time, remark, - )values( + )values( #{productId}, #{userId}, #{prodPrice}, @@ -28,13 +28,14 @@ #{updateUser}, #{updateTime}, #{remark}, - ) - + ) + - - + + diff --git a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/OrderService.java b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/OrderService.java index 9c114029b..6c66b211a 100644 --- a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/OrderService.java +++ b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/OrderService.java @@ -12,10 +12,12 @@ public interface OrderService { /** * 创建订单 - * @param userId 用户ID + * + * @param userId 用户ID * @param commodityCode 商品编码 - * @param orderCount 购买数量 - * @return + * @param orderCount 购买数量 + * @author wangyl + * @date 2021/4/21 9:43 */ Order create(String userId, String commodityCode, int orderCount); diff --git a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/impl/OrderServiceImpl.java b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/impl/OrderServiceImpl.java index c91720195..9fa439cf9 100644 --- a/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/impl/OrderServiceImpl.java +++ b/kernel-d-seata/seata-demo-order/src/main/java/cn/stylefeng/roses/kernel/seata/order/service/impl/OrderServiceImpl.java @@ -21,29 +21,28 @@ public class OrderServiceImpl implements OrderService { @Resource private StorageConsumer storageConsumer; + @Resource private WalletConsumer walletConsumer; + @Resource private OrderMapper orderMapper; - /** - * 分布式事务跨库操作 - * @param userId 用户ID - * @param commodityCode 商品编码 - * @param orderCount 购买数量 - * @GlobalTransactional 修饰分布式事务起始方法 - * @return - */ @GlobalTransactional(rollbackFor = Exception.class) @Override public Order create(String userId, String commodityCode, int orderCount) { Order order = new Order(); + //保存订单 orderMapper.insertOrder(order); + //扣减商品库存 - storageConsumer.deduct(commodityCode,orderCount); + storageConsumer.deduct(commodityCode, orderCount); + //扣用户钱 - walletConsumer.debit(userId,order.getTotalAmount()); + walletConsumer.debit(userId, order.getTotalAmount()); + return order; } + } diff --git a/kernel-d-seata/seata-demo-storage-api/src/main/java/cn/stylefeng/roses/kernel/seata/api/StorageApi.java b/kernel-d-seata/seata-demo-storage-api/src/main/java/cn/stylefeng/roses/kernel/seata/api/StorageApi.java index 637e56f62..28940ba85 100644 --- a/kernel-d-seata/seata-demo-storage-api/src/main/java/cn/stylefeng/roses/kernel/seata/api/StorageApi.java +++ b/kernel-d-seata/seata-demo-storage-api/src/main/java/cn/stylefeng/roses/kernel/seata/api/StorageApi.java @@ -10,8 +10,11 @@ public interface StorageApi { /** * 扣除存储数量 + * * @param commodityCode 商品编码 - * @param count 购买数量 + * @param count 购买数量 + * @author wangyl + * @date 2021/4/21 9:44 */ void deduct(String commodityCode, Integer count); diff --git a/kernel-d-seata/seata-demo-wallet-api/src/main/java/cn/stylefeng/roses/kernel/seata/wallet/api/WalletApi.java b/kernel-d-seata/seata-demo-wallet-api/src/main/java/cn/stylefeng/roses/kernel/seata/wallet/api/WalletApi.java index a5abff565..10e94f4ca 100644 --- a/kernel-d-seata/seata-demo-wallet-api/src/main/java/cn/stylefeng/roses/kernel/seata/wallet/api/WalletApi.java +++ b/kernel-d-seata/seata-demo-wallet-api/src/main/java/cn/stylefeng/roses/kernel/seata/wallet/api/WalletApi.java @@ -10,8 +10,11 @@ public interface WalletApi { /** * 从用户账户中扣除余额 + * * @param userId 用户ID - * @param money 消费金额 + * @param money 消费金额 + * @author wangyl + * @date 2021/4/21 9:44 */ void debit(String userId, Integer money);