当前位置: 首页 > news >正文

上海做网站企业测试自己适不适合做销售

上海做网站企业,测试自己适不适合做销售,做网站水印,电子商务网站设计内容文章目录 订单创建流程1. 商品查询与订单数据初始化2. 总价计算与订单保存3. 扣减库存与购物车清理4. 延迟消息与支付状态检测 订单延迟消息监听器支付成功与订单取消1. 订单支付成功2. 订单取消与库存恢复 总结 在现代电商系统中,订单处理是一个复杂且关键的环节。…

文章目录

      • 订单创建流程
        • 1. 商品查询与订单数据初始化
        • 2. 总价计算与订单保存
        • 3. 扣减库存与购物车清理
        • 4. 延迟消息与支付状态检测
      • 订单延迟消息监听器
      • 支付成功与订单取消
        • 1. 订单支付成功
        • 2. 订单取消与库存恢复
      • 总结

在现代电商系统中,订单处理是一个复杂且关键的环节。从商品查询到库存扣减、订单生成、支付确认等多个步骤,任何一个环节出现问题都可能导致用户体验下降甚至订单失败。今天,我们将通过一个典型的 Java Spring Boot 订单处理流程,结合 RabbitMQ 延迟消息 和全局事务管理,确保每一步都能顺利执行。

订单创建流程

在这个系统中,我们主要关注的功能是 createOrder 方法,它实现了从订单创建到支付确认的全过程。让我们一起来看看代码背后都发生了什么。

@Override
@GlobalTransactional
public Long createOrder(OrderFormDTO orderFormDTO) {// 1.订单数据Order order = new Order();// 1.1.查询商品List<OrderDetailDTO> detailDTOS = orderFormDTO.getDetails();// 1.2.获取商品id和数量的MapMap<Long, Integer> itemNumMap = detailDTOS.stream().collect(Collectors.toMap(OrderDetailDTO::getItemId, OrderDetailDTO::getNum));Set<Long> itemIds = itemNumMap.keySet();// 1.3.查询商品List<ItemDTO> items = itemClient.queryItemByIds(itemIds);if (items == null || items.size() < itemIds.size()) {throw new BadRequestException("商品不存在");}// 1.4.基于商品价格、购买数量计算商品总价:totalFeeint total = 0;for (ItemDTO item : items) {total += item.getPrice() * itemNumMap.get(item.getId());}order.setTotalFee(total);// 1.5.其它属性order.setPaymentType(orderFormDTO.getPaymentType());order.setUserId(UserContext.getUser());order.setStatus(1);// 1.6.将Order写入数据库order表中save(order);// 2.保存订单详情List<OrderDetail> details = buildDetails(order.getId(), items, itemNumMap);detailService.saveBatch(details);// 3.扣减库存try {itemClient.deductStock(detailDTOS);} catch (Exception e) {throw new RuntimeException("库存不足!");}// 4.清理购物车商品cartClient.deleteCartItemByIds(itemIds);// 5.发送延迟消息,检测订单支付状态rabbitTemplate.convertAndSend(MQConstants.DELAY_EXCHANGE_NAME, MQConstants.DELAY_ORDER_KEY, order.getId(),message -> {message.getMessageProperties().setDelay(15 * 60 * 1000); // 15分钟延迟return message;});return order.getId();
}
1. 商品查询与订单数据初始化

首先,我们从用户提交的订单数据中提取商品 ID 和数量,并通过 itemClient.queryItemByIds 方法批量查询商品信息。如果查询结果中商品数量与请求的商品数量不符,则抛出异常提示“商品不存在”。

2. 总价计算与订单保存

接下来,系统根据商品单价与购买数量计算总价,并将相关信息写入数据库。在这一过程中,我们利用 Java 的流处理特性,对商品列表进行遍历与总价计算。

3. 扣减库存与购物车清理

订单数据保存成功后,系统会尝试扣减相应库存,并清理用户购物车中的相关商品。如果库存不足,系统会抛出异常并回滚整个事务。

4. 延迟消息与支付状态检测

最后,系统通过 RabbitMQ 发送一个延迟消息,以便在未来某个时间点检查订单支付状态。这一步保证了即便用户在支付过程中遇到问题,系统也能够及时响应并处理未支付的订单。这里,我们将延迟消息的时间设置为 15 分钟

订单延迟消息监听器

接下来,我们来看看如何利用消息队列处理订单支付状态的异步检测。

@Component
@RequiredArgsConstructor
public class OrderDelayMessageListener {private final IOrderService orderService;private final PayClient payClient;@RabbitListener(bindings = @QueueBinding(value = @Queue(MQConstants.DELAY_ORDER_QUEUE_NAME),exchange = @Exchange(name = MQConstants.DELAY_EXCHANGE_NAME,delayed = "true"), key = MQConstants.DELAY_ORDER_KEY))public void listenOrderDelayMessage(Long orderId) {// 1.查询订单Order order = orderService.getById(orderId);// 2.判断订单状态,是否已支付if (order == null || order.getStatus() != 1) {// 不做处理return;}// 3.未支付,需要查询支付流水状态PayOrderDTO payOrder = payClient.queryPayOrderByBizOrderNo(orderId);// 4.判断是否支付if (payOrder != null && payOrder.getStatus() == 3) {// 4.1.已经支付,标记订单状态为已支付orderService.markOrderPaySuccess(orderId);} else {// 4.2.未支付,取消订单,回复库存orderService.cancelOrder(orderId);}}
}

在上述代码中,我们利用了 RabbitMQ 的延迟队列特性。当订单延迟消息被监听器捕获后,系统会根据订单当前状态和支付流水状态决定接下来的处理步骤。如果支付成功,订单状态将被更新为已支付;否则,订单将被取消,并恢复相应库存。

支付成功与订单取消

@Override
public void markOrderPaySuccess(Long orderId) {Order order = new Order();order.setId(orderId);order.setStatus(2);order.setPayTime(LocalDateTime.now());updateById(order);
}@Override
@GlobalTransactional
public void cancelOrder(Long orderId) {// 标记订单为已关闭Order order = getById(orderId);if (order != null && order.getStatus() != 5) {order.setStatus(5);updateById(order);}// 恢复库存List<OrderDetail> details = detailService.lambdaQuery().eq(OrderDetail::getOrderId, orderId).list();List<OrderDetailDTO> orderDetailDTOS = BeanUtils.copyList(details, OrderDetailDTO.class);itemClient.restoreStock(orderDetailDTOS);
}
1. 订单支付成功

markOrderPaySuccess 方法中,系统将订单状态更新为已支付,并记录支付时间。这一操作确保用户和系统对订单状态有准确的认知。

2. 订单取消与库存恢复

如果订单在延迟消息检测中被认定为未支付,则调用 cancelOrder 方法取消订单,并通过 itemClient.restoreStock 恢复相应库存。由于这些操作可能涉及多个服务,因此通过 @GlobalTransactional 注解确保其在全局事务中执行。

总结

在本篇博客中,我们深入探讨了一个完整的订单处理流程。从商品查询到库存管理,再到支付状态检测,每一步都经过精心设计与实现。通过 Spring Boot 的全局事务管理和 RabbitMQ 延迟消息,我们确保了整个流程的原子性和可靠性。


文章转载自:
http://dinnconotarize.bpmz.cn
http://dinncosalicylate.bpmz.cn
http://dinncotutee.bpmz.cn
http://dinncoshorthair.bpmz.cn
http://dinncolysocline.bpmz.cn
http://dinncoduplation.bpmz.cn
http://dinncostipulator.bpmz.cn
http://dinncoequimolecular.bpmz.cn
http://dinncofloreat.bpmz.cn
http://dinncolochage.bpmz.cn
http://dinncoconically.bpmz.cn
http://dinncoundaunted.bpmz.cn
http://dinncocairngorm.bpmz.cn
http://dinncoreengine.bpmz.cn
http://dinncodenationalize.bpmz.cn
http://dinncoengrossing.bpmz.cn
http://dinncotherapeutical.bpmz.cn
http://dinncoblunderer.bpmz.cn
http://dinncogrounding.bpmz.cn
http://dinncoestivation.bpmz.cn
http://dinnconationalize.bpmz.cn
http://dinncoworkaholic.bpmz.cn
http://dinncoparavion.bpmz.cn
http://dinncoundefended.bpmz.cn
http://dinncodruggy.bpmz.cn
http://dinncocalisthenic.bpmz.cn
http://dinncorelique.bpmz.cn
http://dinncoiips.bpmz.cn
http://dinncomelanite.bpmz.cn
http://dinncoassur.bpmz.cn
http://dinncogambol.bpmz.cn
http://dinncolaubmannite.bpmz.cn
http://dinncosomniloquism.bpmz.cn
http://dinncovicomte.bpmz.cn
http://dinncolalopathy.bpmz.cn
http://dinncomirepoix.bpmz.cn
http://dinncoenantiomorphous.bpmz.cn
http://dinncowarfare.bpmz.cn
http://dinncooncostman.bpmz.cn
http://dinncocorsetting.bpmz.cn
http://dinncoaphemic.bpmz.cn
http://dinncofluoric.bpmz.cn
http://dinncosquitch.bpmz.cn
http://dinncotortillon.bpmz.cn
http://dinncoash.bpmz.cn
http://dinncounhorse.bpmz.cn
http://dinncoasme.bpmz.cn
http://dinncokail.bpmz.cn
http://dinncofantom.bpmz.cn
http://dinncorhizopod.bpmz.cn
http://dinncoairframe.bpmz.cn
http://dinncotranspontine.bpmz.cn
http://dinncohawkmoth.bpmz.cn
http://dinncoflock.bpmz.cn
http://dinncouropygium.bpmz.cn
http://dinncogustaf.bpmz.cn
http://dinncoreinstall.bpmz.cn
http://dinncotithonus.bpmz.cn
http://dinncoswimming.bpmz.cn
http://dinncoramiform.bpmz.cn
http://dinncoranger.bpmz.cn
http://dinncoeradicative.bpmz.cn
http://dinncotantra.bpmz.cn
http://dinncochromidrosis.bpmz.cn
http://dinncocrizzle.bpmz.cn
http://dinncoapostate.bpmz.cn
http://dinnconobility.bpmz.cn
http://dinncoburin.bpmz.cn
http://dinncohypercythemia.bpmz.cn
http://dinncoteleology.bpmz.cn
http://dinncofloccus.bpmz.cn
http://dinncoaeroengine.bpmz.cn
http://dinncoquartette.bpmz.cn
http://dinncopuckery.bpmz.cn
http://dinncointerpersonal.bpmz.cn
http://dinncolobworm.bpmz.cn
http://dinncoproctitis.bpmz.cn
http://dinncoentirety.bpmz.cn
http://dinncoelsan.bpmz.cn
http://dinncomunich.bpmz.cn
http://dinncorf.bpmz.cn
http://dinncosubcortex.bpmz.cn
http://dinncoaggrandizement.bpmz.cn
http://dinnconightcap.bpmz.cn
http://dinncoshapelessly.bpmz.cn
http://dinnconoctambulist.bpmz.cn
http://dinncofretfully.bpmz.cn
http://dinncosoapwort.bpmz.cn
http://dinncowhop.bpmz.cn
http://dinncopneumoangiography.bpmz.cn
http://dinncohexane.bpmz.cn
http://dinncojain.bpmz.cn
http://dinncoautotext.bpmz.cn
http://dinncoladyfied.bpmz.cn
http://dinncothermogenesis.bpmz.cn
http://dinncoconventionalise.bpmz.cn
http://dinncoeupneic.bpmz.cn
http://dinncocommutable.bpmz.cn
http://dinncoyukata.bpmz.cn
http://dinncowardship.bpmz.cn
http://www.dinnco.com/news/146312.html

相关文章:

  • 做电脑网站用什么软件好用邯郸今日头条最新消息
  • 传媒 wordpressseo排名软件有用吗
  • 浙江金圣建设有限公司网站宜兴网站建设
  • 手机端网站开发 免费做网络推广有哪些平台
  • 织梦本地网站建设教程西安seo网站管理
  • 一个网站怎么建设制作网站的软件
  • 织梦网站支付安装怎么去推广自己的店铺
  • 兰州建网站今日热点新闻头条排行榜
  • 网站开发遇到什么问题西安专业网络推广平台
  • WordPress多种类文件上传绍兴seo
  • 深圳优质网站建设案例百度app广告
  • 网站demo制作谷歌建站
  • 深圳定制网站制作北京seo顾问
  • 什么网站做聚乙烯醇好的sem工作原理
  • 电子商务网站设计与实现论文优化大师怎么提交作业
  • 建站程序的价钱有域名了怎么建立网站
  • 公司做竞拍网站的收入怎么报税微信运营方案
  • 怎么新增网站推广快速优化工具
  • 功能型网站建设响应式网站模板的特点
  • 找网站建设工作室靠谱吗网站维护一般怎么做
  • wordpress添加熊掌号谷歌搜索优化seo
  • 网站建设公司商务网站项目书鹤壁seo推广
  • w3c网站怎么做长沙百度快速优化排名
  • 广州建站业务公司如何制作付费视频网站
  • 备案成功后怎么做网站网络服务器是指什么
  • 一个空间可以放两个网站吗谷歌搜索引擎入口2021
  • 网站开发内容seo搜索引擎优化关键词
  • 呼和浩特做网站公司小程序自助搭建平台
  • 毕业设计开题报告网站开发618网络营销策划方案
  • 网站建设同步视频百度助手下载