From fbdd6e78f469715a047204d7089a5648731d636f Mon Sep 17 00:00:00 2001 From: amos Date: Wed, 25 Feb 2026 11:41:08 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BF=AE=E6=94=B9=20liteflow=20?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E7=9A=84=E6=96=B9=E6=B3=95=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trade/liteflow/node/BuildResultNode.java | 12 ++++---- .../liteflow/node/CheckInventoryNode.java | 18 ++++++------ .../trade/liteflow/node/CreateOrderNode.java | 28 +++++++++---------- .../liteflow/node/GenerateTicketsNode.java | 2 +- .../liteflow/node/LockInventoryNode.java | 28 +++++++++---------- .../liteflow/node/ValidateParamsNode.java | 18 ++++++------ 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/BuildResultNode.java b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/BuildResultNode.java index d9dab4f..94c93cb 100644 --- a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/BuildResultNode.java +++ b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/BuildResultNode.java @@ -15,21 +15,21 @@ import pers.amos.mall.trade.liteflow.context.OrderContext; @Component("buildResult") public class BuildResultNode extends NodeComponent { - + @Override - public void process() throws Exception { + public void process() { OrderContext context = this.getContextBean(OrderContext.class); Order order = context.getOrder(); - + LogUtil.info("开始构建返回结果, orderNo={}", order.getOrderNo()); - + // 构建返回DTO OrderResultDTO resultDTO = new OrderResultDTO(); BeanUtils.copyProperties(order, resultDTO); resultDTO.setTickets(context.getTickets()); - + context.setOrderResultDTO(resultDTO); - + LogUtil.info("返回结果构建成功, orderNo={}", order.getOrderNo()); } } diff --git a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CheckInventoryNode.java b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CheckInventoryNode.java index 0858719..2c061f0 100644 --- a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CheckInventoryNode.java +++ b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CheckInventoryNode.java @@ -18,34 +18,34 @@ import pers.amos.mall.trade.liteflow.context.OrderContext; @Component("checkInventory") public class CheckInventoryNode extends NodeComponent { - + @DubboReference private RouteService routeService; - + @Override - public void process() throws Exception { + public void process() { OrderContext context = this.getContextBean(OrderContext.class); OrderCreateDTO dto = context.getOrderCreateDTO(); - + LogUtil.info("开始检查库存, orderType={}, quantity={}", dto.getOrderType(), dto.getQuantity()); - + // 构建库存检查DTO InventoryCheckDTO checkDTO = new InventoryCheckDTO(); checkDTO.setOrderType(dto.getOrderType()); checkDTO.setScheduleCode(dto.getScheduleCode()); checkDTO.setRollingScheduleCode(generateRollingScheduleCode(dto)); checkDTO.setQuantity(dto.getQuantity()); - + // Dubbo调用Route服务检查库存 Result result = routeService.checkInventory(checkDTO); - + if (!result.isSuccess() || !Boolean.TRUE.equals(result.getData())) { throw new RuntimeException("库存不足:" + result.getErrorDesc()); } - + LogUtil.info("库存检查通过, orderType={}, quantity={}", dto.getOrderType(), dto.getQuantity()); } - + /** * 生成滚动班次编号 * 格式:线路编码 + 日期 + RS diff --git a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CreateOrderNode.java b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CreateOrderNode.java index f7854ee..ef9cd3e 100644 --- a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CreateOrderNode.java +++ b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/CreateOrderNode.java @@ -21,52 +21,52 @@ import java.time.LocalDateTime; @Component("createOrder") public class CreateOrderNode extends NodeComponent { - + @Autowired private OrderRepository orderRepository; - + @Override - public void process() throws Exception { + public void process() { OrderContext context = this.getContextBean(OrderContext.class); OrderCreateDTO dto = context.getOrderCreateDTO(); - + // 从上下文获取订单号(临时存储在errorMessage中) String orderNo = context.getErrorMessage(); - + LogUtil.info("开始创建订单, orderNo={}", orderNo); - + Order order = new Order(); order.setOrderNo(orderNo); order.setUserNo(dto.getUserNo()); order.setRouteCode(dto.getRouteCode()); order.setOrderType(dto.getOrderType()); order.setScheduleCode(dto.getScheduleCode()); - + // 如果是滚动发车,设置滚动班次编号 if (OrderTypeEnum.ROLLING.getCode().equals(dto.getOrderType())) { - String rollingScheduleCode = dto.getRouteCode() + "-" + + String rollingScheduleCode = dto.getRouteCode() + "-" + dto.getScheduleDate().replace("-", "") + "-RS"; order.setRollingScheduleCode(rollingScheduleCode); } - + order.setTicketType(dto.getTicketType()); order.setQuantity(dto.getQuantity()); - + // TODO: 根据线路和票种查询价格,这里暂时写死 BigDecimal unitPrice = new BigDecimal("50.00"); order.setUnitPrice(unitPrice); order.setTotalAmount(unitPrice.multiply(new BigDecimal(dto.getQuantity()))); - + order.setOrderStatus(OrderStatusEnum.UNPAID.getCode()); order.setCreateTime(LocalDateTime.now()); order.setExpireTime(LocalDateTime.now().plusMinutes(15)); // 15分钟支付超时 order.setUpdateTime(LocalDateTime.now()); - + orderRepository.save(order); - + // 将订单保存到上下文 context.setOrder(order); - + LogUtil.info("订单创建成功, orderNo={}, totalAmount={}", orderNo, order.getTotalAmount()); } } diff --git a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/GenerateTicketsNode.java b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/GenerateTicketsNode.java index d91b29e..55a6f66 100644 --- a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/GenerateTicketsNode.java +++ b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/GenerateTicketsNode.java @@ -25,7 +25,7 @@ public class GenerateTicketsNode extends NodeComponent { private TicketService ticketService; @Override - public void process() throws Exception { + public void process() { OrderContext context = this.getContextBean(OrderContext.class); Order order = context.getOrder(); diff --git a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/LockInventoryNode.java b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/LockInventoryNode.java index c19c613..a936a18 100644 --- a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/LockInventoryNode.java +++ b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/LockInventoryNode.java @@ -22,21 +22,21 @@ import java.time.format.DateTimeFormatter; @Component("lockInventory") public class LockInventoryNode extends NodeComponent { - + @DubboReference private RouteService routeService; - + @Override - public void process() throws Exception { + public void process() { OrderContext context = this.getContextBean(OrderContext.class); OrderCreateDTO dto = context.getOrderCreateDTO(); - + // 生成订单号 String orderNo = generateOrderNo(); - - LogUtil.info("开始锁定库存, orderNo={}, orderType={}, quantity={}", + + LogUtil.info("开始锁定库存, orderNo={}, orderType={}, quantity={}", orderNo, dto.getOrderType(), dto.getQuantity()); - + // 构建库存操作DTO InventoryOperationDTO operationDTO = new InventoryOperationDTO(); operationDTO.setOrderNo(orderNo); @@ -44,27 +44,27 @@ public class LockInventoryNode extends NodeComponent { operationDTO.setScheduleCode(dto.getScheduleCode()); operationDTO.setRollingScheduleCode(generateRollingScheduleCode(dto)); operationDTO.setQuantity(dto.getQuantity()); - + // Dubbo调用Route服务锁定库存 Result result = routeService.lockInventory(operationDTO); - + if (!result.isSuccess() || !Boolean.TRUE.equals(result.getData())) { throw new RuntimeException("库存锁定失败:" + result.getErrorDesc()); } - + // 将订单号和滚动班次编号保存到上下文 dto.setScheduleCode(dto.getScheduleCode()); if (OrderTypeEnum.ROLLING.getCode().equals(dto.getOrderType())) { // 将生成的滚动班次编号保存到DTO,供后续节点使用 context.setErrorMessage(operationDTO.getRollingScheduleCode()); // 临时存储 } - + LogUtil.info("库存锁定成功, orderNo={}", orderNo); - + // 将订单号保存到上下文 context.setErrorMessage(orderNo); // 临时存储订单号 } - + /** * 生成订单号 * 格式:ORD + yyyyMMddHHmmssSSS + 6位随机数 @@ -74,7 +74,7 @@ public class LockInventoryNode extends NodeComponent { String random = RandomUtil.randomNumbers(6); return "ORD" + timestamp + random; } - + /** * 生成滚动班次编号 */ diff --git a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/ValidateParamsNode.java b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/ValidateParamsNode.java index 753f1ac..6e4ebf4 100644 --- a/trade/src/main/java/pers/amos/mall/trade/liteflow/node/ValidateParamsNode.java +++ b/trade/src/main/java/pers/amos/mall/trade/liteflow/node/ValidateParamsNode.java @@ -15,31 +15,31 @@ import pers.amos.mall.trade.liteflow.context.OrderContext; @Component("validateParams") public class ValidateParamsNode extends NodeComponent { - + @Override - public void process() throws Exception { + public void process() { OrderContext context = this.getContextBean(OrderContext.class); OrderCreateDTO dto = context.getOrderCreateDTO(); - + LogUtil.info("开始参数校验, userNo={}", dto.getUserNo()); - + // 校验基本参数 if (!StringUtils.hasText(dto.getUserNo())) { throw new IllegalArgumentException("用户编号不能为空"); } - + if (!StringUtils.hasText(dto.getRouteCode())) { throw new IllegalArgumentException("线路编码不能为空"); } - + if (!StringUtils.hasText(dto.getOrderType())) { throw new IllegalArgumentException("订单类型不能为空"); } - + if (dto.getQuantity() == null || dto.getQuantity() <= 0) { throw new IllegalArgumentException("购票数量必须大于0"); } - + // 根据订单类型校验特定参数 if (OrderTypeEnum.FIXED.getCode().equals(dto.getOrderType())) { if (!StringUtils.hasText(dto.getScheduleCode())) { @@ -52,7 +52,7 @@ public class ValidateParamsNode extends NodeComponent { } else { throw new IllegalArgumentException("订单类型无效"); } - + LogUtil.info("参数校验通过, userNo={}", dto.getUserNo()); } }